@@ -187,6 +187,7 @@ drag_scroll(Window *w, OSWindow *frame) {
187187 Screen * screen = w -> render_data .screen ;
188188 if (screen -> linebuf == screen -> main_linebuf ) {
189189 screen_history_scroll (screen , SCROLL_LINE , upwards );
190+ pixel_scroll (screen , 0 );
190191 update_drag (false, w , false, 0 );
191192 frame -> last_mouse_activity_at = monotonic ();
192193 if (mouse_cursor_shape != ARROW ) {
@@ -620,11 +621,27 @@ scroll_event(double UNUSED xoffset, double yoffset, int flags) {
620621 if (s == 0 && yoffset != 0 ) s = yoffset > 0 ? 1 : -1 ;
621622 }
622623 bool upwards = s > 0 ;
624+ int pixels = global_state .callback_os_window -> pending_scroll_pixels ;
625+ //printf("asdf %f\n", pixels);
623626 if (screen -> linebuf == screen -> main_linebuf ) {
624627 screen_history_scroll (screen , abs (s ), upwards );
625- printf ("asdf %f\n" , global_state .callback_os_window -> pending_scroll_pixels );
626- pixel_scroll (screen , global_state .callback_os_window -> pending_scroll_pixels );
628+ if (screen -> scrolled_by != 0 ) {
629+ if (screen -> scrolled_by != screen -> historybuf -> count ) {
630+ pixel_scroll (screen , pixels );
631+ } else {
632+ if (pixels < 0 ) pixel_scroll (screen , pixels );
633+ else pixel_scroll (screen , 0 );
634+ }
635+ } else {
636+ if (screen -> scrolled_by != screen -> historybuf -> count ) {
637+ if (pixels > 0 ) pixel_scroll (screen , pixels );
638+ else pixel_scroll (screen , 0 );
639+ } else {
640+ pixel_scroll (screen , 0 );
641+ }
642+ }
627643 } else {
644+ pixel_scroll (screen , 0 );
628645 if (screen -> modes .mouse_tracking_mode ) {
629646 int sz = encode_mouse_event (w , upwards ? GLFW_MOUSE_BUTTON_4 : GLFW_MOUSE_BUTTON_5 , PRESS , 0 );
630647 if (sz > 0 ) {
0 commit comments