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:
parent
b02a29fee7
commit
8a71c89442
12 changed files with 87 additions and 14 deletions
|
@ -38,6 +38,8 @@ struct _ClutterBackend
|
|||
/*< private >*/
|
||||
GObject parent_instance;
|
||||
|
||||
ClutterContext *context;
|
||||
|
||||
CoglRenderer *cogl_renderer;
|
||||
CoglDisplay *cogl_display;
|
||||
CoglContext *cogl_context;
|
||||
|
|
|
@ -61,6 +61,15 @@ enum
|
|||
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)
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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
|
||||
clutter_backend_real_resolution_changed (ClutterBackend *backend)
|
||||
{
|
||||
|
@ -238,6 +285,8 @@ clutter_backend_class_init (ClutterBackendClass *klass)
|
|||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
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:
|
||||
|
@ -284,6 +333,15 @@ clutter_backend_class_init (ClutterBackendClass *klass)
|
|||
NULL, NULL, NULL,
|
||||
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->create_context = clutter_backend_real_create_context;
|
||||
|
|
|
@ -267,7 +267,7 @@ clutter_context_new (ClutterBackendConstructor backend_constructor,
|
|||
init_clutter_debug (context);
|
||||
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 ();
|
||||
_clutter_settings_set_backend (context->settings,
|
||||
context->backend);
|
||||
|
|
|
@ -24,7 +24,8 @@
|
|||
#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 ())
|
||||
CLUTTER_EXPORT
|
||||
|
|
|
@ -55,7 +55,8 @@ struct _MetaBackendClass
|
|||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
ClutterBackend * (* create_clutter_backend) (MetaBackend *backend);
|
||||
ClutterBackend * (* create_clutter_backend) (MetaBackend *backend,
|
||||
ClutterContext *context);
|
||||
|
||||
void (* post_init) (MetaBackend *backend);
|
||||
|
||||
|
|
|
@ -1201,11 +1201,13 @@ static GSourceFuncs clutter_source_funcs = {
|
|||
};
|
||||
|
||||
static ClutterBackend *
|
||||
meta_clutter_backend_constructor (gpointer user_data)
|
||||
meta_clutter_backend_constructor (ClutterContext *context,
|
||||
gpointer 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 *
|
||||
|
|
|
@ -124,9 +124,10 @@ meta_backend_native_dispose (GObject *object)
|
|||
}
|
||||
|
||||
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 *
|
||||
|
|
|
@ -118,11 +118,13 @@ meta_clutter_backend_native_class_init (MetaClutterBackendNativeClass *klass)
|
|||
}
|
||||
|
||||
MetaClutterBackendNative *
|
||||
meta_clutter_backend_native_new (MetaBackend *backend)
|
||||
meta_clutter_backend_native_new (MetaBackend *backend,
|
||||
ClutterContext *context)
|
||||
{
|
||||
MetaClutterBackendNative *clutter_backend_native;
|
||||
|
||||
clutter_backend_native = g_object_new (META_TYPE_CLUTTER_BACKEND_NATIVE,
|
||||
"context", context,
|
||||
NULL);
|
||||
clutter_backend_native->backend = backend;
|
||||
|
||||
|
|
|
@ -33,4 +33,5 @@ G_DECLARE_FINAL_TYPE (MetaClutterBackendNative, meta_clutter_backend_native,
|
|||
META, CLUTTER_BACKEND_NATIVE,
|
||||
ClutterBackend)
|
||||
|
||||
MetaClutterBackendNative * meta_clutter_backend_native_new (MetaBackend *backend);
|
||||
MetaClutterBackendNative * meta_clutter_backend_native_new (MetaBackend *backend,
|
||||
ClutterContext *context);
|
||||
|
|
|
@ -609,9 +609,10 @@ meta_backend_x11_post_init (MetaBackend *backend)
|
|||
}
|
||||
|
||||
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 *
|
||||
|
|
|
@ -137,14 +137,17 @@ meta_clutter_backend_x11_class_init (MetaClutterBackendX11Class *klass)
|
|||
}
|
||||
|
||||
MetaClutterBackendX11 *
|
||||
meta_clutter_backend_x11_new (MetaBackend *backend)
|
||||
meta_clutter_backend_x11_new (MetaBackend *backend,
|
||||
ClutterContext *context)
|
||||
{
|
||||
MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend);
|
||||
Atom atoms[N_ATOM_NAMES];
|
||||
MetaClutterBackendX11 *clutter_backend_x11;
|
||||
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->backend = backend;
|
||||
|
||||
|
|
|
@ -56,4 +56,5 @@ G_DECLARE_FINAL_TYPE (MetaClutterBackendX11, meta_clutter_backend_x11,
|
|||
META, CLUTTER_BACKEND_X11,
|
||||
ClutterBackend)
|
||||
|
||||
MetaClutterBackendX11 * meta_clutter_backend_x11_new (MetaBackend *backend);
|
||||
MetaClutterBackendX11 * meta_clutter_backend_x11_new (MetaBackend *backend,
|
||||
ClutterContext *context);
|
||||
|
|
Loading…
Reference in a new issue