Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        desktops.c desktops.h eobj.c eobj.h ewins.c ipc.c stacking.c 


Log Message:
Speed up stacking.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.c,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -3 -r1.178 -r1.179
--- desktops.c  4 Sep 2005 12:43:13 -0000       1.178
+++ desktops.c  11 Sep 2005 17:20:32 -0000      1.179
@@ -553,11 +553,13 @@
 }
 
 void
-DeskSetDirtyStack(Desk * dsk)
+DeskSetDirtyStack(Desk * dsk, EObj * eo)
 {
-   dsk->dirty_stack++;
+   dsk->stack.dirty++;
+   dsk->stack.latest = eo;
    if (EventDebug(EDBUG_TYPE_STACKING))
-      Eprintf("DeskSetDirtyStack %d (%d)\n", dsk->num, dsk->dirty_stack);
+      Eprintf("DeskSetDirtyStack %d (%d): %s\n", dsk->num, dsk->stack.dirty,
+             EobjGetName(eo));
 }
 
 void
@@ -904,9 +906,9 @@
        dsk = _DeskGet(i);
        if (i && !dsk->viewable)
           continue;
-       if (!dsk->dirty_stack)
+       if (!dsk->stack.dirty)
           continue;
-       StackDesktop(dsk);
+       DeskRestack(dsk);
      }
 }
 
@@ -1222,20 +1224,71 @@
 }
 #endif
 
+static void
+DeskRestackSimple(Desk * dsk)
+{
+   EObj               *const *lst, *eo;
+   int                 i, num;
+   XWindowChanges      xwc;
+   unsigned int        value_mask;
+
+   eo = dsk->stack.latest;
+   eo->stacked = 1;
+
+   if (EventDebug(EDBUG_TYPE_STACKING))
+      Eprintf("DeskRestackSimple %#lx %s\n", EobjGetWin(eo), EobjGetName(eo));
+
+   lst = EobjListStackGetForDesk(&num, dsk);
+   if (num < 2)
+      return;
+
+   for (i = 0; i < num; i++)
+      if (lst[i] == eo)
+        break;
+   if (i >= num)
+      return;
+
+   if (i < num - 1)
+     {
+       xwc.stack_mode = Above;
+       xwc.sibling = EobjGetWin(lst[i + 1]);
+     }
+   else
+     {
+       xwc.stack_mode = Below;
+       xwc.sibling = EobjGetWin(lst[i - 1]);
+     }
+   value_mask = CWSibling | CWStackMode;
+   if (EventDebug(EDBUG_TYPE_STACKING))
+      Eprintf("DeskRestackSimple %#10lx %s %#10lx\n", EobjGetWin(eo),
+             (xwc.stack_mode == Above) ? "Above" : "Below", xwc.sibling);
+   XConfigureWindow(disp, EobjGetWin(eo), value_mask, &xwc);
+
+#if 1                          /* FIXME - Should not be here */
+   HintsSetClientStacking();
+#endif
+}
+
 #define _APPEND_TO_WIN_LIST(win) \
   { \
      wl = Erealloc(wl, ++tot * sizeof(Window)); \
      wl[tot - 1] = win; \
   }
 void
-StackDesktop(Desk * dsk)
+DeskRestack(Desk * dsk)
 {
    Window             *wl;
    int                 i, num, tot;
    EObj               *const *lst, *eo;
 
-   /* Build the window stack, top to bottom */
+   /* Special case if only one window needs restacking */
+   if (dsk->stack.dirty == 1)
+     {
+       DeskRestackSimple(dsk);
+       goto done;
+     }
 
+   /* Build the window stack, top to bottom */
    tot = 0;
    wl = NULL;
    lst = EobjListStackGetForDesk(&num, dsk);
@@ -1250,7 +1303,7 @@
 
    if (EventDebug(EDBUG_TYPE_STACKING))
      {
-       Eprintf("StackDesktop %d (%d):\n", dsk->num, dsk->dirty_stack);
+       Eprintf("DeskRestack %d (%d):\n", dsk->num, dsk->stack.dirty);
        for (i = 0; i < tot; i++)
           Eprintf(" win=%#10lx parent=%#10lx\n", wl[i],
                   EWindowGetParent(wl[i]));
@@ -1262,7 +1315,9 @@
    if (wl)
       Efree(wl);
 
-   dsk->dirty_stack = 0;
+ done:
+   dsk->stack.dirty = 0;
+   dsk->stack.latest = NULL;
 }
 
 void
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/desktops.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- desktops.h  4 Sep 2005 12:43:13 -0000       1.2
+++ desktops.h  11 Sep 2005 17:20:32 -0000      1.3
@@ -33,12 +33,16 @@
    EObj                o;
    unsigned int        num;
    char                viewable;
-   char                dirty_stack;
    Background         *bg;
    struct _button     *tag;
    int                 current_area_x;
    int                 current_area_y;
    long                event_mask;
+   struct
+   {
+      int                 dirty;
+      EObj               *latest;
+   } stack;
 };
 
 /* desktops.c */
