Alexandre Julliard : winex11: Don't send minimize/ maximize sys commands to windows that are not supposed to get them.
Module: wine Branch: master Commit: ab111025c03e7e2a93bb61a6b3607e4bf8f83561 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ab111025c03e7e2a93bb61a6b3... Author: Alexandre Julliard <julliard(a)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 ); } }
participants (1)
-
Alexandre Julliard