Commit graph

1272 commits

Author SHA1 Message Date
Ian Douglas Scott
85254b47d6 protocol/workspace: Drop support for cosmic v1 protocol
Clients have been updated to use ext-workspace-v1 and
cosmic-workspace-v2.

Removing this should save some duplication of having to update both
cosmic workspace v1 and ext workspace code, and should help with things
like using the same workspace handle when a workspace moves to a
different group (which is something that was changed before the final
version of the ext-workspace-v1 protocol.)
2025-04-22 07:48:23 -07:00
Victoria Brekenfeld
2cbe89d89d xwayland: Set scaled cursor size via xsettings 2025-04-16 21:06:51 +02:00
Victoria Brekenfeld
de1e528ba7 render/cursor: Don't round cursor coordinates early 2025-04-16 21:06:51 +02:00
Victoria Brekenfeld
e6a3f5373c render/cursor: Correctly convert hotspot coordinates 2025-04-16 21:06:51 +02:00
Victoria Brekenfeld
b53eb508a8 shell: Don't engage new MoveGrabs while in Overview 2025-04-15 16:15:24 +02:00
Victoria Brekenfeld
67d3225ef5 chore: use cosmic-text shape cache 2025-04-15 13:32:51 +02:00
Victoria Brekenfeld
155f8d20d0 xwayland: Honor primary output for fractional scale 2025-04-14 18:15:28 +02:00
Victoria Brekenfeld
2a3bd84e22 output_configuration: Allow setting xwayland primary output 2025-04-14 18:15:28 +02:00
Victoria Brekenfeld
aeed8f256f xwayland: store and restore primary output 2025-04-14 18:15:28 +02:00
Victoria Brekenfeld
7472351de0 feat: Allow fractional xwayland client scale 2025-04-14 18:15:28 +02:00
Victoria Brekenfeld
0159bce9db chore: update smithay 2025-04-14 18:15:28 +02:00
Victoria Brekenfeld
a8d12f3172 shell/element: Attach a resize border to tiled undecorated windows 2025-04-03 18:30:47 +02:00
Victoria Brekenfeld
793bb17d47 state: Use WeakOutput for frame trottling 2025-04-03 18:08:44 +02:00
Victoria Brekenfeld
cbc4ad6fc2 xwayland: Allow eavesdropping on certain keyboard/pointer events 2025-04-02 17:26:09 +02:00
Victoria Brekenfeld
8d733a1245 xwayland: Always allow writing into clipboard
Overriding contents is no security issue and this is necessary for a
bunch of apps to work correctly.
2025-04-02 17:26:09 +02:00
Victoria Brekenfeld
2e2ca3eda0 xwayland: Allow pasting into fullscreen surfaces 2025-04-02 17:26:09 +02:00
Ian Douglas Scott
0c95871bd0 shell/workspace: Disambiguate output with edid match by connector name
If two displays have the same edid (which shouldn't happen, since edid
includes a serial number, but is somewhat common in practice with
identical monitors), match output stack by comparing both edid and
connector name.

If we get the same edid but a different connector, `set_output`
truncates but also adds the new one. (Before adding edid matching, this
would have just added to the output stack.)

`prefers_output()` will requrire a connector name match if the edid of
the current output is the same as that of the output being compared.
2025-04-02 13:40:56 +02:00
Ian Douglas Scott
70ed075e80 shell/workspace: Store edid in output stack
Matches by edid where present, or by connector name if there is no edid
information.
2025-04-02 13:40:56 +02:00
Ian Douglas Scott
75aab6e282 shell/workspace: Clear output stack when moved user moves workspace
If the user explicitly moves a workspace to an output, assume that is
where the user wants it, so it shouldn't be moved back to a different
output in the future.

