[2/6] comctl32/toolbar: Avoid unnecessary invalidation on TB_HIDEBUTTON

Nikolay Sivov bunglehead at gmail.com
Sun Aug 2 17:54:42 CDT 2009


http://bugs.winehq.org/show_bug.cgi?id=17886

I've tested this with ControlSpy and it looks right for me,
sent it with original author name.

P.S. Can't trigger toolbar redrawing in tests (at point I want it to),
don't know why yet. That's why I didn't add a case for that.

Changelog:
    - Avoid unnecessary invalidation on TB_HIDEBUTTON

>From 00334ec27ff4e1166d10c5c2b17c03222a142d22 Mon Sep 17 00:00:00 2001
From: Aled Hughes <winehq at aledhughes.co.uk>
Date: Mon, 3 Aug 2009 01:52:51 +0400
Subject: Avoid unnecessary invalidation on TB_HIDEBUTTON

---
 dlls/comctl32/toolbar.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index 0d11b2b..d95dc7d 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -3633,6 +3633,7 @@ static LRESULT
 TOOLBAR_HideButton (TOOLBAR_INFO *infoPtr, INT Id, BOOL fHide)
 {
     TBUTTON_INFO *btnPtr;
+    BYTE oldState;
     INT nIndex;
 
     TRACE("\n");
@@ -3642,15 +3643,17 @@ TOOLBAR_HideButton (TOOLBAR_INFO *infoPtr, INT Id, BOOL fHide)
 	return FALSE;
 
     btnPtr = &infoPtr->buttons[nIndex];
+    oldState = btnPtr->fsState;
 
     if (fHide)
 	btnPtr->fsState |= TBSTATE_HIDDEN;
     else
 	btnPtr->fsState &= ~TBSTATE_HIDDEN;
 
-    TOOLBAR_LayoutToolbar (infoPtr);
-
-    InvalidateRect (infoPtr->hwndSelf, NULL, TRUE);
+    if (oldState != btnPtr->fsState) {
+        TOOLBAR_LayoutToolbar (infoPtr);
+        InvalidateRect (infoPtr->hwndSelf, NULL, TRUE);
+    }
 
     return TRUE;
 }
-- 
1.5.6.5







More information about the wine-patches mailing list