[gnome-flashback] monitor-manager: check for underscan setting validity upfront



commit b9cd722792448b4d58a86c8faa794fad638f4c5e
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Tue Oct 29 16:00:41 2019 +0200

    monitor-manager: check for underscan setting validity upfront
    
    Instead of doing a roundtrip to the X server before setting it, rely on
    the previous value fetched before the configuration was sent over DBus.
    This matches the argument check we already do elsewhere, and will allow
    us to more easily add an additional condition to determine if underscan
    is supported.
    
    Based on mutter commit:
    https://gitlab.gnome.org/GNOME/mutter/commit/8665084df15190adc0d18cc77b

 backends/gf-monitor-manager.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
---
diff --git a/backends/gf-monitor-manager.c b/backends/gf-monitor-manager.c
index 7a4890b..347986e 100644
--- a/backends/gf-monitor-manager.c
+++ b/backends/gf-monitor-manager.c
@@ -766,6 +766,7 @@ create_monitor_config_from_variant (GfMonitorManager  *manager,
   GfMonitor *monitor;
   GfMonitorMode *monitor_mode;
   gboolean enable_underscanning;
+  gboolean set_underscanning;
   GfMonitorSpec *monitor_spec;
   GfMonitorModeSpec *monitor_mode_spec;
   GfMonitorConfig *monitor_config;
@@ -804,12 +805,25 @@ create_monitor_config_from_variant (GfMonitorManager  *manager,
     }
 
   enable_underscanning = FALSE;
-  g_variant_lookup (properties_variant, "underscanning", "b", &enable_underscanning);
+  set_underscanning = g_variant_lookup (properties_variant,
+                                        "underscanning", "b",
+                                        &enable_underscanning);
 
   g_variant_unref (properties_variant);
   g_free (connector);
   g_free (mode_id);
 
+  if (set_underscanning)
+    {
+      if (enable_underscanning && !gf_monitor_supports_underscanning (monitor))
+        {
+          g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                       "Underscanning requested but unsupported");
+
+          return NULL;
+        }
+    }
+
   monitor_spec = gf_monitor_spec_clone (gf_monitor_get_spec (monitor));
 
   monitor_mode_spec = g_new0 (GfMonitorModeSpec, 1);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]