diff options
author | Frediano Ziglio <freddy77@gmail.com> | 2020-05-22 08:56:44 +0100 |
---|---|---|
committer | Frediano Ziglio <freddy77@gmail.com> | 2020-06-15 12:23:48 +0100 |
commit | c76999df28013f41071af1048869d5f1cc3b5af9 (patch) | |
tree | 43f9c9c4f134c1164b4ceac056e7ba981a7f64fe | |
parent | d8d23f36a243212eb41bcbdd97e9a70ed0a1a3f5 (diff) |
desktop_layout: Factor out a function to enumerate displays
Reduce code duplication, the enumeration happens 3 times.
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
Acked-by: Julien Ropé <jrope@redhat.com>
-rw-r--r-- | vdagent/desktop_layout.cpp | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/vdagent/desktop_layout.cpp b/vdagent/desktop_layout.cpp index 3a36d22..64de275 100644 --- a/vdagent/desktop_layout.cpp +++ b/vdagent/desktop_layout.cpp @@ -48,6 +48,24 @@ DesktopLayout::~DesktopLayout() delete _display_config; } +static bool +get_next_display(DWORD &dev_id, DISPLAY_DEVICE &dev_info) +{ + if (dev_id == 0) { + ZeroMemory(&dev_info, sizeof(dev_info)); + dev_info.cb = sizeof(dev_info); + } + + while (EnumDisplayDevices(NULL, dev_id, &dev_info, 0)) { + dev_id++; + if (dev_info.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) { + continue; + } + return true; + } + return false; +} + void DesktopLayout::get_displays() { DISPLAY_DEVICE dev_info; @@ -62,15 +80,9 @@ void DesktopLayout::get_displays() } _display_config->update_config_path(); clean_displays(); - ZeroMemory(&dev_info, sizeof(dev_info)); - dev_info.cb = sizeof(dev_info); ZeroMemory(&mode, sizeof(mode)); mode.dmSize = sizeof(mode); - while (EnumDisplayDevices(NULL, dev_id, &dev_info, 0)) { - dev_id++; - if (dev_info.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) { - continue; - } + while (get_next_display(dev_id, dev_info)) { size_t size = _displays.size(); if (!wcsstr(dev_info.DeviceString, L"QXL")) { display_id = (DWORD)size; @@ -123,8 +135,6 @@ void DesktopLayout::set_displays() return; } _display_config->update_config_path(); - ZeroMemory(&dev_info, sizeof(dev_info)); - dev_info.cb = sizeof(dev_info); ZeroMemory(&dev_mode, sizeof(dev_mode)); dev_mode.dmSize = sizeof(dev_mode); @@ -133,11 +143,7 @@ void DesktopLayout::set_displays() LONG normal_x = primary ? primary->get_pos_x() : 0; LONG normal_y = primary ? primary->get_pos_y() : 0; - while (EnumDisplayDevices(NULL, dev_id, &dev_info, 0)) { - dev_id++; - if (dev_info.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) { - continue; - } + while (get_next_display(dev_id, dev_info)) { bool is_qxl = !!wcsstr(dev_info.DeviceString, L"QXL"); if (is_qxl && !get_qxl_device_id(dev_info.DeviceKey, &display_id)) { vd_printf("get_qxl_device_id failed %S", dev_info.DeviceKey); @@ -213,13 +219,7 @@ bool DesktopLayout::consistent_displays() int non_qxl_count = 0; int qxl_count = 0; - ZeroMemory(&dev_info, sizeof(dev_info)); - dev_info.cb = sizeof(dev_info); - while (EnumDisplayDevices(NULL, dev_id, &dev_info, 0)) { - dev_id++; - if (dev_info.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) { - continue; - } + while (get_next_display(dev_id, dev_info)) { if (wcsstr(dev_info.DeviceString, L"QXL")) { qxl_count++; } else { |