Zhiyi Zhang : winex11.drv: Handle XRandR display device changes.

Alexandre Julliard julliard at winehq.org
Mon Sep 23 15:22:34 CDT 2019


Module: wine
Branch: master
Commit: 22795243b2d21e1a667215f54c3a15634735749c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=22795243b2d21e1a667215f54c3a15634735749c

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Fri Sep 20 16:55:40 2019 +0800

winex11.drv: Handle XRandR display device changes.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winex11.drv/xrandr.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c
index ad8438252f..2a1c7ce594 100644
--- a/dlls/winex11.drv/xrandr.c
+++ b/dlls/winex11.drv/xrandr.c
@@ -68,6 +68,7 @@ static int primary_crtc;
 #endif
 
 #ifdef HAVE_XRRGETPROVIDERRESOURCES
+MAKE_FUNCPTR(XRRSelectInput)
 MAKE_FUNCPTR(XRRGetOutputPrimary)
 MAKE_FUNCPTR(XRRGetProviderResources)
 MAKE_FUNCPTR(XRRFreeProviderResources)
@@ -119,6 +120,7 @@ static int load_xrandr(void)
 #endif
 
 #ifdef HAVE_XRRGETPROVIDERRESOURCES
+        LOAD_FUNCPTR(XRRSelectInput)
         LOAD_FUNCPTR(XRRGetOutputPrimary)
         LOAD_FUNCPTR(XRRGetProviderResources)
         LOAD_FUNCPTR(XRRFreeProviderResources)
@@ -1030,6 +1032,12 @@ static void xrandr14_free_monitors( struct x11drv_monitor *monitors )
     heap_free( monitors );
 }
 
+static BOOL xrandr14_device_change_event( HWND hwnd, XEvent *event )
+{
+    X11DRV_DisplayDevices_Init( TRUE );
+    return TRUE;
+}
+
 #endif
 
 void X11DRV_XRandR_Init(void)
@@ -1077,6 +1085,15 @@ void X11DRV_XRandR_Init(void)
         handler.pGetMonitors = xrandr14_get_monitors;
         handler.pFreeMonitors = xrandr14_free_monitors;
         X11DRV_DisplayDevices_SetHandler( &handler );
+
+        pXRRSelectInput( thread_init_display(), root_window,
+                         RRCrtcChangeNotifyMask | RROutputChangeNotifyMask | RRProviderChangeNotifyMask);
+        X11DRV_register_event_handler( event_base + RRNotify_CrtcChange, xrandr14_device_change_event,
+                                       "XRandR CrtcChange" );
+        X11DRV_register_event_handler( event_base + RRNotify_OutputChange, xrandr14_device_change_event,
+                                       "XRandR OutputChange" );
+        X11DRV_register_event_handler( event_base + RRNotify_ProviderChange, xrandr14_device_change_event,
+                                       "XRandR ProviderChange" );
     }
 #endif
 }




More information about the wine-cvs mailing list