Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        borders.c desktops.c 


Log Message:
Fix raise/lower for windows with transients.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -3 -r1.151 -r1.152
--- borders.c   21 Mar 2004 01:39:39 -0000      1.151
+++ borders.c   22 Mar 2004 16:42:31 -0000      1.152
@@ -559,7 +559,7 @@
 
    /* add it to our list of managed clients */
    AddItem(ewin, "EWIN", ewin->client.win, LIST_TYPE_EWIN);
-   DesktopAddEwinToTop(ewin);
+
    /* if the window asked to be iconified at the start */
    if (ewin->iconified)
      {
@@ -1385,9 +1385,8 @@
 
    if (ewin->client.transient)
      {
-       ewin2 =
-          FindItem(NULL, ewin->client.transient_for, LIST_FINDBY_ID,
-                   LIST_TYPE_EWIN);
+       ewin2 = FindItem(NULL, ewin->client.transient_for, LIST_FINDBY_ID,
+                        LIST_TYPE_EWIN);
        if (ewin2)
          {
             ewin2->has_transients--;
@@ -1881,6 +1880,9 @@
 {
    EDBUG(3, "RestackEwin");
 
+   if (EventDebug(EDBUG_TYPE_RAISELOWER))
+      printf("RestackEwin %#lx %s\n", ewin->client.win, EwinGetTitle(ewin));
+
    if (ewin->floating)
      {
        XRaiseWindow(disp, ewin->win);
@@ -1901,41 +1903,44 @@
 RaiseEwin(EWin * ewin)
 {
    static int          call_depth = 0;
+   EWin              **lst;
+   int                 i, num;
 
    EDBUG(3, "RaiseEwin");
    if (call_depth > 256)
       EDBUG_RETURN_;
    call_depth++;
 
-#if 0
-   printf("RaiseEwin %#lx %s\n", ewin->client.win, EwinGetTitle(ewin));
-#endif
+   if (EventDebug(EDBUG_TYPE_RAISELOWER))
+      printf("RaiseEwin(%d) %#lx %s\n", call_depth, ewin->client.win,
+            EwinGetTitle(ewin));
+
    if (ewin->win)
      {
        if (ewin->floating)
          {
             XRaiseWindow(disp, ewin->win);
+            goto done;
          }
-       else
-         {
-            DesktopAddEwinToTop(ewin);
-            if (ewin->has_transients)
-              {
-                 EWin              **lst;
-                 int                 i, num;
 
-                 lst = ListTransientsFor(ewin->client.win, &num);
-                 if (lst)
-                   {
-                      for (i = 0; i < num; i++)
-                         DesktopAddEwinToTop(lst[i]);
-                      Efree(lst);
-                   }
-              }
-            RestackEwin(ewin);
+       num = EwinListStackingRaise(ewin);
+       if (num == 0)           /* Quit if stacking is unchanged */
+          goto done;
+
+       if (ewin->has_transients)
+         {
+            lst = ListTransientsFor(ewin->client.win, &num);
+            for (i = 0; i < num; i++)
+               RaiseEwin(lst[i]);
+            if (lst)
+               Efree(lst);
          }
+
+       if (call_depth == 1)
+          RestackEwin(ewin);
      }
 
+ done:
    call_depth--;
    EDBUG_RETURN_;
 }
@@ -1944,34 +1949,38 @@
 LowerEwin(EWin * ewin)
 {
    static int          call_depth = 0;
+   EWin               *ewin2;
+   int                 num;
 
    EDBUG(3, "LowerEwin");
    if (call_depth > 256)
       EDBUG_RETURN_;
    call_depth++;
 
-#if 0
-   printf("LowerEwin %#lx %s\n", ewin->client.win, EwinGetTitle(ewin));
-#endif
+   if (EventDebug(EDBUG_TYPE_RAISELOWER))
+      printf("LowerEwin(%d) %#lx %s\n", call_depth, ewin->client.win,
+            EwinGetTitle(ewin));
+
    if ((ewin->win) && (!ewin->floating))
      {
-       if (ewin->has_transients)
-         {
-            EWin              **lst;
-            int                 i, num;
+       num = EwinListStackingLower(ewin);
+       if (num == 0)           /* Quit if stacking is unchanged */
+          goto done;
 
-            lst = ListTransientsFor(ewin->client.win, &num);
-            if (lst)
-              {
-                 for (i = 0; i < num; i++)
-                    DesktopAddEwinToBottom(lst[i]);
-                 Efree(lst);
-              }
+       if (ewin->client.transient_for)
+         {
+            ewin2 = FindItem(NULL, ewin->client.transient_for, LIST_FINDBY_ID,
+                             LIST_TYPE_EWIN);
+            if (ewin2 == NULL) /* Should never happen */
+               goto done;
+            LowerEwin(ewin2);
          }
-       DesktopAddEwinToBottom(ewin);
-       RestackEwin(ewin);
+
+       if (call_depth == 1)
+          RestackEwin(ewin);
      }
 
+ done:
    call_depth--;
    EDBUG_RETURN_;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -3 -r1.75 -r1.76
--- desktops.c  21 Mar 2004 01:39:40 -0000      1.75
+++ desktops.c  22 Mar 2004 16:42:31 -0000      1.76
@@ -1112,7 +1112,11 @@
    if ((ewin->iconified) && (ewin->parent != desks.desk[ewin->desktop].win))
      {
        ewin->parent = desks.desk[ewin->desktop].win;
+#if 0
        DesktopAddEwinToTop(ewin);
+#else
+       EwinListStackingRaise(ewin);
+#endif
        EReparentWindow(disp, ewin->win, desks.desk[ewin->desktop].win, ewin->x,
                        ewin->y);
        ICCCM_Configure(ewin);
@@ -1135,7 +1139,11 @@
    else if (ewin->parent != desks.desk[ewin->desktop].win)
      {
        ewin->parent = desks.desk[ewin->desktop].win;
+#if 0
        DesktopAddEwinToTop(ewin);
+#else
+       EwinListStackingRaise(ewin);
+#endif
        EReparentWindow(disp, ewin->win, desks.desk[ewin->desktop].win, ewin->x,
                        ewin->y);
        StackDesktops();
@@ -1701,7 +1709,6 @@
    ewin->floating = 0;
    pdesk = ewin->desktop;
    ewin->desktop = DESKTOPS_WRAP_NUM(desk);
-   DesktopAddEwinToTop(ewin);
    ConformEwinToDesktop(ewin);
    if (ewin->has_transients)
      {
@@ -1723,6 +1730,7 @@
    EDBUG_RETURN_;
 }
 
+#if 0
 void
 DesktopAddEwinToTop(EWin * ewin)
 {
@@ -1752,6 +1760,7 @@
 
    EDBUG_RETURN_;
 }
+#endif
 
 void
 MoveEwinToDesktopAt(EWin * ewin, int desk, int x, int y)
@@ -1765,7 +1774,6 @@
      {
        ForceUpdatePagersForDesktop(ewin->desktop);
        ewin->desktop = DESKTOPS_WRAP_NUM(desk);
-       DesktopAddEwinToTop(ewin);
      }
    dx = x - ewin->x;
    dy = y - ewin->y;




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to