mutter/src/compositor
Jonas Ådahl 85ef0d1a46 compositor-view/native: Check that the actor covers the the view
If we have a window that match the size (i.e. will pass the "fits
framebuffer" low level check), that doesn't mean it matches the
position. For example, if we have two monitors 2K monitors, with two 2K
sized windows, one on monitor A, and one on monitor both monitor A and
B, overlapping both, if the latter window is above the former, it'll end
up bing scanned out on both if it ends up fitting all the other
requirements.

Fix this by checking that the paint box matches the stage view layout,
as that makes sure the actor we're painting isn't just partially on the
right view.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2387
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2624>
2022-09-20 18:47:06 +00:00
..
plugins default-plugin: Use stopped instead of completed signal 2022-09-20 17:14:53 +00:00
clutter-utils.c clutter/utils: Remove magic numbers from fixed point calculations 2022-09-02 07:33:26 +00:00
clutter-utils.h compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
cogl-utils.c
cogl-utils.h
compositor-private.h compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
compositor.c compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-background-actor-private.h
meta-background-actor.c
meta-background-content-private.h
meta-background-content.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-background-group.c
meta-background-image.c background-image: Properly clear the failed to be filled texture pointer 2021-08-31 08:25:32 +00:00
meta-background-private.h
meta-background.c
meta-compositor-native.c compositor/native: Add support for direct scanout per view 2022-08-01 21:05:04 +00:00
meta-compositor-native.h
meta-compositor-server.c compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-compositor-server.h
meta-compositor-view-native.c compositor-view/native: Check that the actor covers the the view 2022-09-20 18:47:06 +00:00
meta-compositor-view-native.h compositor/native: Add support for direct scanout per view 2022-08-01 21:05:04 +00:00
meta-compositor-view.c compositor: Keep track of the top window actor on each view 2022-08-01 21:05:04 +00:00
meta-compositor-view.h compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-compositor-x11.c compositor: Introduce MetaCompositorViewNative 2022-08-01 21:05:04 +00:00
meta-compositor-x11.h
meta-cullable.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-cullable.h
meta-dnd-actor-private.h
meta-dnd-actor.c
meta-dnd.c compositor/dnd: Fix indentation 2022-04-29 18:58:38 +00:00
meta-feedback-actor-private.h
meta-feedback-actor.c feedback-actor: Make the other properties static strings 2022-09-19 14:46:01 +00:00
meta-later-private.h laters: Expose MetaLaters publicly 2022-02-07 17:52:05 +00:00
meta-later.c laters: Expose MetaLaters publicly 2022-02-07 17:52:05 +00:00
meta-module.c
meta-module.h
meta-plugin-manager.c core: Drop the default close dialog implementation 2022-05-06 16:13:45 +02:00
meta-plugin-manager.h compositor/plugin-manager: Split start() from new() 2022-01-25 15:15:13 +01:00
meta-plugin.c compositor: Remove meta_plugin_begin/end_modal 2022-01-29 02:11:37 +01:00
meta-shadow-factory.c
meta-shaped-texture-private.h shaped-texture: Fix code style issue 2022-01-03 14:11:54 +01:00
meta-shaped-texture.c shaped-texture: Don't clear mipmaps during painting 2022-08-30 14:50:26 +00:00
meta-surface-actor-wayland.c compositor/native: Remove redundant function 2022-08-01 21:05:04 +00:00
meta-surface-actor-wayland.h compositor/native: Remove redundant function 2022-08-01 21:05:04 +00:00
meta-surface-actor-x11.c surface-actor-x11: Fix code style issue 2022-01-03 14:12:01 +01:00
meta-surface-actor-x11.h
meta-surface-actor.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-surface-actor.h surface-actor: Remove get_image() function 2021-08-28 13:59:52 +02:00
meta-sync-ring.c
meta-sync-ring.h
meta-texture-mipmap.c texture-mipmap: Fix some leaks and tidy up 2022-08-10 11:52:39 +00:00
meta-texture-mipmap.h shaped-texture: Move texture mipmap implementation to 'meta-texture-mipmap' 2022-07-26 19:16:50 +00:00
meta-window-actor-private.h tests/wayland: Add more requests to test driver protocol 2022-06-03 09:03:10 +00:00
meta-window-actor-wayland.c window-actor/wayland: Add missing config.h 2022-09-19 14:46:01 +00:00
meta-window-actor-wayland.h compositor: Some header cleanups 2022-03-05 14:14:37 +00:00
meta-window-actor-x11.c window-actor/x11: Don't use direct scanout if the window is not opaque 2022-05-17 10:34:20 +00:00
meta-window-actor-x11.h
meta-window-actor.c screencast: Implement buffer-transform support 2022-08-05 20:30:50 +02:00
meta-window-group-private.h
meta-window-group.c compositor: Return more details from meta_actor_painting_untransformed 2022-07-26 19:16:50 +00:00
meta-window-shape.c
README
region-utils.c region-utils: Fix typo in crop_and_scale() fastpath 2021-03-29 15:17:48 +00:00
region-utils.h

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.