1
0
Fork 0
mutter-performance-source/src/wayland/meta-wayland-shell-surface.h
Jonas Ådahl 554644f9e0 wayland: Rework asynchronous window configuration
This changes how asynchronous window configuration works. Prior to this
commit, it worked by MetaWindowWayland remembering the last
configuration it sent, then when the Wayland client got back to it, it
tried to figure out whether it was a acknowledgment of the configuration
or not, and finish the move. This failed if the client had acknowledged
a configuration older than the last one sent, and it had hacks to
somewhat deal with wl_shell's lack of configuration serial numbers.

This commits scraps that and makes the MetaWindowWayland take ownership
of sent configurations, including generating serial numbers. The
wl_shell implementation is changed to emulate serial numbers (assuming
each commit acknowledges the last sent configure event). Each
configuration sent to the client is kept around until the client one. At
this point, the position used for that particular configuration is used
when applying the acknowledged state, meaning cases where we have
already sent a new configuration when the client acknowledges a previous
one, we'll still use the correct position for the window.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/907
2019-12-09 10:09:40 +01:00

68 lines
3 KiB
C

/*
* Copyright (C) 2012,2013 Intel Corporation
* Copyright (C) 2013-2017 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_WAYLAND_SHELL_SURFACE_H
#define META_WAYLAND_SHELL_SURFACE_H
#include "wayland/meta-wayland-actor-surface.h"
#define META_TYPE_WAYLAND_SHELL_SURFACE (meta_wayland_shell_surface_get_type ())
G_DECLARE_DERIVABLE_TYPE (MetaWaylandShellSurface,
meta_wayland_shell_surface,
META, WAYLAND_SHELL_SURFACE,
MetaWaylandActorSurface)
struct _MetaWaylandShellSurfaceClass
{
MetaWaylandActorSurfaceClass parent_class;
void (*configure) (MetaWaylandShellSurface *shell_surface,
MetaWaylandWindowConfiguration *configuration);
void (*managed) (MetaWaylandShellSurface *shell_surface,
MetaWindow *window);
void (*ping) (MetaWaylandShellSurface *shell_surface,
uint32_t serial);
void (*close) (MetaWaylandShellSurface *shell_surface);
};
void meta_wayland_shell_surface_configure (MetaWaylandShellSurface *shell_surface,
MetaWaylandWindowConfiguration *configuration);
void meta_wayland_shell_surface_ping (MetaWaylandShellSurface *shell_surface,
uint32_t serial);
void meta_wayland_shell_surface_close (MetaWaylandShellSurface *shell_surface);
void meta_wayland_shell_surface_managed (MetaWaylandShellSurface *shell_surface,
MetaWindow *window);
void meta_wayland_shell_surface_calculate_geometry (MetaWaylandShellSurface *shell_surface,
MetaRectangle *out_geometry);
void meta_wayland_shell_surface_determine_geometry (MetaWaylandShellSurface *shell_surface,
MetaRectangle *set_geometry,
MetaRectangle *out_geometry);
void meta_wayland_shell_surface_set_window (MetaWaylandShellSurface *shell_surface,
MetaWindow *window);
void meta_wayland_shell_surface_destroy_window (MetaWaylandShellSurface *shell_surface);
#endif /* META_WAYLAND_SHELL_SURFACE_H */