[PATCH v7 5/7] winex11.drv: Handle display device changes.

Zhiyi Zhang zzhang at codeweavers.com
Tue May 28 02:20:10 CDT 2019


Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
 dlls/winex11.drv/desktop.c     | 2 ++
 dlls/winex11.drv/display.c     | 4 ++--
 dlls/winex11.drv/x11drv.h      | 2 +-
 dlls/winex11.drv/x11drv_main.c | 2 +-
 4 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dlls/winex11.drv/desktop.c b/dlls/winex11.drv/desktop.c
index d478cbdcb3..ecbcd6b381 100644
--- a/dlls/winex11.drv/desktop.c
+++ b/dlls/winex11.drv/desktop.c
@@ -154,6 +154,7 @@ void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height )
     max_width = primary_rect.right - primary_rect.left;
     max_height = primary_rect.bottom - primary_rect.top;
     xinerama_init( width, height );
+    X11DRV_DisplayDevices_Init( TRUE );
 
     /* initialize the available resolutions */
     dd_modes = X11DRV_Settings_SetHandlers("desktop", 
@@ -303,6 +304,7 @@ void X11DRV_resize_desktop( unsigned int width, unsigned int height )
     resize_data.old_virtual_rect = get_virtual_screen_rect();
 
     xinerama_init( width, height );
+    X11DRV_DisplayDevices_Init( TRUE );
     resize_data.new_virtual_rect = get_virtual_screen_rect();
 
     if (GetWindowThreadProcessId( hwnd, NULL ) != GetCurrentThreadId())
diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c
index 94ef1a5c35..e01ee7131a 100644
--- a/dlls/winex11.drv/display.c
+++ b/dlls/winex11.drv/display.c
@@ -349,7 +349,7 @@ static void cleanup_devices(void)
     SetupDiDestroyDeviceInfoList(devinfo);
 }
 
-void X11DRV_DisplayDevices_Init(void)
+void X11DRV_DisplayDevices_Init(BOOL force)
 {
     static const WCHAR init_mutexW[] =
         {'_','_','x','1','1','_','d','i','s','p','l','a','y','_','d','e','v','i','c','e','_','i','n','i','t',0};
@@ -375,7 +375,7 @@ void X11DRV_DisplayDevices_Init(void)
         goto fail;
 
     /* Avoid unnecessary reinit */
-    if (disposition != REG_CREATED_NEW_KEY)
+    if (!force && disposition != REG_CREATED_NEW_KEY)
     {
         success = TRUE;
         goto fail;
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index f8f28f0e0b..ba473c3fc5 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -736,7 +736,7 @@ struct x11drv_display_device_handler
 };
 
 extern void X11DRV_DisplayDevices_SetHandler(const struct x11drv_display_device_handler *handler) DECLSPEC_HIDDEN;
-extern void X11DRV_DisplayDevices_Init(void) DECLSPEC_HIDDEN;
+extern void X11DRV_DisplayDevices_Init(BOOL force) DECLSPEC_HIDDEN;
 
 /* XIM support */
 extern BOOL X11DRV_InitXIM( const char *input_style ) DECLSPEC_HIDDEN;
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index 69478741f1..21807af3f1 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -597,7 +597,7 @@ static BOOL process_attach(void)
     X11DRV_InitKeyboard( gdi_display );
     if (use_xim) use_xim = X11DRV_InitXIM( input_style );
 
-    X11DRV_DisplayDevices_Init();
+    X11DRV_DisplayDevices_Init(FALSE);
     return TRUE;
 }
 
-- 
2.20.1





More information about the wine-devel mailing list