[mutter] monitor-manager/kms: Move global ui scaling setting to MetaSettings
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor-manager/kms: Move global ui scaling setting to MetaSettings
- Date: Fri, 26 May 2017 07:19:53 +0000 (UTC)
commit 0bc312a54bbdd7d188f653882304772451b754fd
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Apr 21 17:22:49 2017 +0800
monitor-manager/kms: Move global ui scaling setting to MetaSettings
It'll be used elsewhere, so shouldn't be in MetaMonitorManagerKms.
https://bugzilla.gnome.org/show_bug.cgi?id=777732
src/backends/meta-settings-private.h | 3 +
src/backends/meta-settings.c | 64 ++++++++++++++++++++++++
src/backends/native/meta-monitor-manager-kms.c | 13 ++---
3 files changed, 71 insertions(+), 9 deletions(-)
---
diff --git a/src/backends/meta-settings-private.h b/src/backends/meta-settings-private.h
index 775b58b..4e13edc 100644
--- a/src/backends/meta-settings-private.h
+++ b/src/backends/meta-settings-private.h
@@ -44,6 +44,9 @@ void meta_settings_post_init (MetaSettings *settings);
void meta_settings_update_ui_scaling_factor (MetaSettings *settings);
+gboolean meta_settings_get_global_scaling_factor (MetaSettings *settings,
+ int *scaing_factor);
+
gboolean meta_settings_is_experimental_feature_enabled (MetaSettings *settings,
MetaExperimentalFeature feature);
diff --git a/src/backends/meta-settings.c b/src/backends/meta-settings.c
index 69c1390..d1dd97f 100644
--- a/src/backends/meta-settings.c
+++ b/src/backends/meta-settings.c
@@ -33,6 +33,7 @@
enum
{
UI_SCALING_FACTOR_CHANGED,
+ GLOBAL_SCALING_FACTOR_CHANGED,
EXPERIMENTAL_FEATURES_CHANGED,
N_SIGNALS
@@ -46,9 +47,11 @@ struct _MetaSettings
MetaBackend *backend;
+ GSettings *interface_settings;
GSettings *mutter_settings;
int ui_scaling_factor;
+ int global_scaling_factor;
MetaExperimentalFeature experimental_features;
gboolean experimental_features_overridden;
@@ -164,6 +167,49 @@ meta_settings_get_ui_scaling_factor (MetaSettings *settings)
return settings->ui_scaling_factor;
}
+static gboolean
+update_global_scaling_factor (MetaSettings *settings)
+{
+ int global_scaling_factor;
+
+ global_scaling_factor =
+ (int) g_settings_get_uint (settings->interface_settings,
+ "scaling-factor");
+
+ if (settings->global_scaling_factor != global_scaling_factor)
+ {
+ settings->global_scaling_factor = global_scaling_factor;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+gboolean
+meta_settings_get_global_scaling_factor (MetaSettings *settings,
+ int *out_scaling_factor)
+{
+ if (settings->global_scaling_factor == 0)
+ return FALSE;
+
+ *out_scaling_factor = settings->global_scaling_factor;
+ return TRUE;
+}
+
+static void
+interface_settings_changed (GSettings *interface_settings,
+ const char *key,
+ MetaSettings *settings)
+{
+ if (g_str_equal (key, "scaling-factor"))
+ {
+ if (update_global_scaling_factor (settings))
+ g_signal_emit (settings, signals[GLOBAL_SCALING_FACTOR_CHANGED], 0);
+ }
+}
+
gboolean
meta_settings_is_experimental_feature_enabled (MetaSettings *settings,
MetaExperimentalFeature feature)
@@ -274,6 +320,7 @@ meta_settings_dispose (GObject *object)
MetaSettings *settings = META_SETTINGS (object);
g_clear_object (&settings->mutter_settings);
+ g_clear_object (&settings->interface_settings);
G_OBJECT_CLASS (meta_settings_parent_class)->dispose (object);
}
@@ -281,11 +328,20 @@ meta_settings_dispose (GObject *object)
static void
meta_settings_init (MetaSettings *settings)
{
+ settings->interface_settings = g_settings_new ("org.gnome.desktop.interface");
+ g_signal_connect (settings->interface_settings, "changed",
+ G_CALLBACK (interface_settings_changed),
+ settings);
settings->mutter_settings = g_settings_new ("org.gnome.mutter");
g_signal_connect (settings->mutter_settings, "changed",
G_CALLBACK (mutter_settings_changed),
settings);
+ /* Chain up inter-dependent settings. */
+ g_signal_connect (settings, "global-scaling-factor-changed",
+ G_CALLBACK (meta_settings_update_ui_scaling_factor), NULL);
+
+ update_global_scaling_factor (settings);
update_experimental_features (settings);
}
@@ -310,6 +366,14 @@ meta_settings_class_init (MetaSettingsClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 0);
+ signals[GLOBAL_SCALING_FACTOR_CHANGED] =
+ g_signal_new ("global-scaling-factor-changed",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
signals[EXPERIMENTAL_FEATURES_CHANGED] =
g_signal_new ("experimental-features-changed",
G_TYPE_FROM_CLASS (object_class),
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index 81ba3e4..372c02a 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -28,6 +28,7 @@
#include "meta-monitor-config-manager.h"
#include "meta-backend-private.h"
#include "meta-renderer-native.h"
+#include "backends/meta-input-settings-private.h"
#include <string.h>
#include <stdlib.h>
@@ -115,8 +116,6 @@ struct _MetaMonitorManagerKms
GUdevClient *udev;
guint uevent_handler_id;
- GSettings *desktop_settings;
-
gboolean page_flips_not_supported;
int max_buffer_width;
@@ -1639,8 +1638,6 @@ meta_monitor_manager_kms_init (MetaMonitorManagerKms *manager_kms)
G_IO_IN | G_IO_ERR);
manager_kms->source->manager_kms = manager_kms;
g_source_attach (source, NULL);
-
- manager_kms->desktop_settings = g_settings_new ("org.gnome.desktop.interface");
}
static void
@@ -1908,12 +1905,11 @@ meta_monitor_manager_kms_calculate_monitor_mode_scale (MetaMonitorManager *manag
MetaMonitor *monitor,
MetaMonitorMode *monitor_mode)
{
- MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (manager);
+ MetaBackend *backend = meta_get_backend ();
+ MetaSettings *settings = meta_backend_get_settings (backend);
int global_scale;
- global_scale = g_settings_get_uint (manager_kms->desktop_settings,
- "scaling-factor");
- if (global_scale > 0)
+ if (meta_settings_get_global_scaling_factor (settings, &global_scale))
return global_scale;
else
return compute_scale (monitor, monitor_mode);
@@ -1996,7 +1992,6 @@ meta_monitor_manager_kms_dispose (GObject *object)
MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (object);
g_clear_object (&manager_kms->udev);
- g_clear_object (&manager_kms->desktop_settings);
G_OBJECT_CLASS (meta_monitor_manager_kms_parent_class)->dispose (object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]