1
0
Fork 0
mutter-performance-source/src/compositor
Robert Mader 09a6031c69 window-actor: Force full actor geometry sync when mapping
Normally we bail out in `sync_actor_geometry()`. The comment there
states:
```
Normally we want freezing a window to also freeze its position; this allows
windows to atomically move and resize together, either under app control,
or because the user is resizing from the left/top. But on initial placement
we need to assign a position, since immediately after the window
is shown, the map effect will go into effect and prevent further geometry
updates.
```

The signal for the initial sync originates in `MetaWindow` though and predates
`xdg_toplevel_set_maximized`, which again calls `meta_window_force_placement`,
triggering the signal too early. As a result, Wayland clients that start up
maximized have a wrong map animation, starting in the top-left corner.

In order to fix this without changing big parts of the geometry logic and risking
regressions, force the initial sync again before mapping.

Solution suggested by Jonas Ådahl.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1164
2020-03-30 15:59:48 +00:00
..
plugins plugins/default: Handle skipped animations 2019-11-08 22:49:31 +01:00
clutter-utils.c shaped-texture: Fix use-nearest check when viewports are scaled 2020-03-26 08:32:46 +00:00
clutter-utils.h shaped-texture: Fix use-nearest check when viewports are scaled 2020-03-26 08:32:46 +00:00
cogl-utils.c cogl: Remove CoglError wrapper 2019-06-20 18:25:04 +02:00
cogl-utils.h Use a consistent style for enum braces 2019-02-28 09:31:01 +01:00
compositor-private.h compositor: Move out X11 compositing code into sub type 2019-08-19 08:44:58 +00:00
compositor.c cogl: Install cogl-trace.h and include from cogl.h 2020-03-26 09:05:38 +01:00
meta-background-actor-private.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-background-actor.c shaped-texture: Fix use-nearest check when viewports are scaled 2020-03-26 08:32:46 +00:00
meta-background-group.c meta: Make MetaBackgroundGroup derivable 2019-06-24 13:49:31 +00:00
meta-background-image.c cogl: Remove CoglError wrapper 2019-06-20 18:25:04 +02:00
meta-background-private.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-background.c background: Scale monitor_area after texture creation 2020-02-04 19:48:01 +00:00
meta-compositor-server.c compositor: Let MetaDisplay choose the correct compositor type 2019-08-19 08:44:58 +00:00
meta-compositor-server.h compositor: Let MetaDisplay choose the correct compositor type 2019-08-19 08:44:58 +00:00
meta-compositor-x11.c compositor: Shuffle x11 compositing bits in MetaCompositor 2020-02-28 20:20:35 +00:00
meta-compositor-x11.h compositor: Let MetaDisplay choose the correct compositor type 2019-08-19 08:44:58 +00:00
meta-cullable.c cullable: Check if effects are disabled 2020-02-14 01:17:42 +01:00
meta-cullable.h cullable: Factor out untransformed check into a vfunc 2020-02-08 19:20:41 +01:00
meta-dnd-actor-private.h Use G_DECLARE_DERIVABLE/FINAL_TYPE on some types 2018-12-21 19:48:50 +00:00
meta-dnd-actor.c Replace ClutterPoint by graphene_point_t 2019-10-16 11:38:14 +00:00
meta-dnd.c cleanup: Use g_clear_signal_handler() where possible 2019-11-21 15:02:27 +00:00
meta-feedback-actor-private.h wayland/feedback-actor: Use float for position and anchor 2019-08-26 11:57:49 +00:00
meta-feedback-actor.c Replace ClutterPoint by graphene_point_t 2019-10-16 11:38:14 +00:00
meta-module.c cleanup: Don't use G_TYPE_INSTANCE_GET_PRIVATE() 2019-07-18 11:01:09 +02:00
meta-module.h Changed obsolete FSF postal address into generic URL. 2014-01-13 11:35:47 -05:00
meta-plugin-manager.c plugin-manager: Kill window effects on destroy 2019-11-08 22:18:09 +00:00
meta-plugin-manager.h compositor: Add "locate_pointer" vmethod 2019-06-05 09:34:39 +00:00
meta-plugin.c compositor: Make type derivable 2019-08-19 08:44:58 +00:00
meta-shadow-factory.c shadow-factory: Don't set implicit Cogl material 2019-12-03 19:02:14 +00:00
meta-shaped-texture-private.h shaped-texture: Add get_width()/get_height() API 2020-02-11 12:59:57 +00:00
meta-shaped-texture.c shaped-texture: Fix use-nearest check when viewports are scaled 2020-03-26 08:32:46 +00:00
meta-surface-actor-wayland.c surface-actor: Remove get_window() API and vfunc 2020-02-19 22:34:28 +00:00
meta-surface-actor-wayland.h Use G_DECLARE_DERIVABLE/FINAL_TYPE on some types 2018-12-21 19:48:50 +00:00
meta-surface-actor-x11.c surface-actor: Remove get_window() API and vfunc 2020-02-19 22:34:28 +00:00
meta-surface-actor-x11.h window-actor: Move shapes, shadows and unredirection to X11 sub types 2019-10-16 13:16:55 +02:00
meta-surface-actor.c surface-actor: Add culling offset for geometry scale 2020-03-23 20:28:59 +01:00
meta-surface-actor.h surface-actor: Remove get_window() API and vfunc 2020-02-19 22:34:28 +00:00
meta-sync-ring.c Use G_GNUC_FALLTHROUGH instead of comments 2020-01-09 17:58:29 +01:00
meta-sync-ring.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-texture-tower.c clutter, core: Stop using the Cogl framebuffer stack 2019-12-03 19:02:14 +00:00
meta-texture-tower.h clutter, core: Stop using the Cogl framebuffer stack 2019-12-03 19:02:14 +00:00
meta-window-actor-private.h window-actor: Add API to update regions 2020-03-10 14:52:26 +01:00
meta-window-actor-wayland.c window-actor: Add API to update regions 2020-03-10 14:52:26 +01:00
meta-window-actor-wayland.h wayland: Move tree updating to the shell surface role 2020-02-19 22:34:28 +00:00
meta-window-actor-x11.c window/x11: Rename meta_window_x11_buffer_rect_to_frame_rect 2020-03-10 14:52:26 +01:00
meta-window-actor-x11.h window-actor: Move shapes, shadows and unredirection to X11 sub types 2019-10-16 13:16:55 +02:00
meta-window-actor.c window-actor: Force full actor geometry sync when mapping 2020-03-30 15:59:48 +00:00
meta-window-group-private.h Clean up include macros mess 2018-11-06 17:17:36 +01:00
meta-window-group.c shaped-texture: Fix use-nearest check when viewports are scaled 2020-03-26 08:32:46 +00:00
meta-window-shape.c Clean up include macros mess 2018-11-06 17:17:36 +01:00
README Document window and surface actors 2019-01-04 09:32:58 -02:00
region-utils.c Replace ClutterRect by graphene_rect_t 2019-10-16 11:38:14 +00:00
region-utils.h Replace ClutterRect by graphene_rect_t 2019-10-16 11:38:14 +00:00

