Index: lib/slider.c =================================================================== RCS file: /cvsroot/xforms/xforms/lib/slider.c,v retrieving revision 1.7 diff -u -p -r1.7 slider.c --- lib/slider.c 9 Sep 2003 00:28:25 -0000 1.7 +++ lib/slider.c 5 May 2004 18:18:43 -0000 @@ -296,9 +296,14 @@ get_newvalue(FL_OBJECT * ob, FL_Coord mx return (sp->min + newval * (sp->max - sp->min)); } -static int timdel; +static int timeout_id; static int mpos; /* < 0 below knob, 0 on knob, > 0 above knob */ +static void timeoutCB(int val, void * data) +{ + timeout_id = -1; +} + /* Handle a mouse position change */ static int handle_mouse(FL_OBJECT * ob, FL_Coord mx, FL_Coord my, int key) @@ -309,15 +314,18 @@ handle_mouse(FL_OBJECT * ob, FL_Coord mx /* mouse on trough */ if (mpos && (sp->rdelta + sp->ldelta) > 0.0f) { - if (timdel++ == 0 || (timdel > 11 && (timdel & 1) == 0)) + if (timeout_id == -1) { + timeout_id = fl_add_timeout(100, timeoutCB, 0); if (key == FL_LEFT_MOUSE) newval = sp->val + mpos * sp->ldelta; else newval = sp->val + mpos * sp->rdelta; } else + { return 0; + } } else newval = get_newvalue(ob, mx, my); @@ -395,7 +403,8 @@ handle_it(FL_OBJECT * ob, int event, FL_ } break; case FL_PUSH: - timdel = mpos = 0; + timeout_id = -1; + mpos = 0; sp->start_val = sp->val; sp->offx = sp->offy = 0; lmx = lmy = -1; @@ -439,6 +448,11 @@ handle_it(FL_OBJECT * ob, int event, FL_ return 1; break; case FL_RELEASE: + + if (timeout_id != -1) { + fl_remove_timeout(timeout_id); + timeout_id = -1; + } if (is_focus(ob->type)) { fl_redraw_object(ob);