Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h draw.c pager.c 


Log Message:
Don't use draw queue for pager updates.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.428
retrieving revision 1.429
diff -u -3 -r1.428 -r1.429
--- E.h 14 May 2005 16:46:01 -0000      1.428
+++ E.h 14 May 2005 19:03:30 -0000      1.429
@@ -1127,6 +1127,7 @@
 #define USE_DQ_TCLASS 0
 #define USE_DQ_SHAPE  0
 #define USE_DQ_DIALOG 0
+#define USE_DQ_PAGER  0
 
 typedef struct _drawqueue
 {
@@ -1145,9 +1146,11 @@
 #if USE_DQ_SHAPE
    char                shape_propagate;
 #endif
+#if USE_DQ_PAGER
    Pager              *pager;
    Pager              *redraw_pager;
    char                newbg;
+#endif
 #if USE_DQ_DIALOG
    Dialog             *d;
    DItem              *di;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/draw.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -3 -r1.68 -r1.69
--- draw.c      14 May 2005 16:46:02 -0000      1.68
+++ draw.c      14 May 2005 19:03:32 -0000      1.69
@@ -127,6 +127,7 @@
               }
          }
 #endif
+#if USE_DQ_PAGER
        if (dq->pager)
          {
             for (i = 0; i < num; i++)
@@ -176,6 +177,7 @@
                    }
               }
          }
+#endif
 
        if (already)
          {
@@ -247,6 +249,7 @@
                                     dq->image_type);
               }
 #endif
+#if USE_DQ_PAGER
             if (dq->pager)
               {
 /*            printf("P %x\n", dq->win); */
@@ -263,6 +266,7 @@
                       LIST_TYPE_PAGER))
                     dq->func(dq);
               }
+#endif
 #if USE_DQ_ICLASS
             if (dq->iclass)
                dq->iclass->ref_count--;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/pager.c,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -3 -r1.135 -r1.136
--- pager.c     8 May 2005 16:01:48 -0000       1.135
+++ pager.c     14 May 2005 19:03:33 -0000      1.136
@@ -41,6 +41,8 @@
    int                 update_phase;
    EWin               *ewin;
    Window              sel_win;
+   char                update;
+   char                redraw;
 };
 
 typedef struct
@@ -54,7 +56,9 @@
 #define PAGER_EVENT_MOTION     0
 #define PAGER_EVENT_MOUSE_IN   1
 
+#if USE_DQ_PAGER
 static void         PagerDrawQueueCallback(DrawQueue * dq);
+#endif
 static void         PagerEwinUpdateFromPager(Pager * p, EWin * ewin);
 static void         PagerHiwinHide(Pager * p);
 static void         PagerEventMainWin(XEvent * ev, void *prm);
@@ -304,6 +308,26 @@
 static void
 PagerRedraw(Pager * p, char newbg)
 {
+   static const char   pager_mode_map[5][4] = {
+      {0, 1, 2, 3},
+      {0, 1, 1, 0},
+      {1, 1, 1, 1},
+      {1, 1, 2, 2},
+      {0, 1, 2, 3},
+   };
+
+   p->redraw = pager_mode_map[(int)p->redraw][(int)newbg] + 1;
+}
+
+static void
+PagerForceUpdate(Pager * p)
+{
+   p->update = 1;
+}
+
+static void
+doPagerRedraw(Pager * p, char newbg)
+{
    int                 x, y, ax, ay, cx, cy;
    GC                  gc;
    EWin               *const *lst;
@@ -312,6 +336,7 @@
    if (!Conf.pagers.enable || Mode.mode == MODE_DESKSWITCH)
       return;
 
+#if USE_DQ_PAGER
    if (Mode.queue_up)
      {
        DrawQueue          *dq;
@@ -324,6 +349,7 @@
        AddItem(dq, "DRAW", dq->win, LIST_TYPE_DRAW);
        return;
      }
+#endif
 
    /* Desk may be gone */
    if (p->desktop >= DesksGetNumber())
@@ -476,7 +502,7 @@
 }
 
 static void
-PagerForceUpdate(Pager * p)
+doPagerForceUpdate(Pager * p)
 {
    int                 ww, hh, xx, yy, ax, ay, cx, cy;
    EWin               *const *lst;
@@ -485,6 +511,7 @@
    if (!Conf.pagers.enable || Mode.mode == MODE_DESKSWITCH)
       return;
 
+#if USE_DQ_PAGER
    if (Mode.queue_up)
      {
        DrawQueue          *dq;
@@ -496,6 +523,7 @@
        AddItem(dq, "DRAW", dq->win, LIST_TYPE_DRAW);
        return;
      }
+#endif
 
    /* Desk may be gone */
    if (p->desktop >= DesksGetNumber())
@@ -524,6 +552,7 @@
       PagerEwinUpdateFromPager(p, lst[i]);
 }
 
+#if USE_DQ_PAGER
 static void
 PagerDrawQueueCallback(DrawQueue * dq)
 {
@@ -532,6 +561,7 @@
    else if (dq->redraw_pager)
       PagerRedraw(dq->redraw_pager, dq->newbg);
 }
+#endif
 
 static void
 PagerEwinMoveResize(EWin * ewin, int resize __UNUSED__)
@@ -763,6 +793,34 @@
 }
 
 static void
+PagersCheckUpdate(void)
+{
+   Pager              *p, **pl;
+   int                 i, num;
+
+   if (!Conf.pagers.enable)
+      return;
+
+   pl = (Pager **) ListItemType(&num, LIST_TYPE_PAGER);
+   for (i = 0; i < num; i++)
+     {
+       p = pl[i];
+       if (p->redraw)
+         {
+            doPagerRedraw(p, p->redraw - 1);
+            p->redraw = 0;
+         }
+       if (p->update)
+         {
+            doPagerForceUpdate(p);
+            p->update = 0;
+         }
+     }
+   if (pl)
+      Efree(pl);
+}
+
+static void
 PagerEwinUpdateFromPager(Pager * p, EWin * ewin)
 {
    int                 x, y, w, h, ax, ay, cx, cy;
@@ -1668,7 +1726,7 @@
       XTranslateCoordinates(disp, win, p->win, px, py, &px, &py, &child);
    in_pager = (px >= 0 && py >= 0 && px < p->w && py < p->h);
    if (!in_pager)
-      return;                  // OK?
+      return;
 
    if ((int)ev->xbutton.button == Conf.pagers.menu_button)
      {
@@ -2278,6 +2336,7 @@
 {
    static int          pdesk = -1;     /* Last desk */
    int                 desk;
+   EWin               *ewin;
 
    switch (sig)
      {
@@ -2295,6 +2354,11 @@
        PagersShow(1);
        Mode.queue_up = DRAW_QUEUE_ENABLE;
        break;
+
+     case ESIGNAL_IDLE:
+       PagersCheckUpdate();
+       break;
+
      case ESIGNAL_AREA_CONFIGURED:
        PagersReArea();
        break;
@@ -2346,12 +2410,16 @@
        PagersReArea();
        break;
      case ESIGNAL_EWIN_UNMAP:
-       PagerEwinOutsideAreaUpdate((EWin *) prm);
+       ewin = prm;
+       PagerEwinOutsideAreaUpdate(ewin);
        break;
      case ESIGNAL_EWIN_CHANGE:
        if (Mode.mode != MODE_NONE)
           break;
-       PagerEwinOutsideAreaUpdate((EWin *) prm);
+       ewin = prm;
+       if (!EoIsShown(ewin))
+          break;
+       PagerEwinOutsideAreaUpdate(ewin);
        break;
      }
 }




-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to