Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        ewins.c 


Log Message:
Fix segv in some obscure client exit scenarios involving reparent/destroy.

===================================================================
RCS file: /cvs/e/e16/e/src/ewins.c,v
retrieving revision 1.187
retrieving revision 1.188
diff -u -3 -r1.187 -r1.188
--- ewins.c     13 Jan 2007 19:14:27 -0000      1.187
+++ ewins.c     15 Jan 2007 00:29:17 -0000      1.188
@@ -64,6 +64,8 @@
 static void         EwinHandleEventsContainer(Win win, XEvent * ev, void *prm);
 static void         EwinHandleEventsClient(Win win, XEvent * ev, void *prm);
 
+static void         EwinUnmap2(EWin * ewin);
+
 Window
 EwinGetClientXwin(const EWin * ewin)
 {
@@ -354,6 +356,9 @@
    if (!ewin)
       return;
 
+   if (ewin->state.state == EWIN_STATE_MAPPED)
+      EwinUnmap2(ewin);
+
    if (EDebug(EDBUG_TYPE_EWINS))
       Eprintf("EwinDestroy %#lx st=%d: %s\n", EwinGetClientXwin(ewin),
              ewin->state.state, EwinGetTitle(ewin));
@@ -2092,8 +2097,14 @@
        break;
 
      case EX_EVENT_REPARENT_GONE:
+       if (ev->xreparent.window != EwinGetClientXwin(ewin))
+          break;
        EoSetGone(ewin);
+       goto do_reparent;
      case ReparentNotify:
+       if (ev->xreparent.window != EwinGetClientXwin(ewin))
+          break;
+      do_reparent:
        EwinEventReparent(ewin);
        break;
 



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to