[mutter] xdg-shell: Don't early out of role commit before calling parent impl
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] xdg-shell: Don't early out of role commit before calling parent impl
- Date: Thu, 25 Aug 2016 04:46:10 +0000 (UTC)
commit dc03b3aa474a77bca319b8b96f2e572b4a62d7a0
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Jul 15 17:44:21 2016 +0800
xdg-shell: Don't early out of role commit before calling parent impl
Make sure to always call the parent role commit vfunc, so that they can
handle updating their state properly.
This means other places need to handle the situation where
surface->window is NULL on commit. This may for example happen when the
parent of a modal dialog is unmapped or NULL is attached to a
wl_shell_surface.
https://bugzilla.gnome.org/show_bug.cgi?id=769936
src/wayland/meta-wayland-surface.c | 14 +++++++++++---
src/wayland/meta-wayland-xdg-shell.c | 8 ++++----
2 files changed, 15 insertions(+), 7 deletions(-)
---
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 4ad6e7a..1819d36 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -1997,10 +1997,13 @@ actor_surface_commit (MetaWaylandSurfaceRole *surface_role,
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
+ queue_surface_actor_frame_callbacks (surface, pending);
+
+ if (!surface->window)
+ return;
+
meta_surface_actor_wayland_sync_state (
META_SURFACE_ACTOR_WAYLAND (surface->surface_actor));
-
- queue_surface_actor_frame_callbacks (surface, pending);
}
static void
@@ -2026,7 +2029,7 @@ shell_surface_role_surface_commit (MetaWaylandSurfaceRole *surface_role,
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
MetaWaylandSurfaceRoleClass *surface_role_class;
- MetaWindow *window = surface->window;
+ MetaWindow *window;
MetaWaylandBuffer *buffer;
CoglTexture *texture;
MetaSurfaceActorWayland *actor;
@@ -2040,9 +2043,14 @@ shell_surface_role_surface_commit (MetaWaylandSurfaceRole *surface_role,
if (!buffer)
return;
+ window = surface->window;
+ if (!window)
+ return;
+
actor = META_SURFACE_ACTOR_WAYLAND (surface->surface_actor);
scale = meta_surface_actor_wayland_get_scale (actor);
texture = buffer->texture;
+
window->buffer_rect.width = cogl_texture_get_width (texture) * scale;
window->buffer_rect.height = cogl_texture_get_height (texture) * scale;
}
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
index e8c56bb..f2d8572 100644
--- a/src/wayland/meta-wayland-xdg-shell.c
+++ b/src/wayland/meta-wayland-xdg-shell.c
@@ -751,14 +751,14 @@ xdg_popup_role_commit (MetaWaylandSurfaceRole *surface_role,
if (xdg_popup->setup.parent_surface)
finish_popup_setup (xdg_popup);
- /* If the window disappeared the surface is not coming back. */
- if (!surface->window)
- return;
-
surface_role_class =
META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_xdg_popup_parent_class);
surface_role_class->commit (surface_role, pending);
+ /* If the window disappeared the surface is not coming back. */
+ if (!surface->window)
+ return;
+
if (!pending->newly_attached)
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]