summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2017-12-20 19:07:40 +0800
committerJonas Ådahl <jadahl@gmail.com>2018-02-23 18:57:42 +0800
commit7e17dd0098d5bebe276c2264c8aee24345b38974 (patch)
tree3e62016d5937d4aa47e512b21f68e7d22f38fd96
parent704b73b04125a11e5bb004b1857975f252dc029c (diff)
downloadmutter-7e17dd0098d5bebe276c2264c8aee24345b38974.tar.gz
xwayland: Base Xwayland surface role object on the actor role
The Xwayland role uses a MetaSurfaceActorWayland just so lets share logic related to it. As a side effect, wl_surface.enter/leave starts working for Xwayland surfaces. https://gitlab.gnome.org/GNOME/mutter/merge_requests/5 https://bugzilla.gnome.org/show_bug.cgi?id=791938
-rw-r--r--src/wayland/meta-xwayland.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index 19b95c636..4a7c8fffd 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -33,6 +33,7 @@
#include <sys/un.h>
#include "compositor/meta-surface-actor-wayland.h"
+#include "wayland/meta-wayland-actor-surface.h"
enum {
XWAYLAND_SURFACE_WINDOW_ASSOCIATED,
@@ -46,16 +47,16 @@ guint xwayland_surface_signals[XWAYLAND_SURFACE_LAST_SIGNAL];
G_DECLARE_FINAL_TYPE (MetaWaylandSurfaceRoleXWayland,
meta_wayland_surface_role_xwayland,
META, WAYLAND_SURFACE_ROLE_XWAYLAND,
- MetaWaylandSurfaceRole);
+ MetaWaylandActorSurface)
struct _MetaWaylandSurfaceRoleXWayland
{
- MetaWaylandSurfaceRole parent;
+ MetaWaylandActorSurface parent;
};
G_DEFINE_TYPE (MetaWaylandSurfaceRoleXWayland,
meta_wayland_surface_role_xwayland,
- META_TYPE_WAYLAND_SURFACE_ROLE);
+ META_TYPE_WAYLAND_ACTOR_SURFACE)
static void
associate_window_with_surface (MetaWindow *window,
@@ -638,6 +639,8 @@ xwayland_surface_assigned (MetaWaylandSurfaceRole *surface_role)
{
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
+ MetaWaylandSurfaceRoleClass *surface_role_class =
+ META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_surface_role_xwayland_parent_class);
/* See comment in xwayland_surface_commit for why we reply even though the
* surface may not be drawn the next frame.
@@ -645,6 +648,8 @@ xwayland_surface_assigned (MetaWaylandSurfaceRole *surface_role)
wl_list_insert_list (&surface->compositor->frame_callbacks,
&surface->pending_frame_callback_list);
wl_list_init (&surface->pending_frame_callback_list);
+
+ surface_role_class->assigned (surface_role);
}
static void
@@ -653,6 +658,8 @@ xwayland_surface_commit (MetaWaylandSurfaceRole *surface_role,
{
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
+ MetaWaylandSurfaceRoleClass *surface_role_class =
+ META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_surface_role_xwayland_parent_class);
/* For Xwayland windows, throttling frames when the window isn't actually
* drawn is less useful, because Xwayland still has to do the drawing sent
@@ -666,6 +673,8 @@ xwayland_surface_commit (MetaWaylandSurfaceRole *surface_role,
* user the initial black frame from when the window is mapped empty.
*/
meta_wayland_surface_queue_pending_state_frame_callbacks (surface, pending);
+
+ surface_role_class->commit (surface_role, pending);
}
static MetaWaylandSurface *