Commit graph

2235 commits

Author SHA1 Message Date
Ian Douglas Scott
8ec1ffb740 protocols/keyboard-layout: Send ei modifiers on group change
This makes `cosmic-osk` show a group change on `super+space`. Previously
a change like that wouldn't be sent until a keyboard input changed the
modifier state, for instance releasing the shift key.
2026-09-03 19:31:56 +02:00
Frederic Laing
0d75928579 chore: refactor throttle function 2026-09-03 17:46:37 +02:00
Frederic Laing
e62e35e5cc fix: keep Xwayland frame callbacks progressing 2026-09-03 17:46:37 +02:00
Hojjat
8691956644 fix: validate layer radius against the pending surface size 2026-09-02 15:32:26 -06:00
Konstantinos
9059873c84 fix: Do not magnify cursor when there is an active grab. 2026-09-02 15:39:42 +02:00
Shehriyar Qureshi
e93ec67a11 fix(kms): typo in log message 2026-09-02 15:23:09 +02:00
Victoria Brekenfeld
a7d31a75d2 backend/kms: Check all connectors for primary gpu 2026-09-01 08:02:38 -06:00
Victoria Brekenfeld
b407ed560a wayland/decoration: Make default decoration mode configurable 2026-09-01 08:01:43 -06:00
Victoria Brekenfeld
a830784f11
Merge pull request #2796 from weblate/weblate-pop-os-cosmic-comp 2026-08-31 19:13:08 +02:00
Hojjat
9fe22c86b6 fix(corner-radius): use layer surface size for radius validation 2026-08-31 19:10:49 +02:00
RipleyTom
94178034dd feat: allow XWayland window to start minimized 2026-08-31 16:29:03 +02:00
Hosted Weblate
158e2b7f91
i18n: translation updates from weblate
Co-authored-by: Kurt Harren Catindig <kurtharrencatindig03@gmail.com>
2026-08-29 18:07:44 +02:00
Victoria Brekenfeld
5c93094574 chore: update smithay 2026-08-26 20:07:05 +02:00
Hojjat
31827ed240 improv: clear image_cache on refresh 2026-08-25 17:33:56 +02:00
Hojjat
80b8eb47d7 improv: round up and down sample cursor sizes to limit cache 2026-08-25 17:33:56 +02:00
Hojjat
01b79c3eae feat: scalable cursor support 2026-08-25 17:33:56 +02:00
Tom Grushka
8304b18886 Clamp zoom level to 1.0 if < 1.01
Fix floating point edge cases that keep zoom enabled when level ≈ 1.0

Co-authored-by: Luuk van der Duim <luukvanderduim@gmail.com>
2026-08-21 22:56:16 +02:00
Tom Grushka
738e0b3124 a11y: magnifier: change zoom stepping to multiplicative, bound max, add presets
1. Change magnifier zoom stepping from additive to multiplicative,
   because zoom is a ratio, not a difference, and human perception is
   logarithmic (browser zoom steps, map zoom levels, microscope powers).

2. Add `pub const ZoomConfig::ZOOM_INCREMENT_PRESETS` with two
   additional presets: 10% (macOS, Cinnamon) and 75% (for users at
   70-90x zoom).

