[mutter] DisplayConfig: Add an optional 'is_underscanning' monitor property



commit 6b2a11142804e7e499843497e1c03a14d592bbe9
Author: Jonas Ådahl <jadahl gmail com>
Date:   Mon Jan 23 17:59:43 2017 +0800

    DisplayConfig: Add an optional 'is_underscanning' monitor property
    
    Add a 'is_underscanning' entry to the properties map, if the monitor
    supports underscanning. The client should assume a monitor does not
    support underscanning if no property was added.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777732

 src/backends/meta-monitor-manager.c    |   13 ++++++++++++-
 src/backends/meta-monitor.c            |   10 ++++++++++
 src/backends/meta-monitor.h            |    2 ++
 src/org.gnome.Mutter.DisplayConfig.xml |    4 +++-
 4 files changed, 27 insertions(+), 2 deletions(-)
---
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index b520e2e..b8d9b4e 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -1209,6 +1209,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
       MetaMonitorMode *current_mode;
       MetaMonitorMode *preferred_mode;
       GVariantBuilder modes_builder;
+      GVariantBuilder properties_builder;
       GList *k;
 
       current_mode = meta_monitor_get_current_mode (monitor);
@@ -1240,13 +1241,23 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
                                  flags);
         }
 
+      g_variant_builder_init (&properties_builder, G_VARIANT_TYPE ("a{sv}"));
+      if (meta_monitor_supports_underscanning (monitor))
+        {
+          gboolean is_underscanning = meta_monitor_is_underscanning (monitor);
+
+          g_variant_builder_add (&properties_builder, "{sv}",
+                                 "is_underscanning",
+                                 g_variant_new_boolean (is_underscanning));
+        }
+
       g_variant_builder_add (&monitors_builder, MONITOR_FORMAT,
                              monitor_spec->connector,
                              monitor_spec->vendor,
                              monitor_spec->product,
                              monitor_spec->serial,
                              &modes_builder,
-                             NULL);
+                             &properties_builder);
     }
 
   for (l = manager->logical_monitors; l; l = l->next)
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 35e16b9..9a242cd 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -187,6 +187,16 @@ meta_monitor_is_primary (MetaMonitor *monitor)
 }
 
 gboolean
+meta_monitor_supports_underscanning (MetaMonitor *monitor)
+{
+  MetaOutput *output;
+
+  output = meta_monitor_get_main_output (monitor);
+
+  return output->supports_underscanning;
+}
+
+gboolean
 meta_monitor_is_underscanning (MetaMonitor *monitor)
 {
   MetaOutput *output;
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index 3940a2f..fc75c8c 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -91,6 +91,8 @@ MetaOutput * meta_monitor_get_main_output (MetaMonitor *monitor);
 
 gboolean meta_monitor_is_primary (MetaMonitor *monitor);
 
+gboolean meta_monitor_supports_underscanning (MetaMonitor *monitor);
+
 gboolean meta_monitor_is_underscanning (MetaMonitor *monitor);
 
 gboolean meta_monitor_is_laptop_panel (MetaMonitor *monitor);
diff --git a/src/org.gnome.Mutter.DisplayConfig.xml b/src/org.gnome.Mutter.DisplayConfig.xml
index a71e145..9efe535 100644
--- a/src/org.gnome.Mutter.DisplayConfig.xml
+++ b/src/org.gnome.Mutter.DisplayConfig.xml
@@ -313,6 +313,9 @@
        * a{sv} properties: optional properties, including:
            - "width_mm" (i): physical width of monitor in millimeters
            - "height_mm" (i): physical height of monitor in millimeters
+           - "is_underscanning" (b): whether underscanning is enabled
+                                     (absence of this means underscanning
+                                     not being supported)
 
         Possible mode flags:
          1 : preferred mode
@@ -337,7 +340,6 @@
 
        @max_screen_size represents the maximum size the screen may have, or 0x0 if no
        such limit is known.
-
     -->
     <method name="GetCurrentState">
       <arg name="serial" direction="out" type="u" />


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