winex11: Add window data structure locking to the ShowWindow entry point.
This commit is contained in:
parent
5f9be70570
commit
6a9f5e18d1
|
@ -2208,20 +2208,20 @@ UINT CDECL X11DRV_ShowWindow( HWND hwnd, INT cmd, RECT *rect, UINT swp )
|
||||||
Window root, top;
|
Window root, top;
|
||||||
DWORD style = GetWindowLongW( hwnd, GWL_STYLE );
|
DWORD style = GetWindowLongW( hwnd, GWL_STYLE );
|
||||||
struct x11drv_thread_data *thread_data = x11drv_thread_data();
|
struct x11drv_thread_data *thread_data = x11drv_thread_data();
|
||||||
struct x11drv_win_data *data = X11DRV_get_win_data( hwnd );
|
struct x11drv_win_data *data = get_win_data( hwnd );
|
||||||
|
|
||||||
if (!data || !data->whole_window || !data->managed || !data->mapped || data->iconic) return swp;
|
if (!data || !data->whole_window || !data->managed || !data->mapped || data->iconic) goto done;
|
||||||
if (style & WS_MINIMIZE) return swp;
|
if (style & WS_MINIMIZE) goto done;
|
||||||
if (IsRectEmpty( rect )) return swp;
|
if (IsRectEmpty( rect )) goto done;
|
||||||
|
|
||||||
/* only fetch the new rectangle if the ShowWindow was a result of a window manager event */
|
/* only fetch the new rectangle if the ShowWindow was a result of a window manager event */
|
||||||
|
|
||||||
if (!thread_data->current_event || thread_data->current_event->xany.window != data->whole_window)
|
if (!thread_data->current_event || thread_data->current_event->xany.window != data->whole_window)
|
||||||
return swp;
|
goto done;
|
||||||
|
|
||||||
if (thread_data->current_event->type != ConfigureNotify &&
|
if (thread_data->current_event->type != ConfigureNotify &&
|
||||||
thread_data->current_event->type != PropertyNotify)
|
thread_data->current_event->type != PropertyNotify)
|
||||||
return swp;
|
goto done;
|
||||||
|
|
||||||
TRACE( "win %p/%lx cmd %d at %s flags %08x\n",
|
TRACE( "win %p/%lx cmd %d at %s flags %08x\n",
|
||||||
hwnd, data->whole_window, cmd, wine_dbgstr_rect(rect), swp );
|
hwnd, data->whole_window, cmd, wine_dbgstr_rect(rect), swp );
|
||||||
|
@ -2235,7 +2235,11 @@ UINT CDECL X11DRV_ShowWindow( HWND hwnd, INT cmd, RECT *rect, UINT swp )
|
||||||
rect->bottom = y + height;
|
rect->bottom = y + height;
|
||||||
OffsetRect( rect, virtual_screen_rect.left, virtual_screen_rect.top );
|
OffsetRect( rect, virtual_screen_rect.left, virtual_screen_rect.top );
|
||||||
X11DRV_X_to_window_rect( data, rect );
|
X11DRV_X_to_window_rect( data, rect );
|
||||||
return swp & ~(SWP_NOMOVE | SWP_NOCLIENTMOVE | SWP_NOSIZE | SWP_NOCLIENTSIZE);
|
swp &= ~(SWP_NOMOVE | SWP_NOCLIENTMOVE | SWP_NOSIZE | SWP_NOCLIENTSIZE);
|
||||||
|
|
||||||
|
done:
|
||||||
|
release_win_data( data );
|
||||||
|
return swp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue