[Xfce4-commits] [apps/xfce4-screensaver] 09/17: Fix incorrect monitor connected/disconnected events and monitor count
noreply at xfce.org
noreply at xfce.org
Sat Mar 9 22:23:44 CET 2019
This is an automated email from the git hooks/post-receive script.
b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository apps/xfce4-screensaver.
commit 3e841a8bd5cde8fd624b1c979328db232db374d7
Author: Alexander Butenko <a.butenka at gmail.com>
Date: Sat Feb 9 09:42:18 2019 -0400
Fix incorrect monitor connected/disconnected events and monitor count
---
src/gs-manager.c | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/src/gs-manager.c b/src/gs-manager.c
index 18a5ff7..fa11575 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -1449,6 +1449,32 @@ gs_manager_create_window_for_monitor (GSManager *manager,
}
}
+static gboolean
+gs_manager_is_real_monitor (GdkMonitor *monitor) {
+ // avoiding some weird gdk bug
+ // federico> avb: or if you don't care about a little unexplained messiness, just discard monitors where both fields are null? :)
+ if (gdk_monitor_get_manufacturer(monitor) == NULL && gdk_monitor_get_model(monitor) == NULL)
+ return FALSE;
+ return TRUE;
+}
+
+static int
+gs_manager_get_n_monitors (GdkDisplay *display) {
+ // Since gdk_display_get_n_monitors return wrong monitor count
+ // this is a workaround for the problem
+ GdkMonitor *monitor;
+ int n_monitors;
+ int i, count = 0;
+
+ n_monitors = gdk_display_get_n_monitors (display);
+ for (i = 0; i < n_monitors; i++) {
+ monitor = gdk_display_get_monitor(display, i);
+ if (gs_manager_is_real_monitor (monitor))
+ count++;
+ }
+ return count;
+}
+
static void
on_display_monitor_added (GdkDisplay *display,
GdkMonitor *monitor,
@@ -1456,7 +1482,9 @@ on_display_monitor_added (GdkDisplay *display,
GSList *l;
int n_monitors;
- n_monitors = gdk_display_get_n_monitors (display);
+ g_return_if_fail (gs_manager_is_real_monitor(monitor));
+
+ n_monitors = gs_manager_get_n_monitors (display);
gs_debug ("Monitor added on display %s, now there are %d",
gdk_display_get_name (display), n_monitors);
@@ -1503,7 +1531,9 @@ on_display_monitor_removed (GdkDisplay *display,
int n_monitors;
GdkMonitor *last_monitor = NULL;
- n_monitors = manager->priv->last_monitor_count = gdk_display_get_n_monitors (display);
+ g_return_if_fail (gs_manager_is_real_monitor(monitor));
+
+ n_monitors = manager->priv->last_monitor_count = gs_manager_get_n_monitors (display);
gs_debug ("Monitor removed on display %s, now there are %d",
gdk_display_get_name (display), n_monitors);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list