Commit Graph

518 Commits

Author SHA1 Message Date
Derek Foreman
8ac621d672 desktop-shell: Don't try to notice disappearing outputs during fade
This is a trap - it's not harmful to let the animation complete - it is
harmful to call weston_shell_utils_curtain_destroy() in mid animation. It
results in immediately completing the animation, which attempts to destroy
the curtain a second time.

Fixes a crash when (on a multi-output system) the display is disconnected
during the fade out, then reconnected before the fade-in starts.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-09-15 07:00:31 +00:00
Derek Foreman
dd956e5b8b desktop-shell: Use the combined size of all outputs for the fade curtain
Instead of trying to cover the desktop with an arbitrarily larger
rectangle, actually calculate the appropriate size.

Fixes the old (but recently reintroduced) bug where the curtain isn't
always large enough.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-09-15 07:00:31 +00:00
Derek Foreman
06930c7138 desktop-shell: Revert 'Enable per-output fade animations'
This essentially reverts 9ad4de1f7a, though much has changed in the
interim to make a simple 'git revert' impossible.

Per-output fade animations were a precursor to implementing support for
zwp_idle_inhibit_v1. Nobody ever followed up on that. Now that we have
the ability to create overlapping outputs, per output curtains don't
make sense - the curtains can overlap and look weird.

This re-introduces the bug where a desktop larger than 8192 pixels in any
direction isn't properly covered by the fade.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-09-15 07:00:31 +00:00
Derek Foreman
59b6e6973e desktop-shell: assert if the shell startup animation type is unsupported
We've already validated this, so if we can't get here with an invalid
type. Just assert() instead.

This lets us remove the very strange tear down of curtains that presumably
couldn't have been created in the first place??

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-09-15 07:00:31 +00:00
Derek Foreman
d215dc8319 desktop-shell: Remove useless setting of shell_fade output
weston_view_move_to_layer() recalculates the output, so this can do no
good.

This output is only ever used to test against NULL anyway, so we don't
need to try to set it "properly".

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-09-15 07:00:31 +00:00
Joshua Watt
617bb9afc9 Check weston_head_from_resource for NULL return
If the compositor is disabling a weston_output,
weston_head_from_resource can return NULL, so the return code must be
checked where used.

Fixes #638

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
2023-09-14 13:31:06 +03:00
Alexandros Frantzis
7dcde16f22 desktop-shell: Don't process surfaces under destruction during output resize
An output resize may occur while a shell surface is in the process of
being destroyed, e.g., while the destruction fade-out animation is in
progress. In such cases although the shell surface exists, it's missing
the backing weston_desktop_surface, so ensure to check for that.

Fixes: #805
Fixes: eefd8ae2e0
Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
2023-09-13 15:21:55 +00:00
Daniel Stone
f7d8095352 desktop-shell: Use weston_view_move_to_layer() in switcher
Use our new helper instead of doing this by hand.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
fb64b00da7 desktop-shell: Remove manual damage for minimised surfaces
We don't need to inflict any damage here, because it's been done for us
when we move the layers.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
73050c358d desktop-shell: Don't open-code animate_focus_change()
It already does what we want, so just use it when we're losing focus.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
f17581fdd2 desktop-shell: Regularise focus_animation_type checks
Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
72a52454ad desktop-shell: Reject invalid focus types in configuration
Just refuse to start up if someone passes an incorrect focus type.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
fca71ff4bb desktop-shell: Initialise lists earlier
Make sure that we can exit cleanly if we have to fail.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
f04e1ec9ab desktop-shell: Clean up animate_focus_change()
Now that we're not allocating surfaces on demand, animate_focus_change()
becomes a lot more straightforward and common, and using some local
variables sure does cut out a lot of typing.

Knowing that both from and to cannot both be NULL (because we check if
from == to), we can change the juggling to be extremely simple:
calculate where we need the curtains to be in the view list, put them
there, and set up the fade.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
42334db41e desktop-shell: Create focus surfaces for animation up front
Rather than creating them the first time we need to switch focus, just
create them at startup if we're going to be needing them at some point.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
a168dc0659 desktop-shell: Don't set alpha for unused views
We don't need to be setting this because it isn't (yet) used anywhere.
It will get set when it is used.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
6738c738ab desktop-shell: Use weston_view_move_to_layer for focus animation
Rather than juggling our layers manually, just use
weston_view_move_to_layer. This obviates the need for manually marking
the view as mapped.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
db97820919 desktop-shell: Simplify condition for focus change
We must have (from || to), because if (!from && !to), we would've caught
the if (from == to) early-return case.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
77b9dbb730 desktop-shell: Remove yet another center_on_output()
However many times you thought this might reasonably be called when
setting up for fullscreen, there were more.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
e32557131e desktop-shell: Simplify confusing conditional
The only place we ever set shsurf->fullscreen.black_view is when we're
going into fullscreen, and we destroy it when we're going out of
fullscreen. Hence if we do ever have a fullscreen black view, we should
move it out of the way.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
a019aa6b2a desktop-shell: Flatten and rename shell_configure_fullscreen()
Merge shell_configure_fullscreen() and
shell_ensure_fullscreen_black_view() into shell_set_view_fullscreen().

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
e4e3cc198f desktop-shell: Delete pointless function wrapper
shell_map_fullscreen() just duplicated shell_configure_fullscreen()
exactly.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
49a122bd30 desktop-shell: Assume fullscreen views are mapped
If we're asked to set a view as fullscreen, assume we're not doing so
with the surface not being mapped.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
4bbe4e6e98 desktop-shell: Use weston_view_move_to_layer() for fullscreen
Use our helper to move stuff around.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
e2a48f6f68 desktop-shell: Deduplicate center_on_output() in fullscreen
weston_shell_utils_center_on_output() already handles the case where we
don't have an output to aim at.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
2ab3d33903 desktop-shell: Deduplicate center_on_output() in fullscreen
weston_shell_utils_center_on_output() already calculates the subsurface
bounding box for us.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Daniel Stone
8ed7f0f459 desktop-shell: Use weston_view_move_to_layer() for minimised views
When we're moving a view to the minimised layer, use our new(ish) helper
to move it.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-08-11 14:10:45 +03:00
Marius Vlad
c59a02c15e desktop-shell: Don't reposition windows on every resize
Remove any attempt to reposition windows when handling an output resize.

