]> source.dussan.org Git - tigervnc.git/commitdiff
Inline the Windows monitor name code
authorPierre Ossman <ossman@cendio.se>
Thu, 9 Sep 2021 09:05:53 +0000 (11:05 +0200)
committerPierre Ossman <ossman@cendio.se>
Thu, 9 Sep 2021 11:12:23 +0000 (13:12 +0200)
It's just used in this one place, and isn't very large. Also move things
around a bit to avoid having to define new complex types.

vncviewer/MonitorArrangement.cxx
vncviewer/win32.c
vncviewer/win32.h

index 735177ba299f7e77888c371686bfe221cbd15e9a..60637b9572237a58ddcd91a81d8b24a1b4d2b965 100644 (file)
@@ -347,13 +347,47 @@ std::string MonitorArrangement::description(int m)
   return ss.str();
 }
 
+#if defined(WIN32)
+static BOOL CALLBACK EnumDisplayMonitorsCallback(
+  HMONITOR monitor, HDC deviceContext, LPRECT rect, LPARAM userData)
+{
+  std::set<HMONITOR>* sys_monitors = (std::set<HMONITOR>*)userData;
+  sys_monitors->insert(monitor);
+  return TRUE;
+}
+#endif
+
 int MonitorArrangement::get_monitor_name(int m, char name[], size_t name_len)
 {
 #if defined(WIN32)
+  std::set<HMONITOR> sys_monitors;
+  std::set<HMONITOR>::const_iterator iter;
   int x, y, w, h;
+
   Fl::screen_xywh(x, y, w, h, m);
-  return win32_get_monitor_name(x, y, w, h, name, name_len);
 
+  EnumDisplayMonitors(NULL, NULL, EnumDisplayMonitorsCallback,
+                      (LPARAM)&sys_monitors);
+
+  for (iter = sys_monitors.begin(); iter != sys_monitors.end(); ++iter) {
+    MONITORINFOEX info;
+
+    info.cbSize = sizeof(info);
+    GetMonitorInfo(*iter, (LPMONITORINFO)&info);
+
+    if (info.rcMonitor.left != x)
+      continue;
+    if (info.rcMonitor.top != y)
+      continue;
+    if ((info.rcMonitor.right - info.rcMonitor.left) != w)
+      continue;
+    if ((info.rcMonitor.bottom - info.rcMonitor.top) != h)
+      continue;
+
+    return snprintf(name, name_len, "%.*s", (int)(name_len - 1), info.szDevice);
+  }
+
+  return -1;
 #elif defined(__APPLE__)
   CGDisplayCount count;
   int bytes_written = 0;
index 9032f36ae17de85da19c9ffdb8260d21fb819ff1..80305bc44659458694d923b4a68752c7590bcb42 100644 (file)
@@ -419,54 +419,3 @@ int win32_has_altgr(void)
 
   return has_altgr;
 }
-
-typedef struct {
-  int x, y, w, h;
-  char* name;
-  size_t name_len;
-  int bytes_written;
-} EnumCallbackData;
-
-static BOOL CALLBACK EnumDisplayMonitorsCallback(
-  HMONITOR monitor, HDC deviceContext, LPRECT rect, LPARAM userData)
-{
-  EnumCallbackData *data = (EnumCallbackData *)userData;
-  MONITORINFOEX info;
-  info.cbSize = sizeof(info);
-  GetMonitorInfo(monitor, (LPMONITORINFO)&info);
-
-  int x = info.rcMonitor.left;
-  int y = info.rcMonitor.top;
-  int w = info.rcMonitor.right - info.rcMonitor.left;
-  int h = info.rcMonitor.bottom - info.rcMonitor.top;
-
-  if ((data->x == x) && (data->y == y) && (data->w == w) && (data->h == h)) {
-    data->bytes_written = snprintf(data->name, data->name_len,
-      "%.*s", (int)(data->name_len - 1), info.szDevice);
-
-    if (data->bytes_written < 0)
-      return FALSE;
-
-    // Stop the iteration.
-    return FALSE;
-  }
-
-  // Keep iterating.
-  return TRUE;
-}
-
-int win32_get_monitor_name(int x, int y, int w, int h, char name[], size_t name_len)
-{
-  EnumCallbackData data = {
-    .x = x,
-    .y = y,
-    .w = w,
-    .h = h,
-    .name = name,
-    .name_len = name_len,
-    .bytes_written = -1
-  };
-
-  EnumDisplayMonitors(NULL, NULL, EnumDisplayMonitorsCallback, (LPARAM) &data);
-  return data.bytes_written;
-}
index 2dae04b91b670fcc0c6e841a915e6df27dc0f2ec..ebcfccb08aaa66b0204712b7f8c103f94b0b5b28 100644 (file)
@@ -33,8 +33,6 @@ void win32_disable_lowlevel_keyboard(HWND hwnd);
 int win32_vkey_to_keysym(UINT vkey, int extended);
 
 int win32_has_altgr(void);
-
-int win32_get_monitor_name(int x, int y, int w, int h, char name[], size_t name_len);
 };
 
 #endif