Alexandre Julliard : winex11: Don't send minimize/ maximize sys commands to windows that are not supposed to get them.

Alexandre Julliard julliard at winehq.org
Mon May 24 11:30:51 CDT 2010


Module: wine
Branch: master
Commit: ab111025c03e7e2a93bb61a6b3607e4bf8f83561
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ab111025c03e7e2a93bb61a6b3607e4bf8f83561

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon May 24 16:54:59 2010 +0200

winex11: Don't send minimize/maximize sys commands to windows that are not supposed to get them.

---

 dlls/winex11.drv/event.c |   24 +++++++++++++++++++-----
 1 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 7d84b63..da45fe2 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -941,6 +941,8 @@ static int get_window_wm_state( Display *display, struct x11drv_win_data *data )
 static void handle_wm_state_notify( struct x11drv_win_data *data, XPropertyEvent *event,
                                     BOOL update_window )
 {
+    DWORD style;
+
     switch(event->state)
     {
     case PropertyDelete:
@@ -966,25 +968,37 @@ static void handle_wm_state_notify( struct x11drv_win_data *data, XPropertyEvent
 
     if (!update_window || !data->managed || !data->mapped) return;
 
+    style = GetWindowLongW( data->hwnd, GWL_STYLE );
+
     if (data->iconic && data->wm_state == NormalState)  /* restore window */
     {
         data->iconic = FALSE;
         if (is_net_wm_state_maximized( event->display, data ))
         {
-            TRACE( "restoring to max %p/%lx\n", data->hwnd, data->whole_window );
-            SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 );
+            if ((style & WS_MAXIMIZEBOX) && !(style & WS_DISABLED))
+            {
+                TRACE( "restoring to max %p/%lx\n", data->hwnd, data->whole_window );
+                SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 );
+            }
+            else TRACE( "not restoring to max win %p/%lx style %08x\n",
+                        data->hwnd, data->whole_window, style );
         }
-        else
+        else if (style & (WS_MINIMIZE | WS_MAXIMIZE))
         {
             TRACE( "restoring win %p/%lx\n", data->hwnd, data->whole_window );
             SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_RESTORE, 0 );
         }
+        else TRACE( "not restoring win %p/%lx style %08x\n", data->hwnd, data->whole_window, style );
     }
     else if (!data->iconic && data->wm_state == IconicState)
     {
-        TRACE( "minimizing win %p/%lx\n", data->hwnd, data->whole_window );
         data->iconic = TRUE;
-        SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0 );
+        if ((style & WS_MINIMIZEBOX) && !(style & WS_DISABLED))
+        {
+            TRACE( "minimizing win %p/%lx\n", data->hwnd, data->whole_window );
+            SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0 );
+        }
+        else TRACE( "not minimizing win %p/%lx style %08x\n", data->hwnd, data->whole_window, style );
     }
 }
 




More information about the wine-cvs mailing list