Go to file
Carlos Garnacho 3f8e4d515e frames: Add new X11 frames client
This small X11 client takes care of creating frames for client
windows, Mutter will use this client to delegate window frame
rendering and event handling.

The MetaWindowTracker object will keep track of windows created
from other clients, and will await for _MUTTER_NEEDS_FRAME property
updates on those (coming from Mutter), indicating the need for a
frame window.

This process is resilient to restarts of the frames client, existing
windows will be queried during start, and the existence of relevant
properties checked. Mutter will be able to just hide/show
SSD-decorated windows while the frames client restarts.

The frames are created through GTK4 widgets, the MetaWindowContent
widget acts as a replacement prop for the actual client window,
and the MetaFrameHeader wraps GtkHeaderBar so that windows can be
overshrunk, but otherwise a MetaFrame is a 100% true GTK4 GtkWindow.

After a frame window is created for a client window, the
_MUTTER_FRAME_FOR property will be set on the frame window,
indicating to mutter the correspondence between both Windows.

Additionally, the pixel sizes of the visible left/right/top/bottom
borders of the frame will be set through the _MUTTER_FRAME_EXTENTS
property, set on the frame window.

In order to make the frame window behave as the frame for the
client window, a number of properties will be tracked from the
client window to update the relevant frame behavior (window title,
resizability, availability of actions...), and also some forwarding
of events happening in the frame will be forwarded to the client
window (mainly, WM_DELETE_WINDOW when the close button is clicked).

Other than that, the frames are pretty much CSD GTK4 windows, so
window drags and resizes, and window context menus are forwarded for
the WM to handle.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2175>
2022-12-01 20:10:53 +00:00
.gitlab/issue_templates gitlab: Add missing < in markdown comment tag 2020-02-14 03:10:28 +00:00
.gitlab-ci ci: Only launch a single mocked D-Bus environment for all tests 2022-11-01 21:04:21 +00:00
clutter clutter/actor: Stop transitions in children when removing 2022-11-25 10:26:52 +00:00
cogl g-i: Drop unneeded since/stability annotations 2022-11-22 13:32:52 +01:00
data data/udev: Don't disable KMS modifiers on newer i915 systems 2022-11-04 18:23:15 +00:00
doc docs/cogl-pango: Update urlmap 2022-11-22 13:32:52 +01:00
meson build: Replace custom post-install script 2022-11-19 02:21:05 +01:00
po Update Slovak translation 2022-11-22 22:15:02 +00:00
src frames: Add new X11 frames client 2022-12-01 20:10:53 +00:00
subprojects build: bump ABI to sysprof-capture-4 2020-07-28 11:13:30 -07:00
tools tools/get-state: Round refresh rates to three decimal places 2022-08-19 15:28:56 +00:00
.gitignore wayland: Remove Gtk primary selection protocol 2022-05-18 20:15:08 +00:00
.gitlab-ci.yml ci: Upgrade python-dbusmock 2022-11-25 21:32:06 +01:00
check-style.py ci: Avoid deadlock while reading uncrustify output 2021-08-23 17:40:43 +02:00
config.h.meson core: Make sound player feature optional 2022-09-02 08:04:31 +00:00
COPYING Updated obsolete FSF postal address in COPYING 2014-01-12 08:44:30 +07:00
HACKING.md docs: Update coding style link 2021-11-09 19:52:14 +01:00
meson_options.txt core: Make sound player feature optional 2022-09-02 08:04:31 +00:00
meson.build frames: Add new X11 frames client 2022-12-01 20:10:53 +00:00
mutter.doap mutter.doap: Add marge-bot as a maintainer 2020-11-16 11:59:45 +01:00
NEWS Bump version to 43.1 2022-11-03 16:19:36 +01:00
README.md readme: Fix typo 2022-07-29 16:52:12 -04:00

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 of 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.

The API documentation is available at:

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.