@@ -48,7 +52,7 @@
 void                DeskGetArea(const Desk * dsk, int *ax, int *ay);
 void                DeskSetArea(Desk * dsk, int ax, int ay);
 int                 DeskIsViewable(const Desk * dsk);
-void                DeskSetDirtyStack(Desk * dsk);
+void                DeskSetDirtyStack(Desk * dsk, EObj * eo);
 
 void                DeskRefresh(Desk * dsk);
 void                DeskAssignBg(unsigned int desk, Background * bg);
@@ -58,9 +62,10 @@
 void                DeskSwitchDone(void);
 void                DeskGoto(Desk * dsk);
 void                DeskGotoNum(unsigned int desk);
-void                StackDesktop(Desk * dsk);
 void                DeskGotoByEwin(EWin * ewin);
 
+void                DeskRestack(Desk * dsk);
+
 unsigned int        DesksGetNumber(void);
 Desk               *DesksGetCurrent(void);
 unsigned int        DesksGetCurrentNum(void);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/eobj.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- eobj.c      8 Sep 2005 20:28:44 -0000       1.46
+++ eobj.c      11 Sep 2005 17:20:32 -0000      1.47
@@ -34,7 +34,7 @@
       return;
 
    if (eo->stacked > 0)
-      DeskSetDirtyStack(dsk);
+      DeskSetDirtyStack(dsk, eo);
    eo->desk = dsk;
 }
 
@@ -292,8 +292,8 @@
    if (eo->stacked <= 0 || raise > 1)
      {
        if (eo->stacked < 0)
-          DeskSetDirtyStack(eo->desk);
-       StackDesktop(eo->desk);
+          DeskSetDirtyStack(eo->desk, eo);
+       DeskRestack(eo->desk);
      }
 
    EMapWindow(eo->win);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/eobj.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- eobj.h      4 Sep 2005 21:17:32 -0000       1.8
+++ eobj.h      11 Sep 2005 17:20:32 -0000      1.9
@@ -60,6 +60,7 @@
 
 #define EobjGetWin(eo)          ((eo)->win)
 #define EobjGetDesk(eo)         ((eo)->desk)
+#define EobjGetName(eo)         ((eo)->name)
 #define EobjGetX(eo)            ((eo)->x)
 #define EobjGetY(eo)            ((eo)->y)
 #define EobjGetW(eo)            ((eo)->w)
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ewins.c,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -3 -r1.105 -r1.106
--- ewins.c     11 Sep 2005 09:50:46 -0000      1.105
+++ ewins.c     11 Sep 2005 17:20:32 -0000      1.106
@@ -1214,50 +1214,6 @@
    EReparentWindow(_EwinGetClientWin(ewin), parent, 0, 0);
 }
 
