diff --git a/src/ChangeLog b/src/ChangeLog index ea7a5e7d70b..fe8b13409ef 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -7,6 +7,9 @@ * 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 * window.c (Fwindow_list): Check `window' before doing XWINDOW. diff --git a/src/macterm.c b/src/macterm.c index 5fd416be6b8..3bd7d3b2e24 100644 --- a/src/macterm.c +++ b/src/macterm.c @@ -4529,7 +4529,7 @@ x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole) 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; @@ -4542,16 +4542,20 @@ x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole) 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; }