This had some side-effects on x11 and wayland backends that keep moving
windows at random positions when manually the output.

A more smarter approach would be to move them only if they're actually
affected by a resize -- like no longer in the output's viewing area, but
that remains for another day.

Fixes: #793

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Reported-by: Philipp Zabel <p.zabel@pengutronix.de>
2023-08-09 21:26:10 +03:00
Daniel Stone
760d60f508 desktop-shell: Remove unnecessary repaint schedules
We don't need to explicitly schedule a repaint once we've reconfigured
some views.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-07-24 12:35:47 +03:00
Derek Foreman
c4d24c01b3 desktop-shell: store xwayland positions in weston_coord
Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-07-19 07:48:33 -05:00
Derek Foreman
89ff5ddfd9 libweston: Replace struct_weston_position with weston_coords
Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-07-19 07:48:30 -05:00
Derek Foreman
9056a11460 desktop-shell: Use weston_coord for configure_static_view
Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2023-07-19 07:41:33 -05:00
Marius Vlad
eefd8ae2e0 desktop-shell: Handle all other shsurfs
The output resize handler we only accounts for the background and panel
surfaces, so this handles all other regular shsurfs.

This patch would reuse any previously saved position, or reposition the
surfaces to avoid placing them outside of the output area. For maximized
or fullscreen type of surfaces, issue a new configure event to let
clients react to the new output dimensions.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2023-07-06 19:06:22 +00:00
Marius Vlad
aeabba8e18 desktop-shell: Keep track of shsurf being created/removed
We'd need to go over them when handling output resize so use
desktop_shell to hang of the list of shsurfs.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2023-07-06 19:06:22 +00:00
Marius Vlad
ecab79bfb7 desktop-shell: Use a common helper to handle surface resizes
This introduces two helpers, shsurf_is_max_or_fullscreen() and
set_shsurf_size_maximized_or_fullscreen() to handle
maximized/unmaximized fullscreen/unfullscreen transitions.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2023-07-06 19:06:22 +00:00
Daniel Stone
fc776c3b59 view: Add weston_view_add_transform and weston_view_remove_transform
They do what they say on the box, and inflict damage where required.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-07-04 15:52:21 +01:00
Daniel Stone
7d2c5e0c33 view: Add weston_view_set_alpha()
Does what it says on the box: sets the view's alpha, also inflicting
damage where required.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-07-04 15:52:21 +01:00
Daniel Stone
e9c67aedba desktop-shell: Remove unused fullscreen transform
I don't know when this stopped being used, but it's obviously not
any more.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-07-04 15:52:21 +01:00
Daniel Stone
785af26007 desktop-shell: Be more precise with rotation damage
When we're rotating a surface, only mark the geometry as dirty after
we've actually updated the transformations. Then we can restrict our
repaint to just the view itself, not the full compositor.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
1da1d860fe desktop-shell: Use weston_view_to_layer() for lock surface
Use the new helper instead of open-coding part of it. This removes a
comment about not marking a surface as mapped until it has a buffer: the
surface->width == 0 check already guarantees that we have a buffer.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
5c9231b116 desktop-shell: Use weston_view_move_to_layer() for static views
Use our new helper instead of open-coding part of it.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
1c2edaac6b desktop-shell: Use weston_view_move_to_layer() for fullscreen background
Use the new helper for placing the fullscreen background view.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
c1bbcba6e8 desktop-shell: Create fade-out views at destroy time
Instead of pre-creating a fade-out view that's sort of left half-mapped
around in the scene graph, create the view only when we need it, and use
the helpers to make sure that the damage is correctly handled.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
fd620717b3 desktop-shell: Use weston_view_move_to_layer() for per-view unfade
This is kind of immaterial since the view is going to be destroyed, but
it's a step.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
179d4513d0 desktop-shell: Use weston_view_move_to_layer() for fullscreen fades
Use our shiny new helper for fullscreen fades.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
62dbbd6706 desktop-shell: Use weston_view_move_to_layer() for fullscreen switching
When we're tabbing away from fullscreen views, use the new helper rather
than open-coding layer switching.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
07103d1842 weston-desktop: Match desktop-shell view mapping semantics
Preserve the same order as desktop-shell for handling view (un)mapping,
so we can move these into a shared helper. These should have no
functional effect but provide a helpful bisect point.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
4b3e09fa71 desktop-shell: Centralise view mapping for shell_surfaces
shell_surface_update_layer() is the thing which moves our views around
into layers. Since we want to keep an invariant that a view is mapped if
it is on a layer, and unmapped if it is not on a layer, handle mapping
along with the layer moves.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
166d9661fb desktop-shell: Make view mapping more consistent
Try to stick to a pattern of first mapping a surface, then inserting a
view into a layer together with marking it as mapped.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00
Daniel Stone
54b78dd644 desktop-shell: Don't damage unmapped views
If a view isn't mapped, then we don't need to damage beneath it, as nothing's
beneath it.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2023-06-26 15:49:50 +00:00