[Spice-commits] spice-protocol vdagent/desktop_layout.cpp vdagent/desktop_layout.h vdagent/vdagent.cpp
Christophe Fergau
teuf at kemper.freedesktop.org
Thu Aug 6 03:02:53 PDT 2015
spice-protocol | 2 +-
vdagent/desktop_layout.cpp | 4 ++++
vdagent/desktop_layout.h | 5 +++--
vdagent/vdagent.cpp | 4 ++++
4 files changed, 12 insertions(+), 3 deletions(-)
New commits:
commit 259d6b5bdb29008e7e6f69feb1b65870f40a95c9
Author: Sandy Stutsman <sstutsma at redhat.com>
Date: Tue Aug 4 19:16:34 2015 -0400
Check for set-monitors-position capability from client.
If the client hasn't been updated to handle multi-monitor configurations
that are not multi-head, vd_agent won't issue the MONITORS_CONFIG driver
escape.
These changes will ensure that the new MONITORS_CONFIG escape in commit:
6023630562fd129433aef1eaddcf6fbee3f03e50 will not break with an older
client.
This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1248196
diff --git a/spice-protocol b/spice-protocol
index 5ff3fa7..666b5c5 160000
--- a/spice-protocol
+++ b/spice-protocol
@@ -1 +1 @@
-Subproject commit 5ff3fa7080bd08392fc011175657264d57dddcec
+Subproject commit 666b5c5780acf3176a9cff61ad549d30bb1b9824
diff --git a/vdagent/desktop_layout.cpp b/vdagent/desktop_layout.cpp
index 7a34f7f..a7666ca 100644
--- a/vdagent/desktop_layout.cpp
+++ b/vdagent/desktop_layout.cpp
@@ -35,6 +35,7 @@ void DisplayMode::set_res(DWORD width, DWORD height, DWORD depth)
DesktopLayout::DesktopLayout()
: _total_width (0)
, _total_height (0)
+ , _send_monitors_position(false)
{
MUTEX_INIT(_mutex);
get_displays();
@@ -365,6 +366,9 @@ bool DesktopLayout::update_monitor_config(LPCTSTR dev_name, DisplayMode* mode)
if (!mode || !mode->get_attached())
return false;
+ //Don't configure monitors unless the client supports it
+ if(!_send_monitors_position) return FALSE;
+
HDC hdc = CreateDC(dev_name, NULL, NULL, NULL);
memset(&monitor_config, 0, sizeof(monitor_config));
diff --git a/vdagent/desktop_layout.h b/vdagent/desktop_layout.h
index 0e310e3..ece3946 100644
--- a/vdagent/desktop_layout.h
+++ b/vdagent/desktop_layout.h
@@ -73,22 +73,23 @@ public:
size_t get_display_count() { return _displays.size();}
DWORD get_total_width() { return _total_width;}
DWORD get_total_height() { return _total_height;}
-
+ void set_position_configurable(bool flag) { _send_monitors_position = flag; }
private:
void clean_displays();
void normalize_displays_pos();
DisplayMode * get_primary_display();
+ bool update_monitor_config(LPCTSTR dev_name, DisplayMode* mode);
static bool consistent_displays();
static bool is_attached(LPCTSTR dev_name);
static bool get_qxl_device_id(WCHAR* device_key, DWORD* device_id);
static bool init_dev_mode(LPCTSTR dev_name, DEVMODE* dev_mode, DisplayMode* mode,
LONG normal_x, LONG normal_y, bool set_pos);
- static bool update_monitor_config(LPCTSTR dev_name, DisplayMode* mode);
private:
mutex_t _mutex;
Displays _displays;
DWORD _total_width;
DWORD _total_height;
+ bool _send_monitors_position;
};
#endif
diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
index efce981..c976665 100644
--- a/vdagent/vdagent.cpp
+++ b/vdagent/vdagent.cpp
@@ -835,6 +835,10 @@ bool VDAgent::handle_announce_capabilities(VDAgentAnnounceCapabilities* announce
_client_caps_size = caps_size;
}
memcpy(_client_caps, announce_capabilities->caps, sizeof(_client_caps[0]) * caps_size);
+
+ if (VD_AGENT_HAS_CAPABILITY(_client_caps, _client_caps_size,
+ VD_AGENT_CAP_MONITORS_CONFIG_POSITION))
+ _desktop_layout->set_position_configurable(true);
if (announce_capabilities->request) {
return send_announce_capabilities(false);
}
More information about the Spice-commits
mailing list