[mutter] monitor-manager: Keep pointer to backend



commit 315a6f43d756df5989d704ebf40b2704e422113a
Author: Jonas Ådahl <jadahl gmail com>
Date:   Mon Jul 10 17:39:07 2017 +0800

    monitor-manager: Keep pointer to backend
    
    Instead of accessing the global singleton, keep a pointer to the
    backend in the MetaMonitorManager struct.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=785381

 src/backends/meta-monitor-manager-private.h       |    4 +
 src/backends/meta-monitor-manager.c               |   74 +++++++++++++++++++--
 src/backends/native/meta-backend-native.c         |    4 +-
 src/backends/native/meta-monitor-manager-kms.c    |   13 ++--
 src/backends/x11/cm/meta-backend-x11-cm.c         |    4 +-
 src/backends/x11/meta-monitor-manager-xrandr.c    |   14 ++++-
 src/backends/x11/nested/meta-backend-x11-nested.c |    4 +-
 src/core/keybindings.c                            |    1 +
 src/tests/meta-backend-test.c                     |    4 +-
 9 files changed, 106 insertions(+), 16 deletions(-)
---
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
index ad3bf80..ab6b529 100644
--- a/src/backends/meta-monitor-manager-private.h
+++ b/src/backends/meta-monitor-manager-private.h
@@ -148,6 +148,8 @@ struct _MetaMonitorManager
 {
   MetaDBusDisplayConfigSkeleton parent_instance;
 
+  MetaBackend *backend;
+
   /* XXX: this structure is very badly
      packed, but I like the logical organization
      of fields */
@@ -259,6 +261,8 @@ struct _MetaMonitorManagerClass
   MetaLogicalMonitorLayoutMode (*get_default_layout_mode) (MetaMonitorManager *);
 };
 
