mirror of
https://github.com/brl/mutter.git
synced 2025-01-23 09:59:03 +00:00
stage-impl: Change the backend pointer to MetaBackend
A pointer to the real backend is more useful, so lets use that. This affects various places that now need to fetch e.g. the clutter backend via the real backend. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2014>
This commit is contained in:
parent
c0fb52cfe6
commit
5eae0c84ed
@ -28,6 +28,7 @@
|
||||
|
||||
#include <cairo.h>
|
||||
|
||||
#include "backends/meta-backend-types.h"
|
||||
#include "clutter/clutter.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
@ -52,9 +53,6 @@ struct _MetaStageImpl
|
||||
|
||||
/* the stage wrapper */
|
||||
ClutterStage *wrapper;
|
||||
|
||||
/* back pointer to the backend */
|
||||
ClutterBackend *backend;
|
||||
};
|
||||
|
||||
struct _MetaStageImplClass
|
||||
@ -64,6 +62,8 @@ struct _MetaStageImplClass
|
||||
|
||||
GType meta_stage_impl_get_type (void) G_GNUC_CONST;
|
||||
|
||||
MetaBackend * meta_stage_impl_get_backend (MetaStageImpl *stage_impl);
|
||||
|
||||
void meta_stage_impl_presented (MetaStageImpl *stage_impl,
|
||||
CoglFrameEvent frame_event,
|
||||
ClutterFrameInfo *frame_info);
|
||||
|
@ -36,11 +36,13 @@
|
||||
#include "clutter/clutter-mutter.h"
|
||||
#include "cogl/cogl.h"
|
||||
#include "core/util-private.h"
|
||||
#include "meta/meta-backend.h"
|
||||
|
||||
#define MAX_STACK_RECTS 256
|
||||
|
||||
typedef struct _MetaStageImplPrivate
|
||||
{
|
||||
MetaBackend *backend;
|
||||
int64_t global_frame_counter;
|
||||
} MetaStageImplPrivate;
|
||||
|
||||
@ -770,6 +772,7 @@ meta_stage_impl_set_property (GObject *gobject,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaStageImpl *self = META_STAGE_IMPL (gobject);
|
||||
MetaStageImplPrivate *priv = meta_stage_impl_get_instance_private (self);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
@ -778,7 +781,7 @@ meta_stage_impl_set_property (GObject *gobject,
|
||||
break;
|
||||
|
||||
case PROP_BACKEND:
|
||||
self->backend = g_value_get_object (value);
|
||||
priv->backend = g_value_get_object (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -804,9 +807,9 @@ meta_stage_impl_class_init (MetaStageImplClass *klass)
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
obj_props[PROP_BACKEND] =
|
||||
g_param_spec_object ("backend",
|
||||
"ClutterBackend",
|
||||
"ClutterBackend",
|
||||
CLUTTER_TYPE_BACKEND,
|
||||
"MetaBackend",
|
||||
"MetaBackend",
|
||||
META_TYPE_BACKEND,
|
||||
G_PARAM_WRITABLE |
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
@ -817,3 +820,12 @@ static void
|
||||
meta_stage_impl_init (MetaStageImpl *stage)
|
||||
{
|
||||
}
|
||||
|
||||
MetaBackend *
|
||||
meta_stage_impl_get_backend (MetaStageImpl *stage_impl)
|
||||
{
|
||||
MetaStageImplPrivate *priv =
|
||||
meta_stage_impl_get_instance_private (stage_impl);
|
||||
|
||||
return priv->backend;
|
||||
}
|
||||
|
@ -78,8 +78,11 @@ meta_clutter_backend_native_create_stage (ClutterBackend *clutter_backend,
|
||||
ClutterStage *wrapper,
|
||||
GError **error)
|
||||
{
|
||||
MetaClutterBackendNative *clutter_backend_native =
|
||||
META_CLUTTER_BACKEND_NATIVE (clutter_backend);
|
||||
|
||||
return g_object_new (META_TYPE_STAGE_NATIVE,
|
||||
"backend", clutter_backend,
|
||||
"backend", clutter_backend_native->backend,
|
||||
"wrapper", wrapper,
|
||||
NULL);
|
||||
}
|
||||
|
@ -311,6 +311,10 @@ meta_clutter_backend_x11_create_stage (ClutterBackend *clutter_backend,
|
||||
ClutterStage *wrapper,
|
||||
GError **error)
|
||||
{
|
||||
MetaClutterBackendX11 *clutter_backend_x11 =
|
||||
META_CLUTTER_BACKEND_X11 (clutter_backend);
|
||||
MetaClutterBackendX11Private *priv =
|
||||
meta_clutter_backend_x11_get_instance_private (clutter_backend_x11);
|
||||
ClutterStageWindow *stage;
|
||||
GType stage_type;
|
||||
|
||||
@ -320,7 +324,7 @@ meta_clutter_backend_x11_create_stage (ClutterBackend *clutter_backend,
|
||||
stage_type = META_TYPE_STAGE_X11;
|
||||
|
||||
stage = g_object_new (stage_type,
|
||||
"backend", clutter_backend,
|
||||
"backend", priv->backend,
|
||||
"wrapper", wrapper,
|
||||
NULL);
|
||||
return stage;
|
||||
|
@ -75,6 +75,15 @@ G_DEFINE_TYPE_WITH_CODE (MetaStageX11,
|
||||
ButtonReleaseMask | \
|
||||
PointerMotionMask
|
||||
|
||||
static MetaClutterBackendX11 *
|
||||
clutter_backend_x11_from_stage (MetaStageX11 *stage_x11)
|
||||
{
|
||||
MetaBackend *backend =
|
||||
meta_stage_impl_get_backend (META_STAGE_IMPL (stage_x11));
|
||||
|
||||
return META_CLUTTER_BACKEND_X11 (meta_backend_get_clutter_backend (backend));
|
||||
}
|
||||
|
||||
static void
|
||||
meta_stage_x11_fix_window_size (MetaStageX11 *stage_x11,
|
||||
int new_width,
|
||||
@ -105,15 +114,14 @@ meta_stage_x11_fix_window_size (MetaStageX11 *stage_x11,
|
||||
static void
|
||||
meta_stage_x11_set_wm_protocols (MetaStageX11 *stage_x11)
|
||||
{
|
||||
MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_x11);
|
||||
MetaClutterBackendX11 *backend_x11 =
|
||||
META_CLUTTER_BACKEND_X11 (stage_impl->backend);
|
||||
MetaClutterBackendX11 *clutter_backend_x11 =
|
||||
clutter_backend_x11_from_stage (stage_x11);
|
||||
Display *xdisplay = meta_clutter_x11_get_default_display ();
|
||||
Atom protocols[2];
|
||||
int n = 0;
|
||||
|
||||
protocols[n++] = backend_x11->atom_WM_DELETE_WINDOW;
|
||||
protocols[n++] = backend_x11->atom_NET_WM_PING;
|
||||
protocols[n++] = clutter_backend_x11->atom_WM_DELETE_WINDOW;
|
||||
protocols[n++] = clutter_backend_x11->atom_NET_WM_PING;
|
||||
|
||||
XSetWMProtocols (xdisplay, stage_x11->xwin, protocols, n);
|
||||
}
|
||||
@ -179,9 +187,11 @@ static inline void
|
||||
set_wm_pid (MetaStageX11 *stage_x11)
|
||||
{
|
||||
MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_x11);
|
||||
MetaClutterBackendX11 *backend_x11 =
|
||||
META_CLUTTER_BACKEND_X11 (stage_impl->backend);
|
||||
Display *xdisplay = meta_clutter_x11_get_default_display ();
|
||||
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
|
||||
MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend);
|
||||
MetaClutterBackendX11 *clutter_backend_x11 =
|
||||
clutter_backend_x11_from_stage (stage_x11);
|
||||
Display *xdisplay = meta_backend_x11_get_xdisplay (backend_x11);
|
||||
long pid;
|
||||
|
||||
if (stage_x11->xwin == None)
|
||||
@ -197,7 +207,7 @@ set_wm_pid (MetaStageX11 *stage_x11)
|
||||
pid = getpid ();
|
||||
XChangeProperty (xdisplay,
|
||||
stage_x11->xwin,
|
||||
backend_x11->atom_NET_WM_PID, XA_CARDINAL, 32,
|
||||
clutter_backend_x11->atom_NET_WM_PID, XA_CARDINAL, 32,
|
||||
PropModeReplace,
|
||||
(guchar *) &pid, 1);
|
||||
}
|
||||
@ -205,9 +215,8 @@ set_wm_pid (MetaStageX11 *stage_x11)
|
||||
static inline void
|
||||
set_wm_title (MetaStageX11 *stage_x11)
|
||||
{
|
||||
MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_x11);
|
||||
MetaClutterBackendX11 *backend_x11 =
|
||||
META_CLUTTER_BACKEND_X11 (stage_impl->backend);
|
||||
MetaClutterBackendX11 *clutter_backend_x11 =
|
||||
clutter_backend_x11_from_stage (stage_x11);
|
||||
Display *xdisplay = meta_clutter_x11_get_default_display ();
|
||||
|
||||
if (stage_x11->xwin == None)
|
||||
@ -217,14 +226,14 @@ set_wm_title (MetaStageX11 *stage_x11)
|
||||
{
|
||||
XDeleteProperty (xdisplay,
|
||||
stage_x11->xwin,
|
||||
backend_x11->atom_NET_WM_NAME);
|
||||
clutter_backend_x11->atom_NET_WM_NAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
XChangeProperty (xdisplay,
|
||||
stage_x11->xwin,
|
||||
backend_x11->atom_NET_WM_NAME,
|
||||
backend_x11->atom_UTF8_STRING,
|
||||
clutter_backend_x11->atom_NET_WM_NAME,
|
||||
clutter_backend_x11->atom_UTF8_STRING,
|
||||
8,
|
||||
PropModeReplace,
|
||||
(unsigned char *) stage_x11->title,
|
||||
@ -285,19 +294,23 @@ meta_stage_x11_realize (ClutterStageWindow *stage_window)
|
||||
{
|
||||
MetaStageX11 *stage_x11 = META_STAGE_X11 (stage_window);
|
||||
MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
|
||||
ClutterBackend *backend = CLUTTER_BACKEND (stage_impl->backend);
|
||||
MetaSeatX11 *seat_x11 = META_SEAT_X11 (clutter_backend_get_default_seat (backend));
|
||||
Display *xdisplay = meta_clutter_x11_get_default_display ();
|
||||
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
|
||||
MetaBackendX11 *backend_x11 = META_BACKEND_X11 (backend);
|
||||
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
|
||||
MetaSeatX11 *seat_x11 =
|
||||
META_SEAT_X11 (meta_backend_get_default_seat (backend));
|
||||
Display *xdisplay = meta_backend_x11_get_xdisplay (backend_x11);
|
||||
float width, height;
|
||||
GError *error = NULL;
|
||||
|
||||
clutter_actor_get_size (CLUTTER_ACTOR (stage_impl->wrapper), &width, &height);
|
||||
|
||||
stage_x11->onscreen = create_onscreen (backend->cogl_context, width, height);
|
||||
stage_x11->onscreen = create_onscreen (clutter_backend->cogl_context,
|
||||
width, height);
|
||||
|
||||
if (META_IS_BACKEND_X11_CM (stage_x11->backend))
|
||||
if (META_IS_BACKEND_X11_CM (backend))
|
||||
{
|
||||
MetaRenderer *renderer = meta_backend_get_renderer (stage_x11->backend);
|
||||
MetaRenderer *renderer = meta_backend_get_renderer (backend);
|
||||
MetaRendererX11Cm *renderer_x11_cm = META_RENDERER_X11_CM (renderer);
|
||||
|
||||
meta_renderer_x11_cm_init_screen_view (renderer_x11_cm,
|
||||
@ -542,17 +555,19 @@ clutter_stage_window_iface_init (ClutterStageWindowInterface *iface)
|
||||
}
|
||||
|
||||
static inline void
|
||||
set_user_time (MetaClutterBackendX11 *backend_x11,
|
||||
MetaStageX11 *stage_x11,
|
||||
long timestamp)
|
||||
set_user_time (MetaStageX11 *stage_x11,
|
||||
long timestamp)
|
||||
{
|
||||
MetaClutterBackendX11 *clutter_backend_x11 =
|
||||
clutter_backend_x11_from_stage (stage_x11);
|
||||
|
||||
if (timestamp != CLUTTER_CURRENT_TIME)
|
||||
{
|
||||
Display *xdisplay = meta_clutter_x11_get_default_display ();
|
||||
|
||||
XChangeProperty (xdisplay,
|
||||
stage_x11->xwin,
|
||||
backend_x11->atom_NET_WM_USER_TIME,
|
||||
clutter_backend_x11->atom_NET_WM_USER_TIME,
|
||||
XA_CARDINAL, 32,
|
||||
PropModeReplace,
|
||||
(unsigned char *) ×tamp, 1);
|
||||
@ -560,26 +575,27 @@ set_user_time (MetaClutterBackendX11 *backend_x11,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
handle_wm_protocols_event (MetaClutterBackendX11 *backend_x11,
|
||||
MetaStageX11 *stage_x11,
|
||||
XEvent *xevent)
|
||||
handle_wm_protocols_event (MetaStageX11 *stage_x11,
|
||||
XEvent *xevent)
|
||||
{
|
||||
MetaClutterBackendX11 *clutter_backend_x11 =
|
||||
clutter_backend_x11_from_stage (stage_x11);
|
||||
Atom atom = (Atom) xevent->xclient.data.l[0];
|
||||
|
||||
if (atom == backend_x11->atom_WM_DELETE_WINDOW &&
|
||||
if (atom == clutter_backend_x11->atom_WM_DELETE_WINDOW &&
|
||||
xevent->xany.window == stage_x11->xwin)
|
||||
{
|
||||
set_user_time (backend_x11, stage_x11, xevent->xclient.data.l[1]);
|
||||
set_user_time (stage_x11, xevent->xclient.data.l[1]);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else if (atom == backend_x11->atom_NET_WM_PING &&
|
||||
else if (atom == clutter_backend_x11->atom_NET_WM_PING &&
|
||||
xevent->xany.window == stage_x11->xwin)
|
||||
{
|
||||
XClientMessageEvent xclient = xevent->xclient;
|
||||
Display *xdisplay = meta_clutter_x11_get_default_display ();
|
||||
|
||||
xclient.window = backend_x11->xwin_root;
|
||||
xclient.window = clutter_backend_x11->xwin_root;
|
||||
XSendEvent (xdisplay, xclient.window,
|
||||
False,
|
||||
SubstructureRedirectMask | SubstructureNotifyMask,
|
||||
@ -606,19 +622,19 @@ meta_stage_x11_translate_event (MetaStageX11 *stage_x11,
|
||||
XEvent *xevent,
|
||||
ClutterEvent *event)
|
||||
{
|
||||
MetaClutterBackendX11 *clutter_backend_x11 =
|
||||
clutter_backend_x11_from_stage (stage_x11);
|
||||
MetaBackend *backend;
|
||||
MetaStageImpl *stage_impl;
|
||||
gboolean res = FALSE;
|
||||
MetaClutterBackendX11 *clutter_backend_x11;
|
||||
ClutterStage *stage;
|
||||
MetaBackend *backend;
|
||||
|
||||
stage_impl = meta_x11_get_stage_window_from_window (xevent->xany.window);
|
||||
if (stage_impl == NULL)
|
||||
return FALSE;
|
||||
|
||||
backend = meta_stage_impl_get_backend (stage_impl);
|
||||
stage = stage_impl->wrapper;
|
||||
backend = stage_x11->backend;
|
||||
clutter_backend_x11 = META_CLUTTER_BACKEND_X11 (stage_impl->backend);
|
||||
|
||||
switch (xevent->type)
|
||||
{
|
||||
@ -644,7 +660,7 @@ meta_stage_x11_translate_event (MetaStageX11 *stage_x11,
|
||||
stage_width = xevent->xconfigure.width;
|
||||
stage_height = xevent->xconfigure.height;
|
||||
|
||||
if (META_IS_BACKEND_X11_CM (stage_x11->backend))
|
||||
if (META_IS_BACKEND_X11_CM (backend))
|
||||
{
|
||||
clutter_actor_set_size (CLUTTER_ACTOR (stage),
|
||||
stage_width,
|
||||
@ -715,7 +731,7 @@ meta_stage_x11_translate_event (MetaStageX11 *stage_x11,
|
||||
* X11 compositing manager, we need to reset the legacy
|
||||
* stage view, now that it has a new size.
|
||||
*/
|
||||
if (META_IS_BACKEND_X11_CM (stage_x11->backend))
|
||||
if (META_IS_BACKEND_X11_CM (backend))
|
||||
{
|
||||
MetaRenderer *renderer = meta_backend_get_renderer (backend);
|
||||
MetaRendererX11Cm *renderer_x11_cm =
|
||||
@ -774,9 +790,7 @@ meta_stage_x11_translate_event (MetaStageX11 *stage_x11,
|
||||
|
||||
if (xevent->xclient.message_type == clutter_backend_x11->atom_WM_PROTOCOLS)
|
||||
{
|
||||
if (handle_wm_protocols_event (clutter_backend_x11,
|
||||
stage_x11,
|
||||
xevent))
|
||||
if (handle_wm_protocols_event (stage_x11, xevent))
|
||||
{
|
||||
g_return_val_if_fail (META_IS_STAGE_X11_NESTED (stage_x11),
|
||||
FALSE);
|
||||
@ -835,9 +849,5 @@ void
|
||||
meta_stage_x11_set_user_time (MetaStageX11 *stage_x11,
|
||||
uint32_t user_time)
|
||||
{
|
||||
MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_x11);
|
||||
MetaClutterBackendX11 *backend_x11 =
|
||||
META_CLUTTER_BACKEND_X11 (stage_impl->backend);
|
||||
|
||||
set_user_time (backend_x11, stage_x11, user_time);
|
||||
set_user_time (stage_x11, user_time);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user