[mutter] monitor-manager: Keep pointer to backend
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor-manager: Keep pointer to backend
- Date: Fri, 6 Oct 2017 18:24:26 +0000 (UTC)
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]