[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