Intro
=====

In general, the compositor splits the window from the contents of
the window from the shape of the window. In other words, a window
has contents, and the contents of the window have a shape. This is
represented by the actor hierarchy:

 +--------------------------------------+
 | MetaWindowActor                      |
 | +----------------------------------+ |
 | | MetaSurfaceActor                 | |
 | | +------------------------------+ | |
 | | | MetaShapedTexture            | | |
 | | |                              | | |
 | | |                              | | |
 | | |                              | | |
 | | |                              | | |
 | | +------------------------------+ | |
 | +----------------------------------+ |
 +--------------------------------------+

Surfaces may also contain subsurfaces. The MetaWindowActor and
MetaSurfaceActor subclasses that will be created depend on the client
type, and the display server type.

## Subsurfaces

Additionally, there is also the case of subsurfaces: surfaces that
are child of other surfaces. That is also represented in the actor
hierarchy by having one or many MetaSurfaceActors (the subsurfaces)
added as children of a parent MetaSurfaceActor. There are no limits
to how many subsurfaces a surface may have. With subsurfaces, the
actor hierarchy looks like this:

 MetaWindowActor
  ↳ MetaSurfaceActor (surface)
     ↳ MetaShapedTexture
     ↳ MetaSurfaceActor (subsurface)
        ↳ MetaShapedTexture
        ↳ MetaSurfaceActor (sub-subsurface)
           ↳ MetaShapedTexture
     ↳ MetaSurfaceActor (subsurface)
        ↳ MetaShapedTexture

In this example, the main surface has 2 subsurfaces. One of these
subsurfaces contains a subsurface as well.

All MetaWindowActors contain at least one MetaSurfaceActor, and all
MetaSurfaceActors contain a MetaShapedTexture.

## Client and compositor

MetaWindowActor and its subclasses represent the client window's
type. A X11 client will have a MetaWindowActorX11 representing it,
and a Wayland client will have a MetaWindowActorWayland.

On the compositor side, the surface where the contents of the window
are drawn into are represented by MetaSurfaceActor subclasses. On a
Wayland session, windows are backed by a MetaSurfaceActorWayland
surface, whereas on X11 sessions, by MetaSurfaceActorX11.

XWayland windows are X11 client windows (MetaWindowActorX11) backed
by Wayland surfaces (MetaWindowActorWayland).


Env Vars
========

MUTTER_DISABLE_MIPMAPS - set to disable use of mipmaped windows.