[mutter] wayland: Don't require a new buffer to move windows with dx/dy
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] wayland: Don't require a new buffer to move windows with dx/dy
- Date: Thu, 17 Jul 2014 19:50:54 +0000 (UTC)
commit 90d7737fc1a44fbafbe6145dae2f849cdee66b87
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Jul 17 14:15:05 2014 -0400
wayland: Don't require a new buffer to move windows with dx/dy
This doesn't match what Weston does. I don't know of any apps that this
fixes (we don't have any apps that even use non-zero dx/dy, I don't
think), but this is part of a cleanup for window geometry.
src/wayland/meta-wayland-surface.c | 80 ++++++++++++++++--------------------
1 files changed, 35 insertions(+), 45 deletions(-)
---
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 4adfeb1..76742b0 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -166,36 +166,33 @@ static void
toplevel_surface_commit (MetaWaylandSurface *surface,
MetaWaylandPendingState *pending)
{
- if (pending->frame_extents_changed)
- meta_window_set_custom_frame_extents (surface->window, &pending->frame_extents);
+ MetaWindow *window = surface->window;
- if (pending->newly_attached)
+ /* Sanity check. */
+ if (surface->buffer == NULL)
{
- MetaWindow *window = surface->window;
- MetaWaylandBuffer *buffer = pending->buffer;
+ wl_resource_post_error (surface->resource,
+ WL_DISPLAY_ERROR_INVALID_OBJECT,
+ "Cannot commit a NULL buffer to an xdg_surface");
+ return;
+ }
- if (buffer == NULL)
- {
- wl_resource_post_error (surface->resource,
- WL_DISPLAY_ERROR_INVALID_OBJECT,
- "Cannot commit a NULL buffer to an xdg_surface");
- return;
- }
+ if (pending->frame_extents_changed)
+ meta_window_set_custom_frame_extents (surface->window, &pending->frame_extents);
- /* We resize X based surfaces according to X events */
- if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
- {
- int new_width, new_height;
+ /* We resize X based surfaces according to X events */
+ if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
+ {
+ int new_width, new_height;
- new_width = cogl_texture_get_width (buffer->texture);
- new_height = cogl_texture_get_height (buffer->texture);
+ new_width = cogl_texture_get_width (surface->buffer->texture);
+ new_height = cogl_texture_get_height (surface->buffer->texture);
- if (new_width != window->rect.width ||
- new_height != window->rect.height ||
- pending->dx != 0 ||
- pending->dy != 0)
- meta_window_wayland_move_resize (window, new_width, new_height, pending->dx, pending->dy);
- }
+ if (new_width != window->rect.width ||
+ new_height != window->rect.height ||
+ pending->dx != 0 ||
+ pending->dy != 0)
+ meta_window_wayland_move_resize (window, new_width, new_height, pending->dx, pending->dy);
}
}
@@ -269,22 +266,18 @@ static void
subsurface_surface_commit (MetaWaylandSurface *surface,
MetaWaylandPendingState *pending)
{
- if (pending->newly_attached)
- {
- MetaSurfaceActor *surface_actor = surface->surface_actor;
- MetaWaylandBuffer *buffer = pending->buffer;
- float x, y;
-
- if (buffer != NULL)
- clutter_actor_show (CLUTTER_ACTOR (surface_actor));
- else
- clutter_actor_hide (CLUTTER_ACTOR (surface_actor));
-
- clutter_actor_get_position (CLUTTER_ACTOR (surface_actor), &x, &y);
- x += pending->dx;
- y += pending->dy;
- clutter_actor_set_position (CLUTTER_ACTOR (surface_actor), x, y);
- }
+ MetaSurfaceActor *surface_actor = surface->surface_actor;
+ float x, y;
+
+ if (surface->buffer != NULL)
+ clutter_actor_show (CLUTTER_ACTOR (surface_actor));
+ else
+ clutter_actor_hide (CLUTTER_ACTOR (surface_actor));
+
+ clutter_actor_get_position (CLUTTER_ACTOR (surface_actor), &x, &y);
+ x += pending->dx;
+ y += pending->dy;
+ clutter_actor_set_position (CLUTTER_ACTOR (surface_actor), x, y);
}
static void
@@ -423,16 +416,13 @@ wl_surface_attach (struct wl_client *client,
else
buffer = NULL;
- if (surface->buffer == buffer)
- return;
-
if (surface->pending.buffer)
wl_list_remove (&surface->pending.buffer_destroy_listener.link);
+ surface->pending.newly_attached = TRUE;
+ surface->pending.buffer = buffer;
surface->pending.dx = dx;
surface->pending.dy = dy;
- surface->pending.buffer = buffer;
- surface->pending.newly_attached = TRUE;
if (buffer)
wl_signal_add (&buffer->destroy_signal,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]