]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix scroll bar movement right before overscroll begins on Haiku
authorPo Lu <luangruo@yahoo.com>
Mon, 14 Mar 2022 00:45:00 +0000 (00:45 +0000)
committerPo Lu <luangruo@yahoo.com>
Mon, 14 Mar 2022 00:45:00 +0000 (00:45 +0000)
* src/haikuterm.c (haiku_set_scroll_bar_thumb): Make sure value
and size are within bounds even if portion adjustment is off.

src/haikuterm.c

index 6f8d2eaac592292500d4c39594e622113929dafe..798286958996a37b0c3884730f9a4543dc750cce 100644 (file)
@@ -455,35 +455,30 @@ haiku_set_scroll_bar_thumb (struct scroll_bar *bar, int portion,
       /* When the thumb is at the bottom, position == whole.  So we
          need to increase `whole' to make space for the thumb.  */
       whole += portion;
-
-      if (whole <= 0)
-       top = 0, shown = 1;
-      else
-       {
-         top = (double) position / whole;
-         shown = (double) portion / whole;
-       }
-
-      /* Slider size.  Must be in the range [1 .. MAX - MIN] where MAX
-        is the scroll bar's maximum and MIN is the scroll bar's minimum
-        value.  */
-      size = clip_to_bounds (1, shown * BE_SB_MAX, BE_SB_MAX);
-
-      /* Position.  Must be in the range [MIN .. MAX - SLIDER_SIZE].  */
-      value = top * BE_SB_MAX;
-      value = min (value, BE_SB_MAX - size);
-
-      if (!bar->dragging)
-       bar->page_size = size;
     }
   else
-    {
-      bar->page_size = 0;
+    bar->page_size = 0;
 
-      size = (((double) portion / whole) * BE_SB_MAX);
-      value = (((double) position / whole) * BE_SB_MAX);
+  if (whole <= 0)
+    top = 0, shown = 1;
+  else
+    {
+      top = (double) position / whole;
+      shown = (double) portion / whole;
     }
 
+  /* Slider size.  Must be in the range [1 .. MAX - MIN] where MAX
+     is the scroll bar's maximum and MIN is the scroll bar's minimum
+     value.  */
+  size = clip_to_bounds (1, shown * BE_SB_MAX, BE_SB_MAX);
+
+  /* Position.  Must be in the range [MIN .. MAX - SLIDER_SIZE].  */
+  value = top * BE_SB_MAX;
+  value = min (value, BE_SB_MAX - size);
+
+  if (!bar->dragging && scroll_bar_adjust_thumb_portion_p)
+    bar->page_size = size;
+
   BView_scroll_bar_update (scroll_bar, lrint (size),
                           BE_SB_MAX, ceil (value),
                           (scroll_bar_adjust_thumb_portion_p