Module: wine Branch: master Commit: 8913182b89d542633678d1c3abcfe00e28be8e6d URL: http://source.winehq.org/git/wine.git/?a=commit;h=8913182b89d542633678d1c3ab...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jan 24 10:21:07 2008 +0100
winex11: Check for need to make window managed when WS_VISIBLE is set outside of SetWindowPos.
---
dlls/winex11.drv/desktop.c | 1 + dlls/winex11.drv/window.c | 2 ++ dlls/winex11.drv/winpos.c | 10 +++++++--- 3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/winex11.drv/desktop.c b/dlls/winex11.drv/desktop.c index 23a6675..96d050a 100644 --- a/dlls/winex11.drv/desktop.c +++ b/dlls/winex11.drv/desktop.c @@ -108,6 +108,7 @@ static LONG X11DRV_desktop_SetCurrentMode(int mode) void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height ) { root_window = win; + managed_mode = 0; /* no managed windows in desktop mode */ max_width = screen_width; max_height = screen_height; xinerama_init( width, height ); diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index c21836d..2177e10 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -79,6 +79,8 @@ BOOL is_window_managed( HWND hwnd, UINT swp_flags, const RECT *window_rect ) { DWORD style, ex_style;
+ if (!managed_mode) return FALSE; + /* child windows are not managed */ style = GetWindowLongW( hwnd, GWL_STYLE ); if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD) return FALSE; diff --git a/dlls/winex11.drv/winpos.c b/dlls/winex11.drv/winpos.c index e5d16ee..13b73f3 100644 --- a/dlls/winex11.drv/winpos.c +++ b/dlls/winex11.drv/winpos.c @@ -148,6 +148,12 @@ void X11DRV_SetWindowStyle( HWND hwnd, DWORD old_style ) X11DRV_set_wm_hints( display, data ); if (!data->mapped) { + if (!data->managed && is_window_managed( hwnd, SWP_NOACTIVATE, &data->window_rect )) + { + TRACE( "making win %p/%lx managed\n", hwnd, data->whole_window ); + data->managed = TRUE; + SetPropA( hwnd, managed_prop, (HANDLE)1 ); + } TRACE( "mapping win %p\n", hwnd ); X11DRV_sync_window_style( display, data ); wine_tsx11_lock(); @@ -368,9 +374,7 @@ BOOL X11DRV_SetWindowPos( HWND hwnd, HWND insert_after, const RECT *rectWindow, }
/* check if we need to switch the window to managed */ - if (!data->managed && data->whole_window && managed_mode && - root_window == DefaultRootWindow( display ) && - is_window_managed( hwnd, swp_flags, rectWindow )) + if (!data->managed && data->whole_window && is_window_managed( hwnd, swp_flags, rectWindow )) { TRACE( "making win %p/%lx managed\n", hwnd, data->whole_window ); data->managed = TRUE;