Commit ab111025 authored by Alexandre Julliard's avatar Alexandre Julliard

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

parent 2cf9cdd3
...@@ -941,6 +941,8 @@ static int get_window_wm_state( Display *display, struct x11drv_win_data *data ) ...@@ -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, static void handle_wm_state_notify( struct x11drv_win_data *data, XPropertyEvent *event,
BOOL update_window ) BOOL update_window )
{ {
DWORD style;
switch(event->state) switch(event->state)
{ {
case PropertyDelete: case PropertyDelete:
...@@ -966,25 +968,37 @@ static void handle_wm_state_notify( struct x11drv_win_data *data, XPropertyEvent ...@@ -966,25 +968,37 @@ static void handle_wm_state_notify( struct x11drv_win_data *data, XPropertyEvent
if (!update_window || !data->managed || !data->mapped) return; if (!update_window || !data->managed || !data->mapped) return;
style = GetWindowLongW( data->hwnd, GWL_STYLE );
if (data->iconic && data->wm_state == NormalState) /* restore window */ if (data->iconic && data->wm_state == NormalState) /* restore window */
{ {
data->iconic = FALSE; data->iconic = FALSE;
if (is_net_wm_state_maximized( event->display, data )) if (is_net_wm_state_maximized( event->display, data ))
{ {
TRACE( "restoring to max %p/%lx\n", data->hwnd, data->whole_window ); if ((style & WS_MAXIMIZEBOX) && !(style & WS_DISABLED))
SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 ); {
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 ); TRACE( "restoring win %p/%lx\n", data->hwnd, data->whole_window );
SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_RESTORE, 0 ); 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) else if (!data->iconic && data->wm_state == IconicState)
{ {
TRACE( "minimizing win %p/%lx\n", data->hwnd, data->whole_window );
data->iconic = TRUE; 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 );
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment