Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: iconify.c Log Message: Fix segv when removing systray item. =================================================================== RCS file: /cvs/e/e16/e/src/iconify.c,v retrieving revision 1.206 retrieving revision 1.207 diff -u -3 -r1.206 -r1.207 --- iconify.c 11 May 2006 20:47:26 -0000 1.206 +++ iconify.c 12 May 2006 09:27:59 -0000 1.207 @@ -53,7 +53,7 @@ static void SystrayInit(Iconbox * ib, Win win, int screen); static void SystrayExit(Iconbox * ib); -static void IconboxObjSwinFree(Iconbox * ib, SWin * swin); +static void IconboxObjSwinDel(Iconbox * ib, Win win, int gone); typedef struct { @@ -422,8 +422,6 @@ static void IconboxDestroy(Iconbox * ib, int exiting) { - int i; - ecore_list_remove_node(ibox_list, ib); if (ib->name) @@ -438,17 +436,17 @@ break; } - for (i = 0; i < ib->num_objs; i++) + while (ib->num_objs) { switch (ib->type) { case IB_TYPE_ICONBOX: if (!exiting) - EwinDeIconify(ib->objs[i].u.ewin); - IconboxObjEwinDel(ib, ib->objs[i].u.ewin); + EwinDeIconify(ib->objs[0].u.ewin); + IconboxObjEwinDel(ib, ib->objs[0].u.ewin); break; case IB_TYPE_SYSTRAY: - IconboxObjSwinFree(ib, ib->objs[i].u.swin); + IconboxObjSwinDel(ib, ib->objs[0].u.swin->win, 0); break; } } @@ -2718,21 +2716,23 @@ } static void -IconboxObjSwinUnmanage(Iconbox * ib, Win win, int gone) +IconboxObjSwinUnmanage(Iconbox * ib __UNUSED__, Win win, int gone) { #if DEBUG_SYSTRAY Eprintf("IconboxObjSwinUnmanage %#lx gone=%d\n", WinGetXwin(win), gone); #endif + + if (!gone) + { + ESelectInput(win, NoEventMask); + EUnmapWindow(win); + EReparentWindow(win, VRoot.win, 0, 0); + XRemoveFromSaveSet(disp, WinGetXwin(win)); + } +#if 0 /* Not needed when going to EUnregisterWindow */ EventCallbackUnregister(win, 0, SystrayItemEvent, ib); +#endif EUnregisterWindow(win); - - if (gone) - return; - - ESelectInput(win, NoEventMask); - EUnmapWindow(win); - EReparentWindow(win, VRoot.win, 0, 0); - XRemoveFromSaveSet(disp, Xwin(win)); } static void @@ -2798,21 +2798,24 @@ } static void -IconboxObjSwinDel(Iconbox * ib, Window win, int gone) +IconboxObjSwinDel(Iconbox * ib, Win win, int gone) { int i; SWin *swin; - i = IconboxObjSwinFind(ib, win); + i = IconboxObjSwinFind(ib, WinGetXwin(win)); if (i < 0) return; + if (EventDebug(EDBUG_TYPE_ICONBOX)) + Eprintf("IconboxObjSwinDel %#lx\n", Xwin(win)); + swin = ib->objs[i].u.swin; - if (IconboxObjectDel(ib, swin) == 0) - IconboxRedraw(ib); + IconboxObjectDel(ib, swin); - IconboxObjSwinUnmanage(ib, swin->win, gone); + if (disp) + IconboxObjSwinUnmanage(ib, swin->win, gone); Efree(swin); } @@ -2860,18 +2863,6 @@ } static void -IconboxObjSwinFree(Iconbox * ib, SWin * swin) -{ - if (EventDebug(EDBUG_TYPE_ICONBOX)) - Eprintf("IconboxObjSwinFree %#lx\n", Xwin(swin->win)); - - if (disp) - IconboxObjSwinUnmanage(ib, swin->win, 0); - - Efree(swin); -} - -static void SystrayEventClientMessage(Iconbox * ib, XClientMessageEvent * ev) { Window win; @@ -2977,7 +2968,7 @@ { case MapNotify: EWindowSync(win); - IconboxRedraw(prm); + IconboxRedraw(ib); break; case DestroyNotify: @@ -2991,15 +2982,16 @@ goto do_terminate; case ClientMessage: - SystrayEventClientMessage(prm, &(ev->xclient)); + SystrayEventClientMessage(ib, &(ev->xclient)); break; case PropertyNotify: - SystrayEventClientProperty(prm, &(ev->xproperty)); + SystrayEventClientProperty(ib, &(ev->xproperty)); break; do_terminate: - IconboxObjSwinDel(prm, WinGetXwin(win), ev->type != ReparentNotify); + IconboxObjSwinDel(ib, win, ev->type != ReparentNotify); + IconboxRedraw(ib); break; } } ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs