[mutter] wayland: Don't access MetaWaylandSurface::window directly



commit c0c74484bc6b95a16e7cde82dbfe5e1d6dba1f8b
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Wed Oct 9 09:37:04 2019 +0200

    wayland: Don't access MetaWaylandSurface::window directly
    
    It'll be moved to the role owning it, accessed via a helper function
    implemented by the role. Currently it still just fetches the field in
    MetaWaylandSurface.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/835

 src/wayland/meta-pointer-confinement-wayland.c |  7 +++-
 src/wayland/meta-wayland-actor-surface.c       |  6 ++-
 src/wayland/meta-wayland-gtk-shell.c           | 25 +++++++-----
 src/wayland/meta-wayland-legacy-xdg-shell.c    | 55 +++++++++++++++-----------
 src/wayland/meta-wayland-pointer-constraints.c | 21 +++++-----
 src/wayland/meta-wayland-pointer.c             |  6 ++-
 src/wayland/meta-wayland-popup.c               |  2 +-
 src/wayland/meta-wayland-shell-surface.c       | 20 +++++-----
 src/wayland/meta-wayland-subsurface.c          |  2 +-
 src/wayland/meta-wayland-surface.c             | 33 +++++++++++-----
 src/wayland/meta-wayland-surface.h             |  2 +
 src/wayland/meta-wayland-wl-shell.c            | 50 ++++++++++++++---------
 src/wayland/meta-wayland-xdg-foreign.c         | 17 +++++---
 src/wayland/meta-wayland-xdg-shell.c           | 50 ++++++++++++-----------
 src/wayland/meta-xwayland-dnd.c                | 20 ++++++----
 src/wayland/meta-xwayland-grab-keyboard.c      |  4 +-
 src/wayland/meta-xwayland-surface.c            |  4 +-
 17 files changed, 198 insertions(+), 126 deletions(-)
---
diff --git a/src/wayland/meta-pointer-confinement-wayland.c b/src/wayland/meta-pointer-confinement-wayland.c
index 7a7b22c22..7f980054c 100644
--- a/src/wayland/meta-pointer-confinement-wayland.c
+++ b/src/wayland/meta-pointer-confinement-wayland.c
@@ -696,6 +696,7 @@ meta_pointer_confinement_wayland_new (MetaWaylandPointerConstraint *constraint)
   GObject *object;
   MetaPointerConfinementWayland *confinement;
   MetaWaylandSurface *surface;
+  MetaWindow *window;
 
   object = g_object_new (META_TYPE_POINTER_CONFINEMENT_WAYLAND, NULL);
   confinement = META_POINTER_CONFINEMENT_WAYLAND (object);
@@ -708,9 +709,11 @@ meta_pointer_confinement_wayland_new (MetaWaylandPointerConstraint *constraint)
                            G_CALLBACK (surface_geometry_changed),
                            confinement,
                            0);
