Commit graph

2308 commits

Author SHA1 Message Date
11f60acc94 merge: epoch-1.10.0 d'upstream
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 07:00:05 +02:00
mikairyuu
41497b42d9 backend: dmabuf: ensure primary render node is preffered 2026-10-05 21:13:31 +02:00
Anthony T. Lannutti
3d55cba06c feat: make tracing-journald dependency optional
Fixes #2466
2026-10-01 19:04:53 +02:00
Niklas Herder
895ce91543 cursor: let the hide reason tighten, and clear timer state when suppressed
The hidden.is_some() guard dropped a hide-reason upgrade: an Idle-hidden
cursor that received a touch stayed Idle, so a later click or scroll
revealed it where the spec says a touch-hidden cursor waits for real
movement. Reachable on the default config — fullscreen video, cursor
idle-hidden after 3s, tap the screen, nudge the scroll wheel. The guard
itself has to stay, or every keystroke with while_typing on reschedules a
render on every output; so it now returns early only when the reason is
unchanged or already Touch.

hide_cursor also returned before clearing idle_timer and last_armed when
the pointer was grabbed, leaving both stale while on_idle_timer's
neighbouring Drop arm cleared them carefully. Clearing in hide_cursor
before the grab check fixes both call sites at once — hide_cursor_now
removes the source itself, and the Hide arm returns TimeoutAction::Drop —
rather than restating the cleanup in one match arm.

Drafted with Claude (Anthropic); reviewed and tested by the committer.
2026-10-01 16:55:18 +02:00
Niklas Herder
115cdac039 cursor: measure the idle-hide deadline from the last pointer event
refresh_idle_timer armed for the full timeout measured from now, which is
right only for notify_cursor_activity — it stamps activity immediately
before arming. The other callers deliberately do not stamp, so with
idle_timeout: Some(10) a user typing continuously never saw the cursor
hide: every key press and release pushed the deadline out by a fresh ten
seconds. That inverts the feature and regresses the shipped
cursor_hide_timeout behaviour.

resolve's RearmAfter cannot recover it — it only corrects a timer that
fires too early. So the delay is now shortest_timeout minus the time
already elapsed, extracted as CursorHideConfig::arm_delay and table
tested; the arithmetic handed to Timer::from_duration was the one part of
this path with no coverage. A zero delay is fine: the timer fires on the
next loop iteration and resolve decides.

Also rename fullscreen_focused to fullscreen_on_active_output, which is
what seat.active_output() actually reports, and log an arming failure
rather than silently disabling cursor hiding.

Drafted with Claude (Anthropic); reviewed and tested by the committer.
2026-10-01 16:55:18 +02:00
Niklas Herder
7596cf7f2f config: deserialize cursor_hide with defaults for missing fields
Serde ignores unknown fields but errors on missing ones, so adding a
fifth trigger later would make every existing cursor_hide file fail to
deserialize. get_entry would then substitute the struct default and
Config::load swallows the error — its warn! loop is behind
cfg!(debug_assertions) — silently resetting everyone's settings on
upgrade. That is the exact failure this key was grouped to avoid.

It also has a present-day effect: the migration shim cannot tell "absent"
from "present but unparseable", so a partial hand-written cursor_hide was
treated as absent and overwritten — and hand-editing is what the shim's
audience does.

Drafted with Claude (Anthropic); reviewed and tested by the committer.
2026-10-01 16:55:18 +02:00
Niklas Herder
295eaa8f63 cursor: hide while typing and after touch input
Typing hides on a real keystroke only — a bare modifier press is excluded
so Super+drag keeps its cursor. Touch hides until the pointer next moves,
which the reveal rule enforces via HideReason::Touch.

Drafted with Claude (Anthropic); reviewed and tested by the committer.
2026-10-01 16:55:18 +02:00
Niklas Herder
569cfa6442 cursor: re-evaluate the idle timer in context, add fullscreen hiding
The timer now decides on fire rather than at arm time, so a shorter
fullscreen timeout applies without hooking any of the six fullscreen
transition sites in shell/mod.rs. Arming still touches no shell lock,
which the PointerMotion call site requires.

