diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 75b176754..4fdae5a9e 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -282,6 +282,8 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map) ev = calloc(1, sizeof(E_Event_Border_Add)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_ADD, ev, _e_border_event_border_add_free, NULL); return bd; @@ -301,6 +303,8 @@ e_border_desk_set(E_Border *bd, E_Desk *desk) ev = calloc(1, sizeof(E_Event_Border_Desk_Set)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ev->desk = desk; e_object_ref(E_OBJECT(desk)); @@ -323,6 +327,8 @@ e_border_show(E_Border *bd) ev = calloc(1, sizeof(E_Event_Border_Show)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_SHOW, ev, _e_border_event_border_show_free, NULL); } @@ -349,6 +355,8 @@ e_border_hide(E_Border *bd) ev = calloc(1, sizeof(E_Event_Border_Hide)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_HIDE, ev, _e_border_event_border_hide_free, NULL); } @@ -383,6 +391,8 @@ e_border_move(E_Border *bd, int x, int y) _e_border_zone_update(bd); ev = calloc(1, sizeof(E_Event_Border_Move)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_MOVE, ev, _e_border_event_border_move_free, NULL); } @@ -418,6 +428,8 @@ e_border_resize(E_Border *bd, int w, int h) _e_border_zone_update(bd); ev = calloc(1, sizeof(E_Event_Border_Resize)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_RESIZE, ev, _e_border_event_border_resize_free, NULL); } @@ -461,11 +473,15 @@ e_border_move_resize(E_Border *bd, int x, int y, int w, int h) _e_border_zone_update(bd); mev = calloc(1, sizeof(E_Event_Border_Move)); mev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_MOVE, mev, _e_border_event_border_move_free, NULL); rev = calloc(1, sizeof(E_Event_Border_Resize)); rev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_RESIZE, rev, _e_border_event_border_resize_free, NULL); } @@ -633,6 +649,8 @@ e_border_shade(E_Border *bd, E_Direction dir) ev = calloc(1, sizeof(E_Event_Border_Resize)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_RESIZE, ev, _e_border_event_border_resize_free, NULL); } @@ -709,6 +727,8 @@ e_border_unshade(E_Border *bd, E_Direction dir) ev = calloc(1, sizeof(E_Event_Border_Resize)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_RESIZE, ev, _e_border_event_border_resize_free, NULL); } @@ -901,6 +921,8 @@ _e_border_del(E_Border *bd) ev = calloc(1, sizeof(E_Event_Border_Remove)); ev->border = bd; + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); ecore_event_add(E_EVENT_BORDER_REMOVE, ev, _e_border_event_border_remove_free, NULL); } @@ -2834,7 +2856,7 @@ _e_border_event_border_resize_free(void *data, void *ev) static void _e_border_event_border_move_free(void *data, void *ev) { - E_Event_Border_Resize *e; + E_Event_Border_Move *e; e = ev; e_object_unref(E_OBJECT(e->border)); @@ -2854,7 +2876,7 @@ _e_border_event_border_add_free(void *data, void *ev) static void _e_border_event_border_remove_free(void *data, void *ev) { - E_Event_Border_Resize *e; + E_Event_Border_Remove *e; e = ev; e_object_unref(E_OBJECT(e->border)); @@ -2874,7 +2896,7 @@ _e_border_event_border_show_free(void *data, void *ev) static void _e_border_event_border_hide_free(void *data, void *ev) { - E_Event_Border_Show *e; + E_Event_Border_Hide *e; e = ev; e_object_unref(E_OBJECT(e->border)); diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index ef55b2975..55be50c81 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -438,6 +438,8 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m) e_menu_item_check_set(mi, 1); e_menu_item_label_set(mi, bd->client.icccm.title); /* ref the border as we implicitly ref it in the callback */ + /* SUSPICION: does the unref for this actually sometimes not get */ + /* called? coudl this be the dangling borders issue? */ e_object_ref(E_OBJECT(bd)); e_menu_item_callback_set(mi, _e_int_menus_clients_item_cb, bd); if (!bd->iconic) e_menu_item_toggle_set(mi, 1); diff --git a/src/bin/e_main.c b/src/bin/e_main.c index bb5104112..19f3a93f1 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -225,27 +225,6 @@ main(int argc, char **argv) _e_main_shutdown(-1); } _e_main_shutdown_push(_e_main_screens_shutdown); - /* init global atoms */ - if (!e_atoms_init()) - { - e_error_message_show("Enlightenment cannot set up atoms system."); - _e_main_shutdown(-1); - } - _e_main_shutdown_push(e_atoms_shutdown); - /* init focus system */ - if (!e_focus_init()) - { - e_error_message_show("Enlightenment cannot set up its focus system."); - _e_main_shutdown(-1); - } - _e_main_shutdown_push(e_focus_shutdown); - /* init border system */ - if (!e_border_init()) - { - e_error_message_show("Enlightenment cannot set up its border system."); - _e_main_shutdown(-1); - } - _e_main_shutdown_push(e_border_shutdown); /* init app system */ if (!e_app_init()) { @@ -496,6 +475,7 @@ _e_main_screens_init(void) Ecore_X_Window *roots; int num, i; + if (!e_atoms_init()) return 0; if (!e_manager_init()) return 0; if (!e_container_init()) return 0; if (!e_zone_init()) return 0; @@ -509,6 +489,8 @@ _e_main_screens_init(void) num); return 0; } + if (!e_focus_init()) return 0; + if (!e_border_init()) return 0; for (i = 0; i < num; i++) { E_Manager *man; @@ -567,10 +549,13 @@ _e_main_screens_init(void) static int _e_main_screens_shutdown(void) { + e_border_shutdown(); + e_focus_shutdown(); e_desk_shutdown(); e_zone_shutdown(); e_container_shutdown(); e_manager_shutdown(); + e_atoms_shutdown(); return 1; }