You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.4 KiB
67 lines
2.4 KiB
From ad61347e9d92380fbbb4effd8a19349777d76715 Mon Sep 17 00:00:00 2001 |
|
From: Rui Matos <tiagomatos@gmail.com> |
|
Date: Tue, 6 Oct 2015 21:16:18 +0200 |
|
Subject: [PATCH] monitor-manager-xrandr: Work around spurious hotplugs on Xvnc |
|
|
|
Xvnc turns its outputs off/on on every mode set which makes us believe |
|
there was an hotplug when there actually wasn't. Work around this by |
|
requiring new randr configuration timestamps to be ahead of the last |
|
set timestamp by at least 100 ms for us to consider them an actual |
|
hotplug. |
|
--- |
|
.../x11/meta-monitor-manager-xrandr.c | 25 ++++++++++++++++++- |
|
1 file changed, 24 insertions(+), 1 deletion(-) |
|
|
|
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c |
|
index dbe3e4e3b..90a3952db 100644 |
|
--- a/src/backends/x11/meta-monitor-manager-xrandr.c |
|
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c |
|
@@ -1058,6 +1058,24 @@ meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass) |
|
g_quark_from_static_string ("-meta-monitor-xrandr-data"); |
|
} |
|
|
|
+static gboolean |
|
+is_xvnc (MetaMonitorManager *manager) |
|
+{ |
|
+ MetaMonitorManagerXrandr *manager_xrandr = |
|
+ META_MONITOR_MANAGER_XRANDR (manager); |
|
+ GList *l; |
|
+ |
|
+ for (l = meta_gpu_get_outputs (manager_xrandr->gpu); l; l = l->next) |
|
+ { |
|
+ MetaOutput *output = l->data; |
|
+ |
|
+ if (g_str_has_prefix (output->name, "VNC-")) |
|
+ return TRUE; |
|
+ } |
|
+ |
|
+ return FALSE; |
|
+} |
|
+ |
|
gboolean |
|
meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xrandr, |
|
XEvent *event) |
|
@@ -1067,6 +1085,7 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra |
|
XRRScreenResources *resources; |
|
gboolean is_hotplug; |
|
gboolean is_our_configuration; |
|
+ unsigned int timestamp; |
|
|
|
if ((event->type - manager_xrandr->rr_event_base) != RRScreenChangeNotify) |
|
return FALSE; |
|
@@ -1078,7 +1097,11 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra |
|
gpu_xrandr = META_GPU_XRANDR (manager_xrandr->gpu); |
|
resources = meta_gpu_xrandr_get_resources (gpu_xrandr); |
|
|
|
- is_hotplug = resources->timestamp < resources->configTimestamp; |
|
+ timestamp = resources->timestamp; |
|
+ if (is_xvnc (manager)) |
|
+ timestamp += 100; |
|
+ |
|
+ is_hotplug = timestamp < resources->configTimestamp; |
|
is_our_configuration = (resources->timestamp == |
|
manager_xrandr->last_xrandr_set_timestamp); |
|
if (is_hotplug) |
|
-- |
|
2.17.0 |
|
|
|
|