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 >*/
|
/*< 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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 *
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue