[mutter] compositor: Get the stage via the backend
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] compositor: Get the stage via the backend
- Date: Fri, 5 Jun 2020 21:55:47 +0000 (UTC)
commit 25f9406e6918070891dd8c1ab548420fda67e63d
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Thu Apr 16 19:14:21 2020 +0200
compositor: Get the stage via the backend
We would get the MetaDisplay from the backend singleton before creating
the MetaCompositor, then in MetaCompositor, get the backend singleton
again to get the stage. To get rid of the extra singleton fetching, just
pass the backend the MetaCompositor constructors, and fetch the stage
directly from the backend everytime it's needed.
This also makes it available earlier than before, as we didn't set our
instance private stage pointer until the manage() call.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1289
src/compositor/compositor.c | 44 ++++++++++++++++++++++-----------
src/compositor/meta-compositor-native.c | 4 ++-
src/compositor/meta-compositor-native.h | 3 ++-
src/compositor/meta-compositor-server.c | 4 ++-
src/compositor/meta-compositor-server.h | 3 ++-
src/compositor/meta-compositor-x11.c | 4 ++-
src/compositor/meta-compositor-x11.h | 3 ++-
src/core/display.c | 8 +++---
8 files changed, 49 insertions(+), 24 deletions(-)
---
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index d45d507432..5918c90474 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -91,6 +91,7 @@ enum
PROP_0,
PROP_DISPLAY,
+ PROP_BACKEND,
N_PROPS
};
@@ -111,6 +112,7 @@ typedef struct _MetaCompositorPrivate
GObject parent;
MetaDisplay *display;
+ MetaBackend *backend;
guint pre_paint_func_id;
guint post_paint_func_id;
@@ -231,7 +233,7 @@ meta_get_stage_for_display (MetaDisplay *display)
g_return_val_if_fail (compositor, NULL);
priv = meta_compositor_get_instance_private (compositor);
- return priv->stage;
+ return meta_backend_get_stage (priv->backend);
}
/**
@@ -564,12 +566,11 @@ meta_compositor_do_manage (MetaCompositor *compositor,
MetaCompositorPrivate *priv =
meta_compositor_get_instance_private (compositor);
MetaDisplay *display = priv->display;
- MetaBackend *backend = meta_get_backend ();
-
- priv->stage = meta_backend_get_stage (backend);
+ MetaBackend *backend = priv->backend;
+ ClutterActor *stage = meta_backend_get_stage (backend);
priv->stage_presented_id =
- g_signal_connect (priv->stage, "presented",
+ g_signal_connect (stage, "presented",
G_CALLBACK (on_presented),
compositor);
@@ -582,18 +583,18 @@ meta_compositor_do_manage (MetaCompositor *compositor,
* matter.
*/
priv->stage_after_paint_id =
- g_signal_connect_after (priv->stage, "after-paint",
+ g_signal_connect_after (stage, "after-paint",
G_CALLBACK (after_stage_paint), compositor);
- clutter_stage_set_sync_delay (CLUTTER_STAGE (priv->stage), META_SYNC_DELAY);
+ clutter_stage_set_sync_delay (CLUTTER_STAGE (stage), META_SYNC_DELAY);
priv->window_group = meta_window_group_new (display);
priv->top_window_group = meta_window_group_new (display);
priv->feedback_group = meta_window_group_new (display);
- clutter_actor_add_child (priv->stage, priv->window_group);
- clutter_actor_add_child (priv->stage, priv->top_window_group);
- clutter_actor_add_child (priv->stage, priv->feedback_group);
+ clutter_actor_add_child (stage, priv->window_group);
+ clutter_actor_add_child (stage, priv->top_window_group);
+ clutter_actor_add_child (stage, priv->feedback_group);
if (!META_COMPOSITOR_GET_CLASS (compositor)->manage (compositor, error))
return FALSE;
@@ -1162,7 +1163,7 @@ meta_compositor_real_post_paint (MetaCompositor *compositor)
case COGL_GRAPHICS_RESET_STATUS_PURGED_CONTEXT_RESET:
g_signal_emit_by_name (priv->display, "gl-video-memory-purged");
- clutter_actor_queue_redraw (CLUTTER_ACTOR (priv->stage));
+ clutter_actor_queue_redraw (meta_backend_get_stage (priv->backend));
break;
default:
@@ -1211,6 +1212,9 @@ meta_compositor_set_property (GObject *object,
case PROP_DISPLAY:
priv->display = g_value_get_object (value);
break;
+ case PROP_BACKEND:
+ priv->backend = g_value_get_object (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -1231,6 +1235,9 @@ meta_compositor_get_property (GObject *object,
case PROP_DISPLAY:
g_value_set_object (value, priv->display);
break;
+ case PROP_BACKEND:
+ g_value_set_object (value, priv->backend);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -1266,11 +1273,12 @@ meta_compositor_dispose (GObject *object)
MetaCompositor *compositor = META_COMPOSITOR (object);
MetaCompositorPrivate *priv =
meta_compositor_get_instance_private (compositor);
+ ClutterActor *stage = meta_backend_get_stage (priv->backend);
g_clear_pointer (&priv->laters, meta_laters_free);
- g_clear_signal_handler (&priv->stage_after_paint_id, priv->stage);
- g_clear_signal_handler (&priv->stage_presented_id, priv->stage);
+ g_clear_signal_handler (&priv->stage_after_paint_id, stage);
+ g_clear_signal_handler (&priv->stage_presented_id, stage);
g_clear_handle_id (&priv->pre_paint_func_id,
clutter_threads_remove_repaint_func);
@@ -1309,6 +1317,14 @@ meta_compositor_class_init (MetaCompositorClass *klass)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
+ 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, N_PROPS, obj_props);
signals[PRE_PAINT] =
@@ -1615,7 +1631,7 @@ meta_compositor_get_stage (MetaCompositor *compositor)
MetaCompositorPrivate *priv =
meta_compositor_get_instance_private (compositor);
- return CLUTTER_STAGE (priv->stage);
+ return CLUTTER_STAGE (meta_backend_get_stage (priv->backend));
}
MetaWindowActor *
diff --git a/src/compositor/meta-compositor-native.c b/src/compositor/meta-compositor-native.c
index 85929c0353..cbbca374ba 100644
--- a/src/compositor/meta-compositor-native.c
+++ b/src/compositor/meta-compositor-native.c
@@ -127,10 +127,12 @@ meta_compositor_native_pre_paint (MetaCompositor *compositor)
}
MetaCompositorNative *
-meta_compositor_native_new (MetaDisplay *display)
+meta_compositor_native_new (MetaDisplay *display,
+ MetaBackend *backend)
{
return g_object_new (META_TYPE_COMPOSITOR_NATIVE,
"display", display,
+ "backend", backend,
NULL);
}
diff --git a/src/compositor/meta-compositor-native.h b/src/compositor/meta-compositor-native.h
index d276a5905f..2b1c652087 100644
--- a/src/compositor/meta-compositor-native.h
+++ b/src/compositor/meta-compositor-native.h
@@ -27,6 +27,7 @@
G_DECLARE_FINAL_TYPE (MetaCompositorNative, meta_compositor_native,
META, COMPOSITOR_NATIVE, MetaCompositor)
-MetaCompositorNative * meta_compositor_native_new (MetaDisplay *display);
+MetaCompositorNative * meta_compositor_native_new (MetaDisplay *display,
+ MetaBackend *backend);
#endif /* META_COMPOSITOR_NATIVE_H */
diff --git a/src/compositor/meta-compositor-server.c b/src/compositor/meta-compositor-server.c
index f61f55560b..f53c10a196 100644
--- a/src/compositor/meta-compositor-server.c
+++ b/src/compositor/meta-compositor-server.c
@@ -37,10 +37,12 @@ meta_compositor_server_unmanage (MetaCompositor *compositor)
}
MetaCompositorServer *
-meta_compositor_server_new (MetaDisplay *display)
+meta_compositor_server_new (MetaDisplay *display,
+ MetaBackend *backend)
{
return g_object_new (META_TYPE_COMPOSITOR_SERVER,
"display", display,
+ "backend", backend,
NULL);
}
diff --git a/src/compositor/meta-compositor-server.h b/src/compositor/meta-compositor-server.h
index 8b4a92748a..2bf8d5ec3b 100644
--- a/src/compositor/meta-compositor-server.h
+++ b/src/compositor/meta-compositor-server.h
@@ -32,6 +32,7 @@ struct _MetaCompositorServerClass
MetaCompositorClass parent_class;
};
-MetaCompositorServer * meta_compositor_server_new (MetaDisplay *display);
+MetaCompositorServer * meta_compositor_server_new (MetaDisplay *display,
+ MetaBackend *backend);
#endif /* META_COMPOSITOR_SERVER_H */
diff --git a/src/compositor/meta-compositor-x11.c b/src/compositor/meta-compositor-x11.c
index 211b907e9d..0ab4aa0320 100644
--- a/src/compositor/meta-compositor-x11.c
+++ b/src/compositor/meta-compositor-x11.c
@@ -371,10 +371,12 @@ meta_compositor_x11_get_output_xwindow (MetaCompositorX11 *compositor_x11)
}
MetaCompositorX11 *
-meta_compositor_x11_new (MetaDisplay *display)
+meta_compositor_x11_new (MetaDisplay *display,
+ MetaBackend *backend)
{
return g_object_new (META_TYPE_COMPOSITOR_X11,
"display", display,
+ "backend", backend,
NULL);
}
diff --git a/src/compositor/meta-compositor-x11.h b/src/compositor/meta-compositor-x11.h
index 7165493cdc..42554feb39 100644
--- a/src/compositor/meta-compositor-x11.h
+++ b/src/compositor/meta-compositor-x11.h
@@ -27,7 +27,8 @@
G_DECLARE_FINAL_TYPE (MetaCompositorX11, meta_compositor_x11,
META, COMPOSITOR_X11, MetaCompositor)
-MetaCompositorX11 * meta_compositor_x11_new (MetaDisplay *display);
+MetaCompositorX11 * meta_compositor_x11_new (MetaDisplay *display,
+ MetaBackend *backend);
void meta_compositor_x11_process_xevent (MetaCompositorX11 *compositor_x11,
XEvent *xevent,
diff --git a/src/core/display.c b/src/core/display.c
index d49475dcb2..4f2ed6c600 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -573,17 +573,17 @@ meta_display_remove_pending_pings_for_window (MetaDisplay *display,
static MetaCompositor *
create_compositor (MetaDisplay *display)
{
-#ifdef HAVE_WAYLAND
MetaBackend *backend = meta_get_backend ();
+#ifdef HAVE_WAYLAND
#ifdef HAVE_NATIVE_BACKEND
if (META_IS_BACKEND_NATIVE (backend))
- return META_COMPOSITOR (meta_compositor_native_new (display));
+ return META_COMPOSITOR (meta_compositor_native_new (display, backend));
#endif
if (META_IS_BACKEND_X11_NESTED (backend))
- return META_COMPOSITOR (meta_compositor_server_new (display));
+ return META_COMPOSITOR (meta_compositor_server_new (display, backend));
#endif
- return META_COMPOSITOR (meta_compositor_x11_new (display));
+ return META_COMPOSITOR (meta_compositor_x11_new (display, backend));
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]