mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 02:50:41 -05:00
57037a45b8
We assume in meta_window_wayland_move_resize that the next commit that changes the geometry will always be for our next pending operation, so if we have a move pending on a resize, the next commit will trigger the move. This is, of course, fundamentally wrong. We broke this assumption even more now that we don't fizzle out calls to meta_window_move_resize_internal and now call it on every commit, which means that a simple damage and then commit would complete a pending move. This was even broken by apps like weston-terminal, which, when clicking on the maximize button, first redraws the terminal with the maximize button state back on hover on press, and would only redraw when it got the configure event with the coordinates. To track the correct commit to apply the move for, we implement the ack_configure request and ignore all move/resizes that happen before that. Right now, we actually fizzle out the entire move/resize if there's a future pending configure we're waiting on.
55 lines
2.3 KiB
C
55 lines
2.3 KiB
C
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
|
|
/*
|
|
* Copyright (C) 2014 Red Hat
|
|
*
|
|
* 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.
|
|
*
|
|
* Written by:
|
|
* Jasper St. Pierre <jstpierre@mecheye.net>
|
|
*/
|
|
|
|
#ifndef META_WINDOW_WAYLAND_H
|
|
#define META_WINDOW_WAYLAND_H
|
|
|
|
#include <meta/window.h>
|
|
#include "wayland/meta-wayland-types.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define META_TYPE_WINDOW_WAYLAND (meta_window_wayland_get_type())
|
|
#define META_WINDOW_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_WINDOW_WAYLAND, MetaWindowWayland))
|
|
#define META_WINDOW_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_WINDOW_WAYLAND, MetaWindowWaylandClass))
|
|
#define META_IS_WINDOW_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_WINDOW_WAYLAND))
|
|
#define META_IS_WINDOW_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_WINDOW_WAYLAND))
|
|
#define META_WINDOW_WAYLAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_WINDOW_WAYLAND, MetaWindowWaylandClass))
|
|
|
|
GType meta_window_wayland_get_type (void);
|
|
|
|
typedef struct _MetaWindowWayland MetaWindowWayland;
|
|
typedef struct _MetaWindowWaylandClass MetaWindowWaylandClass;
|
|
|
|
MetaWindow * meta_window_wayland_new (MetaDisplay *display,
|
|
MetaWaylandSurface *surface);
|
|
|
|
void meta_window_wayland_move_resize (MetaWindow *window,
|
|
MetaWaylandSerial *acked_configure_serial,
|
|
MetaRectangle new_geom,
|
|
int dx,
|
|
int dy);
|
|
|
|
#endif
|