Commit graph

327 commits

Author SHA1 Message Date
Levi Portenier
af40d8ab24
Merge pull request #2069 from mayakwd/fix/popup-reconfiguration
fix: Remove redundant configure in popup reposition_request
2026-02-11 13:13:45 -07:00
Jakob
dca157ba16 Formatting 2026-02-11 17:36:02 +01:00
Jakob
c1de9b2f1a Made it so changing focus to different monitor takes cursor_follows_focus into consideration 2026-02-11 17:36:02 +01:00
Ilia Malanin
f865ad7241 fix: Remove redundant configure in popup reposition_request 2026-02-07 23:38:32 +01:00
Ian Douglas Scott
8e9f832fad wayland: Support wl_fixes protocol using new smithay support 2026-02-05 02:01:14 +01:00
Ian Douglas Scott
e1342fb2e3 image-copy: Use "buffer age" of 1 for capture
The logic `age_for_buffer` used seems to be a misinterpretation of the
protocol.

The wording is a little unclear, but it seems tracking buffer age is the
responsibility of the client, and the client is required to accumulate
damage and pass it in `damage_buffer`.

Our clients initially weren't doing that correctly. I updated
xdg-desktop-portal-cosmic to use `damage_buffer` after testing on
wlroots, and cosmic-workspaces was recently updated as well.
2026-02-05 02:01:14 +01:00
Ian Douglas Scott
9bc1b6e1ee image-copy: Use damage_output() for additional damage
The important change here is that we now apply the additional damage
first, instead of using `.extend()` to add it after other elements. This
is important since `OutputDamageTracker` will ignore our damage elements
if there are behind an element with an opaque region.

This also makes things a bit simpler, especially `take_screencopy_frames()`,
which no longer needs a mutable references to extend then truncate.

The implementation of `OutputDamageTracker` isn't entirely clear, but as
far as I can tell this is intended to work, and it seems to work in some
testing.
2026-02-05 02:01:14 +01:00
Ian Douglas Scott
cac7a5aca6 image-copy: Use abstraction that's now provided by Smithay
This doesn't change much, since the Smithay implementation is based on
the `cosmic-comp` version, but made more generic. We provide our own
implementation for our workspace capture protocol, but otherwise Smithay
handles the boilerplate now.

This should not cause any change in behavior.
2026-02-05 02:01:14 +01:00
Ian Douglas Scott
0f7e53b600 Update smithay to latest commit
Includes an implementation for `VirtualKeyboardHandler`, which is now
required.
2026-02-05 02:01:14 +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
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
ca00df0b37 kms: Track active clients instead of active buffers 2026-01-08 00:20:18 +01: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
77d3605fb9 Update smithay for DnD updates 2025-12-04 20:17:12 +01: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
Ashley Wulber
04d3e1ed59 fix(popup): avoid panic when None
cosmic-comp panics here after launching an app from the app tray overflow popup. While it may indicate a panel issue that I also need to look into, it seems to work fine if we don't unwrap on this option.
2025-11-13 17:58:37 -05:00
Peter Krull
fc9fe59ed9 Fix bars when full screen, reposition popups 2025-11-11 20:12:22 -07:00
Ian Douglas Scott
e129094bfb Update smithay
Updates for `last_acked`, etc. API changes in
https://github.com/Smithay/smithay/pull/1817.

Includes layer shell fixes
from https://github.com/Smithay/smithay/pull/1819.
2025-11-11 21:27:57 +01:00
Ian Douglas Scott
e814eebcc0 Add ext-data-control-v1 protocol
This is identical to the wlr protocol, and Smithay has implementations
for both.

New clients should use the `ext` protocol where present. Not sure how
widely used it is yet, but we probably should have both for now.
2025-10-30 00:45:13 +01:00
Ian Douglas Scott
d2d7c655ac Expose wlr-data-control-unstable-v1 to non-sandboxed clients
Some users have complained about not supporting clipboard managers. But
this was possible, but hidden under the `COSMIC_DATA_CONTROL_ENABLED`
env var.

Since the security context protocol exists now to provide a way to not
expose a protocol like this to sandboxed clients, it should be safe to
expose this now.
2025-10-30 00:45:13 +01:00
Ian Douglas Scott
f91115fb45 Replace privileged field with a not_sandboxed() method
`privileged` now only indicates if a client is "sandboxed", i.e. it has
a security context, where the sandbox engine isn't cosmic-panel.

So replace the field with a method that's a bit more descriptive.
2025-10-30 00:45:13 +01:00
Ian Douglas Scott
1bea97d42a Don't check for privileged for creator of security context
This is redundant since unprivileged clients can't create security
contexts.

