mutter/src
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
..
backends context: Add 'started' and 'prepare-shutdown' signals 2022-11-25 10:26:52 +00:00
compositor compositor: Move frame drawn x11 management to MetaSyncCounter 2022-12-01 20:10:52 +00:00
core x11: Replace MetaWindow sync request handling with MetaSyncCounter 2022-12-01 20:10:52 +00:00
frames frames: Add new X11 frames client 2022-12-01 20:10:53 +00:00
meta barrier: Make type derivable again 2022-09-15 12:27:52 +00:00
tests tests: Ensure that restore-size resizes the client before maximize/unmaximize 2022-12-01 20:10:52 +00:00
ui ui: Drop undeclared function definition from header 2022-12-01 20:10:53 +00:00
wayland wayland/surface: Overhaul handling of buffer use count 2022-12-01 17:23:34 +01:00
x11 x11: Drop unnecessary check to ignore crossing events 2022-12-01 20:10:53 +00:00
libmutter.pc.in build: Fix libs and cflags in autotools .pc file 2018-11-10 16:20:46 +00:00
meson.build frames: Add new X11 frames client 2022-12-01 20:10:53 +00:00
meta-private-enum-types.c.in build: Add missing include 2022-08-10 20:28:40 +02:00
meta-private-enum-types.h.in screen-cast: Add screen cast flag to streams 2020-07-30 09:51:16 +02:00