+MetaBackend *       meta_monitor_manager_get_backend (MetaMonitorManager *manager);
+
 void                meta_monitor_manager_setup (MetaMonitorManager *manager);
 
 void                meta_monitor_manager_rebuild (MetaMonitorManager *manager,
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 6511926..ba00556 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -47,6 +47,17 @@
 
 #define DEFAULT_DISPLAY_CONFIGURATION_TIMEOUT 20
 
+enum
+{
+  PROP_0,
+
+  PROP_BACKEND,
+
+  PROP_LAST
+};
+
+static GParamSpec *obj_props[PROP_LAST];
+
 enum {
   CONFIRM_DISPLAY_CHANGE,
   SIGNALS_LAST
@@ -77,6 +88,12 @@ static gboolean
 meta_monitor_manager_is_config_complete (MetaMonitorManager *manager,
                                          MetaMonitorsConfig *config);
 
+MetaBackend *
+meta_monitor_manager_get_backend (MetaMonitorManager *manager)
+{
+  return manager->backend;
+}
+
 static void
 meta_monitor_manager_init (MetaMonitorManager *manager)
 {
@@ -696,7 +713,7 @@ meta_monitor_manager_constructed (GObject *object)
   MetaMonitorManager *manager = META_MONITOR_MANAGER (object);
   MetaMonitorManagerClass *manager_class =
     META_MONITOR_MANAGER_GET_CLASS (manager);
-  MetaBackend *backend = meta_get_backend ();
+  MetaBackend *backend = manager->backend;
   MetaSettings *settings = meta_backend_get_settings (backend);
 
   manager->experimental_features_changed_handler_id =
@@ -735,7 +752,7 @@ meta_monitor_manager_finalize (GObject *object)
   g_list_free_full (manager->crtcs, g_object_unref);
   g_list_free_full (manager->logical_monitors, g_object_unref);
 
-  g_signal_handler_disconnect (meta_get_backend (),
+  g_signal_handler_disconnect (manager->backend,
                                manager->experimental_features_changed_handler_id);
 
   G_OBJECT_CLASS (meta_monitor_manager_parent_class)->finalize (object);
@@ -773,6 +790,42 @@ meta_monitor_manager_real_get_edid_file (MetaMonitorManager *manager,
 }
 
 static void
+meta_monitor_manager_set_property (GObject      *object,
+                                   guint         prop_id,
+                                   const GValue *value,
+                                   GParamSpec   *pspec)
+{
+  MetaMonitorManager *manager = META_MONITOR_MANAGER (object);
+
+  switch (prop_id)
+    {
+    case PROP_BACKEND:
+      manager->backend = g_value_get_object (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+meta_monitor_manager_get_property (GObject    *object,
+                                   guint       prop_id,
+                                   GValue     *value,
+                                   GParamSpec *pspec)
+{
+  MetaMonitorManager *manager = META_MONITOR_MANAGER (object);
+
+  switch (prop_id)
+    {
+    case PROP_BACKEND:
+      g_value_set_object (value, manager->backend);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
 meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -780,6 +833,8 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
   object_class->constructed = meta_monitor_manager_constructed;
   object_class->dispose = meta_monitor_manager_dispose;
   object_class->finalize = meta_monitor_manager_finalize;
+  object_class->get_property = meta_monitor_manager_get_property;
+  object_class->set_property = meta_monitor_manager_set_property;
 
   klass->get_edid_file = meta_monitor_manager_real_get_edid_file;
   klass->read_edid = meta_monitor_manager_real_read_edid;
@@ -792,6 +847,16 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
                  0,
                   NULL, NULL, NULL,
                  G_TYPE_NONE, 0);
+
+  obj_props[PROP_BACKEND] =
+    g_param_spec_object ("backend",
+                         "backend",
+                         "MetaBackend",
+                         META_TYPE_BACKEND,
+                         G_PARAM_READWRITE |
+                         G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_STRINGS);
+  g_object_class_install_properties (object_class, PROP_LAST, obj_props);
 }
 
 static const double known_diagonals[] = {
@@ -2502,11 +2567,10 @@ meta_monitor_manager_read_current_state (MetaMonitorManager *manager)
 static void
 meta_monitor_manager_notify_monitors_changed (MetaMonitorManager *manager)
 {
-  MetaBackend *backend = meta_get_backend ();
-
   manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
 
-  meta_backend_monitors_changed (backend);
+  meta_backend_monitors_changed (manager->backend);
+
   g_signal_emit_by_name (manager, "monitors-changed");
 }
 
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
index 216174b..dd6fbfa 100644
--- a/src/backends/native/meta-backend-native.c
+++ b/src/backends/native/meta-backend-native.c
@@ -403,7 +403,9 @@ static MetaMonitorManager *
 meta_backend_native_create_monitor_manager (MetaBackend *backend,
                                             GError     **error)
 {
-  return g_initable_new (META_TYPE_MONITOR_MANAGER_KMS, NULL, error, NULL);
+  return g_initable_new (META_TYPE_MONITOR_MANAGER_KMS, NULL, error,
+                         "backend", backend,
+                         NULL);
 }
 
 static MetaCursorRenderer *
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index 8d4362b..73ddfcc 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -1034,7 +1034,7 @@ meta_monitor_manager_kms_calculate_supported_scales (MetaMonitorManager
 static MetaMonitorManagerCapability
 meta_monitor_manager_kms_get_capabilities (MetaMonitorManager *manager)
 {
-  MetaBackend *backend = meta_get_backend ();
+  MetaBackend *backend = meta_monitor_manager_get_backend (manager);
   MetaSettings *settings = meta_backend_get_settings (backend);
   MetaRenderer *renderer = meta_backend_get_renderer (backend);
   MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
@@ -1079,7 +1079,7 @@ meta_monitor_manager_kms_get_max_screen_size (MetaMonitorManager *manager,
 static MetaLogicalMonitorLayoutMode
 meta_monitor_manager_kms_get_default_layout_mode (MetaMonitorManager *manager)
 {
-  MetaBackend *backend = meta_get_backend ();
+  MetaBackend *backend = meta_monitor_manager_get_backend (manager);
   MetaSettings *settings = meta_backend_get_settings (backend);
 
   if (!meta_is_stage_views_enabled ())
@@ -1147,7 +1147,8 @@ count_devices_with_connectors (const char *seat_id,
 static char *
 get_primary_gpu_path (MetaMonitorManagerKms *manager_kms)
 {
-  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
+  MetaBackend *backend = meta_monitor_manager_get_backend (manager);
   MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
   MetaLauncher *launcher = meta_backend_native_get_launcher (backend_native);
   g_autoptr (GUdevEnumerator) enumerator = NULL;
@@ -1260,7 +1261,8 @@ open_primary_gpu (MetaMonitorManagerKms *manager_kms,
                   char                 **kms_file_path_out,
                   GError               **error)
 {
-  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
+  MetaBackend *backend = meta_monitor_manager_get_backend (manager);
   MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
   MetaLauncher *launcher = meta_backend_native_get_launcher (backend_native);
   g_autofree char *path = NULL;
@@ -1336,7 +1338,8 @@ static void
 meta_monitor_manager_kms_finalize (GObject *object)
 {
   MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (object);
-  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
+  MetaBackend *backend = meta_monitor_manager_get_backend (manager);
   MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
   MetaLauncher *launcher = meta_backend_native_get_launcher (backend_native);
 
diff --git a/src/backends/x11/cm/meta-backend-x11-cm.c b/src/backends/x11/cm/meta-backend-x11-cm.c
index 1cb914d..1e37722 100644
--- a/src/backends/x11/cm/meta-backend-x11-cm.c
+++ b/src/backends/x11/cm/meta-backend-x11-cm.c
@@ -102,7 +102,9 @@ static MetaMonitorManager *
 meta_backend_x11_cm_create_monitor_manager (MetaBackend *backend,
                                             GError     **error)
 {
-  return g_object_new (META_TYPE_MONITOR_MANAGER_XRANDR, NULL);
+  return g_object_new (META_TYPE_MONITOR_MANAGER_XRANDR,
+                       "backend", backend,
+                       NULL);
 }
 
 static MetaCursorRenderer *
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index 2598612..995ec63 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -1051,9 +1051,13 @@ meta_monitor_manager_xrandr_get_default_layout_mode (MetaMonitorManager *manager
 }
 
 static void
-meta_monitor_manager_xrandr_init (MetaMonitorManagerXrandr *manager_xrandr)
+meta_monitor_manager_xrandr_constructed (GObject *object)
 {
-  MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ());
+  MetaMonitorManagerXrandr *manager_xrandr =
+    META_MONITOR_MANAGER_XRANDR (object);
+  MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_xrandr);
+  MetaBackendX11 *backend =
+    META_BACKEND_X11 (meta_monitor_manager_get_backend (manager));
 
   manager_xrandr->xdisplay = meta_backend_x11_get_xdisplay (backend);
 
@@ -1105,12 +1109,18 @@ meta_monitor_manager_xrandr_finalize (GObject *object)
 }
 
 static void
+meta_monitor_manager_xrandr_init (MetaMonitorManagerXrandr *manager_xrandr)
+{
+}
+
+static void
 meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass)
 {
   MetaMonitorManagerClass *manager_class = META_MONITOR_MANAGER_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   object_class->finalize = meta_monitor_manager_xrandr_finalize;
+  object_class->constructed = meta_monitor_manager_xrandr_constructed;
 
   manager_class->read_current = meta_monitor_manager_xrandr_read_current;
   manager_class->read_edid = meta_monitor_manager_xrandr_read_edid;
diff --git a/src/backends/x11/nested/meta-backend-x11-nested.c 
b/src/backends/x11/nested/meta-backend-x11-nested.c
index 900c97f..923ae7c 100644
--- a/src/backends/x11/nested/meta-backend-x11-nested.c
+++ b/src/backends/x11/nested/meta-backend-x11-nested.c
@@ -42,7 +42,9 @@ static MetaMonitorManager *
 meta_backend_x11_nested_create_monitor_manager (MetaBackend *backend,
                                                 GError     **error)
 {
-  return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY, NULL);
+  return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY,
+                       "backend", backend,
+                       NULL);
 }
 
 static MetaCursorRenderer *
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index f2ef076..6a32eed 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -44,6 +44,7 @@
 #define KEY_GRAVE 0x29 /* assume the use of xf86-input-keyboard */
 #endif
 
+#include "backends/meta-backend-private.h"
 #include "backends/meta-monitor-manager-private.h"
 #include "backends/meta-logical-monitor.h"
 #include "backends/x11/meta-backend-x11.h"
diff --git a/src/tests/meta-backend-test.c b/src/tests/meta-backend-test.c
index ef597ad..57a9467 100644
--- a/src/tests/meta-backend-test.c
+++ b/src/tests/meta-backend-test.c
@@ -39,7 +39,9 @@ static MetaMonitorManager *
 meta_backend_test_create_monitor_manager (MetaBackend *backend,
                                           GError     **error)
 {
-  return g_object_new (META_TYPE_MONITOR_MANAGER_TEST, NULL);
+  return g_object_new (META_TYPE_MONITOR_MANAGER_TEST,
+                       "backend", backend,
+                       NULL);
 }
 
 static void


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