6902a724ce
Currently the stored unconstrained_rect is only ever updated if there was a move, resize or state change according to the move_resize_internal implementation. For Wayland windows however resizes or state changes are done in two steps, first the new configuration is sent to the client and then once client acknowledges it, it is set on the mutter side in another move_resize_internal call. Only the second call would result in the unconstrained_rect being updated. This started causing problems when unfullscreening windows was immediately followed by a strut change. These strut changes started happening in gnome-shell due to the visibility of the panel now being considered for the struts and the presence of a fullscreen causing it to be hidden until unfullscreen. In this situation first the unfullscreen would resize the window to its pre-fullscreen size as expected, but then the strut change triggers another window resize. This window resize is based on the stored unconstrained_rect, which is still at the fullscreen size because the unfullscreen resize only has sent its configuration, but it has not been acknowledged yet. As a result the strut change causes a resize to the fullscreen size which due to the constraints now looks like a maximized window. To fix this always update the unconstrained_rect when the requested size has changed, but not when a previous request has been acknowledged unless it is originating from the client itself. If this included the move_resize_internal call from acknowledging the size as well, it would be possible for this to be delayed long enough on the client side to overwrite an intermediate resize originating from mutter. And if this did not include resizes originating from the client, clients would not be able to set an initial window size. Fixes https://gitlab.gnome.org/GNOME/mutter/-/issues/1973 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2066> |
||
---|---|---|
.gitlab/issue_templates | ||
.gitlab-ci | ||
clutter | ||
cogl | ||
data | ||
doc | ||
meson | ||
po | ||
src | ||
subprojects | ||
tools | ||
.gitignore | ||
.gitlab-ci.yml | ||
check-style.py | ||
config.h.meson | ||
COPYING | ||
HACKING.md | ||
meson_options.txt | ||
meson.build | ||
mutter.doap | ||
NEWS | ||
README.md |
Mutter
Mutter is a Wayland display server and X11 window manager and compositor library.
When used as a Wayland display server, it runs on top of KMS and libinput. It implements the compositor side of the Wayland core protocol as well as various protocol extensions. It also has functionality related to running X11 applications using Xwayland.
When used on top of Xorg it acts as a X11 window manager and compositing manager.
It contains functionality related to, among other things, window management, window compositing, focus tracking, workspace management, keybindings and monitor configuration.
Internally it uses a fork of Cogl, a hardware acceleration abstraction library used to simplify usage of OpenGL pipelines, as well as a fork af Clutter, a scene graph and user interface toolkit.
Mutter is used by, for example, GNOME Shell, the GNOME core user interface, and by Gala, elementary OS's window manager. It can also be run standalone, using the command "mutter", but just running plain mutter is only intended for debugging purposes.
Contributing
To contribute, open merge requests at https://gitlab.gnome.org/GNOME/mutter.
It can be useful to look at the documentation available at the Wiki.
Coding style and conventions
See HACKING.md.
Git messages
Commit messages should follow the GNOME commit message
guidelines. We require an URL
to either an issue or a merge request in each commit. Try to always prefix
commit subjects with a relevant topic, such as compositor:
or
clutter/actor:
, and it's always better to write too much in the commit
message body than too little.
Default branch
The default development branch is main
. If you still have a local
checkout under the old name, use:
git checkout master
git branch -m master main
git fetch
git branch --unset-upstream
git branch -u origin/main
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
License
Mutter is distributed under the terms of the GNU General Public License, version 2 or later. See the COPYING file for detalis.