-/*
- * Place particular EWin at appropriate location in the window stack
- */
-static void
-RestackEwin(EWin * ewin)
-{
-   EWin               *const *lst;
-   int                 i, num;
-   XWindowChanges      xwc;
-   unsigned int        value_mask;
-
-   if (EventDebug(EDBUG_TYPE_STACKING))
-      Eprintf("RestackEwin %#lx %s\n", _EwinGetClientXwin(ewin),
-             EwinGetName(ewin));
-
-   lst = EwinListGetForDesk(&num, EoGetDesk(ewin));
-   if (num < 2)
-      goto done;
-
-   for (i = 0; i < num; i++)
-      if (lst[i] == ewin)
-        break;
-   if (i < num - 1)
-     {
-       xwc.stack_mode = Above;
-       xwc.sibling = EoGetWin(lst[i + 1]);
-     }
-   else
-     {
-       xwc.stack_mode = Below;
-       xwc.sibling = EoGetWin(lst[i - 1]);
-     }
-   value_mask = CWSibling | CWStackMode;
-   if (EventDebug(EDBUG_TYPE_STACKING))
-      Eprintf("RestackEwin %#10lx %s %#10lx\n", EoGetWin(ewin),
-             (xwc.stack_mode == Above) ? "Above" : "Below", xwc.sibling);
-   XConfigureWindow(disp, EoGetWin(ewin), value_mask, &xwc);
-   HintsSetClientStacking();
-   ModulesSignal(ESIGNAL_EWIN_CHANGE, ewin);
-
- done:
-   ;
-}
-
 void
 RaiseEwin(EWin * ewin)
 {
@@ -1265,9 +1221,6 @@
    EWin              **lst;
    int                 i, num;
 
-   if (EoGetWin(ewin) == None)
-      return;
-
    if (call_depth > 256)
       return;
    call_depth++;
@@ -1288,12 +1241,7 @@
       Efree(lst);
 
    if (call_depth == 1)
-     {
-       if (num > 0)
-          StackDesktop(EoGetDesk(ewin));       /* Do the full stacking */
-       else
-          RestackEwin(ewin);   /* Restack this one only */
-     }
+      ModulesSignal(ESIGNAL_EWIN_CHANGE, ewin);
 
  done:
    call_depth--;
@@ -1306,9 +1254,6 @@
    EWin              **lst;
    int                 i, num;
 
-   if (EoGetWin(ewin) == None)
-      return;
-
    if (call_depth > 256)
       return;
    call_depth++;
@@ -1329,12 +1274,7 @@
       Efree(lst);
 
    if (call_depth == 1)
-     {
-       if (num > 0)
-          StackDesktop(EoGetDesk(ewin));       /* Do the full stacking */
-       else
-          RestackEwin(ewin);   /* Restack this one only */
-     }
+      ModulesSignal(ESIGNAL_EWIN_CHANGE, ewin);
 
  done:
    call_depth--;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/ipc.c,v
retrieving revision 1.233
retrieving revision 1.234
diff -u -3 -r1.233 -r1.234
--- ipc.c       11 Sep 2005 10:39:16 -0000      1.233
+++ ipc.c       11 Sep 2005 17:20:32 -0000      1.234
@@ -1224,11 +1224,11 @@
 
    lst = EobjListStackGet(&num);
 
-   IpcPrintf("Num   window  T V  D S F   L     pos       size    C R Name\n");
+   IpcPrintf("Num    window T V  D S F   L     pos       size    C R Name\n");
    for (i = 0; i < num; i++)
      {
        eo = lst[i];
-       IpcPrintf(" %2d %#lx %d %d %2d %d %d %3d %5d,%5d %4dx%4d %d %d %s\n",
+       IpcPrintf(" %2d %#9lx %d %d %2d %d %d %3d %5d,%5d %4dx%4d %d %d %s\n",
                  i, eo->win, eo->type, eo->shown, eo->desk->num, eo->sticky,
                  eo->floating, eo->ilayer, eo->x, eo->y, eo->w, eo->h,
 #if USE_COMPOSITE
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/stacking.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -3 -r1.25 -r1.26
--- stacking.c  4 Sep 2005 07:27:20 -0000       1.25
+++ stacking.c  11 Sep 2005 17:20:32 -0000      1.26
@@ -110,7 +110,7 @@
             EobjListLower(ewl, eo);
          }
        if (eo->stacked == 0)
-          DeskSetDirtyStack(eo->desk);
+          DeskSetDirtyStack(eo->desk, eo);
      }
    else
      {
@@ -183,14 +183,14 @@
        memmove(ewl->list + i, ewl->list + i + 1, n * sizeof(EObj *));
        ewl->list[j] = eo;
        if (ewl->layered && eo->stacked > 0)
-          DeskSetDirtyStack(eo->desk);
+          DeskSetDirtyStack(eo->desk, eo);
      }
    else if (n < 0)
      {
        memmove(ewl->list + j + 1, ewl->list + j, -n * sizeof(EObj *));
        ewl->list[j] = eo;
        if (ewl->layered && eo->stacked > 0)
-          DeskSetDirtyStack(eo->desk);
+          DeskSetDirtyStack(eo->desk, eo);
      }
 
    EobjListShow("EobjListLower", ewl);
@@ -224,14 +224,14 @@
        memmove(ewl->list + i, ewl->list + i + 1, n * sizeof(EObj *));
        ewl->list[j] = eo;
        if (ewl->layered && eo->stacked > 0)
-          DeskSetDirtyStack(eo->desk);
+          DeskSetDirtyStack(eo->desk, eo);
      }
    else if (n < 0)
      {
        memmove(ewl->list + j + 1, ewl->list + j, -n * sizeof(EObj *));
        ewl->list[j] = eo;
        if (ewl->layered && eo->stacked > 0)
-          DeskSetDirtyStack(eo->desk);
+          DeskSetDirtyStack(eo->desk, eo);
      }
 
    EobjListShow("EobjListRaise", ewl);




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to