Commit graph

1449 commits

Author SHA1 Message Date
Ashley Wulber
3465ce7602 feat: corner radius for CosmicMapped 2025-10-03 20:11:16 +02:00
Ashley Wulber
228af1037a fix(corner-radius): error handling and cleanup 2025-10-03 20:11:16 +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
242e465d42 fix(corner-radius): use cached state 2025-10-03 20:11:16 +02:00
Ashley Wulber
e476153086 fix(outline): pass the radii in the correct order for the shader 2025-10-03 20:11:16 +02:00
Ashley Wulber
2873d6b27e fix(corner-radius): properly handle no value, and use geometry 2025-10-03 20:11:16 +02:00
Ashley Wulber
6f93b8774d cleanup use statements 2025-10-03 20:11:16 +02:00
Ashley Wulber
2d9d83d3bd fix(corner-radius): guard against corner radius being too large 2025-10-03 20:11:16 +02:00
Ashley Wulber
f01ebf2f6f refactor(corner-radius): corner_radius method for CosmicSurface 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
8ddd14a54f cleanup: remove TODOs 2025-10-03 20:11:16 +02:00
Ashley Wulber
c6320eec0c fix: support per-corner radius
also adjusts the radius by half of the outline thickness. I believe this is the radius at the center of the outline.
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
346f055fdc focus: Check if X11 surface matches in KeyboardFocus::replace()
Tested on `SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=1 supertux2`, using
XWayland. If the game starts with fullscreen configured, it minimizes
immediately on start. But after this change, this no longer happens.

This hopefully will improve behaviors with various X11/wine fullscreen
clients. It may fix
https://github.com/pop-os/cosmic-comp/issues/1510, though looking at the
video the behavior there may be a bit different.
2025-10-02 16:27:29 +02:00
Ian Douglas Scott
9e66bed9d6 focus: Split off an x11_surface() method from is_xwm() 2025-10-02 16:27:29 +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
Victoria Brekenfeld
f339e21479 floating: Keep elements positioned relatively on recalculate 2025-09-22 18:07:10 +02:00
Ashley Wulber
b19f66702f
shortcuts: touchpad toggle keybind 2025-09-19 15:33:10 +02:00
Ian Douglas Scott
b75be5b305 Remove last_cursor_position from CosmicMapped
Since 5459f52d, this is no longer ever set.
2025-09-18 23:36:30 +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
d8281ed51b shell: Handle WorkspaceMode::Global in move_workspace()
If workspaces span across outputs, the `Workspace` at a particular
index should be moved on every `WorkspaceSet`.
2025-09-18 23:35:22 +02:00
Ian Douglas Scott
b8ffc89948 shell: Make migrate_workspace() a no-op on global workspace mode
Doing nothing may be a bit confusing, but `MigrateWorkspaceToOutput`
isn't bound by default anyway.
2025-09-18 23:35:22 +02:00
Victoria Brekenfeld
b83e9f1d32 config: Make read_outputs failable
Previously we ignored when we had no output configuration
**and** failed to apply the automatically created one.

This leads to two problems:
- If this happens on startup, we end up with no outputs being added to the shell and we quit.
- If this happens later, we might end up in an inconsistent state, where the shell thinks we have an output, when it didn't light up for similar reasons.

Thus `read_outputs` is failable and handling that very much depends on
the where is was called from, because `read_outputs` doesn't know what
configuration was active before.

Thus make it failable and provide useful mitigations everywhere
possible:
- Try to enable just one output in case we fail on startup.
- Don't enable any additional outputs, when we fail on hotplug.
- Log the error like previously in any other case (and come up with more
  mitigations, once we understand these cases better).
2025-09-15 09:13:00 +02:00
Victoria Brekenfeld
cd1117080c kms: Don't join on DrmSurface drop 2025-09-11 00:20:14 +02:00
Ashley Wulber
458f5f4dcf refactor(config): fix no features enabled 2025-09-09 10:01:43 -04:00
Victoria Brekenfeld
7684cd1b2c render: Fix shader obj leak 2025-09-08 14:47:06 +02:00
Victoria Brekenfeld
a0f8c4ed99 kms/surface: Cleanup unused software-rendering code 2025-09-08 13:07:40 +02:00
Victoria Brekenfeld
3935de018e kms: evdi cursor work around 2025-09-08 13:07:40 +02:00
Victoria Brekenfeld
b7fd4bc781 kms/device: Fix render_formats 2025-09-08 13:07:40 +02:00
Victoria Brekenfeld
18a1ba2d26 kms: Don't consider software devices for primary 2025-09-08 13:07:40 +02:00
Victoria Brekenfeld
6eb5ca1f94 kms: Close drm fds via session 2025-09-08 13:07:40 +02:00
Victoria Brekenfeld
cad5ed8945 kms: Don't attempt dmabuf import on software devices 2025-09-08 13:07:40 +02:00
Victoria Brekenfeld
70cd1842c1 kms/device: Don't advertise drm_node on software devices 2025-09-08 13:07:40 +02:00
Victoria Brekenfeld
a840b52930 chore: smithay update 2025-09-08 13:07:40 +02:00
19MisterX98
c9e64acad2 fix: don't assume previous workspace still exists #1588 2025-09-04 12:17:12 +02:00
Ian Douglas Scott
3f74a22cca kms/surface: Fix transform used for blits
Use the same logic used `submit_buffer`. This fixes corruption in OBS
when trying to capture a rotated output.
2025-09-02 17:12:37 +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
Victoria Brekenfeld
4a385d5535 config: Allow overriding touchpad state 2025-08-22 18:23:05 +02: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
Ian Douglas Scott
f0e0084608 Update smithay, and adjust to use sync points from blit calls 2025-08-21 17:09:49 +02:00