hidden becomes Option<HideReason> so the reveal rule can depend on why
the cursor went away.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Drafted with Claude (Anthropic); reviewed and tested by the committer.
2026-10-01 16:55:18 +02:00
Niklas Herder
4e72d2ce98 config: migrate cursor_hide_timeout to the grouped cursor_hide key
Reads the legacy key once at startup when the new one is absent, so the
handful of people who set it by hand from the cosmic-settings#603 thread
do not silently lose auto-hide. The old file is left on disk so a
downgrade still finds it.

Drafted with Claude (Anthropic); reviewed and tested by the committer.
2026-10-01 16:55:18 +02:00
Niklas Herder
6e0aea0eb2 config: group cursor hiding into CursorHideConfig
Replaces the flat cursor_hide_timeout key with a grouped cursor_hide key
carrying the idle, fullscreen-idle, typing and touch triggers, plus the
pure decision function the compositor's idle timer evaluates on fire.

The fullscreen timeout shortens the global one rather than replacing it,
so an unset fullscreen timeout cannot suppress an enabled global one.

Drafted with Claude (Anthropic); reviewed and tested by the committer.
2026-10-01 16:55:18 +02:00
Frederic Laing
b975370968 debian: add just to Build-Depends 2026-10-01 15:14:34 +02:00
Frederic Laing
af025856c7 build: migrate from make to just 2026-10-01 15:14:34 +02:00
Hojjat
d8e4683be8 fix(ci): use the correct toolchain version 2026-10-01 12:12:49 +02:00
Hojjat
ed7814e51e fix: set keyboard focus on touch target (similar to tablet/pointer) 2026-10-01 11:40:53 +02:00
Netflate
467d1fbc7f image-copy: Prioritize ARGB/XRGB dmabuf formats
Co-authored-by: back-design <271796486+back-design@users.noreply.github.com>
2026-10-01 11:33:32 +02:00
Netflate
e7b65b1fc8 image-copy: Fix non-deterministic dmabuf format order 2026-10-01 11:33:32 +02:00
Jeremy Soller
4d854ecb94 COSMIC policy update
Generated by cosmic-epoch scripts/policy-update.sh. Uses `policy_nobuild` branch to avoid package builds as it contains no code changes.
2026-09-30 09:55:29 -06:00
Hojjat
9f746ea3ff fix: the logic for resize direction in tiling mode 2026-09-25 17:01:54 +02:00
30d8868cca chore: fige Cargo.lock (epoch-1.9.0, [patch] locaux)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 21:03:54 +02:00
51c6cfedf6 merge: epoch-1.9.0 d'upstream
# Conflicts:
#	Cargo.lock
2026-09-24 20:48:00 +02:00
dev-goalz
e5010c23c9 fix: don't wake displays on input device removal, count input wakes as activity
A sleeping wireless keyboard relit blanked displays and idle never re-armed.

Written with assistance from Claude Opus 5.0. Reviewed, built and tested by the
author, who understands the changes in full.
2026-09-24 15:56:32 +02:00
Hojjat
f60d2c8436 fix: remove the hovered state from menu item on pointer leave 2026-09-24 15:47:37 +02:00
Hojjat
58837e27b8 fix: send pointer leave to root menu if no sub menu is open 2026-09-24 15:47:37 +02:00
Hojjat
6645edff64 fix: clear sticky windows, or floating windows focus hint if focus moves 2026-09-24 15:47:22 +02:00
Ashley Wulber
0fbd4574ef fix: skip loading shortcuts for kiosk mode 2026-09-22 17:12:28 -06:00
Hojjat
d36480c1b5 fix: only unmaximize on activation if maximized != target 2026-09-22 16:55:54 -06:00
Hojjat
50c170c355 fix: only cancel grabs the compositor started for its own interactions 2026-09-22 16:10:23 -04:00
Hojjat
26daf75d93 fix: forward release for modifier-only bindings 2026-09-22 14:22:06 +02:00
Flori Ava Star Weber
cd881a4df2 cli: change incorrect text -v to -V 2026-09-21 13:17:44 +02:00
Hojjat
651f701f84 shell/focus: Don't dismiss grabbing popups of exclusive layer surfaces 2026-09-16 11:04:07 -06:00
Ian Douglas Scott
a7349b72e3 Add cosmic-session-lock-layer-v1 protocol
https://github.com/pop-os/cosmic-protocols/pull/88
2026-09-11 14:38:07 -06:00
Ian Douglas Scott
f9e02f4321 Add comments to functions that iterate over surfaces
These should be kept in sync with `render_input_order_internal`.
2026-09-11 14:38:07 -06:00
a103e7619b chore: fige Cargo.lock 2026-09-10 18:12:37 +02:00
a69f659983 Merge tag 'epoch-1.8.0' into local/yoda-main
Epoch 1.8.0