If we expose this protocol, trust `sandbox_engine`, etc. to be correct.
2025-10-30 00:45:13 +01:00
Vukašin Vojinović
1f7f0c70b7 chore: format for Rust 2024 2025-10-22 23:55:11 +02:00
Vukašin Vojinović
b6c5d00bec cargo fmt 2025-10-22 23:55:11 +02:00
Vukašin Vojinović
5e9ea93819 chore: manual clippy 2025-10-22 23:55:11 +02:00
Vukašin Vojinović
0847247c33 chore: clippy 2025-10-22 23:55:11 +02:00
Ashley Wulber
bef8c53069 chore: cargo fmt 2025-10-03 20:11:16 +02:00
Ashley Wulber
2e3bb2d80e refactor(corner-radius): cleanup & add pre commit hooks 2025-10-03 20:11:16 +02:00
Ashley Wulber
819887e298 fix(corner-radius): post protocol errors 2025-10-03 20:11:16 +02:00
Ashley Wulber
4e30513673 fix(corner-radius): force redraw after corner radius change 2025-10-03 20:11:16 +02:00
Ashley Wulber
ce655d2063 cleanup: corner-radius use statements 2025-10-03 20:11:16 +02:00
Ashley Wulber
b3aa10436a feat: corner-radius protocol support 2025-10-03 20:11:16 +02:00
Ian Douglas Scott
3c70263e0f screencopy: Without draw_cursor, omit dnd icon from toplevel capture
It seems https://github.com/pop-os/cosmic-comp/pull/1638 caused an issue
in cosmic-workspaces, where if there are multiple toplevels, when
dragging a toplevel, the drag surface would appear in capture for other
toplevels.

For now, omit drag surface in toplevel capture without `draw_cursor`.
Though I guess ultimately we do want it for metadata cursor capture in
the portal, but not in cosmic-workspaces? Maybe the protocol needs some
additional option for this...
2025-10-02 16:24:15 +02:00
Ian Douglas Scott
f63d901406 screencopy: Render cursor for toplevel capture at right position
`CosmicMapped::cursor_positon` may have worked previously, but doesn't
now.

This is based on the code used for seperate cursor capture sessions.
Maybe this could be consolidated in some way.

But this seems to work. Including for rotated outputs.
2025-09-18 23:36:30 +02:00
Ian Douglas Scott
0c941b802d screencopy: Add cursor render element first
Otherwise, the cursor is rendered behind the toplevel, and isn't
visible.
2025-09-18 23:36:30 +02:00
Ian Douglas Scott
9cc68dcbcc screencopy: Fix transform for damage rect advertised to client
This fixes two issues:
- The `area` passed to `to_buffer()` should match the dimensions of the
  output/etc. being captured, rather than coming from the damage rect
  size.
- The transform needs to be inverted.

Previously, rotated outputs could cause a crash
`xdg-desktop-portal-cosmic`, since the compositor was passing negative
coordinates in `damage`, and the client used the same in
`damage_buffer`. This was causing
https://github.com/pop-os/xdg-desktop-portal-cosmic/issues/165.

The portal crash no longer occurs, and logging in
xdg-desktop-portal-cosmic shows damage rects that match expectation
while moving the cursor over different corners of a workspace.
2025-09-02 17:12:37 +02:00
Ashley Wulber
bb8e066d6d feat(config): load cosmic-randr output Lists 2025-08-26 11:30:56 -04:00
Ashley Wulber
416b66b776 refactor(output config): move to config crate
this allows the greeter to easily sync to the user config
2025-08-26 11:30:56 -04:00
Ian Douglas Scott
e54f4b4963 protocols/workspace: Set ext workspace id for pinned workspace
The `id` is defined to be sent only once, on creation of the handle or
later. And only for workspaces that are "likely to be stable across
multiple sessions".

Set we add an `id` initially for pinned workspaces, and add one when the
workspace is pinned.

The `id` is not supposed to be human readable, so we just use a random
value.
2025-08-22 11:58:07 +02:00
Ian Douglas Scott
f2813f0500 screencopy: Return signalled sync point after shm
Shouldn't really matter, but no need to check the fence after this.

It would be good if shm screencopy didn't block here...
2025-08-21 17:09:49 +02:00
Ian Douglas Scott
905d021552 screencopy: Use send_success_when_ready for other forms of capture
A little annoying to add a `loop_handle` argument to `render_output`,
but generally straightforward.
2025-08-21 17:09:49 +02:00
Ian Douglas Scott
10c05bc1d4 kms/surface: Don't send screencopysuccess() until sync point is reached 2025-08-21 17:09:49 +02:00
Ian Douglas Scott
28e9024681 kms/surface: Define a PendingImageCopyData, instead of using tuple
Adding anything else to this tuple is awkward; defining a simple struct
makes this cleaner.

This also adds a `sync` property, which will come in handy later.
Containing simply the same-named argument that was passed to
`submit_buffer`.
2025-08-21 17:09:49 +02:00
Vukašin Vojinović
7f7ab8bcbe chore: Rust 2024 edition
Set the formatting style to 2021 edition to avoid disrupting existing work.
Remove when possible.
2025-08-21 13:10:11 +02:00
Victoria Brekenfeld
b28f92a6e1 focus: Don't consider XWaylandGrab exclusive 2025-08-16 01:19:35 +02:00
Victoria Brekenfeld
a4b2294bee toplevel_mgmt: Fix activating sticky windows 2025-08-13 16:03:03 +02:00
Victoria Brekenfeld
be1424f1ca render/wayland: filter scanout candidates by frametime estimation 2025-08-07 19:40:23 +02:00
Victoria Brekenfeld
28a9000833 wayland/compositor: Add per-surface frame time estimation 2025-08-07 19:40:23 +02:00
Ashley Wulber
bdef75dc8c refactor: swap to the activated element's workspace if different 2025-08-01 17:52:45 +02:00