From ba5ce0470c734856ac120c36e906aad392d2568c Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 14 Jan 2005 14:01:08 +0000 Subject: [PATCH] werd! found the over-ref. borders begin created before the border system initted which mean events generated were of the wrogn type (0) which meant they were thrown out which meant the ref nevert got its macthing unref called.... :) SVN revision: 12963 --- src/bin/e_border.c | 28 +++++++++++++++++++++++++--- src/bin/e_int_menus.c | 2 ++ src/bin/e_main.c | 27 ++++++--------------------- 3 files changed, 33 insertions(+), 24 deletions(-) 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; }