# Conflicts:
#	Cargo.lock
2026-09-10 17:57:28 +02:00
apassert
a55785993e config: sort outputs by connector for deterministic fallback layout
When no saved configuration matches the current output set, positions
were assigned in hotplug/registration order. On hotplug races (e.g.
reconnecting monitors through a KVM switch) outputs can appear in
arbitrary order, producing a swapped left/right layout that then gets
persisted to outputs.ron, poisoning all future reconnects.

Sort outputs by connector name before generating fallback positions so
the layout is deterministic regardless of arrival order.

AI disclosure: implemented with the assistance of an LLM coding agent,
directed, reviewed, and tested by the author.

Signed-off-by: apassert <249084898+apassert@users.noreply.github.com>
2026-09-09 15:54:44 +02:00
Aleksandr Kosachev
7d1daab7bc fix: remove foreign toplevel handle too 2026-09-08 23:50:31 +02:00
Victoria Brekenfeld
6026520bd3
Merge pull request #2832 from weblate/weblate-pop-os-cosmic-comp 2026-09-08 17:13:58 +02:00
Hosted Weblate
8ad541dbe3
i18n: translation updates from weblate
Co-authored-by: Quentin PAGÈS <quentinantonin@free.fr>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-comp/oc/
Translation: Pop OS/COSMIC Comp
2026-09-08 16:51:34 +02:00
haydonryan
f61c0f9f76 tabs: avoid two HashSet allocations in tab-change detection
Replace the symmetric_difference over two freshly-materialized HashSets
with direct contains_key lookups on the existing key sets. Semantically
identical (set difference non-empty iff any key is in exactly one set) but
removes two heap HashSet allocations plus hashing of every key on each
widget update. Also drops the now-unused HashSet import.

Implements compact-idiomatic-code-20 from the cosmic-comp optimization
report. Created with the help of DeepSeek V4 Flash.
2026-09-07 15:42:06 +02:00
Hojjat
0f56d214b9 chore: clippy fixes 2026-09-05 01:16:34 +02:00
Hojjat
057e7b72cc chore: remove the gaurd against large paddings 2026-09-04 16:05:57 -04:00
Hojjat
e8caf335b3 refactor: align the corner radii order with the theme
It's [TL, TR, BR, BL] everywhere now
2026-09-04 13:43:40 +02:00
Victoria Brekenfeld
f8344126a1 input: Update the pointer state on absolute pointer events as well 2026-09-03 21:00:11 +02:00
Victoria Brekenfeld
bd0b834128 element/stack: Use correct serial for tablet grabs 2026-09-03 21:00:11 +02:00
Victoria Brekenfeld
1c8a0070c0 element/stack: Handle touch (and tablet) inputs on tabs 2026-09-03 21:00:11 +02:00
Victoria Brekenfeld
e563dc85bf input: Don't update pointer position on proximity_out 2026-09-03 21:00:11 +02:00
Victoria Brekenfeld
2a3b4dca5f shell: fix client initiated tablet grabs 2026-09-03 21:00:11 +02:00
Victoria Brekenfeld
0e15b14ab2 utils/iced: Fix tablet serials and buttons 2026-09-03 21:00:11 +02:00
Victoria Brekenfeld
6bf75e1c10 shell: Handle Tablet grabs 2026-09-03 21:00:11 +02:00
Victoria Brekenfeld
bb95a57f5a move: Make sure to always unset tool grab 2026-09-03 21:00:11 +02:00