Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: backgrounds.c edge.c ewins.c focus.c fx.c ipc.c magwin.c menus.c mod-misc.c mod-trans.c pager.c session.c snaps.c snaps.h timers.c timers.h tooltips.c util.h Log Message: Simplify timers. =================================================================== RCS file: /cvs/e/e16/e/src/backgrounds.c,v retrieving revision 1.110 retrieving revision 1.111 diff -u -3 -r1.110 -r1.111 --- backgrounds.c 10 May 2008 23:22:31 -0000 1.110 +++ backgrounds.c 24 May 2008 18:13:16 -0000 1.111 @@ -64,6 +64,7 @@ }; static Ecore_List *bg_list = NULL; +static Timer *bg_timer = NULL; static unsigned int bg_seq_no = 0; #define N_BG_ASSIGNED 32 @@ -1415,16 +1416,17 @@ } } -static void -BackgroundsTimeout(int val __UNUSED__, void *data __UNUSED__) +static int +BackgroundsTimeout(void *data __UNUSED__) { if (Conf.backgrounds.timeout <= 0) Conf.backgrounds.timeout = 1; BackgroundsAccounting(); - DoIn("BACKGROUND_ACCOUNTING_TIMEOUT", 1.0 * Conf.backgrounds.timeout, - BackgroundsTimeout, 0, NULL); + TimerSetInterval(bg_timer, 1.0 * Conf.backgrounds.timeout); + + return 1; } static void @@ -1446,8 +1448,7 @@ break; case ESIGNAL_START: - DoIn("BACKGROUND_ACCOUNTING_TIMEOUT", 30.0, BackgroundsTimeout, 0, - NULL); + TIMER_ADD(bg_timer, 30.0, BackgroundsTimeout, NULL); break; case ESIGNAL_EXIT: =================================================================== RCS file: /cvs/e/e16/e/src/edge.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -3 -r1.39 -r1.40 --- edge.c 24 Mar 2008 11:12:40 -0000 1.39 +++ edge.c 24 May 2008 18:13:16 -0000 1.40 @@ -30,29 +30,32 @@ #include "xwin.h" static EObj *w1 = NULL, *w2 = NULL, *w3 = NULL, *w4 = NULL; +static Timer *edge_timer = NULL; -static void -EdgeTimeout(int val, void *data __UNUSED__) +static int +EdgeTimeout(void *data) { + int val; int ax, ay, aw, ah, dx, dy, dax, day; EWin *ewin; if (MenusActive()) - return; + goto done; if (Conf.desks.edge_flip_mode == EDGE_FLIP_OFF) - return; + goto done; /* Quit if pointer has left screen */ if (!EQueryPointer(NULL, NULL, NULL, NULL, NULL)) - return; + goto done; /* Quit if in fullscreen window */ ewin = GetEwinPointerInClient(); if (ewin && ewin->state.fullscreen) - return; + goto done; DeskCurrentGetArea(&ax, &ay); DesksGetAreaSize(&aw, &ah); + val = PTR2INT(data); dx = 0; dy = 0; dax = 0; @@ -61,25 +64,25 @@ { case 0: if (ax == 0 && !Conf.desks.areas_wraparound) - return; + goto done; dx = WinGetW(VROOT) - 2; dax = -1; break; case 1: if (ax == (aw - 1) && !Conf.desks.areas_wraparound) - return; + goto done; dx = -(WinGetW(VROOT) - 2); dax = 1; break; case 2: if (ay == 0 && !Conf.desks.areas_wraparound) - return; + goto done; dy = WinGetH(VROOT) - 2; day = -1; break; case 3: if (ay == (ah - 1) && !Conf.desks.areas_wraparound) - return; + goto done; dy = -(WinGetH(VROOT) - 2); day = 1; break; @@ -98,6 +101,10 @@ DeskCurrentMoveAreaBy(dax, day); Mode.events.px = Mode.events.mx; Mode.events.py = Mode.events.my; + + done: + edge_timer = NULL; + return 0; } static void @@ -114,14 +121,13 @@ if (Conf.desks.edge_flip_mode == EDGE_FLIP_MOVE && Mode.mode != MODE_MOVE) return; - RemoveTimerEvent("EDGE_TIMEOUT"); + TIMER_DEL(edge_timer); if (dir >= 0) { if (Conf.desks.edge_flip_resistance <= 0) Conf.desks.edge_flip_resistance = 1; - DoIn("EDGE_TIMEOUT", - ((double)Conf.desks.edge_flip_resistance) / 100.0, EdgeTimeout, - dir, NULL); + TIMER_ADD(edge_timer, ((double)Conf.desks.edge_flip_resistance) / 100.0, + EdgeTimeout, INT2PTR(dir)); } lastdir = dir; } =================================================================== RCS file: /cvs/e/e16/e/src/ewins.c,v retrieving revision 1.227 retrieving revision 1.228 diff -u -3 -r1.227 -r1.228 --- ewins.c 10 May 2008 23:22:31 -0000 1.227 +++ ewins.c 24 May 2008 18:13:16 -0000 1.228 @@ -53,7 +53,7 @@ /* StructureNotifyMask | */ ResizeRedirectMask | \ PropertyChangeMask | ColormapChangeMask | VisibilityChangeMask) -static void EwinSlideIn(int val __UNUSED__, void *data); +static int EwinSlideIn(void *data); static void EwinChangesStart(EWin * ewin); static void EwinChangesProcess(EWin * ewin); @@ -886,6 +886,8 @@ } else if (doslide) { + Timer *slide_timer; + k = rand() % 4; if (k == 0) { @@ -915,7 +917,7 @@ EwinShow(ewin); ewin->req_x = x; ewin->req_y = y; - DoIn("Slide", 0.05, EwinSlideIn, 0, ewin); + TIMER_ADD(slide_timer, 0.05, EwinSlideIn, ewin); } else { @@ -1876,8 +1878,8 @@ /* * Slidein */ -static void -EwinSlideIn(int val __UNUSED__, void *data) +static int +EwinSlideIn(void *data) { EWin *ewin = (EWin *) data; @@ -1891,6 +1893,8 @@ done: Mode.place.doing_slide = 0; FocusEnable(1); + + return 0; } /* =================================================================== RCS file: /cvs/e/e16/e/src/focus.c,v retrieving revision 1.175 retrieving revision 1.176 diff -u -3 -r1.175 -r1.176 --- focus.c 10 May 2008 23:22:31 -0000 1.175 +++ focus.c 24 May 2008 18:13:17 -0000 1.176 @@ -42,6 +42,8 @@ static int focus_pending_why = 0; static EWin *focus_pending_ewin = NULL; static EWin *focus_pending_new = NULL; +static Timer *focus_timer_autoraise = NULL; +static Timer *focus_timer_reverse = NULL; void FocusEnable(int on) @@ -135,27 +137,32 @@ return ewin; } -static void -AutoraiseTimeout(int val, void *data __UNUSED__) +static int +AutoraiseTimeout(void *data) { - EWin *ewin; + EWin *ewin = (EWin *) data; if (Conf.focus.mode == MODE_FOCUS_CLICK) - return; + goto done; - ewin = EwinFindByClient(val); - if (ewin) + if (EwinFindByPtr(ewin)) /* May be gone */ EwinRaise(ewin); + + done: + focus_timer_autoraise = NULL; + return 0; } -static void -ReverseTimeout(int val, void *data __UNUSED__) +static int +ReverseTimeout(void *data) { - EWin *ewin; + EWin *ewin = (EWin *) data; - ewin = EwinFindByClient(val); - if (ewin) + if (EwinFindByPtr(ewin)) /* May be gone */ EwinListFocusRaise(ewin); + + focus_timer_reverse = NULL; + return 0; } static void @@ -386,11 +393,11 @@ if (Conf.autoraise.enable) { - RemoveTimerEvent("AUTORAISE_TIMEOUT"); + TIMER_DEL(focus_timer_autoraise); if (Conf.focus.mode != MODE_FOCUS_CLICK) - DoIn("AUTORAISE_TIMEOUT", 0.001 * Conf.autoraise.delay, - AutoraiseTimeout, EwinGetClientXwin(ewin), NULL); + TIMER_ADD(focus_timer_autoraise, 0.001 * Conf.autoraise.delay, + AutoraiseTimeout, ewin); } if (do_raise) @@ -401,12 +408,11 @@ if (do_warp) EwinWarpTo(ewin); - RemoveTimerEvent("REVERSE_FOCUS_TIMEOUT"); + TIMER_DEL(focus_timer_reverse); switch (why) { case FOCUS_PREV: - DoIn("REVERSE_FOCUS_TIMEOUT", 0.5, ReverseTimeout, - EwinGetClientXwin(ewin), NULL); + TIMER_ADD(focus_timer_reverse, 0.5, ReverseTimeout, ewin); break; case FOCUS_DESK_ENTER: if (Conf.focus.mode == MODE_FOCUS_CLICK) @@ -853,10 +859,11 @@ * Focus Module */ -static void -FocusInitTimeout(int val __UNUSED__, void *data __UNUSED__) +static int +FocusInitTimeout(void *data __UNUSED__) { FocusInit(); + return 0; } static void @@ -871,12 +878,14 @@ static void FocusSighan(int sig, void *prm __UNUSED__) { + Timer *focus_init_timer; + switch (sig) { case ESIGNAL_START: /* Delay focusing a bit to allow things to settle down */ IdlerAdd(_FocusIdler, NULL); - DoIn("FOCUS_INIT_TIMEOUT", 0.5, FocusInitTimeout, 0, NULL); + TIMER_ADD(focus_init_timer, 0.5, FocusInitTimeout, NULL); break; case ESIGNAL_EXIT: =================================================================== RCS file: /cvs/e/e16/e/src/fx.c,v retrieving revision 1.87 retrieving revision 1.88 diff -u -3 -r1.87 -r1.88 --- fx.c 10 May 2008 23:17:40 -0000 1.87 +++ fx.c 24 May 2008 18:13:17 -0000 1.88 @@ -59,9 +59,10 @@ static Pixmap fx_ripple_above = None; static Win fx_ripple_win = NULL; static int fx_ripple_count = 0; +static Timer *fx_ripple_timer = NULL; -static void -FX_ripple_timeout(int val __UNUSED__, void *data __UNUSED__) +static int +FX_ripple_timeout(void *data __UNUSED__) { static double incv = 0, inch = 0; static GC gc1 = 0, gc = 0; @@ -118,14 +119,15 @@ WinGetW(VROOT), 1, off, WinGetH(VROOT) - fx_ripple_waterh + y); } - DoIn("FX_RIPPLE_TIMEOUT", 0.066, FX_ripple_timeout, 0, NULL); + + return 1; } static void FX_Ripple_Init(const char *name __UNUSED__) { fx_ripple_count = 0; - DoIn("FX_RIPPLE_TIMEOUT", 0.066, FX_ripple_timeout, 0, NULL); + TIMER_ADD(fx_ripple_timer, 0.066, FX_ripple_timeout, NULL); } static void @@ -140,7 +142,7 @@ static void FX_Ripple_Quit(void) { - RemoveTimerEvent("FX_RIPPLE_TIMEOUT"); + TIMER_DEL(fx_ripple_timer); EClearArea(fx_ripple_win, 0, WinGetH(VROOT) - fx_ripple_waterh, WinGetW(VROOT), fx_ripple_waterh); } @@ -175,6 +177,7 @@ static Win fx_raindrops_win = NULL; static int fx_raindrops_number = 4; static PixImg *fx_raindrops_draw = NULL; +static Timer *fx_raindrops_timer = NULL; typedef struct { int x, y; @@ -184,8 +187,8 @@ static DropContext fx_raindrops[4]; -static void -FX_raindrops_timeout(int val __UNUSED__, void *data __UNUSED__) +static int +FX_raindrops_timeout(void *data __UNUSED__) { static GC gc1 = 0, gc = 0; int i, x, y, xx, yy; @@ -233,7 +236,7 @@ ECreatePixImg(WinGetXwin(fx_raindrops_win), fx_raindrop_size, fx_raindrop_size); if (!fx_raindrops_draw) - return; + return 0; for (i = 0; i < fx_raindrops_number; i++) { @@ -245,7 +248,7 @@ fx_raindrops[i].buf->xim, fx_raindrops[i].x, fx_raindrops[i].y, 0xffffffff); if (!fx_raindrops[i].buf) - return; + return 0; } } @@ -380,8 +383,7 @@ ESync(0); } - DoIn("FX_RAINDROPS_TIMEOUT", (0.066 /*/ (float)fx_raindrops_number */ ), - FX_raindrops_timeout, 0, NULL); + return 1; } static void @@ -396,7 +398,7 @@ fx_raindrops[i].x = rand() % (WinGetW(VROOT) - fx_raindrop_size); fx_raindrops[i].y = rand() % (WinGetH(VROOT) - fx_raindrop_size); } - DoIn("FX_RAINDROPS_TIMEOUT", 0.066, FX_raindrops_timeout, 0, NULL); + TIMER_ADD(fx_raindrops_timer, 0.066, FX_raindrops_timeout, NULL); } static void @@ -410,7 +412,7 @@ { int i; - RemoveTimerEvent("FX_RAINDROPS_TIMEOUT"); + TIMER_DEL(fx_raindrops_timer); for (i = 0; i < fx_raindrops_number; i++) { EClearArea(fx_raindrops_win, fx_raindrops[i].x, fx_raindrops[i].y, @@ -456,9 +458,10 @@ static Pixmap fx_wave_above = None; static Win fx_wave_win = NULL; static int fx_wave_count = 0; +static Timer *fx_wave_timer = NULL; -static void -FX_Wave_timeout(int val __UNUSED__, void *data __UNUSED__) +static int +FX_Wave_timeout(void *data __UNUSED__) { /* Variables */ static double incv = 0, inch = 0; @@ -561,15 +564,14 @@ } } - /* Make noise */ - DoIn("FX_WAVE_TIMEOUT", 0.066, FX_Wave_timeout, 0, NULL); + return 1; } static void FX_Waves_Init(const char *name __UNUSED__) { fx_wave_count = 0; - DoIn("FX_WAVE_TIMEOUT", 0.066, FX_Wave_timeout, 0, NULL); + TIMER_ADD(fx_wave_timer, 0.066, FX_Wave_timeout, NULL); } static void @@ -583,7 +585,7 @@ static void FX_Waves_Quit(void) { - RemoveTimerEvent("FX_WAVE_TIMEOUT"); + TIMER_DEL(fx_wave_timer); EClearArea(fx_wave_win, 0, WinGetH(VROOT) - FX_WAVE_WATERH, WinGetW(VROOT), FX_WAVE_WATERH); } @@ -612,9 +614,10 @@ static Win fx_imagespinner_win = NULL; static int fx_imagespinner_count = 3; static char *fx_imagespinner_params = NULL; +static Timer *fx_imagespinner_timer = NULL; -static void -FX_imagespinner_timeout(int val __UNUSED__, void *data __UNUSED__) +static int +FX_imagespinner_timeout(void *data __UNUSED__) { char *string = NULL; @@ -654,14 +657,14 @@ Efree(string); } - DoIn("FX_IMAGESPINNER_TIMEOUT", 0.066, FX_imagespinner_timeout, 0, NULL); + return 1; } static void FX_ImageSpinner_Init(const char *name) { fx_imagespinner_count = 3; - DoIn("FX_IMAGESPINNER_TIMEOUT", 0.066, FX_imagespinner_timeout, 0, NULL); + TIMER_ADD(fx_imagespinner_timer, 0.066, FX_imagespinner_timeout, NULL); fx_imagespinner_params = Estrdup(name); } @@ -674,7 +677,7 @@ static void FX_ImageSpinner_Quit(void) { - RemoveTimerEvent("FX_IMAGESPINNER_TIMEOUT"); + TIMER_DEL(fx_imagespinner_timer); EClearArea(fx_imagespinner_win, 0, 0, WinGetW(VROOT), WinGetH(VROOT)); Efree(fx_imagespinner_params); fx_imagespinner_params = NULL; =================================================================== RCS file: /cvs/e/e16/e/src/ipc.c,v retrieving revision 1.312 retrieving revision 1.313 diff -u -3 -r1.312 -r1.313 --- ipc.c 30 Mar 2008 12:13:16 -0000 1.312 +++ ipc.c 24 May 2008 18:13:17 -0000 1.313 @@ -402,15 +402,18 @@ } #endif -static void -OpacityTimeout(int val, void *data __UNUSED__) +static int +OpacityTimeout(void *data) { - EWin *ewin; + EWin *ewin = (EWin *) data; + + if (!EwinFindByPtr(ewin)) /* May be gone */ + return 0; + + if (ewin->state.active) + EoChangeOpacity(ewin, ewin->props.focused_opacity); - ewin = EwinFindByClient(val); - if (ewin) - if (ewin->state.active) - EoChangeOpacity(ewin, ewin->props.focused_opacity); + return 0; } static void @@ -686,10 +689,11 @@ EwinOpSetOpacity(ewin, OPSRC_USER, a); if (ewin->state.active) { + Timer *op_timer; + EoChangeOpacity(ewin, OpacityFromPercent(a)); if (ewin->props.focused_opacity) - DoIn("OPACITY_TIMEOUT", 0.001 * 700, OpacityTimeout, - EwinGetClientXwin(ewin), NULL); + TIMER_ADD(op_timer, 0.001 * 700, OpacityTimeout, ewin); } break; @@ -1713,28 +1717,29 @@ return ok; } -static void -doEFuncDeferred(int val __UNUSED__, void *data) +static int +doEFuncDeferred(void *data) { void **prm = (void **)data; EWin *ewin; ewin = (EWin *) prm[0]; if (ewin && !EwinFindByPtr(ewin)) - return; + return 0; EFunc(ewin, (const char *)prm[1]); Efree(prm[1]); Efree(data); + + return 0; } void EFuncDefer(EWin * ewin, const char *cmd) { - static int seqn = 0; - char s[32]; void **prm; + Timer *defer_timer; prm = EMALLOC(void *, 2); @@ -1743,8 +1748,7 @@ prm[0] = ewin; prm[1] = Estrdup(cmd); - Esnprintf(s, sizeof(s), "EFunc-%d", seqn++); - DoIn(s, 0.0, doEFuncDeferred, 0, prm); + TIMER_ADD(defer_timer, 0.0, doEFuncDeferred, prm); } static int =================================================================== RCS file: /cvs/e/e16/e/src/magwin.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- magwin.c 29 Mar 2008 17:18:58 -0000 1.11 +++ magwin.c 24 May 2008 18:13:17 -0000 1.12 @@ -46,6 +46,9 @@ typedef struct { EWin *ewin; const char *title; +#if USE_TIMER + Timer *timer; +#endif int cx, cy; /* Center */ int scale; /* Zoom level */ int sx, sy; /* Scene x,y */ @@ -200,17 +203,18 @@ } #if USE_TIMER -static void +static int _MagwinTimeout(int val __UNUSED__, void *data) { MagWindow *mw = (MagWindow *) data; int again; again = _MagwinUpdate(mw); - if (!again) - return; + if (again) + return 1; - DoIn("magwin", .050, _MagwinTimeout, 0, data); + mw->timer = NULL; + return 0; } #elif USE_ANIMATOR static int @@ -353,7 +357,7 @@ case MapNotify: MagwinKeyPress(mw, XK_g); #if USE_TIMER - _MagwinTimeout(1, mw); + TIMER_ADD(mw->timer, .050, _MagwinTimeout, 0, mw); #elif USE_ANIMATOR AnimatorAdd(_MagwinAnimator, mw); #endif @@ -443,7 +447,7 @@ MagwinDestroy(MagWindow * mw) { #if USE_TIMER - RemoveTimerEvent("magwin"); + TIMER_DEL(mw->timer); #endif EventCallbackUnregister(EwinGetClientWin(mw->ewin), 0, MagwinEvent, mw); EDestroyWindow(EwinGetClientWin(mw->ewin)); =================================================================== RCS file: /cvs/e/e16/e/src/menus.c,v retrieving revision 1.300 retrieving revision 1.301 diff -u -3 -r1.300 -r1.301 --- menus.c 24 Mar 2008 11:12:40 -0000 1.300 +++ menus.c 24 May 2008 18:13:17 -0000 1.301 @@ -46,7 +46,7 @@ #define DEBUG_MENU_EVENTS 0 -#define MENU_UNLOAD_CHECK_IMTERVAL 300 /* Seconds */ +#define MENU_UNLOAD_CHECK_INTERVAL 300 /* Seconds */ static struct { Menu *first; @@ -135,6 +135,7 @@ static Ecore_List *menu_list = NULL; static Ecore_List *menu_style_list = NULL; +static Timer *menu_timer_submenu = NULL; static MenuItem * MenuFindItemByChild(Menu * m, Menu * mc) @@ -1154,7 +1155,7 @@ static void MenusHide(void) { - RemoveTimerEvent("SUBMENU_SHOW"); + TIMER_DEL(menu_timer_submenu); MenuHide(Mode_menus.first); Mode_menus.first = NULL; @@ -1549,8 +1550,8 @@ MenuSelectItem(m, mi, 0); } -static void -SubmenuShowTimeout(int val __UNUSED__, void *dat) +static int +SubmenuShowTimeout(void *dat) { int mx, my, my2, xo, yo, mw; Menu *m; @@ -1561,35 +1562,33 @@ int bl2, br2, bt2, bb2; data = (struct _mdata *)dat; - if (!data) - return; - if (!data->m) - return; + if (!data || !data->m) + goto done; m = data->m; if (!ecore_list_goto(menu_list, m)) - return; + goto done; ewin = m->ewin; if (!ewin || !EwinFindByPtr(ewin)) - return; + goto done; if (!EoIsShown(ewin)) - return; + goto done; mi = data->mi; if (!mi) - return; + goto done; if (mi->child != m->child) MenuHide(m->child); m->child = mi->child; if (!mi->child) - return; + goto done; mi->child->parent = m; MenuShow(mi->child, 1); ewin2 = mi->child->ewin; if (!ewin2 || !EwinFindByPtr(ewin2)) - return; + goto done; EGetGeometry(mi->win, NULL, &mx, &my, &mw, NULL, NULL, NULL); my2 = 0; @@ -1664,6 +1663,10 @@ if (Conf.menus.animate) EwinUnShade(ewin2); + + done: + menu_timer_submenu = NULL; + return 0; } static void @@ -1686,13 +1689,13 @@ if (mi && !mi->child && mi_prev && !mi_prev->child) return; - RemoveTimerEvent("SUBMENU_SHOW"); + TIMER_DEL(menu_timer_submenu); if ((mi && mi->child && !mi->child->shown) || (mi && mi->child != m->child)) { mdata.m = m; mdata.mi = mi; - DoIn("SUBMENU_SHOW", 0.2, SubmenuShowTimeout, 0, &mdata); + TIMER_ADD(menu_timer_submenu, 0.2, SubmenuShowTimeout, &mdata); } } @@ -1945,8 +1948,8 @@ return err; } -static void -MenusTimeout(int val __UNUSED__, void *data __UNUSED__) +static int +MenusTimeout(void *data __UNUSED__) { Menu *m; time_t ts; @@ -1956,7 +1959,7 @@ ECORE_LIST_FOR_EACH(menu_list, m) { if (m->shown || !m->filled || - ts - m->last_access < MENU_UNLOAD_CHECK_IMTERVAL) + ts - m->last_access < MENU_UNLOAD_CHECK_INTERVAL) continue; m->last_change = 0; @@ -1968,7 +1971,7 @@ MenuDestroy(m); } - DoIn("MenusCheck", 1. * MENU_UNLOAD_CHECK_IMTERVAL, MenusTimeout, 0, NULL); + return 1; } /* @@ -1978,6 +1981,8 @@ static void MenusSighan(int sig, void *prm __UNUSED__) { + Timer *menu_unload_timer; + switch (sig) { case ESIGNAL_CONFIGURE: @@ -1985,8 +1990,8 @@ break; case ESIGNAL_START: - DoIn("MenusCheck", 1. * MENU_UNLOAD_CHECK_IMTERVAL, MenusTimeout, 0, - NULL); + TIMER_ADD(menu_unload_timer, 1. * MENU_UNLOAD_CHECK_INTERVAL, + MenusTimeout, NULL); break; case ESIGNAL_AREA_SWITCH_START: =================================================================== RCS file: /cvs/e/e16/e/src/mod-misc.c,v retrieving revision 1.66 retrieving revision 1.67 diff -u -3 -r1.66 -r1.67 --- mod-misc.c 11 Mar 2008 22:03:57 -0000 1.66 +++ mod-misc.c 24 May 2008 18:13:17 -0000 1.67 @@ -291,7 +291,7 @@ if (EDebug(EDBUG_TYPE_SESSION)) Eprintf("autosave\n"); - Real_SaveSnapInfo(0, NULL); + Real_SaveSnapInfo(NULL); /* Save the configuration parameters */ ConfigurationSave(); =================================================================== RCS file: /cvs/e/e16/e/src/mod-trans.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- mod-trans.c 18 May 2007 08:25:05 -0000 1.25 +++ mod-trans.c 24 May 2008 18:13:17 -0000 1.26 @@ -1,6 +1,6 @@ /* * Copyright (C) 2004-2007 Jaron Omega - * Copyright (C) 2004-2007 Kim Woelders + * Copyright (C) 2004-2008 Kim Woelders * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -41,16 +41,22 @@ static int tmp_st_tooltip; static int tmp_st_hilight; -static void -TransparencyChangeTimeout(int val, void *data __UNUSED__) +static Timer *st_timer = NULL; + +static int +TransparencyChangeTimeout(void *data) { - TransparencySet(val); + TransparencySet(PTR2INT(data)); + + st_timer = NULL; + return 0; } static void TransparencyChange(int val) { - DoIn("PT-Change", .01, TransparencyChangeTimeout, val, NULL); + TIMER_DEL(st_timer); + TIMER_ADD(st_timer, .01, TransparencyChangeTimeout, INT2PTR(val)); } static void =================================================================== RCS file: /cvs/e/e16/e/src/pager.c,v retrieving revision 1.267 retrieving revision 1.268 diff -u -3 -r1.267 -r1.268 --- pager.c 10 May 2008 23:15:32 -0000 1.267 +++ pager.c 24 May 2008 18:13:17 -0000 1.268 @@ -93,9 +93,9 @@ int screen_w, screen_h; int update_phase; Win sel_win; + Timer *scan_timer; /* State flags */ - char scan_pending; char do_newbg; char do_update; int x1, y1, x2, y2; @@ -105,7 +105,7 @@ } Pager; static void PagerScanCancel(Pager * p); -static void PagerScanTimeout(int val, void *data); +static int PagerScanTimeout(void *data); static void PagerCheckUpdate(Pager * p, void *prm); static void PagerUpdateEwinsFromPager(Pager * p); static void PagerHiwinHide(void); @@ -169,31 +169,21 @@ static void PagerScanTrig(Pager * p) { - char s[128]; - - if (p->scan_pending || Conf_pagers.scanspeed <= 0) + if (p->scan_timer || Conf_pagers.scanspeed <= 0) return; - Esnprintf(s, sizeof(s), "pg-scan.%x", (unsigned)WinGetXwin(p->win)); - DoIn(s, 1 / ((double)Conf_pagers.scanspeed), PagerScanTimeout, 0, p); - p->scan_pending = 1; + TIMER_ADD(p->scan_timer, 1 / ((double)Conf_pagers.scanspeed), + PagerScanTimeout, p); } static void PagerScanCancel(Pager * p) { - char s[128]; - - if (!p->scan_pending) - return; - p->scan_pending = 0; - - Esnprintf(s, sizeof(s), "pg-scan.%x", (unsigned)WinGetXwin(p->win)); - RemoveTimerEvent(s); + TIMER_DEL(p->scan_timer); } -static void -PagerScanTimeout(int val __UNUSED__, void *data) +static int +PagerScanTimeout(void *data) { Pager *p; EWin *ewin; @@ -201,25 +191,24 @@ static int offsets[8] = { 0, 4, 2, 6, 1, 5, 3, 7 }; int pager_mode = PagersGetMode(); - if (pager_mode != PAGER_MODE_SNAP) - return; - p = (Pager *) data; - p->scan_pending = 0; + + if (pager_mode != PAGER_MODE_SNAP) + goto nomore; ewin = p->ewin; if (!ewin || !EoIsShown(ewin)) - return; + goto nomore; if (p->dsk != DesksGetCurrent()) - return; + goto nomore; if (ewin->state.visibility == VisibilityFullyObscured) - return; + goto nomore; - if (Conf_pagers.scanspeed > 0) - PagerScanTrig(p); + if (Conf_pagers.scanspeed <= 0) + goto nomore; if (Mode.mode != MODE_NONE) - return; + goto nomore; DeskCurrentGetArea(&cx, &cy); ww = p->dw; @@ -228,7 +217,7 @@ yy = cy * hh; phase = p->update_phase; if (ww <= 0 || hh <= 0) - return; + goto nomore; #if 0 /* Due to a bug in imlib2 <= 1.2.0 we have to scan left->right in stead @@ -255,6 +244,13 @@ PagerUpdateEwinsFromPager(p); p->update_phase = 0; } + + TimerSetInterval(p->scan_timer, 1 / ((double)Conf_pagers.scanspeed)); + return 1; + + nomore: + p->scan_timer = NULL; + return 0; } #if 0 /* FIXME - Remove? */ @@ -821,10 +817,12 @@ p->do_newbg = p->do_update = 0; } -static void -_PagersUpdateTimeout(int val __UNUSED__, void *data __UNUSED__) +static int +_PagersUpdateTimeout(void *data __UNUSED__) { Mode_pagers.timer_pending = 0; + + return 0; } static void @@ -832,6 +830,7 @@ { static double tlast = 0.; double t, dt; + Timer *pager_update_timer; if (!Mode_pagers.update_pending || !Conf_pagers.enable) return; @@ -844,7 +843,7 @@ { /* The purpose of this timer is to trigger the idler */ if (!Mode_pagers.timer_pending) - DoIn("pg-upd", dt, _PagersUpdateTimeout, 0, NULL); + TIMER_ADD(pager_update_timer, dt, _PagersUpdateTimeout, NULL); Mode_pagers.timer_pending = 1; return; } @@ -1284,7 +1283,6 @@ static void _PagerSetSnap(Pager * p, void *prm __UNUSED__) { - p->scan_pending = 0; PagerScanTrig(p); } @@ -1747,19 +1745,23 @@ PagerReconfigure(p, 1); } -static void -_PagersReconfigureTimeout(int val __UNUSED__, void *data __UNUSED__) +static int +_PagersReconfigureTimeout(void *data __UNUSED__) { PagersForeach(NULL, _PagerReconfigure, NULL); + + return 0; } static void PagersReconfigure(void) { + Timer *pg_timer_cfg; + if (!Conf_pagers.enable) return; - DoIn("pg-cfg", .5, _PagersReconfigureTimeout, 0, NULL); + TIMER_ADD(pg_timer_cfg, .5, _PagersReconfigureTimeout, NULL); } /* =================================================================== RCS file: /cvs/e/e16/e/src/session.c,v retrieving revision 1.155 retrieving revision 1.156 diff -u -3 -r1.155 -r1.156 --- session.c 10 May 2008 23:29:01 -0000 1.155 +++ session.c 24 May 2008 18:13:17 -0000 1.156 @@ -473,7 +473,7 @@ if (EDebug(EDBUG_TYPE_SESSION)) Eprintf("SessionSave(%d)\n", shutdown); - Real_SaveSnapInfo(0, NULL); + Real_SaveSnapInfo(NULL); #if USE_SM if (shutdown && sm_conn) =================================================================== RCS file: /cvs/e/e16/e/src/snaps.c,v retrieving revision 1.139 retrieving revision 1.140 diff -u -3 -r1.139 -r1.140 --- snaps.c 10 May 2008 23:22:31 -0000 1.139 +++ snaps.c 24 May 2008 18:13:17 -0000 1.140 @@ -71,6 +71,7 @@ }; static Ecore_List *ss_list = NULL; +static Timer *ss_timer = NULL; static Snapshot * SnapshotCreate(const char *name) @@ -1077,16 +1078,16 @@ }; /* ... combine writes, only save after a timeout */ - void SaveSnapInfo(void) { - DoIn("SAVESNAP_TIMEOUT", 5.0, Real_SaveSnapInfo, 0, NULL); + TIMER_DEL(ss_timer); + TIMER_ADD(ss_timer, 5.0, Real_SaveSnapInfo, NULL); } /* save out all snapped info to disk */ -void -Real_SaveSnapInfo(int dumval __UNUSED__, void *dumdat __UNUSED__) +int +Real_SaveSnapInfo(void *data __UNUSED__) { Snapshot *sn; int j; @@ -1094,12 +1095,12 @@ FILE *f; if (!Mode.wm.save_ok) - return; + goto done; Etmp(s); f = fopen(s, "w"); if (!f) - return; + goto done; ECORE_LIST_FOR_EACH(ss_list, sn) { @@ -1167,6 +1168,10 @@ Alert(_("Error saving snaps file\n")); SaveGroups(); + + done: + TIMER_DEL(ss_timer); + return 0; } void =================================================================== RCS file: /cvs/e/e16/e/src/snaps.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- snaps.h 18 May 2007 08:25:06 -0000 1.9 +++ snaps.h 24 May 2008 18:13:17 -0000 1.10 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Kim Woelders + * Copyright (C) 2005-2008 Kim Woelders * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -51,7 +51,7 @@ #define SNAP_USE_ALL (~1) -void Real_SaveSnapInfo(int dumval, void *dumdat); +int Real_SaveSnapInfo(void *data); void LoadSnapInfo(void); void SaveSnapInfo(void); void SpawnSnappedCmds(void); =================================================================== RCS file: /cvs/e/e16/e/src/timers.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -3 -r1.37 -r1.38 --- timers.c 10 May 2008 23:15:32 -0000 1.37 +++ timers.c 24 May 2008 18:13:17 -0000 1.38 @@ -26,14 +26,15 @@ #include "timers.h" #include <sys/time.h> -typedef struct _qentry Qentry; -struct _qentry { - char *name; +#define DEBUG_TIMERS 0 + +struct _timer { + double in_time; double at_time; - void (*func) (int val, void *data); - struct _qentry *next; - int runtime_val; - void *runtime_data; + struct _timer *next; + int (*func) (void *data); + void *data; + char again; }; double @@ -45,98 +46,155 @@ return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000); } -static Qentry *q_first = NULL; +static Timer *q_first = NULL; -void -DoIn(const char *name, double in_time, void (*func) (int val, void *data), - int runtime_val, void *runtime_data) +static void +_TimerSet(Timer * timer) { - Qentry *qe, *ptr, *pptr; - - RemoveTimerEvent(name); - qe = EMALLOC(Qentry, 1); - if (!qe) - return; - - if (in_time < 0.) /* No negative in-times */ - in_time = 0.; + Timer *ptr, *pptr; +#if DEBUG_TIMERS if (EDebug(EDBUG_TYPE_TIMERS)) - Eprintf("DoIn %8.3f: %s\n", in_time, name); - - qe->name = Estrdup(name); - qe->func = func; - qe->at_time = GetTime() + in_time; - qe->runtime_val = runtime_val; - qe->runtime_data = runtime_data; + Eprintf("_TimerSet %p: func=%p data=%p\n", timer, timer->func, + timer->data); +#endif /* if there is no queue it becomes the queue */ if (!q_first) { - q_first = qe; - qe->next = NULL; + q_first = timer; + timer->next = NULL; } else { pptr = NULL; for (ptr = q_first; ptr; pptr = ptr, ptr = ptr->next) { - if (ptr->at_time > qe->at_time) + if (ptr->at_time > timer->at_time) break; } if (pptr) - pptr->next = qe; + pptr->next = timer; else - q_first = qe; - qe->next = ptr; + q_first = timer; + timer->next = ptr; } } +static void +_TimerDel(Timer * timer) +{ +#if DEBUG_TIMERS + if (EDebug(EDBUG_TYPE_TIMERS)) + Eprintf("_TimerDel %p: func=%p data=%p\n", timer, timer->func, + timer->data); +#endif + Efree(timer); +} + +Timer * +TimerAdd(double in_time, int (*func) (void *data), void *data) +{ + Timer *timer; + + timer = EMALLOC(Timer, 1); + if (!timer) + return NULL; + + if (in_time < 0.) /* No negative in-times */ + in_time = 0.; + + if (EDebug(EDBUG_TYPE_TIMERS)) + Eprintf("TimerAdd %p: func=%p data=%p: %8.3f\n", timer, + timer->func, timer->data, in_time); + + timer->func = func; + timer->in_time = in_time; + timer->at_time = GetTime() + in_time; + timer->data = data; + + _TimerSet(timer); /* Add to timer queue */ + + return timer; +} + double TimersRun(double tt) { - Qentry *qe; + Timer *timer, *q_old, *q_run; double t; - qe = q_first; + timer = q_first; if (!q_first) return 0.; /* No timers pending */ t = tt; if (t <= 0.) - t = qe->at_time; + t = timer->at_time; - for (; qe; qe = q_first) + q_run = NULL; + q_old = q_first; + for (; timer; timer = q_first) { - if (qe->at_time > t + 200e-6) /* Within 200 us is close enough */ + if (timer->at_time > t + 200e-6) /* Within 200 us is close enough */ break; if (EDebug(EDBUG_TYPE_TIMERS)) - Eprintf("TimersRun - run %8.3lf: %s\n", qe->at_time - t, qe->name); + Eprintf("TimersRun - run %p: func=%p data=%p: %8.3lf\n", timer, + timer->func, timer->data, timer->at_time - t); - /* remove it */ - q_first = qe->next; + q_first = timer->next; - /* run this callback */ - qe->func(qe->runtime_val, qe->runtime_data); + /* Run this callback */ + timer->again = timer->func(timer->data); + q_run = timer; + } - /* free the timer */ - Efree(qe->name); - Efree(qe); + if (q_old != q_first) + { + /* At least one timer has run */ + q_run->next = NULL; /* Terminate expired timer list */ + + /* Re-schedule/remove timers that have run */ + for (timer = q_old; timer; timer = q_old) + { + q_old = timer->next; + if (timer->again) + { + timer->at_time += timer->in_time; + _TimerSet(timer); /* Add to timer queue */ + } + else + { + _TimerDel(timer); + } + } } if (tt <= 0.) /* Avoid some redundant debug output */ return tt; + timer = q_first; + if (EDebug(EDBUG_TYPE_TIMERS) > 1) { - Qentry *qp; + Timer *qp; - for (qp = qe; qp; qp = qp->next) - Eprintf("TimersRun - pend %8.3lf: %s\n", qp->at_time - t, qp->name); + for (qp = timer; qp; qp = qp->next) + Eprintf("TimersRun - pend %p: func=%p data=%p: %8.3lf\n", timer, + timer->func, timer->data, timer->at_time - t); } - t = (qe) ? qe->at_time - t : 0.; + if (timer) + { + t = timer->at_time - t; + if (t <= 0.) + t = 1e-6; + } + else + { + t = 0.; + } if (EDebug(EDBUG_TYPE_TIMERS)) Eprintf("TimersRun - next in %8.3lf\n", t); @@ -145,15 +203,15 @@ } int -RemoveTimerEvent(const char *name) +TimerDel(Timer * timer) { - Qentry *qe, *ptr, *pptr; + Timer *qe, *ptr, *pptr; pptr = NULL; for (ptr = q_first; ptr; pptr = ptr, ptr = ptr->next) { qe = ptr; - if (strcmp(qe->name, name)) + if (qe != timer) continue; /* Match - remove it from the queue */ @@ -161,9 +219,10 @@ pptr->next = qe->next; else q_first = qe->next; + /* free it */ - Efree(qe->name); - Efree(qe); + _TimerDel(timer); + /* done */ return 1; } @@ -171,6 +230,12 @@ return 0; } +void +TimerSetInterval(Timer * timer, double dt) +{ + timer->in_time = dt; +} + /* * Idlers */ @@ -232,6 +297,7 @@ */ #define DEBUG_ANIMATORS 0 static Ecore_List *animator_list = NULL; +static Timer *animator_timer = NULL; typedef int (AnimatorFunc) (void *data); @@ -254,13 +320,21 @@ AnimatorDel(an); } -static void -AnimatorsRun(int val __UNUSED__, void *data __UNUSED__) +static int +AnimatorsRun(void *data __UNUSED__) { ecore_list_for_each(animator_list, _AnimatorRun, NULL); if (ecore_list_count(animator_list)) - DoIn("Anim", 1e-3 * Conf.animation.step, AnimatorsRun, 0, NULL); + { + TimerSetInterval(animator_timer, 1e-3 * Conf.animation.step); + return 1; + } + else + { + animator_timer = NULL; + return 0; + } } Animator * @@ -288,7 +362,8 @@ if (Conf.animation.step <= 0) Conf.animation.step = 1; /* Animator list was empty - Add to timer qeueue */ - DoIn("Anim", 1e-3 * Conf.animation.step, AnimatorsRun, 0, NULL); + TIMER_ADD(animator_timer, 1e-3 * Conf.animation.step, + AnimatorsRun, NULL); } return an; @@ -306,7 +381,7 @@ if (ecore_list_count(animator_list) == 0) { - /* Animator list was empty - Add to timer qeueue */ - RemoveTimerEvent("Anim"); + /* Animator list is empty - Remove from timer qeueue */ + TIMER_DEL(animator_timer); } } =================================================================== RCS file: /cvs/e/e16/e/src/timers.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- timers.h 10 May 2008 23:15:32 -0000 1.5 +++ timers.h 24 May 2008 18:13:17 -0000 1.6 @@ -1,6 +1,6 @@ /* * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors - * Copyright (C) 2004-2007 Kim Woelders + * Copyright (C) 2004-2008 Kim Woelders * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -27,11 +27,17 @@ /* timers.c */ double GetTime(void); -void DoIn(const char *name, double in_time, - void (*func) (int val, void *data), - int runtime_val, void *runtime_data); -int RemoveTimerEvent(const char *name); +typedef struct _timer Timer; +Timer *TimerAdd(double in_time, + int (*func) (void *data), void *data); +int TimerDel(Timer * timer); +void TimerSetInterval(Timer * timer, double dt); double TimersRun(double t); + +#define TIMER_ADD(timer, in, func, prm) \ + timer = TimerAdd(in, func, prm) +#define TIMER_DEL(timer) \ + if (timer) { TimerDel(timer); timer = NULL; } typedef struct _idler Idler; Idler *IdlerAdd(void (*func) (void *data), void *data); =================================================================== RCS file: /cvs/e/e16/e/src/tooltips.c,v retrieving revision 1.126 retrieving revision 1.127 diff -u -3 -r1.126 -r1.127 --- tooltips.c 10 May 2008 23:29:01 -0000 1.126 +++ tooltips.c 24 May 2008 18:13:17 -0000 1.127 @@ -36,6 +36,7 @@ #include "xwin.h" static Ecore_List *tt_list = NULL; +static Timer *tt_timer = NULL; static struct { char enable; @@ -714,8 +715,8 @@ static ToolTip *ttip = NULL; -static void -ToolTipTimeout(int val __UNUSED__, void *data __UNUSED__) +static int +ToolTipTimeout(void *data __UNUSED__) { int x, y; unsigned int mask; @@ -725,33 +726,37 @@ if (!ttip) ttip = TooltipFind("DEFAULT"); if (!ttip) - return; + goto done; /* In the case of multiple screens, check to make sure * the root window is still where the mouse is... */ if (!EQueryPointer(NULL, &x, &y, NULL, &mask)) - return; + goto done; /* In case this is a virtual root */ if (x < 0 || y < 0 || x >= WinGetW(VROOT) || y >= WinGetH(VROOT)) - return; + goto done; /* dont pop up tooltip is mouse button down */ if (mask & (Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask)) - return; + goto done; if (!Mode_tooltips.ac_func) - return; + goto done; ac = Mode_tooltips.ac_func(Mode_tooltips.ac_data); if (!ac) - return; + goto done; tts = ActionclassGetTooltipString(ac); if (!tts) - return; + goto done; TooltipShow(ttip, _(tts), ac, x, y); + + done: + tt_timer = NULL; + return 0; } /* @@ -769,7 +774,7 @@ TooltipHide(ttip); - RemoveTimerEvent("TOOLTIP_TIMEOUT"); + TIMER_DEL(tt_timer); if (Conf_tooltips.showroottooltip) { @@ -795,8 +800,7 @@ if (type && !Conf_tooltips.showroottooltip) return; - DoIn("TOOLTIP_TIMEOUT", 0.001 * Conf_tooltips.delay, ToolTipTimeout, 0, - NULL); + TIMER_ADD(tt_timer, 0.001 * Conf_tooltips.delay, ToolTipTimeout, NULL); } /* =================================================================== RCS file: /cvs/e/e16/e/src/util.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- util.h 8 Mar 2008 19:23:54 -0000 1.16 +++ util.h 24 May 2008 18:13:17 -0000 1.17 @@ -27,6 +27,9 @@ #include "config.h" #include <stdarg.h> +#define INT2PTR(i) ((void*)(long)(i)) +#define PTR2INT(p) ((int)(long)(p)) + /* Inspired by Xfuncproto.h */ #if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 303) # define __EXPORT__ __attribute__((visibility("default"))) ------------------------------------------------------------------------- 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