Commit graph

1184 commits

Author SHA1 Message Date
Ian Douglas Scott
5537fa4822 Use EGL_MESA_device_software as fallback for screen capture
Previously, screenshots and screencopy panicked if no DRM render nodes
are present.

Instead, create a `GlowRenderer` using llvmpipe, if available. This
should work as a fallback until pixman is integrated.
2024-08-07 10:49:39 -07:00
Ian Douglas Scott
87020c79ba Define a RendererRef enum, referencing multi or glow renderer
Avoids a little duplication (matching two variants, instead of three
backends).

The behavior, including errors and panics, should be unchanged for now.
Performance should also not be impacted.

This should help for adding llvmpipe rendering without a device node on
the kms backend, or for adding a variant for pixman.
2024-08-07 10:49:39 -07:00
Ian Douglas Scott
4748916ff9 Make RenderElement implementations generic to reduce duplication
It would make sense to have a bound like
`for<'frame> R::Frame<'frame>: AsGlowFrame<'frame>`. But that appears to
not behave properly due to current limitations of the borrow checker:
https://blog.rust-lang.org/2022/10/28/gats-stabilization.html#implied-static-requirement-from-higher-ranked-trait-bounds

Instead, this makes `glow_frame` and `glow_frame_mut` associated
functions of the `AsGlowRenderer` trait. Then it is pretty
straightforward to make the `RenderElement` implementations generic
using that and `FromGlesError`.

It would make sense to make `Self::Error: FromGlessError` a requirement
of the `AsGlowRenderer` trait, but due to the lack of implied bounds
support, that produces a bunch of errors about missing bounds. If Rustc
improves that eventually, some bounds could be cleaned up a bit:
https://github.com/rust-lang/rust/issues/44491
2024-08-05 12:58:52 +02:00
Victoria Brekenfeld
dc3dbfdba0 chore: Remove unused method 2024-08-02 20:54:15 +02:00
Victoria Brekenfeld
c3524d3546 stack: Fix round corners on maximize 2024-08-02 20:54:15 +02:00
Victoria Brekenfeld
5aaac707f8 window: Fix round corners on maximize 2024-08-02 20:54:15 +02:00
Victoria Brekenfeld
c299748997 config: Load toolkit config on start 2024-08-02 20:54:15 +02:00
Ashley Wulber
b8eaf5dcb4 chore: update smithay 2024-08-02 15:54:05 +02:00
Victoria Brekenfeld
2cef99ae78 Revert "kms: Try to calculate dpi and scale factor"
This reverts commit 607bd71aeb.
2024-08-01 23:38:11 +02:00
Daniel
e01a55aae7
input: resize on Super + Right-Click Drag 2024-08-01 19:50:28 +02:00
Ian Douglas Scott
c1bf410466 toplevel-info: Fix race between binding wl_ouput and output_enter
This fixes an issue with `cosmic-panel` where, when a workspace is moved
back to an output after a monitor is disconnected and reconnected, the
panel doesn't hide because `cosmic-panel` thinks no toplevel is open on
that monitor.

After some testing, it seems `output_enter` isn't being sent here. In
particular, the `output_leave` call happens before the client binds the
`wl_output`, so there is no `wl_output` to send in an event yet.

This is addressed by keeping track of a set of `wl_output`s that we have
sent the event to. So if an output is bound, `refresh` can add it to
this list and send the event.

