--- rxvt-unicode/src/command.C 2008/01/28 10:54:54 1.399 +++ rxvt-unicode/src/command.C 2008/02/01 14:15:10 1.403 @@ -1092,8 +1092,8 @@ void rxvt_term::cont_scroll_cb (ev::timer &w, int revents) { - if ((scrollbar_isUp () || scrollbar_isDn ()) - && scr_page (scrollbar_isUp () ? UP : DN, 1)) + if ((scrollBar.state == STATE_UP || scrollBar.state == STATE_DOWN) + && scr_page (scrollBar.state == STATE_UP ? UP : DN, 1)) { want_refresh = 1; refresh_check (); @@ -1555,7 +1555,7 @@ if (scrollBar.state && ev.xany.window == scrollBar.win) { - scrollBar.setIdle (); + scrollBar.state = STATE_IDLE; scrollbar_show (0); } } @@ -1653,7 +1653,7 @@ #endif } } - else if (scrollbar_isMotion () && ev.xany.window == scrollBar.win) + else if (scrollBar.state == STATE_MOTION && ev.xany.window == scrollBar.win) { while (XCheckTypedWindowEvent (dpy, scrollBar.win, MotionNotify, &ev)) @@ -1949,7 +1949,14 @@ */ if (scrollBar.state && ev.window == scrollBar.win) { - scrollBar.setIdle (); + page_dirn direction = NO_DIR; + + if (scrollBar.upButton (ev.y)) + direction = UP; /* up */ + else if (scrollBar.dnButton (ev.y)) + direction = DN; /* down */ + + scrollBar.state = STATE_IDLE; /* * Rxvt-style scrollbar: * move up if mouse is above slider @@ -1968,9 +1975,9 @@ * arrow buttons - send up/down * click on scrollbar - send pageup/down */ - if (scrollBar.upButton (ev.y)) + if (direction == UP) tt_printf ("\033[A"); - else if (scrollBar.dnButton (ev.y)) + else if (direction == DN) tt_printf ("\033[B"); else switch (ev.button) @@ -1990,25 +1997,18 @@ #endif /* NO_SCROLLBAR_REPORT */ { - char upordown = 0; - - if (scrollBar.upButton (ev.y)) - upordown = -1; /* up */ - else if (scrollBar.dnButton (ev.y)) - upordown = 1; /* down */ - - if (upordown) + if (direction != NO_DIR) { #ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING if (!cont_scroll_ev.is_active ()) cont_scroll_ev.start (SCROLLBAR_INITIAL_DELAY, SCROLLBAR_CONTINUOUS_DELAY); #endif - if (scr_page (upordown < 0 ? UP : DN, 1)) + if (scr_page (direction, 1)) { - if (upordown < 0) - scrollBar.setUp (); + if (direction == UP) + scrollBar.state = STATE_UP; else - scrollBar.setDn (); + scrollBar.state = STATE_DOWN; } } else @@ -2033,7 +2033,7 @@ || scrollbar_below_slider (ev.y)) scr_move_to (scrollbar_position (ev.y) - csrO, scrollbar_size ()); - scrollBar.setMotion (); + scrollBar.state = STATE_MOTION; break; case Button1: @@ -2057,7 +2057,7 @@ scr_page (DN, nrow / 4); # endif else - scrollBar.setMotion (); + scrollBar.state = STATE_MOTION; } else { @@ -2084,9 +2084,9 @@ if (!bypass_keystate) reportmode = !! (priv_modes & PrivMode_mouse_report); - if (scrollbar_isUpDn ()) + if (scrollBar.state == STATE_UP || scrollBar.state == STATE_DOWN) { - scrollBar.setIdle (); + scrollBar.state = STATE_IDLE; scrollbar_show (0); }