Commit graph

1531 commits

Author SHA1 Message Date
Victoria Brekenfeld
15bbada498 shell/element: Don't render decorations for dead windows 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
6d0f1b273f layout/tiling: Resize shadows to fit scaled windows 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
23e1bae96e layout/tiling: Skip unnecessary stack window swap 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
8c0136cec0 render/shadow: Tweak shadow variables 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
5c656de9d4 shell/window: Respect sharp corners when tiled 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
fdf865b154 shell/window: Enable resize-border for clipped windows 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
4854f8e42d shell/elements: Don't render border when maximized 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
a28b11cd5b floating: Animate shadow position with the window 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
2c9857fdfc shaders: Use half-pixels for the outline 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
fc7bbd7814 render/shadow: Add physical 1px safety margin 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
40d7fea1cc render: Fix gap between outline and windows 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
b6f0855a31 shell/elements: Fix corners order for clipping/shadows 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
e887e185a7 shell/elements: Don't clip maximized windows/stacks 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
59fd732982 shell/elements: Handle clipping and shadows 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
2adebb5fe1 config: Add and propagate appearance_config 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
94d49210e6 shaders: Add drop-shadow shader 2026-01-13 19:12:22 +01:00
Victoria Brekenfeld
2f39c9682c shaders: Add clipped-surface shader 2026-01-13 19:12:22 +01:00
Nikola Hristov
ea429a778e fix: Toplevel disappearing after unmap 2026-01-13 16:50:01 +01:00
Victoria Brekenfeld
d708e18278 focus: Restore focus to swap group 2026-01-12 17:47:28 +01:00
mikairyuu
15b6b678c1 fix(shell): distinguish between unmapping and destroying surfaces
Previously, `unmap_surface` automatically pushed all unmapped windows
into the `pending_windows` list. This behavior is correct for X11
windows (which may be remapped) but incorrect for Wayland `toplevel_destroyed`
events, where the role is permanently gone.

This caused issues with clients like Telegram that reuse `wl_surface`s.
Because the destroyed toplevel remained in `pending_windows`, a
subsequent cleanup commit (e.g., null buffer) triggered a configure
event. This prematurely marked the surface as `configured` in the
shell state.

Consequently, when the client attached a new `xdg_toplevel` role,
the compositor skipped the mandatory initial configure event (assuming
it was already done), causing the window to never appear.

This refactors `unmap_surface` to return `Option<PendingWindow>`
instead of mutating global state.
- XWayland: Explicitly saves the pending window (behavior preserved).
- XDG Shell: Drops the pending window, preventing ghost state interactions.

Fixes #1816
2026-01-09 14:50:55 -07:00
Victoria Brekenfeld
e6a3a3a9c9 xwm: Set xcursor variables in Xresources db 2026-01-09 20:49:56 +01:00
Ian Douglas Scott
612ff2f523 layout/floating: In unmap, don't alter size if no pending changes
If the intent here was that the `if let` would only handle the case
where there are pending changes, then something like this should be
right.

Seems to fix behavior in
https://github.com/pop-os/cosmic-comp/issues/1819.
https://github.com/pop-os/cosmic-comp/issues/1645 may be the same issue.
2026-01-08 16:51:59 -07:00
Victoria Brekenfeld
7b8fca9ece wayland/dmabuf: Send initial surface feedback 2026-01-08 00:20:18 +01:00
Victoria Brekenfeld
dc5a9fac66 element/surface: Simplify surface feedback selection using the frame_time_filter 2026-01-08 00:20:18 +01:00
Victoria Brekenfeld
d17a4ead68 kms/surface: Simpify surface feedback creation 2026-01-08 00:20:18 +01:00
Victoria Brekenfeld
85d8b8dc06 kms/surface: Clear feedback on resume 2026-01-08 00:20:18 +01:00
Victoria Brekenfeld
2eff4607bd kms/device: Advertise texture_formats instead of render_formats 2026-01-08 00:20:18 +01:00
Victoria Brekenfeld
ca00df0b37 kms: Track active clients instead of active buffers 2026-01-08 00:20:18 +01:00
Konstantinos
8a5d78dbb0 fix(zoom-ui): Persist accessibility_zoom increment config value. 2025-12-23 15:01:28 +01:00
Vukašin Vojinović
9e143da814 fix(input): pointer clamping
- Reduces the max clamp value by 1, since it previously ended up 1 pixel off screen. Fixes #981.
- Moves clamping to before  `new_under`, since it previously ignored any motion that goes off screen, causing issues in some fullscreen clients. Fixes #1286.
2025-12-22 16:29:22 +01:00
Vukašin Vojinović
bb05037db2 chore: bump MSRV to 1.90 2025-12-22 16:29:22 +01:00
Ian Douglas Scott
fa88002ba4 tiling: Add placeholder when tree is empty 2025-12-09 16:58:59 -07:00
Ian Douglas Scott
67d0a825d1 grabs/moving: cleanup drag in tiling layer if window doesn't exist 2025-12-09 16:58:59 -07:00
Victoria Brekenfeld
813dd0ce1c layout/tiling: Always send output_enter after swap 2025-12-09 16:58:44 -07:00
Ian Douglas Scott
cf55b6c899 xwayland: Handle _NET_ACTIVE_WINDOW client messages
Allow X11 clients to activate a window.

