1
0
Fork 0

clutter/backend: Keep a back pointer to the Context

Will be useful in the upcoming commits

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3977>
This commit is contained in:
Bilal Elmoussaoui 2024-08-20 21:33:56 +02:00
parent b02a29fee7
commit 8a71c89442
12 changed files with 87 additions and 14 deletions

View file

@ -38,6 +38,8 @@ struct _ClutterBackend
/*< private >*/ /*< private >*/
GObject parent_instance; GObject parent_instance;
ClutterContext *context;
CoglRenderer *cogl_renderer; CoglRenderer *cogl_renderer;
CoglDisplay *cogl_display; CoglDisplay *cogl_display;
CoglContext *cogl_context; CoglContext *cogl_context;

View file

@ -61,6 +61,15 @@ enum
LAST_SIGNAL LAST_SIGNAL
}; };
enum
{
PROP_0,
PROP_CONTEXT,
N_PROPS
};
static GParamSpec *pspecs[N_PROPS] = { 0 };
G_DEFINE_ABSTRACT_TYPE (ClutterBackend, clutter_backend, G_TYPE_OBJECT) G_DEFINE_ABSTRACT_TYPE (ClutterBackend, clutter_backend, G_TYPE_OBJECT)
static guint backend_signals[LAST_SIGNAL] = { 0, }; static guint backend_signals[LAST_SIGNAL] = { 0, };
@ -89,6 +98,44 @@ clutter_backend_dispose (GObject *gobject)
G_OBJECT_CLASS (clutter_backend_parent_class)->dispose (gobject); G_OBJECT_CLASS (clutter_backend_parent_class)->dispose (gobject);
} }
static void
clutter_backend_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
ClutterBackend *backend = CLUTTER_BACKEND (object);
switch (prop_id)
{
case PROP_CONTEXT:
g_value_set_object (value, backend->context);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
clutter_backend_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
ClutterBackend *backend = CLUTTER_BACKEND (object);
switch (prop_id)
{
case PROP_CONTEXT:
backend->context = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void static void
clutter_backend_real_resolution_changed (ClutterBackend *backend) clutter_backend_real_resolution_changed (ClutterBackend *backend)
{ {
@ -238,6 +285,8 @@ clutter_backend_class_init (ClutterBackendClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->dispose = clutter_backend_dispose; gobject_class->dispose = clutter_backend_dispose;
gobject_class->get_property = clutter_backend_get_property;
gobject_class->set_property = clutter_backend_set_property;
/** /**
* ClutterBackend::resolution-changed: * ClutterBackend::resolution-changed:
@ -284,6 +333,15 @@ clutter_backend_class_init (ClutterBackendClass *klass)
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
pspecs[PROP_CONTEXT] =
g_param_spec_object ("context", NULL, NULL,
CLUTTER_TYPE_CONTEXT,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_properties (gobject_class, N_PROPS, pspecs);
klass->resolution_changed = clutter_backend_real_resolution_changed; klass->resolution_changed = clutter_backend_real_resolution_changed;
klass->create_context = clutter_backend_real_create_context; klass->create_context = clutter_backend_real_create_context;

View file

@ -267,7 +267,7 @@ clutter_context_new (ClutterBackendConstructor backend_constructor,
init_clutter_debug (context); init_clutter_debug (context);
context->show_fps = clutter_show_fps; context->show_fps = clutter_show_fps;
context->backend = backend_constructor (user_data); context->backend = backend_constructor (context, user_data);
context->settings = clutter_settings_get_default (); context->settings = clutter_settings_get_default ();
_clutter_settings_set_backend (context->settings, _clutter_settings_set_backend (context->settings,
context->backend); context->backend);

View file

@ -24,7 +24,8 @@
#include "cogl-pango/cogl-pango.h" #include "cogl-pango/cogl-pango.h"
typedef ClutterBackend * (* ClutterBackendConstructor) (gpointer user_data); typedef ClutterBackend * (* ClutterBackendConstructor) (ClutterContext *context,
gpointer user_data);
#define CLUTTER_TYPE_CONTEXT (clutter_context_get_type ()) #define CLUTTER_TYPE_CONTEXT (clutter_context_get_type ())
CLUTTER_EXPORT CLUTTER_EXPORT

View file

@ -55,7 +55,8 @@ struct _MetaBackendClass
{ {
GObjectClass parent_class; GObjectClass parent_class;
ClutterBackend * (* create_clutter_backend) (MetaBackend *backend); ClutterBackend * (* create_clutter_backend) (MetaBackend *backend,
ClutterContext *context);
void (* post_init) (MetaBackend *backend); void (* post_init) (MetaBackend *backend);

View file

@ -1201,11 +1201,13 @@ static GSourceFuncs clutter_source_funcs = {
}; };
static ClutterBackend * static ClutterBackend *
meta_clutter_backend_constructor (gpointer user_data) meta_clutter_backend_constructor (ClutterContext *context,
gpointer user_data)
{ {
MetaBackend *backend = META_BACKEND (user_data); MetaBackend *backend = META_BACKEND (user_data);
return META_BACKEND_GET_CLASS (backend)->create_clutter_backend (backend); return META_BACKEND_GET_CLASS (backend)->create_clutter_backend (backend,
context);
} }
static ClutterSeat * static ClutterSeat *

View file

@ -124,9 +124,10 @@ meta_backend_native_dispose (GObject *object)
} }
static ClutterBackend * static ClutterBackend *
meta_backend_native_create_clutter_backend (MetaBackend *backend) meta_backend_native_create_clutter_backend (MetaBackend *backend,
ClutterContext *context)
{ {
return CLUTTER_BACKEND (meta_clutter_backend_native_new (backend)); return CLUTTER_BACKEND (meta_clutter_backend_native_new (backend, context));
} }
static ClutterSeat * static ClutterSeat *

View file

@ -118,11 +118,13 @@ meta_clutter_backend_native_class_init (MetaClutterBackendNativeClass *klass)
} }
MetaClutterBackendNative * MetaClutterBackendNative *
meta_clutter_backend_native_new (MetaBackend *backend) meta_clutter_backend_native_new (MetaBackend *backend,
ClutterContext *context)
{ {
MetaClutterBackendNative *clutter_backend_native; MetaClutterBackendNative *clutter_backend_native;
clutter_backend_native = g_object_new (META_TYPE_CLUTTER_BACKEND_NATIVE, clutter_backend_native = g_object_new (META_TYPE_CLUTTER_BACKEND_NATIVE,
"context", context,
NULL); NULL);
clutter_backend_native->backend = backend; clutter_backend_native->backend = backend;

View file

@ -33,4 +33,5 @@ G_DECLARE_FINAL_TYPE (MetaClutterBackendNative, meta_clutter_backend_native,
META, CLUTTER_BACKEND_NATIVE, META, CLUTTER_BACKEND_NATIVE,
ClutterBackend) ClutterBackend)
MetaClutterBackendNative * meta_clutter_backend_native_new (MetaBackend *backend); MetaClutterBackendNative * meta_clutter_backend_native_new (MetaBackend *backend,
ClutterContext *context);

View file

@ -609,9 +609,10 @@ meta_backend_x11_post_init (MetaBackend *backend)
} }
static ClutterBackend * static ClutterBackend *
meta_backend_x11_create_clutter_backend (MetaBackend *backend) meta_backend_x11_create_clutter_backend (MetaBackend *backend,
ClutterContext *context)
{ {
return CLUTTER_BACKEND (meta_clutter_backend_x11_new (backend)); return CLUTTER_BACKEND (meta_clutter_backend_x11_new (backend, context));
} }
static MetaColorManager * static MetaColorManager *

View file

@ -137,14 +137,17 @@ meta_clutter_backend_x11_class_init (MetaClutterBackendX11Class *klass)
} }
MetaClutterBackendX11 * MetaClutterBackendX11 *
meta_clutter_backend_x11_new (MetaBackend *backend) meta_clutter_backend_x11_new (MetaBackend *backend,
ClutterContext *context)
{ {
MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend); MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend);
Atom atoms[N_ATOM_NAMES]; Atom atoms[N_ATOM_NAMES];
MetaClutterBackendX11 *clutter_backend_x11; MetaClutterBackendX11 *clutter_backend_x11;
MetaClutterBackendX11Private *priv; MetaClutterBackendX11Private *priv;
clutter_backend_x11 = g_object_new (META_TYPE_CLUTTER_BACKEND_X11, NULL); clutter_backend_x11 = g_object_new (META_TYPE_CLUTTER_BACKEND_X11,
"context", context,
NULL);
priv = meta_clutter_backend_x11_get_instance_private (clutter_backend_x11); priv = meta_clutter_backend_x11_get_instance_private (clutter_backend_x11);
priv->backend = backend; priv->backend = backend;

View file

@ -56,4 +56,5 @@ G_DECLARE_FINAL_TYPE (MetaClutterBackendX11, meta_clutter_backend_x11,
META, CLUTTER_BACKEND_X11, META, CLUTTER_BACKEND_X11,
ClutterBackend) ClutterBackend)
MetaClutterBackendX11 * meta_clutter_backend_x11_new (MetaBackend *backend); MetaClutterBackendX11 * meta_clutter_backend_x11_new (MetaBackend *backend,
ClutterContext *context);