[mutter] monitor-manager: Expose the privacy screen state on DBus current state



commit fd1f6094c975b7238321cca29519267865c55b76
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Mon Mar 22 01:20:00 2021 +0100

    monitor-manager: Expose the privacy screen state on DBus current state
    
    Expose each monitor state as two booleans, not to expose the whole flags
    
    Related-to: GNOME/gnome-control-center#909
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1952>

 data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml |  6 ++++++
 src/backends/meta-monitor-manager.c                     | 14 ++++++++++++++
 2 files changed, 20 insertions(+)
---
diff --git a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml 
b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
index 7522652dc0..2a7c5bb1ec 100644
--- a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
+++ b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
@@ -336,6 +336,12 @@
                                laptop panel (absence of this means it is
                                not built in)
            - "display-name" (s): a human readable display name of the monitor
+           - "privacy-screen-state" (bb): the state of the privacy screen
+                                    (absence of this means it is not being
+                                    supported) first value indicates whether
+                                    it's enabled and second value whether it's
+                                    hardware locked (and so can't be changed
+                                    via gsettings)
 
         Possible mode flags:
          1 : preferred mode
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 1430171e72..2dff6539e1 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -1802,6 +1802,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
       MetaMonitorSpec *monitor_spec = meta_monitor_get_spec (monitor);
       MetaMonitorMode *current_mode;
       MetaMonitorMode *preferred_mode;
+      MetaPrivacyScreenState privacy_screen_state;
       GVariantBuilder modes_builder;
       GVariantBuilder monitor_properties_builder;
       GList *k;
@@ -1901,6 +1902,19 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
                              "display-name",
                              g_variant_new_string (display_name));
 
+      privacy_screen_state = meta_monitor_get_privacy_screen_state (monitor);
+      if (privacy_screen_state != META_PRIVACY_SCREEN_UNAVAILABLE)
+        {
+          GVariant *state;
+
+          state = g_variant_new ("(bb)",
+            !!(privacy_screen_state & META_PRIVACY_SCREEN_ENABLED),
+            !!(privacy_screen_state & META_PRIVACY_SCREEN_LOCKED));
+
+          g_variant_builder_add (&monitor_properties_builder, "{sv}",
+                                 "privacy-screen-state", state);
+        }
+
       g_variant_builder_add (&monitors_builder, MONITOR_FORMAT,
                              monitor_spec->connector,
                              monitor_spec->vendor,


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