Alexandre Julliard : winex11: Windows that own popups should be managed.
Alexandre Julliard
julliard at winehq.org
Tue Feb 23 11:17:24 CST 2010
Module: wine
Branch: master
Commit: 391afac66fe4865cef2fa9508e8741fca2cd4fe1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=391afac66fe4865cef2fa9508e8741fca2cd4fe1
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Feb 23 12:34:19 2010 +0100
winex11: Windows that own popups should be managed.
---
dlls/winex11.drv/window.c | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index fdaa012..400d4c1 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -142,6 +142,31 @@ static void remove_startup_notification(Display *display, Window window)
}
+struct has_popup_result
+{
+ HWND hwnd;
+ BOOL found;
+};
+
+static BOOL CALLBACK has_popup( HWND hwnd, LPARAM lparam )
+{
+ struct has_popup_result *result = (struct has_popup_result *)lparam;
+
+ if (hwnd == result->hwnd) return FALSE; /* popups are always above owner */
+ result->found = (GetWindow( hwnd, GW_OWNER ) == result->hwnd);
+ return !result->found;
+}
+
+static BOOL has_owned_popups( HWND hwnd )
+{
+ struct has_popup_result result;
+
+ result.hwnd = hwnd;
+ result.found = FALSE;
+ EnumWindows( has_popup, (LPARAM)&result );
+ return result.found;
+}
+
/***********************************************************************
* is_window_managed
*
@@ -181,6 +206,8 @@ static BOOL is_window_managed( HWND hwnd, UINT swp_flags, const RECT *window_rec
/* application windows are managed */
ex_style = GetWindowLongW( hwnd, GWL_EXSTYLE );
if (ex_style & WS_EX_APPWINDOW) return TRUE;
+ /* windows that own popups are managed */
+ if (has_owned_popups( hwnd )) return TRUE;
/* default: not managed */
return FALSE;
}
More information about the wine-cvs
mailing list