Jacek Caban : winex11: Use build_hwnd_list for X11DRV_DisplayDevices_Update implementation.
Alexandre Julliard
julliard at winehq.org
Tue Apr 19 16:20:13 CDT 2022
Module: wine
Branch: master
Commit: 29062759676e87551848de5b2787304d7f950b49
URL: https://source.winehq.org/git/wine.git/?a=commit;h=29062759676e87551848de5b2787304d7f950b49
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Apr 19 15:30:26 2022 +0200
winex11: Use build_hwnd_list for X11DRV_DisplayDevices_Update implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winex11.drv/display.c | 50 +++++++++++++++++++++++-----------------------
dlls/winex11.drv/window.c | 2 +-
dlls/winex11.drv/x11drv.h | 2 ++
3 files changed, 28 insertions(+), 26 deletions(-)
diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c
index a7229d3a256..928d2bd16f0 100644
--- a/dlls/winex11.drv/display.c
+++ b/dlls/winex11.drv/display.c
@@ -174,35 +174,13 @@ void X11DRV_DisplayDevices_RegisterEventHandlers(void)
handler->register_event_handlers();
}
-static BOOL CALLBACK update_windows_on_display_change(HWND hwnd, LPARAM lparam)
-{
- struct x11drv_win_data *data;
- UINT mask = (UINT)lparam;
-
- if (!(data = get_win_data(hwnd)))
- return TRUE;
-
- /* update the full screen state */
- update_net_wm_states(data);
-
- if (mask && data->whole_window)
- {
- POINT pos = virtual_screen_to_root(data->whole_rect.left, data->whole_rect.top);
- XWindowChanges changes;
- changes.x = pos.x;
- changes.y = pos.y;
- XReconfigureWMWindow(data->display, data->whole_window, data->vis.screen, mask, &changes);
- }
- release_win_data(data);
- return TRUE;
-}
-
void X11DRV_DisplayDevices_Update(BOOL send_display_change)
{
RECT old_virtual_rect, new_virtual_rect;
DWORD tid, pid;
HWND foreground;
- UINT mask = 0;
+ UINT mask = 0, i;
+ HWND *list;
old_virtual_rect = NtUserGetVirtualScreenRect();
X11DRV_DisplayDevices_Init(TRUE);
@@ -215,7 +193,29 @@ void X11DRV_DisplayDevices_Update(BOOL send_display_change)
mask |= CWY;
X11DRV_resize_desktop(send_display_change);
- EnumWindows(update_windows_on_display_change, (LPARAM)mask);
+
+ list = build_hwnd_list();
+ for (i = 0; list && list[i] != HWND_BOTTOM; i++)
+ {
+ struct x11drv_win_data *data;
+
+ if (!(data = get_win_data( list[i] ))) continue;
+
+ /* update the full screen state */
+ update_net_wm_states(data);
+
+ if (mask && data->whole_window)
+ {
+ POINT pos = virtual_screen_to_root(data->whole_rect.left, data->whole_rect.top);
+ XWindowChanges changes;
+ changes.x = pos.x;
+ changes.y = pos.y;
+ XReconfigureWMWindow(data->display, data->whole_window, data->vis.screen, mask, &changes);
+ }
+ release_win_data(data);
+ }
+
+ free( list );
/* forward clip_fullscreen_window request to the foreground window */
if ((foreground = NtUserGetForegroundWindow()) &&
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index c1fc008b7d3..4c4e47884ff 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -171,7 +171,7 @@ static BOOL is_managed( HWND hwnd )
return ret;
}
-static HWND *build_hwnd_list(void)
+HWND *build_hwnd_list(void)
{
NTSTATUS status;
HWND *list;
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 95e4b4ff29a..086e66b2366 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -28,6 +28,7 @@
#include <limits.h>
#include <stdarg.h>
+#include <stdlib.h>
#include <pthread.h>
#include <X11/Xlib.h>
#include <X11/Xresource.h>
@@ -690,6 +691,7 @@ extern void move_resize_window( HWND hwnd, int dir ) DECLSPEC_HIDDEN;
extern void X11DRV_InitKeyboard( Display *display ) DECLSPEC_HIDDEN;
extern DWORD X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles, DWORD timeout,
DWORD mask, DWORD flags ) DECLSPEC_HIDDEN;
+extern HWND *build_hwnd_list(void) DECLSPEC_HIDDEN;
typedef int (*x11drv_error_callback)( Display *display, XErrorEvent *event, void *arg );
More information about the wine-cvs
mailing list