Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        pager.c 


Log Message:
Pager update tweaks.

===================================================================
RCS file: /cvs/e/e16/e/src/pager.c,v
retrieving revision 1.257
retrieving revision 1.258
diff -u -3 -r1.257 -r1.258
--- pager.c     27 Jan 2008 18:38:53 -0000      1.257
+++ pager.c     30 Jan 2008 23:34:04 -0000      1.258
@@ -54,6 +54,10 @@
 #define PAGER_MODE_SNAP   1
 #define PAGER_MODE_LIVE   2
 
+#define PAGER_UPD_EWIN_GEOM     0
+#define PAGER_UPD_EWIN_GONE     1
+#define PAGER_UPD_EWIN_DAMAGE   2
+
 #define EwinGetVX(ew) (ew->vx)
 #define EwinGetVY(ew) (ew->vy)
 #define EwinGetVX2(ew) (ew->vx + EoGetW(ew))
@@ -485,7 +489,7 @@
 }
 
 static void
-PagerUpdate(Pager * p, int x1, int y1, int x2, int y2)
+PagerUpdate(Pager * p, int why, int x1, int y1, int x2, int y2)
 {
    if (!Conf_pagers.enable)
       return;
@@ -500,7 +504,7 @@
       p->y2 = y2;
 
    p->do_update = 1;
-   Mode_pagers.update_pending = 1;
+   Mode_pagers.update_pending |= 1 << why;
 }
 
 static void
@@ -772,6 +776,7 @@
 
 typedef struct
 {
+   int                 why;
    int                 x1, y1, x2, y2;
 } pager_update_data;
 
@@ -780,17 +785,18 @@
 {
    pager_update_data  *pud = (pager_update_data *) prm;
 
-   PagerUpdate(p, pud->x1, pud->y1, pud->x2, pud->y2);
+   PagerUpdate(p, pud->why, pud->x1, pud->y1, pud->x2, pud->y2);
 }
 
 static void
-PagersUpdate(Desk * dsk, int x1, int y1, int x2, int y2)
+PagersUpdate(Desk * dsk, int why, int x1, int y1, int x2, int y2)
 {
    pager_update_data   pud;
 
    if (ecore_list_count(pager_list) <= 0)
       return;
 
+   pud.why = why;
    pud.x1 = x1;
    pud.y1 = y1;
    pud.x2 = x2;
@@ -823,21 +829,25 @@
 PagersCheckUpdate(void)
 {
    static double       tlast = 0.;
-   double              t;
+   double              t, dt;
 
    if (!Mode_pagers.update_pending || !Conf_pagers.enable)
       return;
 
-   t = GetTime();
-   if (t - tlast < .05)
+   if (Mode_pagers.update_pending == (1 << PAGER_UPD_EWIN_DAMAGE))
      {
-       /* The purpose of this timer is to trigger the idler */
-       if (!Mode_pagers.timer_pending)
-          DoIn("pg-upd", .1, _PagersUpdateTimeout, 0, NULL);
-       Mode_pagers.timer_pending = 1;
-       return;
+       t = GetTime();
+       dt = (Conf_pagers.scanspeed > 0) ? 1. / Conf_pagers.scanspeed : .1;
+       if (t - tlast < dt)
+         {
+            /* The purpose of this timer is to trigger the idler */
+            if (!Mode_pagers.timer_pending)
+               DoIn("pg-upd", dt, _PagersUpdateTimeout, 0, NULL);
+            Mode_pagers.timer_pending = 1;
+            return;
+         }
+       tlast = t;
      }
-   tlast = t;
 
    PagersForeach(NULL, PagerCheckUpdate, NULL);
 
@@ -925,17 +935,17 @@
 
    switch (why)
      {
-     case 0:                   /* Change */
+     case PAGER_UPD_EWIN_GEOM:
        if (!EoIsShown(ewin) || ewin->state.animated)
           return;
        break;
 
-     case 1:                   /* Gone */
+     case PAGER_UPD_EWIN_GONE:
        if (ewin == HiwinGetEwin(hiwin, 0))
           PagerHiwinHide();
        break;
 
-     case 2:                   /* Damage */
+     case PAGER_UPD_EWIN_DAMAGE:
        if (ewin->type == EWIN_TYPE_PAGER)
           return;
        if (PagersGetMode() != PAGER_MODE_LIVE)
@@ -944,7 +954,7 @@
      }
 
    dsk = (EoIsFloating(ewin)) ? DesksGetCurrent() : EoGetDesk(ewin);
-   PagersUpdate(dsk, EwinGetVX(ewin), EwinGetVY(ewin),
+   PagersUpdate(dsk, why, EwinGetVX(ewin), EwinGetVY(ewin),
                EwinGetVX2(ewin), EwinGetVY2(ewin));
 }
 
@@ -2018,7 +2028,8 @@
        PagerHiwinHide();
        break;
      case ESIGNAL_AREA_SWITCH_DONE:
-       PagersUpdate(DesksGetCurrent(), 0, 0, 99999, 99999);
+       PagersUpdate(DesksGetCurrent(), PAGER_UPD_EWIN_GEOM,
+                    0, 0, 99999, 99999);
        UpdatePagerSel();
        break;
 
@@ -2045,13 +2056,13 @@
        break;
 
      case ESIGNAL_EWIN_UNMAP:
-       PagersUpdateEwin((EWin *) prm, 1);
+       PagersUpdateEwin((EWin *) prm, PAGER_UPD_EWIN_GONE);
        break;
      case ESIGNAL_EWIN_CHANGE:
-       PagersUpdateEwin((EWin *) prm, 0);
+       PagersUpdateEwin((EWin *) prm, PAGER_UPD_EWIN_GEOM);
        break;
      case ESIGNAL_EWIN_DAMAGE:
-       PagersUpdateEwin((EWin *) prm, 2);
+       PagersUpdateEwin((EWin *) prm, PAGER_UPD_EWIN_DAMAGE);
        break;
      }
 }



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to