Hi All,
Here's a patch to ibox that fixes BUG 4 in the E TODO:
* BUG: if iconified window quits qhile iconified and ibox is being used
then e segv's
Basically, I added a handler for remove events to monitor when an app
is removed, then remove it from ibox. Tested well, and stops the E segv.
Cheers,
devilhorns
--- e_mod_main.c.orig 2005-12-12 14:16:03.000000000 -0500
+++ e_mod_main.c 2005-12-12 14:22:29.000000000 -0500
@@ -67,6 +67,7 @@
static int _ibox_box_cb_event_border_iconify(void *data, int type, void *event);
static int _ibox_box_cb_event_border_uniconify(void *data, int type, void *event);
+static int _ibox_box_cb_event_border_remove(void *data, int type, void *event);
static void _ibox_icon_cb_intercept_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y);
static void _ibox_icon_cb_intercept_resize(void *data, Evas_Object *o, Evas_Coord w, Evas_Coord h);
@@ -335,6 +336,8 @@
ecore_event_handler_add(E_EVENT_BORDER_ICONIFY, _ibox_box_cb_event_border_iconify, ibb);
ibb->ev_handler_border_uniconify =
ecore_event_handler_add(E_EVENT_BORDER_UNICONIFY, _ibox_box_cb_event_border_uniconify, ibb);
+ ibb->ev_handler_border_remove =
+ ecore_event_handler_add(E_EVENT_BORDER_REMOVE, _ibox_box_cb_event_border_remove, ibb);
bl = e_container_border_list_first(ibb->con);
while ((bd = e_container_border_list_next(bl)))
@@ -411,6 +414,8 @@
ecore_event_handler_del(ibb->ev_handler_border_iconify);
ecore_event_handler_del(ibb->ev_handler_border_uniconify);
+ ecore_event_handler_del(ibb->ev_handler_border_remove);
+
while (ibb->icons)
_ibox_icon_free(ibb->icons->data);
@@ -1201,6 +1206,24 @@
return 1;
}
+static int
+_ibox_box_cb_event_border_remove(void *data, int type, void *event)
+{
+ E_Event_Border_Remove *ev;
+ IBox_Box *ibb;
+ IBox_Icon *ic;
+
+ ev = event;
+ ibb = data;
+
+ ic = _ibox_icon_find(ibb, ev->border);
+ if (ic)
+ _ibox_icon_free(ic);
+ _ibox_box_frame_resize(ibb);
+
+ return 1;
+}
+
static void
_ibox_box_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change)
{
--- e_mod_main.h.orig 2005-12-12 14:17:24.000000000 -0500
+++ e_mod_main.h 2005-12-12 14:17:40.000000000 -0500
@@ -54,6 +54,7 @@
Ecore_Event_Handler *ev_handler_border_iconify;
Ecore_Event_Handler *ev_handler_border_uniconify;
+ Ecore_Event_Handler *ev_handler_border_remove;
double align, align_req;
double follow, follow_req;