Jacek Caban : wineandroid.drv: Use UpdateDisplayDevices driver entry point for registering devices.

Alexandre Julliard julliard at winehq.org
Wed Dec 1 15:23:51 CST 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Dec  1 16:02:53 2021 +0100

wineandroid.drv: Use UpdateDisplayDevices driver entry point for registering devices.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wineandroid.drv/Makefile.in |  2 +-
 dlls/wineandroid.drv/init.c      | 62 +++++++++++++++++-----------------------
 2 files changed, 28 insertions(+), 36 deletions(-)

diff --git a/dlls/wineandroid.drv/Makefile.in b/dlls/wineandroid.drv/Makefile.in
index 87818fd7499..7fcad453374 100644
--- a/dlls/wineandroid.drv/Makefile.in
+++ b/dlls/wineandroid.drv/Makefile.in
@@ -1,5 +1,5 @@
 MODULE  = wineandroid.drv
-IMPORTS = uuid ole32 user32 gdi32 advapi32 ntoskrnl
+IMPORTS = uuid ole32 user32 gdi32 advapi32 ntoskrnl win32u
 
 EXTRADLLFLAGS = -mcygwin
 
diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c
index 2d7e4469831..ed9116eb47e 100644
--- a/dlls/wineandroid.drv/init.c
+++ b/dlls/wineandroid.drv/init.c
@@ -40,18 +40,11 @@ unsigned int screen_width = 0;
 unsigned int screen_height = 0;
 RECT virtual_screen_rect = { 0, 0, 0, 0 };
 
-MONITORINFOEXW default_monitor =
-{
-    sizeof(default_monitor),    /* cbSize */
-    { 0, 0, 0, 0 },             /* rcMonitor */
-    { 0, 0, 0, 0 },             /* rcWork */
-    MONITORINFOF_PRIMARY,       /* dwFlags */
-    { '\\','\\','.','\\','D','I','S','P','L','A','Y','1',0 }   /* szDevice */
-};
-
 static const unsigned int screen_bpp = 32;  /* we don't support other modes */
 
+static RECT monitor_rc_work;
 static int device_init_done;
+static BOOL force_display_devices_refresh;
 
 typedef struct
 {
@@ -72,14 +65,22 @@ void init_monitors( int width, int height )
 
     virtual_screen_rect.right = width;
     virtual_screen_rect.bottom = height;
-    default_monitor.rcMonitor = default_monitor.rcWork = virtual_screen_rect;
+    monitor_rc_work = virtual_screen_rect;
 
     if (!hwnd || !IsWindowVisible( hwnd )) return;
     if (!GetWindowRect( hwnd, &rect )) return;
-    if (rect.top) default_monitor.rcWork.bottom = rect.top;
-    else default_monitor.rcWork.top = rect.bottom;
+    if (rect.top) monitor_rc_work.bottom = rect.top;
+    else monitor_rc_work.top = rect.bottom;
     TRACE( "found tray %p %s work area %s\n", hwnd,
-           wine_dbgstr_rect( &rect ), wine_dbgstr_rect( &default_monitor.rcWork ));
+           wine_dbgstr_rect( &rect ), wine_dbgstr_rect( &monitor_rc_work ));
+
+    if (*p_java_vm) /* if we're notified from Java thread, update registry */
+    {
+        UINT32 num_path, num_mode;
+        force_display_devices_refresh = TRUE;
+        /* trigger refresh in win32u */
+        NtUserGetDisplayConfigBufferSizes( QDC_ONLY_ACTIVE_PATHS, &num_path, &num_mode );
+    }
 }
 
 
@@ -199,30 +200,22 @@ LONG CDECL ANDROID_ChangeDisplaySettingsEx( LPCWSTR devname, LPDEVMODEW devmode,
 
 
 /***********************************************************************
- *           ANDROID_GetMonitorInfo
+ *           ANDROID_UpdateDisplayDevices
  */
-BOOL CDECL ANDROID_GetMonitorInfo( HMONITOR handle, LPMONITORINFO info )
+void CDECL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manager,
+                                         BOOL force, void *param )
 {
-    if (handle != (HMONITOR)1)
+    if (force || force_display_devices_refresh)
     {
-        SetLastError( ERROR_INVALID_HANDLE );
-        return FALSE;
+        struct gdi_monitor gdi_monitor =
+        {
+            .rc_monitor = virtual_screen_rect,
+            .rc_work = monitor_rc_work,
+            .state_flags = DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED,
+        };
+        device_manager->add_monitor( &gdi_monitor, param );
+        force_display_devices_refresh = FALSE;
     }
-    info->rcMonitor = default_monitor.rcMonitor;
-    info->rcWork = default_monitor.rcWork;
-    info->dwFlags = default_monitor.dwFlags;
-    if (info->cbSize >= sizeof(MONITORINFOEXW))
-        lstrcpyW( ((MONITORINFOEXW *)info)->szDevice, default_monitor.szDevice );
-    return TRUE;
-}
-
-
-/***********************************************************************
- *           ANDROID_EnumDisplayMonitors
- */
-BOOL CDECL ANDROID_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITORENUMPROC proc, LPARAM lp )
-{
-    return proc( (HMONITOR)1, 0, &default_monitor.rcMonitor, lp );
 }
 
 
@@ -294,9 +287,8 @@ static const struct user_driver_funcs android_drv_funcs =
     .pVkKeyScanEx = ANDROID_VkKeyScanEx,
     .pSetCursor = ANDROID_SetCursor,
     .pChangeDisplaySettingsEx = ANDROID_ChangeDisplaySettingsEx,
-    .pEnumDisplayMonitors = ANDROID_EnumDisplayMonitors,
     .pEnumDisplaySettingsEx = ANDROID_EnumDisplaySettingsEx,
-    .pGetMonitorInfo = ANDROID_GetMonitorInfo,
+    .pUpdateDisplayDevices = ANDROID_UpdateDisplayDevices,
     .pCreateWindow = ANDROID_CreateWindow,
     .pDestroyWindow = ANDROID_DestroyWindow,
     .pMsgWaitForMultipleObjectsEx = ANDROID_MsgWaitForMultipleObjectsEx,




More information about the wine-cvs mailing list