For persistent workspaces, the explicitly set workspace is the one that
will be stored, instead of trying to track an unbounded list of outputs
persistently.
2025-04-02 13:40:56 +02:00
Ian Douglas Scott
e74eafce2c Add EdidProduct, as user data for kms Outputs
This is the same as `libdisplay_info::edid::VendorProduct`, but with
implementations for `Serialize`, `Eq`, etc.
2025-04-02 13:40:56 +02:00
Ian Douglas Scott
2fe5897db0 Replace screencopy with ext-image-copy-capture-v1 2025-04-01 18:22:42 +02:00
Hugo
2b8a3f7894 Argument support with clap_lex 2025-03-31 18:16:31 +02:00
Victoria Brekenfeld
c072538a6e a11y/zoom: Fix settings page 2025-03-28 18:35:06 +01:00
Victoria Brekenfeld
a0648a3a53 input: Don't trigger modifier shortcuts, when zooming 2025-03-28 18:35:06 +01:00
Victoria Brekenfeld
ec60933e01 a11y/zoom: Add more leeway for OnEdge movement 2025-03-28 18:35:06 +01:00
Victoria Brekenfeld
0ba0a0cdaa a11y/zoom: zoom level per output 2025-03-28 18:35:06 +01:00
Victoria Brekenfeld
babb96ddfa a11y/zoom: Drop last state 2025-03-28 18:35:06 +01:00
Victoria Brekenfeld
83a7926748 a11y/zoom: Allow disabling scroll-shortcuts 2025-03-28 18:35:06 +01:00
Victoria Brekenfeld
b62e47ef8d a11y/zoom: Allow hiding the overlay 2025-03-28 18:35:06 +01:00
Victoria Brekenfeld
b0d0bfb034 xdg-activation/toplevel-management: Unmaximize when activating a tiled window 2025-03-27 11:57:17 +01:00
Victoria Brekenfeld
d46ed304b8 shell: Unmaximize when moving a single window to another tiling layer 2025-03-27 11:57:17 +01:00
Victoria Brekenfeld
5cef49d2ce shell: Unmaximize windows on the target workspace when moving groups 2025-03-27 11:57:17 +01:00
Victoria Brekenfeld
9ee701ee64 shell: Don't move group to tiled layer of floating-only workspace 2025-03-27 11:57:17 +01:00
Victoria Brekenfeld
7a8577592d kms: Support screencopy cursor modes with active filters 2025-03-24 19:10:52 +01:00
Victoria Brekenfeld
7373b3f513 backend: Support screen filters in nested mode 2025-03-24 19:10:52 +01:00
Victoria Brekenfeld
7929e25966 kms: Support screen filters 2025-03-24 19:10:52 +01:00
Victoria Brekenfeld
18335c6758 kms: Refactor out postprocessing helpers 2025-03-24 19:10:52 +01:00
Victoria Brekenfeld
a748ea885e wayland: Add support for cosmic-a11y version 2 2025-03-24 19:10:52 +01:00
Victoria Brekenfeld
ea09334ff7 config: Add screen-filter configuration and persistent state 2025-03-24 19:10:52 +01:00
Victoria Brekenfeld
c10d400d70 screencopy: Remove unnecessary lifetime 2025-03-24 19:10:52 +01:00
Ian Douglas Scott
b52d84dbd3 Call underlying_storage of TextureRenderElement without mapping
This was mapping `UnderlyingStorage::Memory` to `None`. I don't see any
reason for this. Though this also shouldn't change behavior since
`TextureRenderElement` doesn't provide `underlying_storage` currently.
2025-03-24 19:10:52 +01:00
Clayton Craft
29a649541d kms.timings.presented: print debug msg when frame time is overflowing
Also see: #1062
2025-03-19 18:45:44 +01:00
Clayton Craft
8f40fc7a1b kms: protect against potential overflow of Duration when calculating avg frametime
Also see: https://github.com/Smithay/smithay/pull/1685

Fixes #1062

Co-authored-by: Victoria Brekenfeld <victoria@system76.com>
2025-03-19 18:45:44 +01:00
Ian Douglas Scott
dbd43d7582 shell: Refactor out common code for removing workspace from set 2025-03-17 12:00:17 -07:00
Ian Douglas Scott
bdd3e12ace Fixes for migrate_workspace
Previously, this was not updating the workspace indices on either the
old or new set, and left no workspace on the old set with `Active`
state. It also didn't add a workspace if the last workspace was removed.
2025-03-17 12:00:17 -07:00
Ian Douglas Scott
dd6df7b92a Refactor out duplicated workspace_set_idx loops
This isn't too bad, but it seems best to avoid the same enumerate loop
in multiple places.
2025-03-17 12:00:17 -07:00
Ian Douglas Scott
cee8ffd463 Send one-dimensional workspace coordinates, without output index
`ext_workspace_handle_v1::coordinates` defines the coordinate as
"an N-dimensional grid within a workspace group". So it is not
expected that the coordinates are unique between different groups, or
establish any geometry between different groups.

Whether we use one workspace per output or allow workspaces to span
outputs in the protocol, the whole workspace group is on the same set of
outputs. So I think this holds in any case.

I don't think we rely on this anywhere.
2025-03-17 12:00:17 -07:00
Ian Douglas Scott
8d6bd47bc4 Take slice instead of array in set_workspace_coordinates
As far as I can tell this is equivalent, and there's no particular
reason to use an array. Arrays of options for variable-length arrays are
awkward.
2025-03-17 12:00:17 -07:00
Ian Douglas Scott
7340e2beff Improve handling of XDG activation tokens in shell
Requires https://github.com/Smithay/smithay/pull/1676.

This changes two things:
* `Workspace::is_empty` no longer checks if there are activation tokens,
  but a separate `Workspace::can_auto_remove` checks if the workspace is
  empty and has no activation tokens.
  - When we add workspace pinning, that can also be checked there.
* `Workspace` no longer contains a `pending_tokens` list that is updated
  on `refresh`. Instead, `can_auto_remove` takes the xdg activation
  state as an argument.

Since `Workspace::refresh` normally is run for focused workspaces, this
fixes allowing non-focused workspaces to be removed when an activation
token expires. It seems generally good to avoid tracking the activation
tokens in two places, and this is probably more efficient than needing
to refresh in more places.

By splitting this, we still don't remove an empty workspace if it has a
pending activation token, but we also don't add an empty workspace for
an activation token.

This mitigates the confusing behavior with activation tokens that aren't
used, but having to wait a few seconds in some cases before a workspace
is removed is still a little confusing. (We probably want `cosmic-term`
and `cosmic-workspace` to either consume the activation tokens they are
passed, or not be passed tokens when started by keybinding?)

Fixes https://github.com/pop-os/cosmic-comp/issues/1099.
2025-03-14 17:53:34 +01:00
Ian Douglas Scott
1387535252 Fix dependency_on_unit_never_type_fallback warning on latest Rustc
Apparently in Rust 2024, the inferred type here would be `!`, which
doesn't implement `Default`. Explicitly use `()` instead.

https://doc.rust-lang.org/nightly/edition-guide/rust-2024/never-type-fallback.html
2025-03-14 17:50:17 +01:00