-  if (surface->window)
+
+  window = meta_wayland_surface_get_window (surface);
+  if (window)
     {
-      g_signal_connect_object (surface->window,
+      g_signal_connect_object (window,
                                "position-changed",
                                G_CALLBACK (window_position_changed),
                                confinement,
diff --git a/src/wayland/meta-wayland-actor-surface.c b/src/wayland/meta-wayland-actor-surface.c
index 4606ae6cd..efccede83 100644
--- a/src/wayland/meta-wayland-actor-surface.c
+++ b/src/wayland/meta-wayland-actor-surface.c
@@ -150,6 +150,7 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
   MetaShapedTexture *stex;
   MetaWaylandBuffer *buffer;
   cairo_rectangle_int_t surface_rect;
+  MetaWindow *window;
   MetaWaylandSurface *subsurface_surface;
 
   surface_actor = priv->actor;
@@ -194,8 +195,9 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
       meta_surface_actor_set_input_region (surface_actor, NULL);
     }
 
-  if (surface->window &&
-      surface->window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
+  window = meta_wayland_surface_get_window (surface);
+  if (window &&
+      window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
     {
       if (surface->opaque_region)
         {
diff --git a/src/wayland/meta-wayland-gtk-shell.c b/src/wayland/meta-wayland-gtk-shell.c
index 981652e8f..9c5357b91 100644
--- a/src/wayland/meta-wayland-gtk-shell.c
+++ b/src/wayland/meta-wayland-gtk-shell.c
@@ -83,7 +83,7 @@ gtk_surface_set_dbus_properties (struct wl_client   *client,
   MetaWaylandSurface *surface = gtk_surface->surface;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -104,7 +104,7 @@ gtk_surface_set_modal (struct wl_client   *client,
   MetaWaylandSurface *surface = gtk_surface->surface;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -123,7 +123,7 @@ gtk_surface_unset_modal (struct wl_client   *client,
   MetaWaylandSurface *surface = gtk_surface->surface;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -143,7 +143,7 @@ gtk_surface_present (struct wl_client   *client,
   MetaWaylandSurface *surface = gtk_surface->surface;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -162,7 +162,7 @@ gtk_surface_request_focus (struct wl_client   *client,
   MetaStartupSequence *sequence = NULL;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -313,11 +313,14 @@ static void
 on_configure (MetaWaylandSurface    *surface,
               MetaWaylandGtkSurface *gtk_surface)
 {
-  send_configure (gtk_surface, surface->window);
+  MetaWindow *window;
 
+  window = meta_wayland_surface_get_window (surface);
+  send_configure (gtk_surface, window);
 
-  if (wl_resource_get_version (gtk_surface->resource) >= GTK_SURFACE1_CONFIGURE_EDGES_SINCE_VERSION)
-    send_configure_edges (gtk_surface, surface->window);
+  if (wl_resource_get_version (gtk_surface->resource) >=
+      GTK_SURFACE1_CONFIGURE_EDGES_SINCE_VERSION)
+    send_configure_edges (gtk_surface, window);
 }
 
 static void
@@ -387,11 +390,13 @@ gtk_shell_system_bell (struct wl_client   *client,
       MetaWaylandGtkSurface *gtk_surface =
         wl_resource_get_user_data (gtk_surface_resource);
       MetaWaylandSurface *surface = gtk_surface->surface;
+      MetaWindow *window;
 
-      if (!surface->window)
+      window = meta_wayland_surface_get_window (surface);
+      if (!window)
         return;
 
-      meta_bell_notify (display, surface->window);
+      meta_bell_notify (display, window);
     }
   else
     {
diff --git a/src/wayland/meta-wayland-legacy-xdg-shell.c b/src/wayland/meta-wayland-legacy-xdg-shell.c
index 863c0fc11..35f3af95f 100644
--- a/src/wayland/meta-wayland-legacy-xdg-shell.c
+++ b/src/wayland/meta-wayland-legacy-xdg-shell.c
@@ -189,7 +189,7 @@ zxdg_toplevel_v6_set_parent (struct wl_client   *client,
   MetaWindow *transient_for = NULL;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -198,7 +198,7 @@ zxdg_toplevel_v6_set_parent (struct wl_client   *client,
       MetaWaylandSurface *parent_surface =
         surface_from_xdg_surface_resource (parent_resource);
 
-      transient_for = parent_surface->window;
+      transient_for = meta_wayland_surface_get_window (parent_surface);
     }
 
   meta_window_set_transient_for (window, transient_for);
@@ -212,7 +212,7 @@ zxdg_toplevel_v6_set_title (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -230,7 +230,7 @@ zxdg_toplevel_v6_set_app_id (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -253,7 +253,7 @@ zxdg_toplevel_v6_show_window_menu (struct wl_client   *client,
   MetaWindow *window;
   int monitor_scale;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -277,7 +277,7 @@ zxdg_toplevel_v6_move (struct wl_client   *client,
   MetaWindow *window;
   gfloat x, y;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -323,7 +323,7 @@ zxdg_toplevel_v6_resize (struct wl_client   *client,
   gfloat x, y;
   MetaGrabOp grab_op;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -344,7 +344,7 @@ zxdg_toplevel_v6_set_max_size (struct wl_client   *client,
   MetaWaylandSurfaceState *pending;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -373,7 +373,7 @@ zxdg_toplevel_v6_set_min_size (struct wl_client   *client,
   MetaWaylandSurfaceState *pending;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -399,7 +399,7 @@ zxdg_toplevel_v6_set_maximized (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -417,7 +417,7 @@ zxdg_toplevel_v6_unset_maximized (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -432,7 +432,7 @@ zxdg_toplevel_v6_set_fullscreen (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -453,7 +453,7 @@ zxdg_toplevel_v6_unset_fullscreen (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -467,7 +467,7 @@ zxdg_toplevel_v6_set_minimized (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -600,10 +600,13 @@ meta_wayland_zxdg_toplevel_v6_send_configure (MetaWaylandZxdgToplevelV6      *xd
     META_WAYLAND_SURFACE_ROLE (xdg_toplevel);
   MetaWaylandSurface *surface =
     meta_wayland_surface_role_get_surface (surface_role);
+  MetaWindow *window;
   struct wl_array states;
 
+  window = meta_wayland_surface_get_window (surface);
+
   wl_array_init (&states);
-  fill_states (&states, surface->window);
+  fill_states (&states, window);
 
   zxdg_toplevel_v6_send_configure (xdg_toplevel->resource,
                                    configuration->width,
@@ -662,7 +665,7 @@ meta_wayland_zxdg_toplevel_v6_apply_state (MetaWaylandSurfaceRole  *surface_role
   MetaRectangle old_geometry;
   gboolean geometry_changed;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     {
       meta_wayland_surface_cache_pending_frame_callbacks (surface, pending);
@@ -845,9 +848,11 @@ static void
 scale_placement_rule (MetaPlacementRule  *placement_rule,
                       MetaWaylandSurface *surface)
 {
+  MetaWindow *window;
   int geometry_scale;
 
-  geometry_scale = meta_window_wayland_get_geometry_scale (surface->window);
+  window = meta_wayland_surface_get_window (surface);
+  geometry_scale = meta_window_wayland_get_geometry_scale (window);
 
   placement_rule->anchor_rect.x *= geometry_scale;
   placement_rule->anchor_rect.y *= geometry_scale;
@@ -885,7 +890,7 @@ finish_popup_setup (MetaWaylandZxdgPopupV6 *xdg_popup)
   xdg_popup->setup.parent_surface = NULL;
   xdg_popup->setup.grab_seat = NULL;
 
-  if (!parent_surface->window)
+  if (!meta_wayland_surface_get_window (parent_surface))
     {
       zxdg_popup_v6_send_popup_done (xdg_popup->resource);
       return;
@@ -964,6 +969,7 @@ meta_wayland_zxdg_popup_v6_apply_state (MetaWaylandSurfaceRole  *surface_role,
   MetaWaylandSurfaceRoleClass *surface_role_class;
   MetaWaylandSurface *surface =
     meta_wayland_surface_role_get_surface (surface_role);
+  MetaWindow *window;
 
   if (xdg_popup->setup.parent_surface)
     finish_popup_setup (xdg_popup);
@@ -973,7 +979,8 @@ meta_wayland_zxdg_popup_v6_apply_state (MetaWaylandSurfaceRole  *surface_role,
   surface_role_class->apply_state (surface_role, pending);
 
   /* If the window disappeared the surface is not coming back. */
-  if (!surface->window)
+  window = meta_wayland_surface_get_window (surface);
+  if (!window)
     return;
 
   if (!pending->newly_attached)
@@ -988,7 +995,7 @@ meta_wayland_zxdg_popup_v6_apply_state (MetaWaylandSurfaceRole  *surface_role,
 
       window_geometry =
         meta_wayland_zxdg_surface_v6_get_window_geometry (xdg_surface);
-      meta_window_wayland_finish_move_resize (surface->window,
+      meta_window_wayland_finish_move_resize (window,
                                               window_geometry,
                                               pending);
     }
@@ -1013,7 +1020,8 @@ meta_wayland_zxdg_popup_v6_configure (MetaWaylandShellSurface        *shell_surf
     META_WAYLAND_ZXDG_POPUP_V6 (shell_surface);
   MetaWaylandZxdgSurfaceV6 *xdg_surface =
     META_WAYLAND_ZXDG_SURFACE_V6 (xdg_popup);
-  MetaWindow *parent_window = xdg_popup->parent_surface->window;
+  MetaWindow *parent_window =
+    meta_wayland_surface_get_window (xdg_popup->parent_surface);
   int geometry_scale;
   int x, y;
 
@@ -1048,7 +1056,8 @@ meta_wayland_zxdg_popup_v6_managed (MetaWaylandShellSurface *shell_surface,
 
   g_assert (parent);
 
-  meta_window_set_transient_for (window, parent->window);
+  meta_window_set_transient_for (window,
+                                 meta_wayland_surface_get_window (parent));
   meta_window_set_type (window, META_WINDOW_DROPDOWN_MENU);
 }
 
@@ -1328,7 +1337,7 @@ meta_wayland_zxdg_surface_v6_apply_state (MetaWaylandSurfaceRole  *surface_role,
     meta_wayland_zxdg_surface_v6_get_instance_private (xdg_surface);
   MetaWaylandSurface *surface =
     meta_wayland_surface_role_get_surface (surface_role);
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
   MetaWaylandSurfaceRoleClass *surface_role_class;
 
   surface_role_class =
diff --git a/src/wayland/meta-wayland-pointer-constraints.c b/src/wayland/meta-wayland-pointer-constraints.c
index 14ac75ee3..dd710b18f 100644
--- a/src/wayland/meta-wayland-pointer-constraints.c
+++ b/src/wayland/meta-wayland-pointer-constraints.c
@@ -164,25 +164,29 @@ window_associated (MetaWaylandSurfaceRole                   *surface_role,
                    MetaWaylandSurfacePointerConstraintsData *data)
 {
   MetaWaylandSurface *surface = data->surface;
+  MetaWindow *window;
 
-  connect_window (data, surface->window);
+  window = meta_wayland_surface_get_window (surface);
+  connect_window (data, window);
   g_clear_signal_handler (&data->window_associated_handler_id, surface);
 
-  meta_wayland_pointer_constraint_maybe_enable_for_window (surface->window);
+  meta_wayland_pointer_constraint_maybe_enable_for_window (window);
 }
 
 static MetaWaylandSurfacePointerConstraintsData *
 surface_constraint_data_new (MetaWaylandSurface *surface)
 {
   MetaWaylandSurfacePointerConstraintsData *data;
+  MetaWindow *window;
 
   data = g_new0 (MetaWaylandSurfacePointerConstraintsData, 1);
 
   data->surface = surface;
 
-  if (surface->window)
+  window = meta_wayland_surface_get_window (surface);
+  if (window)
     {
-      connect_window (data, surface->window);
+      connect_window (data, window);
     }
   else if (meta_xwayland_is_xwayland_surface (surface))
     {
@@ -280,8 +284,9 @@ static void
 pointer_focus_surface_changed (MetaWaylandPointer           *pointer,
                                MetaWaylandPointerConstraint *constraint)
 {
-  MetaWindow *window = constraint->surface->window;
+  MetaWindow *window;
 
+  window = meta_wayland_surface_get_window (constraint->surface);
   if (window)
     {
       MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer);
@@ -453,7 +458,7 @@ should_constraint_be_enabled (MetaWaylandPointerConstraint *constraint)
 {
   MetaWindow *window;
 
-  window = constraint->surface->window;
+  window = meta_wayland_surface_get_window (constraint->surface);
   if (!window)
     {
       /*
@@ -494,8 +499,6 @@ should_constraint_be_enabled (MetaWaylandPointerConstraint *constraint)
     }
   else
     {
-      MetaWindow *window = constraint->surface->window;
-
       if (!meta_window_appears_focused (window))
         return FALSE;
     }
@@ -610,7 +613,7 @@ meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerCo
   if (constraint->region)
     cairo_region_intersect (region, constraint->region);
 
-  window = constraint->surface->window;
+  window = meta_wayland_surface_get_window (constraint->surface);
   if (window && window->frame)
     {
       MetaFrame *frame = window->frame;
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index edf12459c..0a8e4c929 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -927,6 +927,7 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
     {
       struct wl_client *client = wl_resource_get_client (surface->resource);
       graphene_point_t pos;
+      MetaWindow *focus_window;
 
       pointer->focus_surface = surface;
 
@@ -937,8 +938,9 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
 
       clutter_input_device_get_coords (pointer->device, NULL, &pos);
 
-      if (pointer->focus_surface->window)
-        meta_window_handle_enter (pointer->focus_surface->window,
+      focus_window = meta_wayland_surface_get_window (pointer->focus_surface);
+      if (focus_window)
+        meta_window_handle_enter (focus_window,
                                   /* XXX -- can we reliably get a timestamp for setting focus? */
                                   clutter_get_current_event_time (),
                                   pos.x, pos.y);
diff --git a/src/wayland/meta-wayland-popup.c b/src/wayland/meta-wayland-popup.c
index ce9a8b81e..f628ef04c 100644
--- a/src/wayland/meta-wayland-popup.c
+++ b/src/wayland/meta-wayland-popup.c
@@ -186,7 +186,7 @@ meta_wayland_popup_grab_begin (MetaWaylandPopupGrab *grab,
                                MetaWaylandSurface   *surface)
 {
   MetaWaylandPointer *pointer = grab->generic.pointer;
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
 
   meta_wayland_pointer_start_grab (pointer, (MetaWaylandPointerGrab*)grab);
   meta_display_begin_grab_op (window->display,
diff --git a/src/wayland/meta-wayland-shell-surface.c b/src/wayland/meta-wayland-shell-surface.c
index aa3e397ac..8aff17f43 100644
--- a/src/wayland/meta-wayland-shell-surface.c
+++ b/src/wayland/meta-wayland-shell-surface.c
@@ -154,7 +154,7 @@ meta_wayland_shell_surface_surface_apply_state (MetaWaylandSurfaceRole  *surface
   if (!buffer)
     return;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -174,7 +174,7 @@ meta_wayland_shell_surface_notify_subsurface_state_changed (MetaWaylandSurfaceRo
   MetaWindow *window;
   MetaWindowActor *window_actor;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -207,11 +207,13 @@ meta_wayland_shell_surface_sync_actor_state (MetaWaylandActorSurface *actor_surf
     meta_wayland_surface_role_get_surface (surface_role);
   MetaWaylandActorSurfaceClass *actor_surface_class =
     META_WAYLAND_ACTOR_SURFACE_CLASS (meta_wayland_shell_surface_parent_class);
-  MetaWaylandSurface *toplevel_surface;
+  MetaWindow *toplevel_window;
+
+  toplevel_window = meta_wayland_surface_get_toplevel_window (surface);
+  if (!toplevel_window)
+    return;
 
-  toplevel_surface = meta_wayland_surface_get_toplevel (surface);
-  if (toplevel_surface && toplevel_surface->window)
-    actor_surface_class->sync_actor_state (actor_surface);
+  actor_surface_class->sync_actor_state (actor_surface);
 }
 
 void
@@ -225,14 +227,14 @@ meta_wayland_shell_surface_destroy_window (MetaWaylandShellSurface *shell_surfac
   MetaDisplay *display;
   uint32_t timestamp;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
   display = meta_window_get_display (window);
   timestamp = meta_display_get_current_time_roundtrip (display);
-  meta_window_unmanage (surface->window, timestamp);
-  g_assert (!surface->window);
+  meta_window_unmanage (window, timestamp);
+  g_assert (!meta_wayland_surface_get_window (surface));
 }
 
 static void
diff --git a/src/wayland/meta-wayland-subsurface.c b/src/wayland/meta-wayland-subsurface.c
index d3afcf8af..c55600912 100644
--- a/src/wayland/meta-wayland-subsurface.c
+++ b/src/wayland/meta-wayland-subsurface.c
@@ -299,7 +299,7 @@ meta_wayland_subsurface_sync_actor_state (MetaWaylandActorSurface *actor_surface
   MetaWaylandSurface *toplevel_surface;
 
   toplevel_surface = meta_wayland_surface_get_toplevel (surface);
-  if (toplevel_surface && toplevel_surface->window)
+  if (toplevel_surface && meta_wayland_surface_get_window (toplevel_surface))
     actor_surface_class->sync_actor_state (actor_surface);
 
   sync_actor_subsurface_state (surface);
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index de3502b2e..a17431853 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -633,8 +633,11 @@ meta_wayland_surface_apply_state (MetaWaylandSurface      *surface,
 
   if (state->newly_attached)
     {
-      if (!surface->buffer_ref.buffer && surface->window)
-        meta_window_queue (surface->window, META_QUEUE_CALC_SHOWING);
+      MetaWindow *window;
+
+      window = meta_wayland_surface_get_window (surface);
+      if (!surface->buffer_ref.buffer && window)
+        meta_window_queue (window, META_QUEUE_CALC_SHOWING);
 
       /* Always release any previously held buffer. If the buffer held is same
        * as the newly attached buffer, we still need to release it here, because
@@ -1128,8 +1131,11 @@ static const struct wl_surface_interface meta_wayland_wl_surface_interface = {
 static void
 sync_drag_dest_funcs (MetaWaylandSurface *surface)
 {
-  if (surface->window &&
-      surface->window->client_type == META_WINDOW_CLIENT_TYPE_X11)
+  MetaWindow *window;
+
+  window = meta_wayland_surface_get_window (surface);
+  if (window &&
+      window->client_type == META_WINDOW_CLIENT_TYPE_X11)
     surface->dnd.funcs = meta_xwayland_selection_get_drag_dest_funcs ();
   else
     surface->dnd.funcs = meta_wayland_data_device_get_drag_dest_funcs ();
@@ -1434,7 +1440,7 @@ meta_wayland_surface_begin_grab_op (MetaWaylandSurface *surface,
                                     gfloat              x,
                                     gfloat              y)
 {
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
 
   if (grab_op == META_GRAB_OP_NONE)
     return FALSE;
@@ -1574,7 +1580,7 @@ meta_wayland_surface_get_toplevel_window (MetaWaylandSurface *surface)
 
   toplevel = meta_wayland_surface_get_toplevel (surface);
   if (toplevel)
-    return toplevel->window;
+    return meta_wayland_surface_get_window (toplevel);
   else
     return NULL;
 }
@@ -1586,6 +1592,8 @@ meta_wayland_surface_get_relative_coordinates (MetaWaylandSurface *surface,
                                                float               *sx,
                                                float               *sy)
 {
+  MetaWindow *window;
+
   /* Using clutter API to transform coordinates is only accurate right
    * after a clutter layout pass but this function is used e.g. to
    * deliver pointer motion events which can happen at any time. This
@@ -1594,12 +1602,13 @@ meta_wayland_surface_get_relative_coordinates (MetaWaylandSurface *surface,
    * coordinates if a client is moving a window in response to motion
    * events.
    */
-  if (surface->window &&
-      surface->window->client_type == META_WINDOW_CLIENT_TYPE_X11)
+  window = meta_wayland_surface_get_window (surface);
+  if (window &&
+      window->client_type == META_WINDOW_CLIENT_TYPE_X11)
     {
       MetaRectangle window_rect;
 
-      meta_window_get_buffer_rect (surface->window, &window_rect);
+      meta_window_get_buffer_rect (window, &window_rect);
       *sx = abs_x - window_rect.x;
       *sy = abs_y - window_rect.y;
     }
@@ -1822,6 +1831,12 @@ meta_wayland_surface_role_get_toplevel (MetaWaylandSurfaceRole *surface_role)
     return NULL;
 }
 
+MetaWindow *
+meta_wayland_surface_get_window (MetaWaylandSurface *surface)
+{
+  return surface->window;
+}
+
 static gboolean
 meta_wayland_surface_role_should_cache_state (MetaWaylandSurfaceRole *surface_role)
 {
diff --git a/src/wayland/meta-wayland-surface.h b/src/wayland/meta-wayland-surface.h
index b19a35832..5477eb99e 100644
--- a/src/wayland/meta-wayland-surface.h
+++ b/src/wayland/meta-wayland-surface.h
@@ -273,6 +273,8 @@ void                meta_wayland_surface_update_outputs (MetaWaylandSurface *sur
 
 MetaWaylandSurface *meta_wayland_surface_get_toplevel (MetaWaylandSurface *surface);
 
+MetaWindow *        meta_wayland_surface_get_window (MetaWaylandSurface *surface);
+
 gboolean            meta_wayland_surface_should_cache_state (MetaWaylandSurface *surface);
 
 MetaWindow *        meta_wayland_surface_get_toplevel_window (MetaWaylandSurface *surface);
diff --git a/src/wayland/meta-wayland-wl-shell.c b/src/wayland/meta-wayland-wl-shell.c
index 8d3324d02..3215f4394 100644
--- a/src/wayland/meta-wayland-wl-shell.c
+++ b/src/wayland/meta-wayland-wl-shell.c
@@ -224,10 +224,12 @@ wl_shell_surface_set_state (MetaWaylandSurface     *surface,
   MetaWaylandWlShellSurface *wl_shell_surface =
     META_WAYLAND_WL_SHELL_SURFACE (surface->role);
   MetaWlShellSurfaceState old_state = wl_shell_surface->state;
+  MetaWindow *window;
 
   wl_shell_surface->state = state;
 
-  if (surface->window && old_state != state)
+  window = meta_wayland_surface_get_window (surface);
+  if (window && old_state != state)
     {
       if (old_state == META_WL_SHELL_SURFACE_STATE_POPUP &&
           wl_shell_surface->popup)
@@ -237,14 +239,14 @@ wl_shell_surface_set_state (MetaWaylandSurface     *surface,
         }
 
       if (state == META_WL_SHELL_SURFACE_STATE_FULLSCREEN)
-        meta_window_make_fullscreen (surface->window);
+        meta_window_make_fullscreen (window);
       else
-        meta_window_unmake_fullscreen (surface->window);
+        meta_window_unmake_fullscreen (window);
 
       if (state == META_WL_SHELL_SURFACE_STATE_MAXIMIZED)
-        meta_window_maximize (surface->window, META_MAXIMIZE_BOTH);
+        meta_window_maximize (window, META_MAXIMIZE_BOTH);
       else
-        meta_window_unmaximize (surface->window, META_MAXIMIZE_BOTH);
+        meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
     }
 }
 
@@ -302,7 +304,8 @@ wl_shell_surface_set_transient (struct wl_client   *client,
   wl_shell_surface->x = x;
   wl_shell_surface->y = y;
 
-  if (surface->window && parent_surf->window)
+  if (meta_wayland_surface_get_window (surface) &&
+      meta_wayland_surface_get_window (parent_surf))
     sync_wl_shell_parent_relationship (surface, parent_surf);
 }
 
@@ -377,7 +380,8 @@ wl_shell_surface_set_popup (struct wl_client   *client,
   wl_shell_surface->y = y;
   wl_shell_surface->pending_popup = TRUE;
 
-  if (surface->window && parent_surf->window)
+  if (meta_wayland_surface_get_window (surface) &&
+      meta_wayland_surface_get_window (parent_surf))
     sync_wl_shell_parent_relationship (surface, parent_surf);
 }
 
@@ -402,6 +406,7 @@ wl_shell_surface_set_title (struct wl_client   *client,
     META_WAYLAND_WL_SHELL_SURFACE (wl_resource_get_user_data (resource));
   MetaWaylandSurface *surface =
     surface_from_wl_shell_surface_resource (resource);
+  MetaWindow *window;
 
   g_clear_pointer (&wl_shell_surface->title, g_free);
 
@@ -410,8 +415,9 @@ wl_shell_surface_set_title (struct wl_client   *client,
 
   wl_shell_surface->title = g_strdup (title);
 
-  if (surface->window)
-    meta_window_set_title (surface->window, title);
+  window = meta_wayland_surface_get_window (surface);
+  if (window)
+    meta_window_set_title (window, title);
 }
 
 static void
@@ -423,6 +429,7 @@ wl_shell_surface_set_class (struct wl_client *client,
     META_WAYLAND_WL_SHELL_SURFACE (wl_resource_get_user_data (resource));
   MetaWaylandSurface *surface =
     surface_from_wl_shell_surface_resource (resource);
+  MetaWindow *window;
 
   g_clear_pointer (&wl_shell_surface->wm_class, g_free);
 
@@ -431,8 +438,9 @@ wl_shell_surface_set_class (struct wl_client *client,
 
   wl_shell_surface->wm_class = g_strdup (class_);
 
-  if (surface->window)
-    meta_window_set_wm_class (surface->window, class_, class_);
+  window = meta_wayland_surface_get_window (surface);
+  if (window)
+    meta_window_set_wm_class (window, class_, class_);
 }
 
 static const struct wl_shell_surface_interface meta_wayland_wl_shell_surface_interface = {
@@ -454,13 +462,17 @@ sync_wl_shell_parent_relationship (MetaWaylandSurface *surface,
 {
   MetaWaylandWlShellSurface *wl_shell_surface =
     META_WAYLAND_WL_SHELL_SURFACE (surface->role);
+  MetaWindow *window;
+  MetaWindow *parent_window;
 
-  meta_window_set_transient_for (surface->window, parent->window);
+  window = meta_wayland_surface_get_window (surface);
+  parent_window = meta_wayland_surface_get_window (parent);
+  meta_window_set_transient_for (window, parent_window);
 
   if (wl_shell_surface->state == META_WL_SHELL_SURFACE_STATE_POPUP ||
       wl_shell_surface->state == META_WL_SHELL_SURFACE_STATE_TRANSIENT)
-    meta_window_wayland_place_relative_to (surface->window,
-                                           parent->window,
+    meta_window_wayland_place_relative_to (window,
+                                           parent_window,
                                            wl_shell_surface->x,
                                            wl_shell_surface->y);
 
@@ -487,21 +499,21 @@ create_wl_shell_surface_window (MetaWaylandSurface *surface)
   meta_wayland_shell_surface_set_window (shell_surface, window);
 
   if (wl_shell_surface->title)
-    meta_window_set_title (surface->window, wl_shell_surface->title);
+    meta_window_set_title (window, wl_shell_surface->title);
   if (wl_shell_surface->wm_class)
-    meta_window_set_wm_class (surface->window,
+    meta_window_set_wm_class (window,
                               wl_shell_surface->wm_class,
                               wl_shell_surface->wm_class);
 
   parent = wl_shell_surface->parent_surface;
-  if (parent && parent->window)
+  if (parent && meta_wayland_surface_get_window (parent))
     sync_wl_shell_parent_relationship (surface, parent);
 
   for (l = wl_shell_surface->children; l; l = l->next)
     {
       MetaWaylandSurface *child = l->data;
 
-      if (child->window)
+      if (meta_wayland_surface_get_window (child))
         sync_wl_shell_parent_relationship (child, surface);
     }
 }
@@ -575,7 +587,7 @@ wl_shell_surface_role_apply_state (MetaWaylandSurfaceRole  *surface_role,
   MetaWaylandSurfaceRoleClass *surface_role_class;
   MetaWaylandSurface *surface =
     meta_wayland_surface_role_get_surface (surface_role);
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
   cairo_region_t *input_region;
   MetaRectangle geom = { 0 };
 
diff --git a/src/wayland/meta-wayland-xdg-foreign.c b/src/wayland/meta-wayland-xdg-foreign.c
index 18843c692..eb480b996 100644
--- a/src/wayland/meta-wayland-xdg-foreign.c
+++ b/src/wayland/meta-wayland-xdg-foreign.c
@@ -144,7 +144,8 @@ xdg_exporter_export (struct wl_client   *client,
   MetaWaylandXdgExported *exported;
   char *handle;
 
-  if (!surface->role || !surface->window ||
+  if (!surface->role ||
+      !meta_wayland_surface_get_window (surface) ||
       !(META_IS_WAYLAND_XDG_SURFACE (surface->role) ||
         META_IS_WAYLAND_ZXDG_SURFACE_V6 (surface->role)))
     {
@@ -256,7 +257,7 @@ is_valid_child (MetaWaylandSurface *surface)
       !META_IS_WAYLAND_ZXDG_TOPLEVEL_V6 (surface->role))
     return FALSE;
 
-  if (!surface->window)
+  if (!meta_wayland_surface_get_window (surface))
     return FALSE;
 
   return TRUE;
@@ -294,12 +295,18 @@ xdg_imported_set_parent_of (struct wl_client   *client,
 
   if (surface)
     {
+      MetaWindow *window;
+      MetaWindow *exported_window;
+
       imported->parent_of_unmapped_handler_id =
         g_signal_connect (surface, "unmapped",
                           G_CALLBACK (imported_parent_of_unmapped),
                           imported);
-      meta_window_set_transient_for (surface->window,
-                                     imported->exported->surface->window);
+
+      window = meta_wayland_surface_get_window (surface);
+      exported_window =
+        meta_wayland_surface_get_window (imported->exported->surface);
+      meta_window_set_transient_for (window, exported_window);
     }
 }
 
@@ -329,7 +336,7 @@ meta_wayland_xdg_imported_destroy (MetaWaylandXdgImported *imported)
       g_clear_signal_handler (&imported->parent_of_unmapped_handler_id,
                               imported->parent_of);
 
-      window = imported->parent_of->window;
+      window = meta_wayland_surface_get_window (imported->parent_of);
       if (window)
         meta_window_set_transient_for (window, NULL);
     }
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
index 4123a83c3..63325110e 100644
--- a/src/wayland/meta-wayland-xdg-shell.c
+++ b/src/wayland/meta-wayland-xdg-shell.c
@@ -196,7 +196,7 @@ xdg_toplevel_set_parent (struct wl_client   *client,
   MetaWindow *transient_for = NULL;
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -205,7 +205,7 @@ xdg_toplevel_set_parent (struct wl_client   *client,
       MetaWaylandSurface *parent_surface =
         surface_from_xdg_surface_resource (parent_resource);
 
-      transient_for = parent_surface->window;
+      transient_for = meta_wayland_surface_get_window (parent_surface);
     }
 
   meta_window_set_transient_for (window, transient_for);
@@ -219,7 +219,7 @@ xdg_toplevel_set_title (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -237,7 +237,7 @@ xdg_toplevel_set_app_id (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -260,7 +260,7 @@ xdg_toplevel_show_window_menu (struct wl_client   *client,
   MetaWindow *window;
   int monitor_scale;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -284,7 +284,7 @@ xdg_toplevel_move (struct wl_client   *client,
   MetaWindow *window;
   float x, y;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -330,7 +330,7 @@ xdg_toplevel_resize (struct wl_client   *client,
   gfloat x, y;
   MetaGrabOp grab_op;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -398,7 +398,7 @@ xdg_toplevel_set_maximized (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -416,7 +416,7 @@ xdg_toplevel_unset_maximized (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -431,7 +431,7 @@ xdg_toplevel_set_fullscreen (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -456,7 +456,7 @@ xdg_toplevel_unset_fullscreen (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -470,7 +470,7 @@ xdg_toplevel_set_minimized (struct wl_client   *client,
   MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -604,7 +604,7 @@ fill_states (MetaWaylandXdgToplevel *xdg_toplevel,
     META_WAYLAND_SURFACE_ROLE (xdg_toplevel);
   MetaWaylandSurface *surface =
     meta_wayland_surface_role_get_surface (surface_role);
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
 
   if (META_WINDOW_MAXIMIZED (window))
     add_state_value (states, XDG_TOPLEVEL_STATE_MAXIMIZED);
@@ -694,7 +694,7 @@ meta_wayland_xdg_toplevel_apply_state (MetaWaylandSurfaceRole  *surface_role,
   MetaRectangle old_geometry;
   gboolean geometry_changed;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     {
       meta_wayland_surface_cache_pending_frame_callbacks (surface, pending);
@@ -904,9 +904,10 @@ static void
 scale_placement_rule (MetaPlacementRule  *placement_rule,
                       MetaWaylandSurface *surface)
 {
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
   int geometry_scale;
 
-  geometry_scale = meta_window_wayland_get_geometry_scale (surface->window);
+  geometry_scale = meta_window_wayland_get_geometry_scale (window);
 
   placement_rule->anchor_rect.x *= geometry_scale;
   placement_rule->anchor_rect.y *= geometry_scale;
@@ -926,12 +927,13 @@ meta_wayland_xdg_popup_place (MetaWaylandXdgPopup *xdg_popup,
   MetaWaylandSurface *surface =
     meta_wayland_surface_role_get_surface (surface_role);
   MetaPlacementRule scaled_placement_rule;
+  MetaWindow *window;
 
   scaled_placement_rule = *placement_rule;
   scale_placement_rule (&scaled_placement_rule, surface);
 
-  meta_window_place_with_placement_rule (surface->window,
-                                         &scaled_placement_rule);
+  window = meta_wayland_surface_get_window (surface);
+  meta_window_place_with_placement_rule (window, &scaled_placement_rule);
 }
 
 static void
@@ -958,7 +960,7 @@ finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
   xdg_popup->setup.parent_surface = NULL;
   xdg_popup->setup.grab_seat = NULL;
 
-  if (!parent_surface->window)
+  if (!meta_wayland_surface_get_window (parent_surface))
     {
       xdg_popup_send_popup_done (xdg_popup->resource);
       return;
@@ -1065,7 +1067,7 @@ meta_wayland_xdg_popup_apply_state (MetaWaylandSurfaceRole  *surface_role,
     }
 
   /* If the window disappeared the surface is not coming back. */
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (!window)
     return;
 
@@ -1083,7 +1085,7 @@ meta_wayland_xdg_popup_apply_state (MetaWaylandSurfaceRole  *surface_role,
       meta_window_wayland_finish_move_resize (window, window_geometry, pending);
     }
 
-  parent_window = xdg_popup->parent_surface->window;
+  parent_window = meta_wayland_surface_get_window (xdg_popup->parent_surface);
   meta_window_get_buffer_rect (window, &buffer_rect);
   meta_window_get_buffer_rect (parent_window, &parent_buffer_rect);
   if (!meta_rectangle_overlap (&buffer_rect, &parent_buffer_rect) &&
@@ -1126,7 +1128,8 @@ meta_wayland_xdg_popup_configure (MetaWaylandShellSurface        *shell_surface,
 {
   MetaWaylandXdgPopup *xdg_popup = META_WAYLAND_XDG_POPUP (shell_surface);
   MetaWaylandXdgSurface *xdg_surface = META_WAYLAND_XDG_SURFACE (xdg_popup);
-  MetaWindow *parent_window = xdg_popup->parent_surface->window;
+  MetaWindow *parent_window =
+    meta_wayland_surface_get_window (xdg_popup->parent_surface);
   int geometry_scale;
   int x, y;
 
@@ -1160,7 +1163,8 @@ meta_wayland_xdg_popup_managed (MetaWaylandShellSurface *shell_surface,
 
   g_assert (parent);
 
-  meta_window_set_transient_for (window, parent->window);
+  meta_window_set_transient_for (window,
+                                 meta_wayland_surface_get_window (parent));
   meta_window_set_type (window, META_WINDOW_DROPDOWN_MENU);
 }
 
@@ -1447,7 +1451,7 @@ meta_wayland_xdg_surface_apply_state (MetaWaylandSurfaceRole  *surface_role,
     meta_wayland_xdg_surface_get_instance_private (xdg_surface);
   MetaWaylandSurface *surface =
     meta_wayland_surface_role_get_surface (surface_role);
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
   MetaWaylandSurfaceRoleClass *surface_role_class;
 
   surface_role_class =
diff --git a/src/wayland/meta-xwayland-dnd.c b/src/wayland/meta-xwayland-dnd.c
index bb8f67d9d..9821f2dc3 100644
--- a/src/wayland/meta-xwayland-dnd.c
+++ b/src/wayland/meta-xwayland-dnd.c
@@ -471,7 +471,7 @@ meta_x11_drag_dest_focus_in (MetaWaylandDataDevice *data_device,
   MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
   MetaXWaylandDnd *dnd = compositor->xwayland_manager.dnd;
 
-  dnd->dnd_dest = surface->window->xwindow;
+  dnd->dnd_dest = meta_wayland_surface_get_window (surface)->xwindow;
   xdnd_send_enter (dnd, dnd->dnd_dest);
 }
 
@@ -619,6 +619,7 @@ repick_drop_surface (MetaWaylandCompositor *compositor,
   Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
   MetaXWaylandDnd *dnd = compositor->xwayland_manager.dnd;
   MetaWaylandSurface *focus = NULL;
+  MetaWindow *focus_window;
 
   focus = pick_drop_surface (compositor, event);
   if (dnd->focus_surface == focus)
@@ -626,15 +627,20 @@ repick_drop_surface (MetaWaylandCompositor *compositor,
 
   dnd->focus_surface = focus;
 
-  if (focus &&
-      focus->window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
+  if (focus)
+    focus_window = meta_wayland_surface_get_window (focus);
+  else
+    focus_window = NULL;
+
+  if (focus_window &&
+      focus_window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
     {
       XMapRaised (xdisplay, dnd->dnd_window);
       XMoveResizeWindow (xdisplay, dnd->dnd_window,
-                         focus->window->rect.x,
-                         focus->window->rect.y,
-                         focus->window->rect.width,
-                         focus->window->rect.height);
+                         focus_window->rect.x,
+                         focus_window->rect.y,
+                         focus_window->rect.width,
+                         focus_window->rect.height);
     }
   else
     {
diff --git a/src/wayland/meta-xwayland-grab-keyboard.c b/src/wayland/meta-xwayland-grab-keyboard.c
index c47d79c57..c9eeca8d0 100644
--- a/src/wayland/meta-xwayland-grab-keyboard.c
+++ b/src/wayland/meta-xwayland-grab-keyboard.c
@@ -228,7 +228,7 @@ static void
 meta_xwayland_keyboard_grab_activate (MetaXwaylandKeyboardActiveGrab *active_grab)
 {
   MetaWaylandSurface *surface = active_grab->surface;
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
   MetaWaylandSeat *seat = active_grab->seat;
 
   if (meta_xwayland_grab_is_granted (window))
@@ -259,7 +259,7 @@ zwp_xwayland_keyboard_grab_manager_grab (struct wl_client   *client,
                                          struct wl_resource *seat_resource)
 {
   MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
-  MetaWindow *window = surface->window;
+  MetaWindow *window = meta_wayland_surface_get_window (surface);
   MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
   MetaXwaylandKeyboardActiveGrab *active_grab;
   struct wl_resource *grab_resource;
diff --git a/src/wayland/meta-xwayland-surface.c b/src/wayland/meta-xwayland-surface.c
index 55a895d3c..b1894ef8c 100644
--- a/src/wayland/meta-xwayland-surface.c
+++ b/src/wayland/meta-xwayland-surface.c
@@ -102,7 +102,7 @@ meta_xwayland_surface_sync_actor_state (MetaWaylandActorSurface *actor_surface)
   MetaWaylandActorSurfaceClass *actor_surface_class =
     META_WAYLAND_ACTOR_SURFACE_CLASS (meta_xwayland_surface_parent_class);
 
-  if (surface->window)
+  if (meta_wayland_surface_get_window (surface))
     actor_surface_class->sync_actor_state (actor_surface);
 }
 
@@ -117,7 +117,7 @@ meta_xwayland_surface_finalize (GObject *object)
     G_OBJECT_CLASS (meta_xwayland_surface_parent_class);
   MetaWindow *window;
 
-  window = surface->window;
+  window = meta_wayland_surface_get_window (surface);
   if (window)
     {
       meta_wayland_surface_set_window (surface, NULL);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]