]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix wxMSW rendering artifacts with modal dialogs.
authorVáclav Slavík <vslavik@fastmail.fm>
Thu, 16 Sep 2010 09:05:48 +0000 (09:05 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Thu, 16 Sep 2010 09:05:48 +0000 (09:05 +0000)
When a modal dialog showed another modal dialog, parts of the parent
window weren't refreshed correctly. This demonstrated itself as
rendering artifacts when moving the child dialog to another position:
parts of the dialog were shown as disabled, parts as enabled.

Fixed by explicitly refreshing the window.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65556 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/toplevel.h
src/msw/toplevel.cpp

index fb242e68f79fec070131745d5c7407167ecc17c2..52905cc32a5e831555331c51165578546f51bc5c 100644 (file)
@@ -141,6 +141,8 @@ protected:
     virtual void DoFreeze();
     virtual void DoThaw();
 
+    virtual void DoEnable(bool enable);
+
     // helper of SetIcons(): calls gets the icon with the size specified by the
     // given system metrics (SM_C{X|Y}[SM]ICON) from the bundle and sets it
     // using WM_SETICON with the specified wParam (ICOM_SMALL or ICON_BIG);
index ba45599a81a7112459d0add9482e1c97415c5055..87508df811e6f6aa4f0d3d6939b6f0223e5d2b9d 100644 (file)
@@ -1279,6 +1279,17 @@ bool wxTopLevelWindowMSW::CanSetTransparent()
     return (os_type == wxOS_WINDOWS_NT && ver_major >= 5);
 }
 
+void wxTopLevelWindowMSW::DoEnable(bool enable)
+{
+    wxTopLevelWindowBase::DoEnable(enable);
+
+    // Enabling or disabling a window may change its appearance. Unfortunately,
+    // in at least some situation, toplevel windows don't repaint themselves,
+    // so we have to issue explicit refresh to avoid rendering artifacts.
+    //
+    // TODO: find out just what exactly is wrong here
+    Refresh();
+}
 
 void wxTopLevelWindowMSW::DoFreeze()
 {