[mutter/bilelmoussaoui/untangle-window: 2/2] window: Move surface property to it subclasses
- From: Bilal Elmoussaoui <bilelmoussaoui src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/bilelmoussaoui/untangle-window: 2/2] window: Move surface property to it subclasses
- Date: Sat, 18 Jun 2022 20:56:27 +0000 (UTC)
commit 49d77568b18499f966eb915589f50dbedb5e10c4
Author: Bilal Elmoussaoui <belmouss redhat com>
Date: Wed May 18 13:51:44 2022 +0200
window: Move surface property to it subclasses
As we have specific window types per display server,
having it in the parent class makes building without wayland
harder to achieve
src/compositor/meta-window-actor.c | 18 +++--
src/core/display.c | 6 +-
src/core/window-private.h | 4 +-
src/core/window.c | 50 ++++++++++----
src/wayland/meta-wayland-client.c | 3 +-
src/wayland/meta-wayland-pointer-constraints.c | 2 +-
src/wayland/meta-wayland.c | 3 +-
src/wayland/meta-window-wayland.c | 96 +++++++++++++++++++-------
src/wayland/meta-window-wayland.h | 21 ++++++
src/wayland/meta-window-xwayland.c | 23 +++---
src/wayland/meta-window-xwayland.h | 10 +++
src/wayland/meta-xwayland-dnd.c | 2 +-
src/wayland/meta-xwayland-surface.c | 13 ++--
13 files changed, 185 insertions(+), 66 deletions(-)
---
diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c
index ae1fa4d903..df423d4faf 100644
--- a/src/compositor/meta-window-actor.c
+++ b/src/compositor/meta-window-actor.c
@@ -387,16 +387,22 @@ init_surface_actor (MetaWindowActor *self)
MetaWindowActorPrivate *priv =
meta_window_actor_get_instance_private (self);
MetaWindow *window = priv->window;
- MetaSurfaceActor *surface_actor;
+ MetaSurfaceActor *surface_actor = NULL;
+#ifdef HAVE_WAYLAND
+ MetaWaylandSurface *surface;
+#endif
if (!meta_is_wayland_compositor ())
- surface_actor = meta_surface_actor_x11_new (window);
+ {
+ surface_actor = meta_surface_actor_x11_new (window);
+ }
#ifdef HAVE_WAYLAND
- else if (window->surface)
- surface_actor = meta_wayland_surface_get_actor (window->surface);
-#endif
else
- surface_actor = NULL;
+ {
+ surface = meta_window_get_surface (window);
+ surface_actor = surface ? meta_wayland_surface_get_actor (surface) : NULL;
+ }
+#endif
if (surface_actor)
meta_window_actor_assign_surface_actor (self, surface_actor);
diff --git a/src/core/display.c b/src/core/display.c
index ee1c372bf8..675dca323d 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1438,8 +1438,10 @@ meta_display_sync_wayland_input_focus (MetaDisplay *display)
focus_window = NULL;
else if (clutter_stage_get_grab_actor (CLUTTER_STAGE (stage)))
focus_window = NULL;
- else if (display->focus_window && display->focus_window->surface)
- focus_window = display->focus_window;
+#ifdef HAVE_WAYLAND
+ else if (display->focus_window)
+ focus_window = meta_window_get_surface (display->focus_window) ? display->focus_window : NULL;
+#endif
else
meta_topic (META_DEBUG_FOCUS, "Focus change has no effect, because there is no matching wayland
surface");
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 86986f6903..71a9c34a4d 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -169,7 +169,6 @@ struct _MetaWindow
MetaLogicalMonitor *monitor;
MetaWorkspace *workspace;
MetaWindowClientType client_type;
- MetaWaylandSurface *surface;
Window xwindow;
/* may be NULL! not all windows get decorated */
MetaFrame *frame;
@@ -907,5 +906,8 @@ void meta_window_update_layout (MetaWindow *window);
gboolean meta_window_calculate_bounds (MetaWindow *window,
int *bounds_width,
int *bounds_height);
+#ifdef HAVE_WAYLAND
+MetaWaylandSurface* meta_window_get_surface (MetaWindow *window);
+#endif
#endif
diff --git a/src/core/window.c b/src/core/window.c
index 589cdf52dd..39e65e39f8 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -206,7 +206,6 @@ enum
PROP_IS_ALIVE,
PROP_DISPLAY,
PROP_EFFECT,
- PROP_SURFACE,
PROP_XWINDOW,
PROP_LAST,
@@ -427,9 +426,6 @@ meta_window_get_property(GObject *object,
case PROP_EFFECT:
g_value_set_int (value, win->pending_compositor_effect);
break;
- case PROP_SURFACE:
- g_value_set_pointer (value, win->surface);
- break;
case PROP_XWINDOW:
g_value_set_ulong (value, win->xwindow);
break;
@@ -455,9 +451,6 @@ meta_window_set_property(GObject *object,
case PROP_EFFECT:
win->pending_compositor_effect = g_value_get_int (value);
break;
- case PROP_SURFACE:
- win->surface = g_value_get_pointer (value);
- break;
case PROP_XWINDOW:
win->xwindow = g_value_get_ulong (value);
break;
@@ -843,8 +836,8 @@ static gboolean
client_window_should_be_mapped (MetaWindow *window)
{
#ifdef HAVE_WAYLAND
- if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND &&
- !meta_wayland_surface_get_buffer (window->surface))
+ MetaWaylandSurface *surface = meta_window_get_surface (window);
+ if (!meta_wayland_surface_get_buffer (surface))
return FALSE;
#endif
@@ -1698,8 +1691,8 @@ meta_window_should_be_showing (MetaWindow *window)
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
#ifdef HAVE_WAYLAND
- if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND &&
- !meta_wayland_surface_get_buffer (window->surface))
+ MetaWaylandSurface *surface = meta_window_get_surface (window);
+ if (!meta_wayland_surface_get_buffer (surface))
return FALSE;
#endif
@@ -4465,8 +4458,8 @@ static gboolean
meta_window_transient_can_focus (MetaWindow *window)
{
#ifdef HAVE_WAYLAND
- if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
- return meta_wayland_surface_get_buffer (window->surface) != NULL;
+ MetaWaylandSurface *surface = meta_window_get_surface (window);
+ return meta_wayland_surface_get_buffer (surface) != NULL;
#endif
return TRUE;
@@ -8584,3 +8577,34 @@ meta_window_calculate_bounds (MetaWindow *window,
return FALSE;
}
}
+
+/**
+ * meta_window_get_surface:
+ *
+ * Returns: (nullable): The associated [class@WaylandSurface]
+ * if it is a Wayland / Xwayland window or %NULL.
+ */
+#ifdef HAVE_WAYLAND
+MetaWaylandSurface *
+meta_window_get_surface (MetaWindow *window)
+{
+ g_return_val_if_fail (window != NULL, NULL);
+ g_return_val_if_fail (meta_is_wayland_compositor (), NULL);
+
+ if (META_IS_WINDOW_WAYLAND (window))
+ {
+ MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
+ return wl_window->surface;
+ }
+
+#ifdef HAVE_XWAYLAND
+ if (META_IS_WINDOW_XWAYLAND (window))
+ {
+ MetaWindowXwayland *wl_window = META_WINDOW_XWAYLAND (window);
+ return wl_window->surface;
+ }
+#endif
+
+ return NULL;
+}
+#endif
diff --git a/src/wayland/meta-wayland-client.c b/src/wayland/meta-wayland-client.c
index 69c7b83335..20d5dfbc4d 100644
--- a/src/wayland/meta-wayland-client.c
+++ b/src/wayland/meta-wayland-client.c
@@ -41,6 +41,7 @@
#include "meta/util.h"
#include "wayland/meta-wayland-private.h"
#include "wayland/meta-wayland-types.h"
+#include "wayland/meta-window-wayland.h"
struct _MetaWaylandClient
{
@@ -296,7 +297,7 @@ meta_wayland_client_owns_window (MetaWaylandClient *client,
g_return_val_if_fail (client->subprocess != NULL, FALSE);
g_return_val_if_fail (client->process_running, FALSE);
- surface = window->surface;
+ surface = meta_window_get_surface (window);
if (surface == NULL)
return FALSE;
diff --git a/src/wayland/meta-wayland-pointer-constraints.c b/src/wayland/meta-wayland-pointer-constraints.c
index 965b95ddad..9fce51d837 100644
--- a/src/wayland/meta-wayland-pointer-constraints.c
+++ b/src/wayland/meta-wayland-pointer-constraints.c
@@ -574,7 +574,7 @@ meta_wayland_pointer_constraint_maybe_remove_for_seat (MetaWaylandSeat *seat,
static void
meta_wayland_pointer_constraint_maybe_enable_for_window (MetaWindow *window)
{
- MetaWaylandSurface *surface = window->surface;
+ MetaWaylandSurface *surface = meta_window_get_surface (window);
MetaWaylandSurfacePointerConstraintsData *surface_data;
GList *l;
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
index 677300d907..58fb81a3ae 100644
--- a/src/wayland/meta-wayland.c
+++ b/src/wayland/meta-wayland.c
@@ -143,8 +143,7 @@ void
meta_wayland_compositor_set_input_focus (MetaWaylandCompositor *compositor,
MetaWindow *window)
{
- MetaWaylandSurface *surface = window ? window->surface : NULL;
-
+ MetaWaylandSurface *surface = window ? meta_window_get_surface (window) : NULL;
meta_wayland_seat_set_input_focus (compositor->seat, surface);
}
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
index c6f042d8b2..fc94dc5940 100644
--- a/src/wayland/meta-window-wayland.c
+++ b/src/wayland/meta-window-wayland.c
@@ -44,25 +44,17 @@
#include "wayland/meta-wayland-window-configuration.h"
#include "wayland/meta-wayland-xdg-shell.h"
-struct _MetaWindowWayland
+enum
{
- MetaWindow parent;
+ PROP_0,
- int geometry_scale;
-
- GList *pending_configurations;
- gboolean has_pending_state_change;
-
- gboolean has_last_sent_configuration;
- MetaRectangle last_sent_rect;
- int last_sent_rel_x;
- int last_sent_rel_y;
- int last_sent_geometry_scale;
- MetaGravity last_sent_gravity;
+ PROP_SURFACE,
- gboolean has_been_shown;
+ PROP_LAST
};
+static GParamSpec *obj_props[PROP_LAST];
+
struct _MetaWindowWaylandClass
{
MetaWindowClass parent_class;
@@ -110,7 +102,7 @@ meta_window_wayland_manage (MetaWindow *window)
0);
}
- meta_wayland_surface_window_managed (window->surface, window);
+ meta_wayland_surface_window_managed (wl_window->surface, window);
}
static void
@@ -129,20 +121,22 @@ static void
meta_window_wayland_ping (MetaWindow *window,
guint32 serial)
{
- meta_wayland_surface_ping (window->surface, serial);
+ MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
+ meta_wayland_surface_ping (wl_window->surface, serial);
}
static void
meta_window_wayland_delete (MetaWindow *window,
guint32 timestamp)
{
- meta_wayland_surface_delete (window->surface);
+ MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
+ meta_wayland_surface_delete (wl_window->surface);
}
static void
meta_window_wayland_kill (MetaWindow *window)
{
- MetaWaylandSurface *surface = window->surface;
+ MetaWaylandSurface *surface = meta_window_get_surface (window);
struct wl_resource *resource = surface->resource;
/* Send the client an unrecoverable error to kill the client. */
@@ -168,9 +162,7 @@ static void
meta_window_wayland_configure (MetaWindowWayland *wl_window,
MetaWaylandWindowConfiguration *configuration)
{
- MetaWindow *window = META_WINDOW (wl_window);
-
- meta_wayland_surface_configure_notify (window->surface, configuration);
+ meta_wayland_surface_configure_notify (wl_window->surface, configuration);
wl_window->pending_configurations =
g_list_prepend (wl_window->pending_configurations, configuration);
@@ -358,7 +350,7 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
int bounds_width;
int bounds_height;
- if (!meta_wayland_surface_get_buffer (window->surface) &&
+ if (!meta_wayland_surface_get_buffer (wl_window->surface) &&
!META_WINDOW_MAXIMIZED (window) &&
window->tile_mode == META_TILE_NONE &&
!meta_window_is_fullscreen (window))
@@ -469,6 +461,7 @@ meta_window_wayland_update_main_monitor (MetaWindow *window,
MetaBackend *backend = meta_get_backend ();
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
+ MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
MetaWindow *toplevel_window;
MetaLogicalMonitor *from;
MetaLogicalMonitor *to;
@@ -481,7 +474,7 @@ meta_window_wayland_update_main_monitor (MetaWindow *window,
/* If the window is not a toplevel window (i.e. it's a popup window) just use
* the monitor of the toplevel. */
- toplevel_window = meta_wayland_surface_get_toplevel_window (window->surface);
+ toplevel_window = meta_wayland_surface_get_toplevel_window (wl_window->surface);
if (toplevel_window != window)
{
meta_window_update_monitor (toplevel_window, flags);
@@ -599,7 +592,7 @@ meta_window_wayland_main_monitor_changed (MetaWindow *window,
window,
TRUE);
- surface = window->surface;
+ surface = wl_window->surface;
if (surface)
{
MetaWaylandActorSurface *actor_surface =
@@ -615,7 +608,7 @@ meta_window_wayland_main_monitor_changed (MetaWindow *window,
static pid_t
meta_window_wayland_get_client_pid (MetaWindow *window)
{
- MetaWaylandSurface *surface = window->surface;
+ MetaWaylandSurface *surface = meta_window_get_surface (window);
struct wl_resource *resource = surface->resource;
pid_t pid;
@@ -695,7 +688,8 @@ meta_window_wayland_can_ping (MetaWindow *window)
static gboolean
meta_window_wayland_is_stackable (MetaWindow *window)
{
- return meta_wayland_surface_get_buffer (window->surface) != NULL;
+ MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
+ return meta_wayland_surface_get_buffer (wl_window->surface) != NULL;
}
static gboolean
@@ -766,6 +760,45 @@ meta_window_wayland_finalize (GObject *object)
G_OBJECT_CLASS (meta_window_wayland_parent_class)->finalize (object);
}
+
+static void
+meta_window_wayland_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MetaWindowWayland *window = META_WINDOW_WAYLAND (object);
+
+ switch (prop_id)
+ {
+ case PROP_SURFACE:
+ g_value_set_object (value, window->surface);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+meta_window_wayland_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MetaWindowWayland *window = META_WINDOW_WAYLAND (object);
+
+ switch (prop_id)
+ {
+ case PROP_SURFACE:
+ window->surface = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
static void
meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
{
@@ -773,6 +806,8 @@ meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
MetaWindowClass *window_class = META_WINDOW_CLASS (klass);
object_class->finalize = meta_window_wayland_finalize;
+ object_class->get_property = meta_window_wayland_get_property;
+ object_class->set_property = meta_window_wayland_set_property;
object_class->constructed = meta_window_wayland_constructed;
window_class->manage = meta_window_wayland_manage;
@@ -797,6 +832,15 @@ meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
window_class->map = meta_window_wayland_map;
window_class->unmap = meta_window_wayland_unmap;
window_class->is_focus_async = meta_window_wayland_is_focus_async;
+
+ obj_props[PROP_SURFACE] =
+ g_param_spec_object ("surface",
+ "Surface",
+ "The corresponding Wayland surface",
+ META_TYPE_WAYLAND_SURFACE,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+
+ g_object_class_install_properties (object_class, PROP_LAST, obj_props);
}
MetaWindow *
diff --git a/src/wayland/meta-window-wayland.h b/src/wayland/meta-window-wayland.h
index 154e9a6f21..1c0757c5a8 100644
--- a/src/wayland/meta-window-wayland.h
+++ b/src/wayland/meta-window-wayland.h
@@ -36,6 +36,27 @@ G_DECLARE_FINAL_TYPE (MetaWindowWayland, meta_window_wayland,
META, WINDOW_WAYLAND,
MetaWindow)
+struct _MetaWindowWayland
+{
+ MetaWindow parent;
+
+ int geometry_scale;
+
+ MetaWaylandSurface *surface;
+
+ GList *pending_configurations;
+ gboolean has_pending_state_change;
+
+ gboolean has_last_sent_configuration;
+ MetaRectangle last_sent_rect;
+ int last_sent_rel_x;
+ int last_sent_rel_y;
+ int last_sent_geometry_scale;
+ MetaGravity last_sent_gravity;
+
+ gboolean has_been_shown;
+};
+
MetaWindow * meta_window_wayland_new (MetaDisplay *display,
MetaWaylandSurface *surface);
diff --git a/src/wayland/meta-window-xwayland.c b/src/wayland/meta-window-xwayland.c
index 54ccc91fe4..25608c3624 100644
--- a/src/wayland/meta-window-xwayland.c
+++ b/src/wayland/meta-window-xwayland.c
@@ -27,26 +27,20 @@
#include "x11/xprops.h"
#include "wayland/meta-window-xwayland.h"
#include "wayland/meta-wayland.h"
+#include "wayland/meta-wayland-surface.h"
enum
{
PROP_0,
PROP_XWAYLAND_MAY_GRAB_KEYBOARD,
+ PROP_SURFACE,
PROP_LAST
};
static GParamSpec *obj_props[PROP_LAST];
-struct _MetaWindowXwayland
-{
- MetaWindowX11 parent;
-
- gboolean xwayland_may_grab_keyboard;
- int freeze_count;
-};
-
struct _MetaWindowXwaylandClass
{
MetaWindowX11Class parent_class;
@@ -251,6 +245,9 @@ meta_window_xwayland_get_property (GObject *object,
case PROP_XWAYLAND_MAY_GRAB_KEYBOARD:
g_value_set_boolean (value, window->xwayland_may_grab_keyboard);
break;
+ case PROP_SURFACE:
+ g_value_set_object (value, window->surface);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -270,6 +267,9 @@ meta_window_xwayland_set_property (GObject *object,
case PROP_XWAYLAND_MAY_GRAB_KEYBOARD:
window->xwayland_may_grab_keyboard = g_value_get_boolean (value);
break;
+ case PROP_SURFACE:
+ window->surface = g_value_get_object (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -301,5 +301,12 @@ meta_window_xwayland_class_init (MetaWindowXwaylandClass *klass)
FALSE,
G_PARAM_READWRITE);
+ obj_props[PROP_SURFACE] =
+ g_param_spec_object ("surface",
+ "Surface",
+ "The corresponding Wayland surface",
+ META_TYPE_WAYLAND_SURFACE,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+
g_object_class_install_properties (gobject_class, PROP_LAST, obj_props);
}
diff --git a/src/wayland/meta-window-xwayland.h b/src/wayland/meta-window-xwayland.h
index 5ea6041d44..e07ef77099 100644
--- a/src/wayland/meta-window-xwayland.h
+++ b/src/wayland/meta-window-xwayland.h
@@ -29,6 +29,16 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (MetaWindowXwayland, meta_window_xwayland,
META, WINDOW_XWAYLAND, MetaWindowX11)
+struct _MetaWindowXwayland
+{
+ MetaWindowX11 parent;
+
+ MetaWaylandSurface *surface;
+
+ gboolean xwayland_may_grab_keyboard;
+ int freeze_count;
+};
+
G_END_DECLS
#endif
diff --git a/src/wayland/meta-xwayland-dnd.c b/src/wayland/meta-xwayland-dnd.c
index 0aa4c5efba..68a1eb4f10 100644
--- a/src/wayland/meta-xwayland-dnd.c
+++ b/src/wayland/meta-xwayland-dnd.c
@@ -730,7 +730,7 @@ pick_drop_surface (MetaWaylandCompositor *compositor,
workspace,
NULL,
pos.x, pos.y);
- return focus_window ? focus_window->surface : NULL;
+ return focus_window ? meta_window_get_surface (focus_window) : NULL;
}
static void
diff --git a/src/wayland/meta-xwayland-surface.c b/src/wayland/meta-xwayland-surface.c
index 54db84470f..810f48c2cd 100644
--- a/src/wayland/meta-xwayland-surface.c
+++ b/src/wayland/meta-xwayland-surface.c
@@ -26,6 +26,7 @@
#include "compositor/meta-surface-actor-wayland.h"
#include "compositor/meta-window-actor-private.h"
#include "wayland/meta-wayland-actor-surface.h"
+#include "wayland/meta-window-xwayland.h"
#include "wayland/meta-xwayland-private.h"
enum
@@ -58,14 +59,15 @@ clear_window (MetaXwaylandSurface *xwayland_surface)
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
MetaSurfaceActor *surface_actor;
+ MetaWindowXwayland *xwayland_window;
if (!xwayland_surface->window)
return;
g_clear_signal_handler (&xwayland_surface->unmanaging_handler_id,
xwayland_surface->window);
-
- xwayland_surface->window->surface = NULL;
+ xwayland_window = META_WINDOW_XWAYLAND (xwayland_surface->window);
+ xwayland_window->surface = NULL;
xwayland_surface->window = NULL;
surface_actor = meta_wayland_surface_get_actor (surface);
@@ -90,6 +92,7 @@ meta_xwayland_surface_associate_with_window (MetaXwaylandSurface *xwayland_surfa
META_WAYLAND_SURFACE_ROLE (xwayland_surface);
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
+ MetaWindowXwayland *xwayland_window = META_WINDOW_XWAYLAND (window);
MetaSurfaceActor *surface_actor;
MetaWindowActor *window_actor;
@@ -98,15 +101,15 @@ meta_xwayland_surface_associate_with_window (MetaXwaylandSurface *xwayland_surfa
* decorating the window, then we need to detach the window from its old
* surface.
*/
- if (window->surface)
+ if (xwayland_window->surface)
{
MetaXwaylandSurface *other_xwayland_surface;
- other_xwayland_surface = META_XWAYLAND_SURFACE (window->surface->role);
+ other_xwayland_surface = META_XWAYLAND_SURFACE (xwayland_window->surface->role);
clear_window (other_xwayland_surface);
}
- window->surface = surface;
+ xwayland_window->surface = surface;
xwayland_surface->window = window;
surface_actor = meta_wayland_surface_get_actor (surface);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]