* dispnew.c (update_text_area): Avoid needless redraw of rightmost
glyph whose face is extended to the text area end.
+ * macterm.c (x_set_toolkit_scroll_bar_thumb): Don't set control
+ values if control is not visible or values are not changed.
+
2006-02-22 Stefan Monnier <monnier@iro.umontreal.ca>
* window.c (Fwindow_list): Check `window' before doing XWINDOW.
int portion, position, whole;
{
ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
- int value, viewsize, maximum, visible_p;
+ int value, viewsize, maximum;
if (whole == 0 || XINT (bar->track_height) == 0)
value = 0, viewsize = 1, maximum = 0;
BLOCK_INPUT;
- /* Temporarily hide the scroll bar to avoid multiple redraws. */
- visible_p = IsControlVisible (ch);
- SetControlVisibility (ch, false, false);
+ if (IsControlVisible (ch)
+ && (GetControlViewSize (ch) != viewsize
+ || GetControl32BitValue (ch) != value
+ || GetControl32BitMaximum (ch) != maximum))
+ {
+ /* Temporarily hide the scroll bar to avoid multiple redraws. */
+ SetControlVisibility (ch, false, false);
- SetControl32BitMinimum (ch, 0);
- SetControl32BitMaximum (ch, maximum);
- SetControl32BitValue (ch, value);
- SetControlViewSize (ch, viewsize);
+ SetControl32BitMaximum (ch, maximum);
+ SetControl32BitValue (ch, value);
+ SetControlViewSize (ch, viewsize);
- SetControlVisibility (ch, visible_p, true);
+ SetControlVisibility (ch, true, true);
+ }
UNBLOCK_INPUT;
}