3. Bound the zoom level to a generous maximum, beyond what anyone is expected
   to need, to prevent runaway / unrecoverable levels (#1230).

Full background and rationale at #2615.

I used AI to assist with research and issue writeup. Code is 100% mine.

- Closes #2615.
- Fixes #1239.
- Partially addresses #1230 and #1237.
2026-08-21 22:56:16 +02:00
Hojjat
f20de50e41 feat: shake cursor to find by magnifying the cursor 2026-08-21 00:39:02 +02:00
chris-010
04026259e0 fix: treat unlocking the session as user activity
SessionLockHandler::unlock clears the lock and schedules a render, but
never tells IdleNotifierState that the user is there. Unlock paths that
produce no input event -- fingerprint and smartcard readers -- therefore
leave the idle clock running across the entire lock period, and it is
already past its timeouts by the time the session is unlocked.

The visible result is that the screen stays off after a successful
unlock until the user moves the mouse or presses a key, or that the
session locks itself again seconds after being unlocked.

Notifying activity for every seat in unlock() resets the timers the same
way an input event would.

Drafted with AI assistance (Claude Code); the change was reviewed,
built and tested by me on real hardware as described.

Signed-off-by: chris-010 <10660568+chris-010@users.noreply.github.com>
2026-08-20 13:19:53 +02:00
Victoria Brekenfeld
314fc670a8
Merge pull request #2754 from weblate/weblate-pop-os-cosmic-comp
Translations update from Hosted Weblate
2026-08-18 13:26:18 +02:00
Hosted Weblate
f1d1c00257
i18n: translation updates from weblate
Co-authored-by: Michael Millet <mikevlet@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/da/
Translation: Pop OS/COSMIC Comp
2026-08-18 11:09:23 +02:00
Ian Douglas Scott
8806436f81 libei: Add com.system76.CosmicOSK to DBus whitelist 2026-08-17 12:22:35 -07:00
Ian Douglas Scott
861a460e6c chore: Fix clippy lints 2026-08-17 12:22:35 -07:00
Ian Douglas Scott
c423e82820 libei: on KMS, schedule render after handling input events
Matches behavior of libinput backend.
2026-08-17 12:22:35 -07:00
Hojjat
f4ee52c46a Ei protocol support
- Use the configured keyboard layout, track ei seats to reconfigure their keyboards
- DBus interface
- Disambiguate input devices per backend instance
- Add support for `ei_keysym` and `ei_text`
- Act as input method for ei_text UTF-8 injection
- Create a region per output for abosolute pointer position
- Map ei region for touchscreen emulation
- Release pointer buttons and keys on removal
- Send modifiers to EI connections
2026-08-17 12:22:35 -07:00
Ian Douglas Scott
e939a72b30 Initial Ei protocol support 2026-08-17 12:22:35 -07:00
Ian Douglas Scott
861b732671 input: Handle scroll events that only have amount_v120
X11, winit, and libei backends all can produce scroll events with
`amount_v120()` but no `amount()`.
2026-08-17 12:22:35 -07:00
Ian Douglas Scott
18ae082615 Update smithay with tablet API changes
For now, only `WlSurface` receives tablet focus, as was previously the
case.

Also updates `reis` to latest bugfix release.
2026-08-17 12:22:35 -07:00
Victoria Brekenfeld
0cf70521ff
Merge pull request #2751 from weblate/weblate-pop-os-cosmic-comp
Translations update from Hosted Weblate
2026-08-17 12:51:34 +02:00
Hosted Weblate
6af1dba69b
i18n: translation updates from weblate
Co-authored-by: Michael Millet <mikevlet@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/da/
Translation: Pop OS/COSMIC Comp
2026-08-17 08:51:26 +02:00
Victoria Brekenfeld
f97a852e95
Merge pull request #2735 from weblate/weblate-pop-os-cosmic-comp
Translations update from Hosted Weblate
2026-08-14 15:57:29 +02:00
Victoria Brekenfeld
3b8bac8335
Merge pull request #2683 from hojjatabdollahi/hojjat/fix-chrome
fix(shell): take presentation feedback from fullscreen surfaces
2026-08-14 15:36:28 +02:00
Hosted Weblate
abfb25a672
i18n: translation updates from weblate
Co-authored-by: Michael Millet <mikevlet@protonmail.com>
Co-authored-by: Steen Rabol <steen@rabol.dev>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/da/
Translation: Pop OS/COSMIC Comp
2026-08-14 08:51:32 +02:00
Victoria Brekenfeld
647228b9ce
Merge pull request #2700 from weblate/weblate-pop-os-cosmic-comp
Translations update from Hosted Weblate
2026-08-10 15:54:16 +02:00
Hosted Weblate
f89c78b9bd
i18n: translation updates from weblate
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Martin Meizoso <martinmeizoso@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/gl/
Translation: Pop OS/COSMIC Comp
2026-08-05 16:02:35 +02:00
Hojjat
58c018dd40 fix(shell): take presentation feedback from fullscreen surfaces 2026-07-31 13:42:00 -06:00
Victoria Brekenfeld
d3ffa81494
Merge pull request #2671 from weblate/weblate-pop-os-cosmic-comp 2026-07-30 15:43:15 +02:00
Hosted Weblate
789e0b3634
i18n: translation updates from weblate
Co-authored-by: Andi Chandler <andi@gowling.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/en_GB/
Translation: Pop OS/COSMIC Comp
2026-07-30 11:03:25 +00:00
Victoria Brekenfeld
091583ac84 backend: Support wl-dmabuf v6 2026-07-29 22:08:23 +02:00
Victoria Brekenfeld
81cd5fdbaa
Merge pull request #2667 from weblate/weblate-pop-os-cosmic-comp 2026-07-29 17:14:04 +02:00
Hosted Weblate
d687285338
i18n: translation updates from weblate
Co-authored-by: Andi Chandler <andi@gowling.com>
Co-authored-by: Davide <davidemadonna@outlook.it>
Co-authored-by: Sproston <ojspr2007@gmail.com>
Co-authored-by: Wilbur Lindqvist <william@willmantrade.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/en_GB/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/it/
Translation: Pop OS/COSMIC Comp
2026-07-29 11:01:49 +02:00
zyads
ffeda3375a fix(corner_radius): check LayerHookId for layer surfaces
GetCornerRadiusLayer looked up the existing hook via ToplevelHookId while
inserting into LayerHookId a few lines later. Both are
Mutex<Option<(HookId, Weak<..>)>> so it compiles, but they are distinct
data_map slots: the "does this surface already have a corner-radius object?"
check for a layer surface read the toplevel slot, so it could not see a layer
object that was already there, and it created a toplevel entry on a layer
surface as a side effect.

Every other read of the layer hook already uses LayerHookId.

Disclosure: found and written with AI assistance (Claude). The change is the
one line quoted above; I understand it and verified the tree builds with it.
2026-07-29 00:30:01 +02:00
Hojjat
8d450d4977 fix: clamp pointer edge after applying the output offset 2026-07-29 00:27:23 +02:00
v0up3r
9514b4945e fix(kms): don't panic when renderer creation fails after a GPU reset
When the DRM device is lost transiently, for example when the amdgpu driver
performs a GPU reset and recovers ("device wedged, but recovered through
reset"), acquiring a renderer in `SurfaceThreadState::redraw` fails. The three
`renderer`/`single_renderer` calls used `.unwrap()`, so the failure panicked
the surface's render thread. Because that panic unwinds across the EGL/GBM FFI
boundary it aborts the whole process (SIGABRT), dropping the session back to
the greeter and closing every running application.

`redraw` is already fallible and its caller logs the error and reschedules a
redraw, and the frame-submission path (`render_frame`/`queue_frame`) already
propagates errors the same way. Propagate the renderer-acquisition errors too,
so a transient device loss is retried on the next frame, once the device is
back, instead of taking down the compositor.

Relates to #649.

Assisted by an AI coding tool; I have reviewed and fully understand the change
and am able to maintain it and respond to review.
2026-07-28 15:28:34 +02:00
RipleyTom
5ce21fb4f3 fix: ensure X window focus on unmap/map 2026-07-27 21:38:26 +02:00
Tom Grushka
44de3063ee dbus: Fix deadlock in a11y keyboard monitor
A11yKeyboardMonitorState::key_event calls self.has_key_grab() inside
self.clients guard loop.

A "well-behaved" a11y client calls `WatchKeyboard` before `SetKeyGrabs`.

If WatchKeyboard is not called first, the `!client.watched` guard does
not short-circuit, so `has_key_grab()` runs and locks `self.clients` again.

This causes a deadlock and the compositor freezes, requiring a hard reboot.

This commit moves the `self.has_key_grab()` before the guard to
prevent a double lock.
2026-07-25 01:14:20 +02:00
RipleyTom
6108cef8b3 fix: workaround for Chromium apps breaking below 1.0 scaling 2026-07-25 01:13:59 +02:00
Timo Strunk
24d29008f0 fix(kms): skip empty DRM cleanup commit in display_configuration
display_configuration() issued an ALLOW_MODESET atomic commit on every udev
event, even when no planes needed detaching. The empty commit is a no-op
modeset that interferes with in-flight commits on the render thread, and it
fails with EPERM whenever we don't hold DRM master (e.g. a render-only
secondary GPU), aborting device enumeration.

Track whether any property was added and skip the commit when there is nothing
to do. A commit that does have changes still propagates its error as before, so
a genuine failure to apply cleanup is not silently swallowed.

https://github.com/pop-os/cosmic-comp/issues/2375

Authored by Claude Opus 4.8
Reviewed by Timo Strunk <Timo.Strunk@gmail.com>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 18:17:51 -06:00
Timo Strunk
53a8d0bea2 fix(kms): join surface threads before exit to avoid SIGABRT on shutdown
When the kiosk child exits, calling process::exit() directly from the calloop
callback runs libc's atexit handlers (Mesa's util_queue_kill_threads) while a
KMS surface thread may still be mid-frame in eglCreateSync(). Concurrent Mesa
teardown and live EGL use corrupt the heap and glibc aborts the process
("free(): corrupted unsorted chunks", SIGABRT).

Stop the event loop cleanly via should_stop instead, stashing the child's exit
code in Common::kiosk_exit_code. After the loop returns, pause() each DRM device
(releasing master so the surface drop path skips its blocking clear_state(), and
the incoming compositor gets master immediately), then drop_and_join() every
surface so no thread is left in Mesa. Only then is process::exit() called, at
which point atexit is safe to run.

The join is done here rather than in Surface::Drop because an unconditional join
in Drop deadlocks against apply_config_for_outputs during normal operation; once
the event loop has stopped, the surface thread can process ThreadCommand::End
and exit without the main thread servicing any pending message.

https://github.com/pop-os/cosmic-comp/issues/2375

Authored by Claude Opus 4.8
Reviewed by Timo Strunk <Timo.Strunk@gmail.com>

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 18:17:51 -06:00