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