win32: Invalidate inactive monitors
authorJason Francis <jafrancis999@gmail.com>
Wed, 24 May 2023 21:34:34 +0000 (17:34 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 5 Jun 2023 11:58:25 +0000 (07:58 -0400)
Without this, there are still GdkMonitors present for displays that are
present but disconnected (such as when a laptop disables the internal
display to connect to an external monitor).

gdk/win32/gdkmonitor-win32.c

index 93fd2a489f82d15981430cff165df5943cf3ee5b..3702820c9803590fe9d53b76f489048551e93bd6 100644 (file)
@@ -443,9 +443,6 @@ populate_monitor_devices_from_display_config (GPtrArray *monitors)
       char *path, *path_lower;
       DISPLAYCONFIG_RATIONAL *refresh;
 
-      if ((dispconf_paths[path_index].flags & DISPLAYCONFIG_PATH_ACTIVE) == 0)
-        continue;
-
       tdn.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
       tdn.header.size = sizeof (tdn);
       tdn.header.adapterId = dispconf_paths[path_index].targetInfo.adapterId;
@@ -481,6 +478,12 @@ populate_monitor_devices_from_display_config (GPtrArray *monitors)
       if (w32mon == NULL)
         continue;
 
+      if ((dispconf_paths[path_index].flags & DISPLAYCONFIG_PATH_ACTIVE) == 0)
+        {
+          w32mon->remove = TRUE;
+          continue;
+        }
+
       mon = GDK_MONITOR (w32mon);
 
       if (!tdn.flags.friendlyNameForced)