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