diff --git a/src/modules/pager/e_mod_config.c b/src/modules/pager/e_mod_config.c index 7a1a95bb8..4a891e83a 100644 --- a/src/modules/pager/e_mod_config.c +++ b/src/modules/pager/e_mod_config.c @@ -16,6 +16,7 @@ struct _E_Config_Dialog_Data int show_popup_urgent; int popup_urgent_stick; double popup_urgent_speed; + int popup_pager_height; int drag_resist; unsigned int btn_drag; unsigned int btn_noplace; @@ -85,6 +86,7 @@ _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata) cfdata->show_popup_urgent = pager_config->popup_urgent; cfdata->popup_urgent_stick = pager_config->popup_urgent_stick; cfdata->popup_urgent_speed = pager_config->popup_urgent_speed; + cfdata->popup_pager_height = pager_config->popup_pager_height; cfdata->drag_resist = pager_config->drag_resist; cfdata->btn_drag = pager_config->btn_drag; cfdata->btn_noplace = pager_config->btn_noplace; @@ -169,6 +171,10 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data of = e_widget_framelist_add(evas, _("Pager Popup Settings"), 0); ob = e_widget_check_add(evas, _("Show Popup on desktop change"), &(cfdata->show_popup)); e_widget_framelist_object_append(of, ob); + ob = e_widget_label_add(evas, _("Popup Pager Height")); + e_widget_framelist_object_append(of, ob); + ob = e_widget_slider_add(evas, 1, 0, _("%.0f px"), 20.0, 200.0, 0.1, 0, NULL, &(cfdata->popup_pager_height), 200); + e_widget_framelist_object_append(of, ob); ob = e_widget_label_add(evas, _("Popup Speed")); e_widget_framelist_object_append(of, ob); ob = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.1, 10.0, 0.1, 0, &(cfdata->popup_speed), NULL, 200); @@ -202,6 +208,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) pager_config->popup_urgent = cfdata->show_popup_urgent; pager_config->popup_urgent_stick = cfdata->popup_urgent_stick; pager_config->popup_urgent_speed = cfdata->popup_urgent_speed; + pager_config->popup_pager_height = cfdata->popup_pager_height; pager_config->drag_resist = cfdata->drag_resist; pager_config->btn_drag = cfdata->btn_drag; pager_config->btn_noplace = cfdata->btn_noplace; diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index fee092c15..a637700d5 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -1,11 +1,10 @@ /* * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ + #include "e.h" #include "e_mod_main.h" -/***************************************************************************/ -/**/ /* gadcon requirements */ static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style); static void _gc_shutdown(E_Gadcon_Client *gcc); @@ -19,19 +18,13 @@ static const E_Gadcon_Client_Class _gadcon_class = GADCON_CLIENT_CLASS_VERSION, "pager", { - _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL + _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL }, E_GADCON_CLIENT_STYLE_INSET }; -/**/ -/***************************************************************************/ -/***************************************************************************/ -/**/ /* actual module specifics */ - typedef struct _Instance Instance; - typedef struct _Pager Pager; typedef struct _Pager_Desk Pager_Desk; typedef struct _Pager_Win Pager_Win; @@ -53,7 +46,6 @@ struct _Pager E_Zone *zone; int xnum, ynum; Evas_List *desks; - Pager_Popup *popup; unsigned char dragging : 1; unsigned char just_dragged : 1; Evas_Coord dnd_x, dnd_y; @@ -69,6 +61,7 @@ struct _Pager_Desk Evas_Object *o_layout; int xpos, ypos; int current : 1; + int urgent; struct { Pager *from_pager; unsigned char in_pager : 1; @@ -101,7 +94,7 @@ struct _Pager_Win struct _Pager_Popup { E_Popup *popup; - Pager *pager, *src_pager; + Pager *pager; Evas_Object *o_bg; Ecore_Timer *timer; unsigned char urgent : 1; @@ -164,10 +157,13 @@ static void _pager_window_free(Pager_Win *pw); static void _pager_window_move(Pager_Win *pw); static Pager_Win *_pager_window_find(Pager *p, E_Border *border); static Pager_Win *_pager_desk_window_find(Pager_Desk *pd, E_Border *border); -static Pager_Popup *_pager_popup_new(Pager *p, int urgent); +static Pager_Popup *_pager_popup_new(E_Zone *zone, int urgent); static void _pager_popup_free(Pager_Popup *pp); +static Pager_Popup *_pager_popup_find(E_Zone *zone); +static E_Config_Dialog *_pager_config_dialog(E_Container *con, const char *params); static E_Config_DD *conf_edd = NULL; +static Evas_List *pager_popups = NULL; Config *pager_config = NULL; @@ -180,16 +176,16 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) Instance *inst; Evas_Coord x, y, w, h; const char *drop[] = { "enlightenment/pager_win", "enlightenment/border", "enlightenment/vdesktop"}; - + inst = E_NEW(Instance, 1); - + p = _pager_new(gc->evas, gc->zone); p->inst = inst; inst->pager = p; o = p->o_table; gcc = e_gadcon_client_new(gc, name, id, style, o); gcc->data = inst; - + inst->gcc = gcc; inst->o_pager = o; @@ -209,11 +205,11 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) return gcc; } -static void +static void _gc_shutdown(E_Gadcon_Client *gcc) { Instance *inst; - + inst = gcc->data; pager_config->instances = evas_list_remove(pager_config->instances, inst); e_drop_handler_del(inst->drop_handler); @@ -225,14 +221,14 @@ static void _gc_orient(E_Gadcon_Client *gcc) { Instance *inst; - + inst = gcc->data; - e_gadcon_client_aspect_set(gcc, - inst->pager->xnum * inst->pager->zone->w, + e_gadcon_client_aspect_set(gcc, + inst->pager->xnum * inst->pager->zone->w, inst->pager->ynum * inst->pager->zone->h); e_gadcon_client_min_size_set(gcc, 16, 16); } - + static char * _gc_label(void) { @@ -244,7 +240,7 @@ _gc_icon(Evas *evas) { Evas_Object *o; char buf[4096]; - + o = edje_object_add(evas); snprintf(buf, sizeof(buf), "%s/e-module-pager.edj", e_module_dir_get(pager_config->module)); @@ -258,16 +254,11 @@ _gc_id_new(void) return _gadcon_class.name; } -/**/ -/***************************************************************************/ - -/***************************************************************************/ -/**/ static Pager * _pager_new(Evas *evas, E_Zone *zone) { Pager *p; - + p = E_NEW(Pager, 1); p->o_table = e_table_add(evas); e_table_homogenous_set(p->o_table, 1); @@ -288,7 +279,7 @@ static void _pager_fill(Pager *p) { int x, y; - + e_zone_desk_count_get(p->zone, &(p->xnum), &(p->ynum)); for (x = 0; x < p->xnum; x++) { @@ -312,7 +303,7 @@ _pager_fill(Pager *p) static void _pager_empty(Pager *p) { - if (p->popup) _pager_popup_free(p->popup); + // if (p->popup) _pager_popup_free(p->popup); while (p->desks) { @@ -335,6 +326,8 @@ _pager_desk_new(Pager *p, E_Desk *desk, int xpos, int ypos) pd->xpos = xpos; pd->ypos = ypos; + pd->urgent = 0; + pd->desk = desk; e_object_ref(E_OBJECT(desk)); pd->pager = p; @@ -379,7 +372,7 @@ _pager_desk_free(Pager_Desk *pd) evas_object_del(pd->o_desk); evas_object_del(pd->o_layout); - for (l = pd->wins; l; l = l->next) + for (l = pd->wins; l; l = l->next) _pager_window_free(l->data); evas_list_free(pd->wins); e_object_unref(E_OBJECT(pd->desk)); @@ -454,7 +447,7 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2) Pager_Win *pw; Evas_List *l; - if (!pd1 || !pd2 || !pd1->desk || !pd2->desk) return; + if ((!pd1) || (!pd2) || (!pd1->desk) || (!pd2->desk)) return; if (pd1 == pd2) return; desk1 = pd1->desk; @@ -465,14 +458,14 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2) /* Move opened windows from on desk to the other */ for (l = pd1->wins; l; l = l->next) { - pw = l->data; - if (!pw || !pw->border || pw->border->iconic) continue; + pw = l->data; + if (!pw || !pw->border || pw->border->iconic) continue; e_border_desk_set(pw->border, desk2); } for (l = pd2->wins; l; l = l->next) { - pw = l->data; - if (!pw || !pw->border || pw->border->iconic) continue; + pw = l->data; + if (!pw || !pw->border || pw->border->iconic) continue; e_border_desk_set(pw->border, desk1); } @@ -481,26 +474,26 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2) { E_Config_Desktop_Name *tmp_dn; - tmp_dn = l->data; - if (!tmp_dn) continue; - if (tmp_dn->desk_x == desk1->x && - tmp_dn->desk_y == desk1->y && + tmp_dn = l->data; + if (!tmp_dn) continue; + if (tmp_dn->desk_x == desk1->x && + tmp_dn->desk_y == desk1->y && tmp_dn->zone == desk1->zone->num) - { - tmp_dn->desk_x = desk2->x; - tmp_dn->desk_y = desk2->y; + { + tmp_dn->desk_x = desk2->x; + tmp_dn->desk_y = desk2->y; tmp_dn->zone = desk2->zone->num; - c++; - } - else if (tmp_dn->desk_x == desk2->x && - tmp_dn->desk_y == desk2->y && + c++; + } + else if (tmp_dn->desk_x == desk2->x && + tmp_dn->desk_y == desk2->y && tmp_dn->zone == desk2->zone->num) - { - tmp_dn->desk_x = desk1->x; - tmp_dn->desk_y = desk1->y; + { + tmp_dn->desk_x = desk1->x; + tmp_dn->desk_y = desk1->y; tmp_dn->zone = desk1->zone->num; - c++; - } + c++; + } } if (c > 0) e_config_save(); e_desk_name_update(); @@ -510,37 +503,36 @@ _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2) { E_Config_Desktop_Background *tmp_db; - tmp_db = l->data; - if (!tmp_db) continue; - if (tmp_db->desk_x == desk1->x && - tmp_db->desk_y == desk1->y && + tmp_db = l->data; + if (!tmp_db) continue; + if (tmp_db->desk_x == desk1->x && + tmp_db->desk_y == desk1->y && tmp_db->zone == desk1->zone->num) - { - tmp_db->desk_x = desk2->x; - tmp_db->desk_y = desk2->y; - tmp_db->zone = desk2->zone->num; - c++; - } - else if (tmp_db->desk_x == desk2->x && - tmp_db->desk_y == desk2->y && + { + tmp_db->desk_x = desk2->x; + tmp_db->desk_y = desk2->y; + tmp_db->zone = desk2->zone->num; + c++; + } + else if (tmp_db->desk_x == desk2->x && + tmp_db->desk_y == desk2->y && tmp_db->zone == desk2->zone->num) - { - tmp_db->desk_x = desk1->x; - tmp_db->desk_y = desk1->y; - tmp_db->zone = desk1->zone->num; - c++; - } + { + tmp_db->desk_x = desk1->x; + tmp_db->desk_y = desk1->y; + tmp_db->zone = desk1->zone->num; + c++; + } } if (c > 0) e_config_save(); - /* If the current desktop has been switched, force to update of the screen */ - if (desk2 == e_desk_current_get(zone2)) + if (desk2 == e_desk_current_get(zone2)) { desk2->visible = 0; e_desk_show(desk2); } - if (desk1 == e_desk_current_get(zone1)) + if (desk1 == e_desk_current_get(zone1)) { desk1->visible = 0; e_desk_show(desk1); @@ -573,7 +565,7 @@ _pager_window_new(Pager_Desk *pd, E_Border *border) e_layout_pack(pd->o_layout, pw->o_window); e_layout_child_raise(pw->o_window); - + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, _pager_window_cb_mouse_in, pw); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_OUT, _pager_window_cb_mouse_out, pw); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _pager_window_cb_mouse_down, pw); @@ -590,11 +582,11 @@ _pager_window_new(Pager_Desk *pd, E_Border *border) if (border->client.icccm.urgent) { - if (!(border->iconic)) - edje_object_signal_emit(pd->o_desk, - "e,state,urgent", "e"); - edje_object_signal_emit(pw->o_window, - "e,state,urgent", "e"); + if (!(border->iconic)) + edje_object_signal_emit(pd->o_desk, + "e,state,urgent", "e"); + edje_object_signal_emit(pw->o_window, + "e,state,urgent", "e"); } evas_object_show(o); @@ -656,91 +648,110 @@ _pager_desk_window_find(Pager_Desk *pd, E_Border *border) } static Pager_Popup * -_pager_popup_new(Pager *p, int urgent) +_pager_popup_new(E_Zone *zone, int urgent) { Pager_Popup *pp; Evas_Coord w, h; + int x, y, height, width; E_Desk *desk; - + pp = E_NEW(Pager_Popup, 1); if (!pp) return NULL; - + /* Show popup */ - pp->popup = e_popup_new(p->zone, 0, 0, 1, 1); + pp->popup = e_popup_new(zone, 0, 0, 1, 1); if (!pp->popup) { free(pp); return NULL; } - e_popup_layer_set(pp->popup, 999); - pp->src_pager = p; + e_popup_layer_set(pp->popup, 255); - p->popup = pp; + pp->pager = _pager_new(pp->popup->evas, zone); - evas_object_geometry_get(p->o_table, NULL, NULL, &w, &h); - - pp->pager = _pager_new(pp->popup->evas, p->zone); - pp->pager->inst = p->inst; pp->pager->is_popup = 1; + + e_zone_desk_count_get(zone, &x, &y); + height = pager_config->popup_pager_height * y; + width = ((zone->w * x)/(zone->h * y)) * height; + evas_object_move(pp->pager->o_table, 0, 0); - evas_object_resize(pp->pager->o_table, w, h); - + evas_object_resize(pp->pager->o_table, width, height); + pp->o_bg = edje_object_add(pp->popup->evas); e_theme_edje_object_set(pp->o_bg, "base/theme/modules/pager", "e/widgets/pager/popup"); - desk = e_desk_current_get(p->zone); + desk = e_desk_current_get(zone); if (desk) edje_object_part_text_set(pp->o_bg, "text", desk->name); evas_object_show(pp->o_bg); - edje_extern_object_min_size_set(pp->pager->o_table, w, h); + + edje_extern_object_min_size_set(pp->pager->o_table, width, height); edje_object_part_swallow(pp->o_bg, "pager", pp->pager->o_table); edje_object_size_min_calc(pp->o_bg, &w, &h); - + evas_object_move(pp->o_bg, 0, 0); evas_object_resize(pp->o_bg, w, h); e_popup_edje_bg_object_set(pp->popup, pp->o_bg); //e_popup_ignore_events_set(pp->popup, 1); - e_popup_move_resize(pp->popup, ((p->zone->w - w) / 2), - ((p->zone->h - h) / 2), w, h); + e_popup_move_resize(pp->popup, ((zone->w - w) / 2), + ((zone->h - h) / 2), w, h); e_bindings_mouse_grab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win); e_bindings_wheel_grab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win); e_popup_show(pp->popup); - + if (!urgent) { - pp->timer = ecore_timer_add(pager_config->popup_speed, - _pager_popup_cb_timeout, pp); + pp->timer = ecore_timer_add(pager_config->popup_speed, + _pager_popup_cb_timeout, pp); } else { - if (!pager_config->popup_urgent_stick) - pp->timer = ecore_timer_add(pager_config->popup_urgent_speed, - _pager_popup_cb_timeout, pp); + if (!pager_config->popup_urgent_stick) + pp->timer = ecore_timer_add(pager_config->popup_urgent_speed, + _pager_popup_cb_timeout, pp); } pp->urgent = urgent; + pager_popups = evas_list_append(pager_popups, pp); + return pp; } static void _pager_popup_free(Pager_Popup *pp) { - pp->src_pager->popup = NULL; if (pp->timer) ecore_timer_del(pp->timer); evas_object_del(pp->o_bg); _pager_free(pp->pager); e_bindings_mouse_ungrab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win); e_bindings_wheel_ungrab(E_BINDING_CONTEXT_POPUP, pp->popup->evas_win); e_object_del(E_OBJECT(pp->popup)); + pager_popups = evas_list_remove(pager_popups, pp); free(pp); } +static Pager_Popup * +_pager_popup_find(E_Zone *zone) +{ + Pager_Popup *pp; + Evas_List *l; + + for(l = pager_popups; l; l = l->next) + { + pp = l->data; + pp->pager->zone == zone; + return pp; + } + return NULL; +} + static void _pager_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, void *event_info) { Instance *inst; - + inst = data; _pager_instance_drop_zone_recalc(inst); } @@ -750,7 +761,7 @@ _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) { Instance *inst; Evas_Event_Mouse_Down *ev; - + inst = data; ev = event_info; if ((ev->button == 3) && (!pager_config->menu)) @@ -758,16 +769,16 @@ _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) E_Menu *mn; E_Menu_Item *mi; int cx, cy, cw, ch; - + mn = e_menu_new(); e_menu_post_deactivate_callback_set(mn, _menu_cb_post, inst); pager_config->menu = mn; - + mi = e_menu_item_new(mn); e_menu_item_label_set(mi, _("Configuration")); e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration"); e_menu_item_callback_set(mi, _pager_inst_cb_menu_configure, NULL); - + if (e_configure_registry_exists("screen/virtual_desktops")) { mi = e_menu_item_new(mn); @@ -775,9 +786,9 @@ _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) e_util_menu_item_edje_icon_set(mi, "enlightenment/vdesktops"); e_menu_item_callback_set(mi, _pager_inst_cb_menu_virtual_desktops_dialog, inst); } - + e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0); - + e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, &cw, &ch); e_menu_activate_mouse(mn, e_util_zone_current_get(e_manager_current_get()), @@ -804,7 +815,17 @@ _pager_inst_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi) _config_pager_module(NULL); } -static void +static E_Config_Dialog * +_pager_config_dialog(E_Container *con, const char *params) +{ + if (!pager_config) return; + if (pager_config->config_dialog) return; + /* FIXME: pass zone config item */ + _config_pager_module(NULL); + return pager_config->config_dialog; +} + +static void _pager_inst_cb_menu_virtual_desktops_dialog(void *data, E_Menu *m, E_Menu_Item *mi) { Instance *inst; @@ -817,7 +838,7 @@ static void _pager_instance_drop_zone_recalc(Instance *inst) { Evas_Coord x, y, w, h; - + evas_object_geometry_get(inst->o_pager, &x, &y, &w, &h); e_drop_handler_geometry_set(inst->drop_handler, x, y, w, h); } @@ -832,7 +853,7 @@ static int _pager_cb_event_border_resize(void *data, int type, void *event) { E_Event_Border_Resize *ev; - Evas_List *l, *l2; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -857,8 +878,8 @@ _pager_cb_event_border_resize(void *data, int type, void *event) static int _pager_cb_event_border_move(void *data, int type, void *event) { - E_Event_Border_Move *ev; - Evas_List *l, *l2; + E_Event_Border_Move *ev; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -884,7 +905,7 @@ static int _pager_cb_event_border_add(void *data, int type, void *event) { E_Event_Border_Add *ev; - Evas_List *l; + Evas_List *l; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -912,7 +933,7 @@ static int _pager_cb_event_border_remove(void *data, int type, void *event) { E_Event_Border_Remove *ev; - Evas_List *l, *l2; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -941,8 +962,8 @@ _pager_cb_event_border_remove(void *data, int type, void *event) static int _pager_cb_event_border_iconify(void *data, int type, void *event) { - E_Event_Border_Iconify *ev; - Evas_List *l, *l2; + E_Event_Border_Iconify *ev; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -973,7 +994,7 @@ static int _pager_cb_event_border_uniconify(void *data, int type, void *event) { E_Event_Border_Uniconify *ev; - Evas_List *l, *l2; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -998,15 +1019,15 @@ _pager_cb_event_border_uniconify(void *data, int type, void *event) static int _pager_cb_event_border_stick(void *data, int type, void *event) { - E_Event_Border_Stick *ev; - Evas_List *l, *l2; + E_Event_Border_Stick *ev; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) { Instance *inst; Pager_Win *pw; - + inst = l->data; if (inst->pager->zone != ev->border->zone) continue; pw = _pager_window_find(inst->pager, ev->border); @@ -1030,7 +1051,7 @@ static int _pager_cb_event_border_unstick(void *data, int type, void *event) { E_Event_Border_Unstick *ev; - Evas_List *l, *l2; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -1064,7 +1085,7 @@ static int _pager_cb_event_border_desk_set(void *data, int type, void *event) { E_Event_Border_Desk_Set *ev; - Evas_List *l, *l2; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -1075,7 +1096,7 @@ _pager_cb_event_border_desk_set(void *data, int type, void *event) inst = l->data; /* if this pager is not for the zone of the border */ - if (inst->pager->zone != ev->border->zone) + if (inst->pager->zone != ev->border->zone) { /* look at all desks in the pager */ for (l2 = inst->pager->desks; l2; l2 = l2->next) @@ -1196,8 +1217,8 @@ _pager_cb_event_border_desk_set(void *data, int type, void *event) static int _pager_cb_event_border_stack(void *data, int type, void *event) { - E_Event_Border_Stack *ev; - Evas_List *l, *l2; + E_Event_Border_Stack *ev; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -1205,7 +1226,7 @@ _pager_cb_event_border_stack(void *data, int type, void *event) Instance *inst; inst = l->data; - if (inst->pager->zone != ev->border->zone) continue; + if (inst->pager->zone != ev->border->zone) continue; for (l2 = inst->pager->desks; l2; l2 = l2->next) { Pager_Desk *pd; @@ -1255,8 +1276,8 @@ _pager_cb_event_border_stack(void *data, int type, void *event) static int _pager_cb_event_border_icon_change(void *data, int type, void *event) { - E_Event_Border_Icon_Change *ev; - Evas_List *l, *l2; + E_Event_Border_Icon_Change *ev; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -1264,7 +1285,7 @@ _pager_cb_event_border_icon_change(void *data, int type, void *event) Instance *inst; inst = l->data; - if (inst->pager->zone != ev->border->zone) continue; + if (inst->pager->zone != ev->border->zone) continue; for (l2 = inst->pager->desks; l2; l2 = l2->next) { Pager_Desk *pd; @@ -1299,15 +1320,25 @@ static int _pager_cb_event_border_urgent_change(void *data, int type, void *event) { E_Event_Border_Urgent_Change *ev; - Evas_List *l, *l2; + Evas_List *l, *l2; + Pager_Popup *pp; + E_Zone *zone; + int urgent; + int urgent_cnt = 0; ev = event; + zone = ev->border->zone; + urgent = ev->border->client.icccm.urgent; + + /* this didnt handle the case when two windows became urgent at + the same time */ + for (l = pager_config->instances; l; l = l->next) { Instance *inst; inst = l->data; - if (inst->pager->zone != ev->border->zone) continue; + if (inst->pager->zone != zone) continue; for (l2 = inst->pager->desks; l2; l2 = l2->next) { Pager_Desk *pd; @@ -1317,48 +1348,80 @@ _pager_cb_event_border_urgent_change(void *data, int type, void *event) pw = _pager_desk_window_find(pd, ev->border); if (pw) { - if (ev->border->client.icccm.urgent) + if (urgent) { if (!(ev->border->iconic)) - edje_object_signal_emit(pd->o_desk, - "e,state,urgent", "e"); - edje_object_signal_emit(pw->o_window, + edje_object_signal_emit(pd->o_desk, + "e,state,urgent", "e"); + edje_object_signal_emit(pw->o_window, "e,state,urgent", "e"); - - if (pager_config->popup_urgent && - !inst->pager->popup) - { - _pager_popup_new(inst->pager, 1); - } } else { + /* FIXME this seems to be wrong - why set the + desk to not urgent when iconic, while + another window on that desk could still be urgent? */ if (!(ev->border->iconic)) - edje_object_signal_emit(pd->o_desk, + edje_object_signal_emit(pd->o_desk, "e,state,not_urgent", "e"); - edje_object_signal_emit(pw->o_window, + edje_object_signal_emit(pw->o_window, "e,state,not_urgent", "e"); - - if (inst->pager->popup && - inst->pager->popup->urgent) - { - _pager_popup_free(inst->pager->popup); - } } } } } + if (pager_config->popup_urgent) + { + pp = _pager_popup_find(zone); + + if ((!pp) && (urgent)) + _pager_popup_new(zone, 1); + else if (pp) + { + for (l = pp->pager->desks; l; l = l->next) + { + Pager_Desk *pd; + Pager_Win *pw; + + pd = l->data; + pw = _pager_desk_window_find(pd, ev->border); + if (!pw) continue; + + if (urgent) + { + edje_object_signal_emit(pd->o_desk, + "e,state,urgent", "e"); + edje_object_signal_emit(pw->o_window, + "e,state,urgent", "e"); + pd->urgent++; + } + else + { + pd->urgent--; + + if (!(pd->urgent)) + edje_object_signal_emit(pd->o_desk, + "e,state,not_urgent", "e"); + edje_object_signal_emit(pw->o_window, + "e,state,not_urgent", "e"); + } + urgent_cnt += pd->urgent; + } + if (urgent_cnt == 0) _pager_popup_free(pp); + } + } + return 1; } -static int -_pager_cb_event_border_property(void *data, int type, void *event) +static int +_pager_cb_event_border_property(void *data, int type, void *event) { E_Event_Border_Property *ev; - Evas_List *l, *l2; - int found = 0; - + Evas_List *l, *l2; + int found = 0; + ev = event; for (l = pager_config->instances; l; l = l->next) { @@ -1376,7 +1439,7 @@ _pager_cb_event_border_property(void *data, int type, void *event) if (pw) { found = 1; - if (ev->border->client.netwm.state.skip_pager) + if (ev->border->client.netwm.state.skip_pager) { pd->wins = evas_list_remove(pd->wins, pw); _pager_window_free(pw); @@ -1385,7 +1448,7 @@ _pager_cb_event_border_property(void *data, int type, void *event) } } if (found) return 1; - + /* If we did not find this window in the pager, then add it because * the skip_pager state may have changed to 1 */ for (l = pager_config->instances; l; l = l->next) @@ -1403,13 +1466,13 @@ _pager_cb_event_border_property(void *data, int type, void *event) if (pd) { Pager_Win *pw; - + pw = _pager_window_new(pd, ev->border); if (pw) { Pager_Win *pw2 = NULL; E_Border *bd; - + pd->wins = evas_list_append(pd->wins, pw); bd = e_util_desk_border_above(pw->border); if (bd) @@ -1426,15 +1489,15 @@ _pager_cb_event_border_property(void *data, int type, void *event) { for (l2 = inst->pager->desks; l2; l2 = l2->next) { - Pager_Win *pw; - + Pager_Win *pw; + pd = l2->data; pw = _pager_window_new(pd, ev->border); if (pw) { Pager_Win *pw2 = NULL; E_Border *bd; - + pd->wins = evas_list_append(pd->wins, pw); bd = e_util_desk_border_above(pw->border); if (bd) @@ -1455,10 +1518,11 @@ static int _pager_cb_event_zone_desk_count_set(void *data, int type, void *event) { Evas_List *l; - Instance *inst; for (l = pager_config->instances; l; l = l->next) { + Instance *inst; + inst = l->data; _pager_empty(inst->pager); _pager_fill(inst->pager); @@ -1471,30 +1535,35 @@ static int _pager_cb_event_desk_show(void *data, int type, void *event) { E_Event_Desk_Show *ev; - Evas_List *l; + Evas_List *l; + Pager_Desk *pd; + Pager_Popup *pp; ev = event; for (l = pager_config->instances; l; l = l->next) { Instance *inst; - Pager_Desk *pd; inst = l->data; if (inst->pager->zone != ev->desk->zone) continue; - pd = _pager_desk_find(inst->pager, ev->desk); - if (pd) + if (pd) _pager_desk_select(pd); + } + + if (pager_config->popup) + { + if (!(pp = _pager_popup_find(ev->desk->zone))) + _pager_popup_new(ev->desk->zone, 0); + else { - _pager_desk_select(pd); - if (pd->pager->popup) _pager_popup_free(pd->pager->popup); - if (pager_config->popup) - { - Pager_Popup *pp; - - pp = _pager_popup_new(pd->pager, 0); - } + pd = _pager_desk_find(pp->pager, ev->desk); + if (pd) _pager_desk_select(pd); + ecore_timer_del(pp->timer); + pp->timer = ecore_timer_add(pager_config->popup_speed, + _pager_popup_cb_timeout, pp); } } + return 1; } @@ -1502,7 +1571,7 @@ static int _pager_cb_event_desk_name_change(void *data, int type, void *event) { E_Event_Desk_Name_Change *ev; - Evas_List *l; + Evas_List *l; ev = event; for (l = pager_config->instances; l; l = l->next) @@ -1523,19 +1592,19 @@ static int _pager_cb_event_container_resize(void *data, int type, void *event) { E_Event_Container_Resize *ev; - Evas_List *l, *l2; + Evas_List *l, *l2; ev = event; for (l = pager_config->instances; l; l = l->next) { Instance *inst; - + inst = l->data; if (inst->pager->zone->container != ev->container) continue; for (l2 = inst->pager->desks; l2; l2 = l2->next) { Pager_Desk *pd; - + pd = l2->data; e_layout_virtual_size_set(pd->o_layout, pd->desk->zone->w, pd->desk->zone->h); @@ -1549,7 +1618,7 @@ static void _pager_window_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info) { Evas_Event_Mouse_In *ev; - Pager_Win *pw; + Pager_Win *pw; ev = event_info; pw = data; @@ -1560,7 +1629,7 @@ static void _pager_window_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info) { Evas_Event_Mouse_Out *ev; - Pager_Win *pw; + Pager_Win *pw; ev = event_info; pw = data; @@ -1581,7 +1650,7 @@ _pager_window_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_i if (pw->desk->pager->is_popup) return; if (pw->border->lock_user_location) return; if (ev->button == pager_config->btn_desk) return; - if ((ev->button == pager_config->btn_drag) || + if ((ev->button == pager_config->btn_drag) || (ev->button == pager_config->btn_noplace)) { Evas_Coord ox, oy; @@ -1595,7 +1664,7 @@ _pager_window_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_i pw->drag.start = 1; pw->drag.no_place = 0; pw->drag.button = ev->button; - if (ev->button == pager_config->btn_noplace) + if (ev->button == pager_config->btn_noplace) pw->drag.no_place = 1; } } @@ -1613,7 +1682,7 @@ _pager_window_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_inf if (ev->button == pager_config->btn_desk) return; if ((ev->button == pager_config->btn_drag) || (ev->button == pager_config->btn_noplace)) - { + { if (!pw->drag.from_pager) { if (!pw->drag.start) pw->desk->pager->just_dragged = 1; @@ -1629,23 +1698,29 @@ _pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_i { Evas_Event_Mouse_Move *ev; Pager_Win *pw; + E_Drag *drag; + Evas_Object *o, *oo; + Evas_Coord x, y, w, h; + const char *file = NULL, *part = NULL; + const char *drag_types[] = { "enlightenment/pager_win", "enlightenment/border" }; + Evas_Coord dx, dy; + unsigned int resist = 0; + Evas_Coord mx, my, vx, vy; + Pager_Desk *pd; ev = event_info; pw = data; - + if (!pw) return; if (pw->desk->pager->is_popup) return; /* prevent drag for a few pixels */ if (pw->drag.start) { - Evas_Coord dx, dy; - unsigned int resist = 0; - dx = pw->drag.x - ev->cur.output.x; dy = pw->drag.y - ev->cur.output.y; if (pw->desk && pw->desk->pager && pw->desk->pager->inst) resist = pager_config->drag_resist; - + if (((dx * dx) + (dy * dy)) <= (resist * resist)) return; pw->desk->pager->dragging = 1; @@ -1655,9 +1730,6 @@ _pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_i /* dragging this win around inside the pager */ if (pw->drag.in_pager) { - Evas_Coord mx, my, vx, vy; - Pager_Desk *pd; - /* m for mouse */ mx = ev->cur.canvas.x; my = ev->cur.canvas.y; @@ -1666,7 +1738,7 @@ _pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_i pd = _pager_desk_at_coord(pw->desk->pager, mx, my); if ((pd) && (!pw->drag.no_place)) { - e_layout_coord_canvas_to_virtual(pd->o_layout, + e_layout_coord_canvas_to_virtual(pd->o_layout, mx + pw->drag.dx, my + pw->drag.dy, &vx, &vy); if (pd != pw->desk) @@ -1677,15 +1749,9 @@ _pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_i } else { - E_Drag *drag; - Evas_Object *o, *oo; - Evas_Coord x, y, w, h; - const char *file = NULL, *part = NULL; - const char *drag_types[] = { "enlightenment/pager_win", "enlightenment/border" }; - evas_object_geometry_get(pw->o_window, &x, &y, &w, &h); evas_object_hide(pw->o_window); - + drag = e_drag_new(pw->desk->pager->inst->gcc->gadcon->zone->container, x, y, drag_types, 2, pw, -1, _pager_window_cb_drag_convert, @@ -1694,7 +1760,7 @@ _pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_i o = edje_object_add(drag->evas); edje_object_file_get(pw->o_window, &file, &part); edje_object_file_set(o, file, part); - + oo = o; o = edje_object_add(drag->evas); edje_object_file_get(pw->o_icon, &file, &part); @@ -1703,7 +1769,7 @@ _pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_i e_drag_object_set(drag, oo); e_drag_resize(drag, w, h); e_drag_start(drag, x - pw->drag.dx, y - pw->drag.dy); - + /* this prevents the desk from switching on drags */ pw->drag.from_pager = pw->desk->pager; pw->drag.from_pager->dragging = 1; @@ -1729,6 +1795,10 @@ static void _pager_window_cb_drag_finished(E_Drag *drag, int dropped) { Pager_Win *pw; + E_Container *cont; + E_Zone *zone; + E_Desk *desk; + int x, y, dx, dy; pw = drag->data; if (!pw) return; @@ -1736,11 +1806,6 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped) if (!dropped) { /* wasn't dropped (on pager). move it to position of mouse on screen */ - int x, y, dx, dy; - E_Container *cont; - E_Zone *zone; - E_Desk *desk; - cont = e_container_current_get(e_manager_current_get()); zone = e_zone_current_get(cont); desk = e_desk_current_get(zone); @@ -1749,20 +1814,20 @@ _pager_window_cb_drag_finished(E_Drag *drag, int dropped) e_border_desk_set(pw->border, desk); ecore_x_pointer_last_xy_get(&x, &y); - + dx = (pw->border->w / 2); dy = (pw->border->h / 2); - + /* offset so that center of window is on mouse, but keep within desk bounds */ if (dx < x) { x -= dx; - if ((pw->border->w < zone->w) && + if ((pw->border->w < zone->w) && (x + pw->border->w > zone->x + zone->w)) x -= x + pw->border->w - (zone->x + zone->w); } else x = 0; - + if (dy < y) { y -= dy; @@ -1848,7 +1913,7 @@ _pager_inst_cb_leave(void *data, const char *type, void *event_info) for (l = inst->pager->desks; l && inst->pager->active_drop_pd; l = l->next) { Pager_Desk *pd; - + pd = l->data; if (pd == inst->pager->active_drop_pd) { @@ -1873,6 +1938,8 @@ _pager_inst_cb_drop(void *data, const char *type, void *event_info) Pager_Win *pw = NULL; Evas_Coord xx, yy; int x, y; + Evas_Coord wx, wy, wx2, wy2; + Evas_Coord nx, ny; ev = event_info; inst = data; @@ -1894,8 +1961,6 @@ _pager_inst_cb_drop(void *data, const char *type, void *event_info) } else if (!strcmp(type, "enlightenment/border")) { - Evas_Coord wx, wy, wx2, wy2; - bd = ev->data; e_layout_coord_virtual_to_canvas(pd->o_layout, bd->x, bd->y, &wx, &wy); e_layout_coord_virtual_to_canvas(pd->o_layout, bd->x + bd->w, bd->y + bd->h, &wx2, &wy2); @@ -1905,7 +1970,7 @@ _pager_inst_cb_drop(void *data, const char *type, void *event_info) else if (!strcmp(type, "enlightenment/vdesktop")) { pd2 = ev->data; - if (!pd2) return; + if (!pd2) return; _pager_desk_switch(pd, pd2); } else @@ -1913,13 +1978,11 @@ _pager_inst_cb_drop(void *data, const char *type, void *event_info) if (bd) { - Evas_Coord nx, ny; - if (bd->iconic) e_border_uniconify(bd); e_border_desk_set(bd, pd->desk); if ((!pw) || ((pw) && (!pw->drag.no_place))) { - e_layout_coord_canvas_to_virtual(pd->o_layout, + e_layout_coord_canvas_to_virtual(pd->o_layout, ev->x + xx + x + dx, ev->y + yy + y + dy, &nx, &ny); @@ -1946,14 +2009,13 @@ _pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_inf { Evas_Event_Mouse_Down *ev; Pager_Desk *pd; + Evas_Coord ox, oy; ev = event_info; pd = data; if (!pd) return; if (ev->button == pager_config->btn_desk) { - Evas_Coord ox, oy; - evas_object_geometry_get(pd->o_desk, &ox, &oy, NULL, NULL); pd->drag.start = 1; pd->drag.in_pager = 1; @@ -1978,13 +2040,13 @@ _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) if (!pd) return; p = pd->pager; - if ( p->is_popup && - (pd->desk == e_desk_current_get(pd->pager->zone)) ) + /* if ( p->is_popup && + (pd->desk == e_desk_current_get(pd->pager->zone)) ) { - if (p->inst->pager->popup) - _pager_popup_free(p->inst->pager->popup); + if (p->inst->pager->popup) + _pager_popup_free(p->inst->pager->popup); } - + */ /* FIXME: pd->pager->dragging is 0 when finishing a drag from desk to desk */ if ((ev->button == 1) && (!pd->pager->dragging) && (!pd->pager->just_dragged)) @@ -2001,6 +2063,14 @@ _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf { Evas_Event_Mouse_Move *ev; Pager_Desk *pd; + Evas_Coord dx, dy; + unsigned int resist = 0; + E_Drag *drag; + Evas_Object *o, *oo, *o_icon; + Evas_Coord x, y, w, h; + const char *drag_types[] = { "enlightenment/vdesktop" }; + Pager_Win *pw; + Evas_List *l; ev = event_info; pd = data; @@ -2008,9 +2078,6 @@ _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf /* prevent drag for a few pixels */ if (pd->drag.start) { - Evas_Coord dx, dy; - unsigned int resist = 0; - dx = pd->drag.x - ev->cur.output.x; dy = pd->drag.y - ev->cur.output.y; if (pd->pager && pd->pager->inst) @@ -2024,13 +2091,6 @@ _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf if (pd->drag.in_pager) { - E_Drag *drag; - Evas_Object *o, *oo, *o_icon; - Evas_Coord x, y, w, h; - const char *drag_types[] = { "enlightenment/vdesktop" }; - Pager_Win *pw; - Evas_List *l; - evas_object_geometry_get(pd->o_desk, &x, &y, &w, &h); drag = e_drag_new(pd->pager->inst->gcc->gadcon->zone->container, x, y, drag_types, 1, pd, -1, @@ -2043,8 +2103,8 @@ _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf evas_object_show(o); /* redraw the desktop theme above */ - o = edje_object_add(drag->evas); - e_theme_edje_object_set(o, "base/theme/modules/pager", + o = edje_object_add(drag->evas); + e_theme_edje_object_set(o, "base/theme/modules/pager", "e/modules/pager/desk"); evas_object_show(o); e_drag_object_set(drag, o); @@ -2058,17 +2118,17 @@ _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf for (l = pd->wins; l; l = l->next) { pw = l->data; - if (!pw || pw->border->iconic - || pw->border->client.netwm.state.skip_pager) + if (!pw || pw->border->iconic + || pw->border->client.netwm.state.skip_pager) continue; o = edje_object_add(drag->evas); - e_theme_edje_object_set(o, "base/theme/modules/pager", + e_theme_edje_object_set(o, "base/theme/modules/pager", "e/modules/pager/window"); e_layout_pack(oo, o); e_layout_child_raise(o); - e_layout_child_move(o, - pw->border->x - pw->desk->desk->zone->x, + e_layout_child_move(o, + pw->border->x - pw->desk->desk->zone->x, pw->border->y - pw->desk->desk->zone->y); e_layout_child_resize(o, pw->border->w, pw->border->h); evas_object_show(o); @@ -2094,21 +2154,19 @@ static void _pager_desk_cb_drag_finished(E_Drag *drag, int dropped) { Pager_Desk *pd; + Pager_Desk *pd2 = NULL; + Evas_List *l; + E_Desk *desk; + E_Zone *zone; pd = drag->data; if (!pd) return; if (!dropped) { /* wasn't dropped on pager, switch with current desktop */ - Pager_Desk *pd2 = NULL; - Evas_List *l; - E_Desk *desk; - if (!pd->desk) return; - desk = e_desk_current_get( - e_zone_current_get( - e_container_current_get( - e_manager_current_get()))); + zone = e_util_zone_current_get(e_manager_current_get()); + desk = e_desk_current_get(zone); for (l = pager_config->instances; l && !pd2; l = l->next) { Instance *inst; @@ -2139,7 +2197,7 @@ _pager_desk_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj, void *event_in if (pd->pager->is_popup) return; - if (pager_config->flip_desk) + if (pager_config->flip_desk) e_zone_desk_linear_flip_by(pd->desk->zone, ev->z); } @@ -2175,6 +2233,7 @@ e_modapi_init(E_Module *m) E_CONFIG_VAL(D, T, popup_urgent, UINT); E_CONFIG_VAL(D, T, popup_urgent_stick, UINT); E_CONFIG_VAL(D, T, popup_urgent_speed, DOUBLE); + E_CONFIG_VAL(D, T, popup_pager_height, INT); E_CONFIG_VAL(D, T, drag_resist, UINT); E_CONFIG_VAL(D, T, scale, UCHAR); E_CONFIG_VAL(D, T, resize, UCHAR); @@ -2193,6 +2252,7 @@ e_modapi_init(E_Module *m) pager_config->popup_urgent = 0; pager_config->popup_urgent_stick = 0; pager_config->popup_urgent_speed = 1.5; + pager_config->popup_pager_height = 60; pager_config->drag_resist = 3; pager_config->scale = 1; pager_config->resize = PAGER_RESIZE_BOTH; @@ -2206,6 +2266,7 @@ e_modapi_init(E_Module *m) E_CONFIG_LIMIT(pager_config->popup_urgent, 0, 1); E_CONFIG_LIMIT(pager_config->popup_urgent_stick, 0, 1); E_CONFIG_LIMIT(pager_config->popup_urgent_speed, 0.1, 10.0); + E_CONFIG_LIMIT(pager_config->popup_pager_height, 20, 200); E_CONFIG_LIMIT(pager_config->drag_resist, 0, 50); E_CONFIG_LIMIT(pager_config->resize, PAGER_RESIZE_HORZ, PAGER_RESIZE_BOTH); E_CONFIG_LIMIT(pager_config->flip_desk, 0, 1); @@ -2249,7 +2310,7 @@ e_modapi_init(E_Module *m) (E_EVENT_BORDER_ICON_CHANGE, _pager_cb_event_border_icon_change, NULL)); pager_config->handlers = evas_list_append (pager_config->handlers, ecore_event_handler_add - (E_EVENT_BORDER_URGENT_CHANGE, + (E_EVENT_BORDER_URGENT_CHANGE, _pager_cb_event_border_urgent_change, NULL)); pager_config->handlers = evas_list_append (pager_config->handlers, ecore_event_handler_add @@ -2266,18 +2327,22 @@ e_modapi_init(E_Module *m) pager_config->handlers = evas_list_append (pager_config->handlers, ecore_event_handler_add (E_EVENT_CONTAINER_RESIZE, _pager_cb_event_container_resize, NULL)); - + pager_config->module = m; e_gadcon_provider_register(&_gadcon_class); - return m; + + e_configure_registry_item_add("extensions/pager", 40, N_("Pager"), NULL, + "enlightenment/pager", _pager_config_dialog); + + return m; } EAPI int e_modapi_shutdown(E_Module *m) { e_gadcon_provider_unregister(&_gadcon_class); - + if (pager_config->config_dialog) e_object_del(E_OBJECT(pager_config->config_dialog)); while (pager_config->handlers) @@ -2285,13 +2350,16 @@ e_modapi_shutdown(E_Module *m) ecore_event_handler_del(pager_config->handlers->data); pager_config->handlers = evas_list_remove_list(pager_config->handlers, pager_config->handlers); } - + if (pager_config->menu) { e_menu_post_deactivate_callback_set(pager_config->menu, NULL, NULL); e_object_del(E_OBJECT(pager_config->menu)); pager_config->menu = NULL; } + + e_configure_registry_item_del("extensions/pager"); + E_FREE(pager_config); E_CONFIG_DD_FREE(conf_edd); return 1; @@ -2303,6 +2371,3 @@ e_modapi_save(E_Module *m) e_config_domain_save("module.pager", conf_edd, pager_config); return 1; } - -/**/ -/***************************************************************************/ diff --git a/src/modules/pager/e_mod_main.h b/src/modules/pager/e_mod_main.h index b3177ae13..f126b17e7 100644 --- a/src/modules/pager/e_mod_main.h +++ b/src/modules/pager/e_mod_main.h @@ -26,6 +26,7 @@ struct _Config unsigned int popup_urgent; unsigned int popup_urgent_stick; double popup_urgent_speed; + int popup_pager_height; unsigned int drag_resist; unsigned int scale; unsigned char resize;