summaryrefslogtreecommitdiff
path: root/panels/display
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-06-11 16:11:55 +0200
committerCarlos Garnacho <carlosg@gnome.org>2020-09-05 08:03:44 +0000
commitc89f5ca5262bc8bb738fee0de5546471012ebf0f (patch)
treef81f9bc082fe74acbedacc29e067917cb80733de /panels/display
parentb91a83c402fcced3f8e3e8e49c353eb430231724 (diff)
downloadgnome-control-center-c89f5ca5262bc8bb738fee0de5546471012ebf0f.tar.gz
display: Add panel-orientation-managed signal to CcDisplayConfig
So we can track changes on this property.
Diffstat (limited to 'panels/display')
-rw-r--r--panels/display/cc-display-config-dbus.c53
-rw-r--r--panels/display/cc-display-config.c5
2 files changed, 48 insertions, 10 deletions
diff --git a/panels/display/cc-display-config-dbus.c b/panels/display/cc-display-config-dbus.c
index 43b0ab2fc..cdc8f8aef 100644
--- a/panels/display/cc-display-config-dbus.c
+++ b/panels/display/cc-display-config-dbus.c
@@ -882,6 +882,8 @@ struct _CcDisplayConfigDBus
int min_width;
int min_height;
+ guint panel_orientation_managed;
+
guint32 serial;
gboolean supports_mirroring;
gboolean supports_changing_layout_mode;
@@ -1273,17 +1275,8 @@ static gboolean
cc_display_config_dbus_get_panel_orientation_managed (CcDisplayConfig *pself)
{
CcDisplayConfigDBus *self = CC_DISPLAY_CONFIG_DBUS (pself);
- gboolean retval;
- GVariant *v;
-
- v = g_dbus_proxy_get_cached_property (self->proxy, "PanelOrientationManaged");
- if (!v)
- return FALSE;
- retval = g_variant_get_boolean (v);
- g_variant_unref (v);
-
- return retval;
+ return self->panel_orientation_managed;
}
static void
@@ -1440,6 +1433,42 @@ construct_monitors (CcDisplayConfigDBus *self,
}
static void
+update_panel_orientation_managed (CcDisplayConfigDBus *self)
+{
+ g_autoptr(GVariant) v = NULL;
+ gboolean panel_orientation_managed = FALSE;
+
+ if (self->proxy != NULL)
+ {
+ v = g_dbus_proxy_get_cached_property (self->proxy, "PanelOrientationManaged");
+ if (v)
+ {
+ panel_orientation_managed = g_variant_get_boolean (v);
+ }
+ }
+
+ if (panel_orientation_managed == self->panel_orientation_managed)
+ return;
+
+ self->panel_orientation_managed = panel_orientation_managed;
+ g_signal_emit_by_name (self, "panel-orientation-managed", self->panel_orientation_managed);
+}
+
+static void
+proxy_properties_changed_cb (GDBusProxy *proxy,
+ GVariant *changed_properties,
+ GStrv invalidated_properties,
+ CcDisplayConfigDBus *self)
+{
+ GVariantDict dict;
+
+ g_variant_dict_init (&dict, changed_properties);
+
+ if (g_variant_dict_contains (&dict, "PanelOrientationManaged"))
+ update_panel_orientation_managed (self);
+}
+
+static void
cc_display_config_dbus_constructed (GObject *object)
{
CcDisplayConfigDBus *self = CC_DISPLAY_CONFIG_DBUS (object);
@@ -1498,6 +1527,10 @@ cc_display_config_dbus_constructed (GObject *object)
if (error)
g_warning ("Could not create DisplayConfig proxy: %s", error->message);
+ g_signal_connect (self->proxy, "g-properties-changed",
+ G_CALLBACK (proxy_properties_changed_cb), self);
+ update_panel_orientation_managed (self);
+
G_OBJECT_CLASS (cc_display_config_dbus_parent_class)->constructed (object);
}
diff --git a/panels/display/cc-display-config.c b/panels/display/cc-display-config.c
index 4cacdbff6..08b4c4877 100644
--- a/panels/display/cc-display-config.c
+++ b/panels/display/cc-display-config.c
@@ -486,6 +486,11 @@ cc_display_config_class_init (CcDisplayConfigClass *klass)
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
+ g_signal_new ("panel-orientation-managed",
+ CC_TYPE_DISPLAY_CONFIG,
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
gobject_class->constructed = cc_display_config_constructed;
gobject_class->finalize = cc_display_config_finalize;