mutter/src/wayland/meta-wayland-window-configuration.h
Sebastian Keller 251bb45ec0 window/wayland: Always include a size when sending a configuration
Prior to 67033b0a mutter was accidentally including sizes for
configurations that were just focus state changes. This was not leading
to any known problems on the client side, but it was causing issues in
mutter itself when detecting whether a resize originated from the client
or the server.

Not including sizes in focus change configurations anymore however
revealed a bug in gtk. It was storing the window size when in a fixed
size mode (tiled/maximized/fullscreen), but not on any other server side
resizes. It was then restoring this stored size whenever there was a new
configuration without a size while in floating mode, i.e. the focus
change configurations generated by mutter after 67033b0a.

This change now addresses the issue 67033b0a was fixing in a way that
restores the previous behavior of always including the size whenever
sending a configuration.

Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2091
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2238>
2022-03-05 13:18:58 +00:00

76 lines
2.9 KiB
C

/*
* Copyright (C) 2019 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.
*
*/
#ifndef META_WAYLAND_WINDOW_CONFIGURATION_H
#define META_WAYLAND_WINDOW_CONFIGURATION_H
#include <glib.h>
#include <stdint.h>
#include "core/window-private.h"
#include "wayland/meta-wayland-types.h"
struct _MetaWaylandWindowConfiguration
{
uint32_t serial;
gboolean has_position;
int x;
int y;
gboolean has_relative_position;
int rel_x;
int rel_y;
gboolean has_size;
gboolean is_resizing;
int width;
int height;
int scale;
MetaGravity gravity;
MetaMoveResizeFlags flags;
int bounds_width;
int bounds_height;
};
MetaWaylandWindowConfiguration * meta_wayland_window_configuration_new (MetaWindow *window,
MetaRectangle rect,
int max_width,
int max_height,
int scale,
MetaMoveResizeFlags flags,
MetaGravity gravity);
MetaWaylandWindowConfiguration * meta_wayland_window_configuration_new_relative (MetaWindow *window,
int rel_x,
int rel_y,
int width,
int height,
int scale);
MetaWaylandWindowConfiguration * meta_wayland_window_configuration_new_empty (int bounds_width,
int bounds_height);
void meta_wayland_window_configuration_free (MetaWaylandWindowConfiguration *configuration);
#endif /* META_WAYLAND_WINDOW_CONFIGURATION_H */