From de61da16aec8cd49294e1058358e43ff0822ea71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 7 Apr 2017 21:05:26 +0800 Subject: [PATCH] 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 08ba04fd4..41449aa2d 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 7281a371d..87de4e716 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 5104d731a..5657963e8 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