[mutter/wayland] wayland-surface: Rework flow control for wl_surface_commit
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wayland] wayland-surface: Rework flow control for wl_surface_commit
- Date: Mon, 25 Nov 2013 22:26:25 +0000 (UTC)
commit 0ccef8178976d488297f22b9ff0c7d7d3eff929e
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Mon Nov 25 15:50:05 2013 -0500
wayland-surface: Rework flow control for wl_surface_commit
src/wayland/meta-wayland-surface.c | 112 ++++++++++++++++++++----------------
1 files changed, 62 insertions(+), 50 deletions(-)
---
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index ebc2154..deee021 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -262,70 +262,82 @@ ensure_buffer_texture (MetaWaylandBuffer *buffer)
}
static void
-meta_wayland_surface_commit (struct wl_client *client,
- struct wl_resource *resource)
+cursor_surface_commit (MetaWaylandSurface *surface)
{
- MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
- MetaWaylandCompositor *compositor;
+ MetaWaylandBuffer *buffer = surface->pending.buffer;
- /* X11 unmanaged window */
- if (!surface)
- return;
+ if (surface->pending.newly_attached && buffer != surface->buffer_ref.buffer)
+ {
+ ensure_buffer_texture (buffer);
+ meta_wayland_buffer_reference (&surface->buffer_ref, buffer);
+ }
- compositor = surface->compositor;
+ meta_wayland_seat_update_sprite (surface->compositor->seat);
+}
+
+static void
+toplevel_surface_commit (MetaWaylandSurface *surface)
+{
+ MetaWindow *window = surface->window;
+ MetaWaylandBuffer *buffer = surface->pending.buffer;
/* wl_surface.attach */
- if (surface->pending.newly_attached &&
- surface->buffer_ref.buffer != surface->pending.buffer)
+ if (surface->pending.newly_attached && buffer != surface->buffer_ref.buffer)
{
- MetaWaylandBuffer *buffer = surface->pending.buffer;
-
- /* Note: we set this before informing any window-actor since the
- * window actor will expect to find the new buffer within the
- * surface. */
ensure_buffer_texture (buffer);
meta_wayland_buffer_reference (&surface->buffer_ref, buffer);
- }
- if (surface == compositor->seat->sprite)
- meta_wayland_seat_update_sprite (compositor->seat);
- else if (surface->window)
- {
- MetaWindow *window = surface->window;
+ meta_window_set_surface_mapped (window, buffer != NULL);
- meta_window_set_surface_mapped (window, surface->pending.buffer != NULL);
+ if (buffer != NULL)
+ {
+ MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
- if (surface->pending.buffer)
- {
- MetaWaylandBuffer *buffer = surface->pending.buffer;
- MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
+ meta_window_actor_attach_wayland_buffer (window_actor, buffer);
- meta_window_actor_attach_wayland_buffer (window_actor, buffer);
- }
+ /* We resize X based surfaces according to X events */
+ if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
+ {
+ int new_width;
+ int new_height;
+
+ new_width = surface->buffer_ref.buffer->width;
+ 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);
+ }
+ }
+ }
- /* We resize X based surfaces according to X events */
- if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
- {
- int new_width;
- int new_height;
-
- new_width = surface->buffer_ref.buffer->width;
- 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 (surface->window, new_width, new_height,
- surface->pending.dx, surface->pending.dy);
- }
+ surface_process_damage (surface, surface->pending.damage);
- if (surface->pending.opaque_region)
- meta_window_set_opaque_region (surface->window, surface->pending.opaque_region);
- if (surface->pending.input_region)
- meta_window_set_input_region (surface->window, surface->pending.input_region);
+ if (surface->pending.opaque_region)
+ meta_window_set_opaque_region (window, surface->pending.opaque_region);
+ if (surface->pending.input_region)
+ meta_window_set_input_region (window, surface->pending.input_region);
+}
- surface_process_damage (surface, surface->pending.damage);
- }
+static void
+meta_wayland_surface_commit (struct wl_client *client,
+ struct wl_resource *resource)
+{
+ MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
+ MetaWaylandCompositor *compositor;
+
+ /* X11 unmanaged window */
+ if (!surface)
+ return;
+
+ compositor = surface->compositor;
+
+ if (surface == compositor->seat->sprite)
+ cursor_surface_commit (surface);
+ else if (surface->window)
+ toplevel_surface_commit (surface);
if (surface->pending.buffer)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]