This is not needed for workspaces (though it could be done similarly)
since the handle objects are created by server events. So no race should
occur as long as the workspaces global is bound before the toplevel info
one.
2024-08-01 16:35:26 +02:00
Victoria Brekenfeld
607bd71aeb kms: Try to calculate dpi and scale factor 2024-07-31 13:02:08 +02:00
Victoria Brekenfeld
af553a16a6 input: Send modifiers of modifier-only bindings to clients 2024-07-29 23:33:55 +02:00
Victoria Brekenfeld
6c517bd8de input: Also focus a window on click, if the super key is held 2024-07-29 21:52:19 +02:00
Ian Douglas Scott
de264e250f Fix build with debug feature 2024-07-29 14:49:44 +02:00
Ian Douglas Scott
0e78104477 Fix build with profile-with-tracy feature 2024-07-29 14:49:44 +02:00
Victoria Brekenfeld
fdde46febd config: watch CosmicTk 2024-07-26 16:40:28 +02:00
Victoria Brekenfeld
61f11d1363 element/stack: Style fixes 2024-07-26 14:59:11 +02:00
Victoria Brekenfeld
8971d8f430 kms: Fix previous commit.. 2024-07-26 14:07:21 +02:00
Victoria Brekenfeld
64e03d11d7 kms: Fix potential panic when enumerating connectors 2024-07-26 14:00:16 +02:00
Dominic Gerhauser
3214ef0250 element/window: Add maximize on header double-click 2024-07-26 13:22:56 +02:00
Victoria Brekenfeld
9239584435 chore: libcosmic update 2024-07-26 13:22:56 +02:00
Ian Douglas Scott
2a4bbf4238 Update zbus and i18n-embed-fl dependencies 2024-07-25 22:54:53 +02:00
Ashley Wulber
4f043133bc fix: intercept modifiere press for shortcut with no key 2024-07-23 16:12:31 +02:00
Ashley Wulber
f406bf33ae fix: only suppress keys when an action is on press
Actions which are on releasedon't have anything to suppress, and end up suppressing the next release.
2024-07-23 16:12:31 +02:00
Dominic Gerhauser
27f048b998 respect cosmic-tk setting for minimize and maximize 2024-07-22 19:08:19 +02:00
Victoria Brekenfeld
ec5d89eaa9 kms: Make sure edid model doesn't contain 0 byte 2024-07-18 17:31:57 +02:00
Victoria Brekenfeld
4a22724cb8 kms: HACK: avoid crashing on bad edids 2024-07-18 17:31:57 +02:00
Victoria Brekenfeld
0a97147e45 input: Don't intercept disabled actions 2024-07-17 21:08:40 +02:00
Victoria Brekenfeld
4b2082f72a input: Fix surpressed_keys logic 2024-07-17 21:08:40 +02:00
Victoria Brekenfeld
d4926c3a9e shell: Allow dragged windows to be focused 2024-07-17 18:57:21 +02:00
Ian Douglas Scott
7acfa10ba0 Disable workspace change gestures when workspaces overview is open
Without animation between workspaces, the behavior is a bit jarring.
Disable for now until we have a better solution.
2024-07-15 17:12:05 +02:00
Ian Douglas Scott
9c65476091 Set ElementFilter in render_output to match kms backend
This way the same behavior will apply in winit/x11 backends.
2024-07-15 17:12:05 +02:00
Ian Douglas Scott
0636bcdef3 Add workspace_overview_is_open function; put in a utils::quirks mod
This is increasingly not just related to screencopy, so it's weird to
add there. I don't see any other module that fits, so add one called
"quirks" (like the Linux kernel uses for device-specific handling in
generic drives).
2024-07-15 17:12:05 +02:00
Ian Douglas Scott
355b142c52 When cosmic-workspaces is shown, render only layer-shell surfaces
This allows `cosmic-workspaces` to rely on cosmic-comp for rendering the
background, and just have transparency. This should be a more reliable
and performant way of doing things, at least for now.

Instead of adding another opaque bool argument, this defines an
`ElementFilter` enum, which makes calls more readable.

Window surfaces are still included in screencopy, as needed for the
workspace previews.
2024-07-15 17:12:05 +02:00
Ian Douglas Scott
31358d1993 Inhibit workspace animations when workspaces view is open
Fixes https://github.com/pop-os/cosmic-workspaces-epoch/issues/27.

We want this to apply to changes to workspace either through keybindings
or the cosmic-workspaces UI, so it adding a check here seems reasonable.
In principle it could be good to have some kind of privileged protocol
for setting things like this.

We may also want a configuration option to disable animations at some
point.
2024-07-15 17:12:05 +02:00
Ian Douglas Scott
94fecec9cb Add a SplitRenderElements type, with useful methods
`(w_elements, p_elements)` tuples are used in a bunch of places. A
struct with named fields is generally an improvement just due to the
fact the order is non-obvious.

But we can also add methods. In particular,
`extend_from_workspace_elements` abstracts out some of the more
redundant code in `workspace_elements`.

It would be nice to avoid allocation everywhere, but iterators would
complicate lifetimes, run into issues with needing multiple mutable
borrows to things like the `Renderer`, and be awkward in certain
functions without generator syntax. In any case, cosmic-comp already
relies on allocating vectors here.

If this abstraction is commonly useful in compositors, perhaps it could
be moved to Smithay.
2024-07-15 17:12:05 +02:00
Victoria Brekenfeld
c506d94ac8 shell: Don't consider active overviews animations 2024-07-15 16:31:24 +02:00
Victoria Brekenfeld
b1778dabb3 shell: Don't crash on zero outputs for global-mode 2024-07-12 19:29:47 +02:00
Victoria Brekenfeld
3b9d0ce3d7 HACK: Remap minimized X11 windows on restore 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
3485d82788 shell: Don't allow maximizing fullscreen windows 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
bf6ea3414b x11surface: Unmap on minimize 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
d85b6f0e50 focus: set minimized windows unfocused 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
3eb3e3b1c0 xwm: Fix edge-cases for fullscreening 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
66d1016003 xwm: Include minimized windows when restacking 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
bf8fb0ac24 input: Fix broken confinement check 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
c06529b548 focus: Don't send enter/leave for same surface 2024-07-10 22:36:40 +02:00
Victoria Brekenfeld
e61a76d39c chore: libcosmic update 2024-07-08 12:11:58 +02:00
Ian Douglas Scott
11914e97ea Use FromGlesError instead of OutputNoMode placeholder 2024-07-05 17:49:41 +02:00
Ian Douglas Scott
9f8fec6ec5 screencopy: Handle error from with_buffer_contents_mut
Fixes https://github.com/pop-os/cosmic-comp/issues/48.

https://github.com/Smithay/smithay/pull/1475 fixes the segfault so this
instead produces an error. Then we need to handle the error here.
2024-07-05 17:49:41 +02:00