Module: wine Branch: master Commit: 2c9ce4968ada1b147c090d1eff2a60b9d0324fa7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2c9ce4968ada1b147c090d1eff...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Sep 18 11:24:55 2012 +0200
winex11: Add window data locking to the focus event handlers.
---
dlls/winex11.drv/event.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 1c0cec3..c9ae725 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -516,15 +516,15 @@ DWORD EVENT_x11_time_to_win32_time(Time time) */ static inline BOOL can_activate_window( HWND hwnd ) { - struct x11drv_win_data *data = X11DRV_get_win_data( hwnd ); LONG style = GetWindowLongW( hwnd, GWL_STYLE ); + RECT rect;
if (!(style & WS_VISIBLE)) return FALSE; if ((style & (WS_POPUP|WS_CHILD)) == WS_CHILD) return FALSE; if (style & WS_MINIMIZE) return FALSE; if (GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_NOACTIVATE) return FALSE; if (hwnd == GetDesktopWindow()) return FALSE; - if (data && IsRectEmpty( &data->window_rect )) return FALSE; + if (GetWindowRect( hwnd, &rect ) && IsRectEmpty( &rect )) return FALSE; return !(style & WS_DISABLED); }
@@ -874,15 +874,15 @@ static void X11DRV_MapNotify( HWND hwnd, XEvent *event ) clipping_cursor = 1; return; } - if (!(data = X11DRV_get_win_data( hwnd ))) return; - if (!data->mapped || data->embedded) return; + if (!(data = get_win_data( hwnd ))) return;
- if (!data->managed) + if (!data->managed && !data->embedded && data->mapped) { HWND hwndFocus = GetFocus(); if (hwndFocus && IsChild( hwnd, hwndFocus )) set_input_focus( thread_display(), data->whole_window ); } + release_win_data( data ); }
@@ -1277,8 +1277,9 @@ void CDECL X11DRV_SetFocus( HWND hwnd ) struct x11drv_win_data *data;
if (!(hwnd = GetAncestor( hwnd, GA_ROOT ))) return; - if (!(data = X11DRV_get_win_data( hwnd ))) return; + if (!(data = get_win_data( hwnd ))) return; if (!data->managed) set_input_focus( display, data->whole_window ); + release_win_data( data ); }