[mutter] monitor-manager: Reconfigure when 'scale-monitor-framebuffer' is toggled
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor-manager: Reconfigure when 'scale-monitor-framebuffer' is toggled
- Date: Fri, 7 Apr 2017 14:38:06 +0000 (UTC)
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]