[mutter/wayland] wayland-surface: Use the same commit() when commiting subsurface
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wayland] wayland-surface: Use the same commit() when commiting subsurface
- Date: Sat, 1 Feb 2014 22:57:04 +0000 (UTC)
commit d74796ee80ec76befd8ef2ccbccdce955ec848cf
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sat Feb 1 16:24:43 2014 -0500
wayland-surface: Use the same commit() when commiting subsurface
Refactor our commit() implementation out of wl_surface_commit(),
and pass the double-buffered state around to all our implementation
methods. This allows us to drop a few lines destroying and
reinitializing list of frame callbacks. This is a big cleanup for
the next commit, though.
src/wayland/meta-wayland-surface.c | 96 +++++++++++++++++------------------
1 files changed, 47 insertions(+), 49 deletions(-)
---
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 5d8fd45..7817a31 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -249,11 +249,12 @@ ensure_buffer_texture (MetaWaylandBuffer *buffer)
}
static void
-cursor_surface_commit (MetaWaylandSurface *surface)
+cursor_surface_commit (MetaWaylandSurface *surface,
+ MetaWaylandDoubleBufferedState *pending)
{
- MetaWaylandBuffer *buffer = surface->pending.buffer;
+ MetaWaylandBuffer *buffer = pending->buffer;
- if (surface->pending.newly_attached && buffer != surface->buffer_ref.buffer)
+ if (pending->newly_attached && buffer != surface->buffer_ref.buffer)
{
ensure_buffer_texture (buffer);
meta_wayland_buffer_reference (&surface->buffer_ref, buffer);
@@ -263,7 +264,7 @@ cursor_surface_commit (MetaWaylandSurface *surface)
}
static gboolean
-actor_surface_commit (MetaWaylandSurface *surface,
+actor_surface_commit (MetaWaylandSurface *surface,
MetaWaylandDoubleBufferedState *pending)
{
MetaSurfaceActor *surface_actor = surface->surface_actor;
@@ -290,12 +291,13 @@ actor_surface_commit (MetaWaylandSurface *surface,
}
static void
-toplevel_surface_commit (MetaWaylandSurface *surface)
+toplevel_surface_commit (MetaWaylandSurface *surface,
+ MetaWaylandDoubleBufferedState *pending)
{
- if (actor_surface_commit (surface, &surface->pending))
+ if (actor_surface_commit (surface, pending))
{
MetaWindow *window = surface->window;
- MetaWaylandBuffer *buffer = surface->pending.buffer;
+ MetaWaylandBuffer *buffer = pending->buffer;
meta_window_set_surface_mapped (window, buffer != NULL);
/* We resize X based surfaces according to X events */
@@ -308,10 +310,9 @@ toplevel_surface_commit (MetaWaylandSurface *surface)
new_height = surface->buffer_ref.buffer->height;
if (new_width != window->rect.width ||
new_height != window->rect.height ||
- surface->pending.dx != 0 ||
- surface->pending.dy != 0)
- meta_window_move_resize_wayland (window, new_width, new_height,
- surface->pending.dx, surface->pending.dy);
+ pending->dx != 0 ||
+ pending->dy != 0)
+ meta_window_move_resize_wayland (window, new_width, new_height, pending->dx, pending->dy);
}
}
}
@@ -396,7 +397,8 @@ move_double_buffered_state (MetaWaylandDoubleBufferedState *from,
}
static void
-subsurface_surface_commit (MetaWaylandSurface *surface)
+subsurface_surface_commit (MetaWaylandSurface *surface,
+ MetaWaylandDoubleBufferedState *pending)
{
/*
* If the sub-surface is in synchronous mode, post-pone the commit of its
@@ -412,13 +414,12 @@ subsurface_surface_commit (MetaWaylandSurface *surface)
*/
if (surface->sub.synchronous)
{
- move_double_buffered_state (&surface->pending,
- &surface->sub.pending_surface_state);
+ move_double_buffered_state (pending, &surface->sub.pending_surface_state);
}
- else if (actor_surface_commit (surface, &surface->pending))
+ else if (actor_surface_commit (surface, pending))
{
MetaSurfaceActor *surface_actor = surface->surface_actor;
- MetaWaylandBuffer *buffer = surface->pending.buffer;
+ MetaWaylandBuffer *buffer = pending->buffer;
float x, y;
if (buffer != NULL)
@@ -427,8 +428,8 @@ subsurface_surface_commit (MetaWaylandSurface *surface)
clutter_actor_hide (CLUTTER_ACTOR (surface_actor));
clutter_actor_get_position (CLUTTER_ACTOR (surface_actor), &x, &y);
- x += surface->pending.dx;
- y += surface->pending.dy;
+ x += pending->dx;
+ y += pending->dy;
clutter_actor_set_position (CLUTTER_ACTOR (surface_actor), x, y);
}
}
@@ -443,41 +444,46 @@ parent_surface_committed (gpointer data, gpointer user_data)
}
static void
-meta_wayland_surface_commit (struct wl_client *client,
- struct wl_resource *resource)
+commit_double_buffered_state (MetaWaylandSurface *surface,
+ MetaWaylandDoubleBufferedState *pending)
{
- MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
- MetaWaylandCompositor *compositor;
-
- /* X11 unmanaged window */
- if (!surface)
- return;
-
- compositor = surface->compositor;
+ MetaWaylandCompositor *compositor = surface->compositor;
if (surface == compositor->seat->sprite)
- cursor_surface_commit (surface);
+ cursor_surface_commit (surface, pending);
else if (surface->window)
- toplevel_surface_commit (surface);
+ toplevel_surface_commit (surface, pending);
else if (surface->subsurface.resource)
- subsurface_surface_commit (surface);
+ subsurface_surface_commit (surface, pending);
g_list_foreach (surface->subsurfaces,
parent_surface_committed,
NULL);
- if (surface->pending.buffer)
+ if (pending->buffer)
{
- wl_list_remove (&surface->pending.buffer_destroy_listener.link);
- surface->pending.buffer = NULL;
+ wl_list_remove (&pending->buffer_destroy_listener.link);
+ pending->buffer = NULL;
}
/* wl_surface.frame */
- wl_list_insert_list (&compositor->frame_callbacks,
- &surface->pending.frame_callback_list);
- wl_list_init (&surface->pending.frame_callback_list);
+ wl_list_insert_list (&compositor->frame_callbacks, &pending->frame_callback_list);
+ wl_list_init (&pending->frame_callback_list);
+
+ double_buffered_state_reset (pending);
+}
- double_buffered_state_reset (&surface->pending);
+static void
+meta_wayland_surface_commit (struct wl_client *client,
+ struct wl_resource *resource)
+{
+ MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
+
+ /* X11 unmanaged window */
+ if (!surface)
+ return;
+
+ commit_double_buffered_state (surface, &surface->pending);
}
static void
@@ -1081,9 +1087,7 @@ bind_gtk_shell (struct wl_client *client,
static void
subsurface_parent_surface_committed (MetaWaylandSurface *surface)
{
- MetaWaylandCompositor *compositor = surface->compositor;
- MetaWaylandDoubleBufferedState *pending_surface_state =
- &surface->sub.pending_surface_state;
+ MetaWaylandDoubleBufferedState *pending_surface_state = &surface->sub.pending_surface_state;
if (surface->sub.pending_pos)
{
@@ -1132,15 +1136,9 @@ subsurface_parent_surface_committed (MetaWaylandSurface *surface)
}
if (surface->sub.synchronous)
- {
- actor_surface_commit (surface, pending_surface_state);
-
- wl_list_insert_list (&compositor->frame_callbacks,
- &pending_surface_state->frame_callback_list);
- wl_list_init (&pending_surface_state->frame_callback_list);
- }
+ commit_double_buffered_state (surface, pending_surface_state);
- double_buffered_state_reset (&surface->sub.pending_surface_state);
+ double_buffered_state_reset (pending_surface_state);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]