This shares the logic with xdg-activation. It might make sense to handle
the urgent hint on an X11 Window natively, but for now this just marks a
workspace as urgent on activation in the same way xdg-activation does.
2025-12-08 20:36:54 +01:00
Victoria Brekenfeld
6288789842 kms: Only pause device after all surfaces are successfully suspended 2025-12-04 22:29:39 +01:00
Victoria Brekenfeld
7c3e18b588 surface: Don't crash due to weird state after resume 2025-12-04 22:29:39 +01:00
Victoria Brekenfeld
77d3605fb9 Update smithay for DnD updates 2025-12-04 20:17:12 +01:00
Victoria Brekenfeld
123add9dee shell: Add DelayGrab for client initiated move requests 2025-12-03 11:46:31 +01:00
Hendrik Hamerlinck
714e80366d fix: properly remove elements from the focus_stack
shift_remove could not delete the element in it's stack because
indexmap::Equivalent requires the hashes to be equivalent
2025-12-02 07:04:09 -08:00
Ian Douglas Scott
6025f483d6 input: Clear modifier_queue on a11y grab
This might be needed if a grab included `super`.
2025-11-24 13:53:05 -08:00
Ian Douglas Scott
1c35339076 input: Use suppresssed_keys() for a11y grabs
This mostly seems to behave the same way, but presumably we want a key
release to be treated as grabbed if and only if the press had been.
2025-11-24 13:53:05 -08:00
Ian Douglas Scott
a3904af03c wayland: Remove atspi protocol
If we want to use the `org.freedesktop.a11y.KeyboardMonitor` protocol on
Pop!_OS, there is no need to support the Cosmic-specific protocol that
requires an `at-spi2-core` patch.
2025-11-24 13:53:05 -08:00
Ian Douglas Scott
f065143d3e dbus: Implement org.freedesktop.a11y.Manager protocol
This protocol is now the upstream solution in at-spi2-core/orca for
registering keyboard grabs and watching key events. It should also be a
bit better than the current verious of our custom Wayland protocol for
this purpose.

Like Mutter and Kwin, we currently restrict this to only be called by
the client that holds the name `org.gnome.Orca.KeyboardMonitor` on the
session bus. We also send the `KeyEvent` signal only to registered
watchers, rather than broadcasting, as DBus does by default.
2025-11-24 13:53:05 -08:00
Ian Douglas Scott
d08ac9645b dbus: Add NameOwners helper
This monitors `NameOwnerChanged` events to keep track of what unique
names own what well-known names on the bus. This allows dbus protocol
implementations to check that callers own a certain name.

To initially populate the list of dbus name owners, `ListNames` is used
at start. Then `GetNameOwner` is lazily invoked to populate owners that
exist at start. To avoid calling that for every single name on the bus.

This also keeps track of unique bus names, which don't require any
additional methods or signals to monitor. This allows us to also detect
if a client has disappeared from the bus.

The `COSMIC_ENFORCE_DBUS_OWNERS` allows disabling checking of owned
names.
2025-11-24 13:53:05 -08:00
Ian Douglas Scott
55401b1e53 dbus: Use ThreadPool instead of zbus blocking API
The `zbus` blocking API just wraps the async API with `block_on`, so we
may as well use our own executor.
2025-11-24 13:53:05 -08:00
Ian Douglas Scott
8455869439 Add a ThreadPool async executor to State
If we need to use simple async code in a few places, a single executor
may be better than having several threads blocking on async code.

This should probably use the calloop executor, but that's had issues in
cosmic-workspaces, though that may not apply here.
2025-11-24 13:53:05 -08:00
Victoria Brekenfeld
8624928052 gestures: Cycle through workspaces 2025-11-21 09:10:01 -07:00
Victoria Brekenfeld
1f2863fa18 xwayland: Fix unscaled dpi setting 2025-11-21 09:09:21 -07:00
Ian Douglas Scott
282d76ef34 Set X11Surface hidden when a surface is minimized
This seems for an SDL XWayland client to restore fullscreen after
unminimize, it needs to see the `_NET_WM_STATE_HIDDEN` state get set
and unset.

In general `_NET_WM_STATE_HIDDEN` does not seem to cover all the
cases covered by waylands "suspended" state, so let's not equate them.

https://github.com/pop-os/cosmic-comp/issues/1510
2025-11-18 22:26:04 +01:00