[mutter] monitor-manager: Reconfigure when 'scale-monitor-framebuffer' is toggled



commit de61da16aec8cd49294e1058358e43ff0822ea71
Author: Jonas Ådahl <jadahl gmail com>
Date:   Fri Apr 7 21:05:26 2017 +0800

    monitor-manager: Reconfigure when 'scale-monitor-framebuffer' is toggled
    
    When the experimental feature 'scale-monitor-framebuffer' is enabled or
    disabled, reconfigure the monitors.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777732

 src/backends/meta-backend-private.h |    2 +
 src/backends/meta-backend.c         |    8 +++++-
 src/backends/meta-monitor-manager.c |   36 +++++++++++++++++++++++++++-------
 3 files changed, 36 insertions(+), 10 deletions(-)
---
diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h
index 08ba04f..41449aa 100644
--- a/src/backends/meta-backend-private.h
+++ b/src/backends/meta-backend-private.h
@@ -158,6 +158,8 @@ void meta_backend_monitors_changed (MetaBackend *backend);
 gboolean meta_backend_is_experimental_feature_enabled (MetaBackend            *backend,
                                                        MetaExperimentalFeature feature);
 
+MetaExperimentalFeature meta_backend_get_experimental_features (MetaBackend *backend);
+
 void meta_backend_override_experimental_features (MetaBackend *backend);
 
 void meta_backend_enable_experimental_feature (MetaBackend            *backend,
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index 7281a37..87de4e7 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -479,14 +479,18 @@ mutter_settings_changed (GSettings   *settings,
                          gchar       *key,
                          MetaBackend *backend)
 {
+  MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
+  MetaExperimentalFeature old_experimental_features;
   gboolean changed;
 
   if (!g_str_equal (key, "experimental-features"))
     return;
 
+  old_experimental_features = priv->experimental_features;
   changed = update_experimental_features (backend);
   if (changed)
-    g_signal_emit (backend, signals[EXPERIMENTAL_FEATURES_CHANGED], 0);
+    g_signal_emit (backend, signals[EXPERIMENTAL_FEATURES_CHANGED], 0,
+                   (unsigned int) old_experimental_features);
 }
 
 gboolean
@@ -557,7 +561,7 @@ meta_backend_class_init (MetaBackendClass *klass)
                   G_SIGNAL_RUN_LAST,
                   0,
                   NULL, NULL, NULL,
-                  G_TYPE_NONE, 0);
+                  G_TYPE_NONE, 1, G_TYPE_UINT);
   signals[UI_SCALING_FACTOR_CHANGED] =
     g_signal_new ("ui-scaling-factor-changed",
                   G_TYPE_FROM_CLASS (object_class),
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 5104d73..5657963 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -520,25 +520,45 @@ done:
 }
 
 static void
-experimental_features_changed (MetaBackend        *backend,
-                               MetaMonitorManager *manager)
+experimental_features_changed (MetaBackend            *backend,
+                               MetaExperimentalFeature old_experimental_features,
+                               MetaMonitorManager     *manager)
 {
   MetaDBusDisplayConfig *skeleton = META_DBUS_DISPLAY_CONFIG (manager);
   gboolean was_config_manager_enabled;
+  gboolean was_stage_views_scaled;
   gboolean is_config_manager_enabled;
+  gboolean is_stage_views_scaled;
+  gboolean should_reconfigure = FALSE;
+  int ui_scaling_factor;
 
   is_config_manager_enabled = meta_is_monitor_config_manager_enabled ();
   was_config_manager_enabled =
     meta_dbus_display_config_get_is_experimental_api_enabled (skeleton);
 
   if (was_config_manager_enabled != is_config_manager_enabled)
-    {
-      meta_dbus_display_config_set_is_experimental_api_enabled (
-        skeleton, is_config_manager_enabled);
+    meta_dbus_display_config_set_is_experimental_api_enabled (
+      skeleton, is_config_manager_enabled);
 
-      meta_monitor_manager_on_hotplug (manager);
-      meta_backend_notify_ui_scaling_factor_changed (backend);
-    }
+  was_stage_views_scaled =
+    !!(old_experimental_features &
+       META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER);
+  is_stage_views_scaled =
+    meta_backend_is_experimental_feature_enabled (
+      backend,
+      META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER);
+
+  if (is_config_manager_enabled != was_config_manager_enabled ||
+      is_stage_views_scaled != was_stage_views_scaled)
+    should_reconfigure = TRUE;
+
+  ui_scaling_factor = meta_backend_get_ui_scaling_factor (backend);
+
+  if (should_reconfigure)
+    meta_monitor_manager_on_hotplug (manager);
+
+  if (ui_scaling_factor != meta_backend_get_ui_scaling_factor (backend))
+    meta_backend_notify_ui_scaling_factor_changed (backend);
 }
 
 static void


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