Commit graph

176 commits

Author SHA1 Message Date
82e00a3e16 chore: align applets with local stack 2026-05-26 09:20:01 +02:00
Votre Nom
6fe087f4fd fix(wayland): graceful exit on compositor disconnect
Replace 3 panicking unwrap() in cosmic-app-list/wayland_handler.rs
(event loop dispatch + 2 conn.flush in screencopy) with logged
errors that break/return None instead.

Wrap cosmic-applets/main.rs entry point in panic::catch_unwind to
catch panics propagating from libcosmic/iced/winit (which we cannot
patch locally without forking) when the COSMIC compositor closes
the Wayland connection at logout. This eliminates the cascade of
~12 SIGABRT coredumps observed at session shutdown.

Panic strategy is unwind (default), catch_unwind is sound here.

Leyoda 2026 – GPLv3
2026-05-26 09:17:36 +02:00
0fa93ba21f yoda: smooth animated fisheye for dock hover (phase B v3, closes b)
Inter-icon hover changes were snapping because icon_scale_for read the
hovered icon's real rectangle directly. This adds a small animation
layer so the bell center lerps toward the target and the whole effect
fades in/out at the dock's edges.

CosmicAppList gains three fields:
- anim_hover_center: Option<(f32, f32)> — virtual cursor position,
  chases the hovered icon's center across ticks.
- anim_hover_intensity: f32 (0..1) — global fade-in/out of the
  fisheye. Target 1.0 while a dock icon is hovered, 0.0 otherwise.
- anim_last_tick: Option<Instant> — for dt-based exponential smoothing
  (time-constant tau = 60ms, ~99% of target reached in ~120ms).

A new Message::AnimTick(Instant) is emitted at ~60 fps by a
conditional iced::time::every subscription — only active when the
pointer is over a dock icon OR intensity hasn't faded back to ~0 yet,
so the panel stays idle when no one is hovering the dock.

icon_scale_for now reads anim_hover_center instead of rectangles[hovered]
and multiplies the bell's peak by anim_hover_intensity. Behaviour:
- Pointer slides A → B: bell glides continuously, both icons animate.
- Pointer enters dock: icons inflate smoothly over ~120 ms.
- Pointer leaves dock: icons deflate smoothly over ~120 ms.

Fallback paths (first frame, missing rectangles) still respond
instantly so the feature never looks 'stuck' before the animation
kicks in.
2026-05-26 09:17:36 +02:00
8fc11581ad yoda: fisheye magnification for dock hover (phase B v2 / c)
Replaces the binary 1.3× hover with a true gaussian bell curve — the
hovered icon still peaks at ~1.35×, but the ±1 neighbours also bulge
noticeably, ±2 a bit, and ±3+ relax to 1.0×. Footprint ~5 icons wide,
matching the macOS Dock fisheye feel.

Implementation in fn icon_scale_for(id):
- Reads the hovered icon's and the current icon's bounds from
  self.rectangles (already populated by the existing RectangleTracker
  subscription — no new plumbing).
- Distance = |this_center - hovered_center| along the panel's long axis
  (horizontal for Top/Bottom anchors, vertical for Left/Right).
- sigma = hovered_extent * 1.4 so the bell's half-width matches one
  icon width (neighbors clearly pulled, far icons untouched).
- scale = 1.0 + PEAK * exp(-(d/sigma)²) with PEAK = 0.35.
- Falls back to binary 1.35×/1.0× when rectangle data isn't populated
  yet (first render / resize) — visibly responsive even before the
  tracker catches up.

No widget signature changes vs v1, just a smarter formula. All five
as_icon call sites already pass the result of icon_scale_for so this
update propagates everywhere.

Still on the TODO list: smooth animation (b). Right now icon→icon
transitions snap instantly; a smoothed_hover_center + tick subscription
would lerp it. Deferred to a follow-up commit.
2026-05-26 09:17:36 +02:00
d090e60370 yoda: dock icon hover magnification (macOS Tahoe-style, phase B v1)
First pass at the signature macOS Dock effect — the icon under the
pointer grows, adjacent icons stay at base size. Full fisheye (smooth
bell-curve scaling on neighbors) can be a later iteration.

Changes in cosmic-app-list/src/app.rs:
- CosmicAppList gains a hovered_dock_item: Option<DockItemId>
  auto-initialized to None via #[derive(Default)].
- New Message::DockItemHover(Option<DockItemId>) handled in update()
  by just writing the field; view() then reads it to decide scale.
- DockItem::as_icon gains an icon_scale: f32 parameter. Inside it the
  cosmic_icon width/height = (base_icon_size * icon_scale) clamped
  to u16; indicator dot and other surrounding layout stay at base
  size so only the icon visually bulges.
- New App::icon_scale_for(id) helper: 1.3 if Some(id) == hovered,
  1.0 otherwise. Single place to tune the magnification factor.
- The two main dock rows (favorites + filtered_active_list) wrap
  their rendered applet_tooltip in widget::mouse_area with
  on_enter(DockItemHover(Some(id))) / on_exit(DockItemHover(None))
  and call icon_scale_for before rendering.
- The three remaining as_icon call sites (DnD preview, favorites
  overflow popup, active overflow popup) pass icon_scale = 1.0 —
  hover magnification on those surfaces would look jittery and isn't
  needed anyway.

Build: cargo build --release -p cosmic-app-list (≈ 7s). Binary
installed at /usr/local/bin/cosmic-app-list, backup kept as
.pre-magnification.
2026-05-26 09:17:36 +02:00
Ashley Wulber
1d0e662365 chore: cargo fmt 2026-04-16 15:27:25 -06:00
Ashley Wulber
e125ae0b58 update libcosmic after reexports are removed 2026-04-16 15:27:25 -06:00
Jeremy Soller
fa682cb812
feat(app-list): implement workspace and configured-output filtering (#1236) 2026-04-09 15:15:02 -06:00
Ashley Wulber
71d9d6d5bb
chore: updates after iced-rebase 2026-03-31 22:34:59 +02:00
José DE SOUSA
79621c1955 feat: add middle mouse button support to close toplevel applications 2026-03-26 17:04:36 -04:00
Vukašin Vojinović
7029fcccf6
Use ellipsizing and replace chrono with jiff (#1323)
* refactor(time): use `jiff` instead of `chrono`

* improv: use text ellipsizing
2026-03-03 15:57:49 -07:00
Levi Portenier
80836cb941
Merge branch 'master' into tobsch/app-list-filtering 2026-01-22 15:27:15 -07:00
Ashley Wulber
1ff85a8a1e chore: update dependencies 2026-01-09 21:41:16 +01:00
Tobias Schaffner
8ea267abfe feat(app-list): implement workspace and configured-output filtering
Implement optional filtering of apps by active workspace or configured
output. The filter_top_levels config option accepts None (no filtering),
ActiveWorkspace (workspace-only), or ConfiguredOutput (monitor and
workspace filtering).

Signed-off-by: Tobias Schaffner <tobiasschaffner87@outlook.com>
2026-01-01 17:57:25 +01:00
Vukašin Vojinović
7a2bad8f34 feat(app-list): close toplevel button 2025-12-30 08:34:00 +01:00
Ashley Wulber
3e4f68b3d0 fix(app-tray): window id for active list overflow icon buttons 2025-11-20 17:26:29 +01:00
Ashley Wulber
ba20b1268d fix(app-tray): overflow popup active list calculation 2025-11-20 17:26:29 +01:00
Ashley Wulber
836c0e378b applet overlap
chore: mpris dep

fix: dock buttons

improv: battery and audio improvements

feat: overlapping padding

fix: input source text button

fix: apply panel spacing to app tray

chore: update libcosmic

fix: spacing and padding

fix(minimize): hide when empty
2025-11-11 16:49:48 -05:00
Cheong Lau
5369b4eb29
perf: use rustc-hash for HashMap and HashSet 2025-10-22 04:33:30 +02:00
Vukašin Vojinović
8e57d5b165 chore: update dependencies 2025-10-08 12:30:43 -04:00
Vukašin Vojinović
09cc1bda81 fix(app-list): remove double indicators 2025-10-08 12:30:43 -04:00
Cheong Lau
dd0158d8f0 perf: refactor to reduce memory allocations and cpu work 2025-10-07 17:04:51 +02:00
Cheong Lau
8e0f1c4a09
chore: apply recommendations from clippy 2025-10-04 02:51:18 +02:00
Cheong Lau
d2e080427f
perf: replace rand with fastrand 2025-10-03 15:25:51 +02:00
Vukašin Vojinović
c54bf8e189 chore: update dependencies
Also removes unused dependencies from workspace members.
2025-09-10 17:23:35 +02:00
Vukašin Vojinović
2b7b4cba56 chore: update to Rust 2024 edition 2025-08-18 16:44:50 +02:00
Vukašin Vojinović
c3fafd3910 chore: use std::sync::LazyLock
Removes `once_cell` as a direct dependency.
2025-08-18 16:44:50 +02:00
ellieplayswow
e5bdc727db cargo fmt 2025-06-16 12:56:53 -04:00
ellieplayswow
68ac7ea809 fix(app_tray): on WaylandUpdate::TopLevel(Update), when the toplevel app_id changes, move into a new / existing dock item 2025-06-16 12:56:53 -04:00
Michael Aaron Murphy
5ac8605e7e
chore: update libcosmic 2025-06-11 17:16:11 +02:00
Ryan Brue
78e108ed7e Handle custom panel sizes in cosmic-app-list
With custom panel sizes, we use ranges that equal the values you would normally get from the hardcoded panel sizes
Update libcosmic

Signed-off-by: Ryan Brue <ryanbrue.dev@gmail.com>
2025-05-28 15:11:03 -04:00
Ashley Wulber
b4b4657122 fix(app-tray): reorder app tray elements with DnD shouldn't create extra items 2025-05-23 17:23:47 +02:00
Ashley Wulber
e50aa334f3 fix(app-tray): remove temporary icons and restore original after DnD leave event 2025-05-23 17:23:47 +02:00
ellieplayswow
8e52b79c0d
fix(app-list): add fallback logic for wine apps and non-steam proton games 2025-05-02 16:04:15 +02:00
Ashley Wulber
a49a040093 refactor: applet tooltips may be for an overflow window 2025-04-14 15:56:50 +02:00
Michael Aaron Murphy
39f9bb45ff
fix(app-list): missing app icons when an appid is not found 2025-04-14 14:18:04 +02:00
Michael Aaron Murphy
25263dad7d
fix: missing icons and actions from the dock 2025-04-04 02:30:03 +02:00
Ashley Wulber
c54ddeb38a chore: udpate libcosmic 2025-03-14 14:26:42 -04:00
Ashley Wulber
d29c756c3c feat: tooltips for app-list, minimize, and applet buttons 2025-03-14 14:26:42 -04:00
Ashley Wulber
0de336d0d7 update libcosmic: adds tooltip support 2025-03-14 14:26:42 -04:00
Ian Douglas Scott
7ba2ed0c53 Update to workspace v2, based on ext-workspace
In the workspace applet, this now uses `Workspace` in the front-end code
instead of a tuple with unnamed fields. Handling of scrolling is also
moved to the frontend, which uses less code and seems more natural. It
would be good to have a helper in libcosmic for this. It also changes
`ObjectId` to `ExtWorkspaceHandleV1`, which is a little simpler and I
see no reason here to avoid the more strongly typed object.

At some point we may want a shared subscription for workspaces in
multiple applets. As well as a higher-level abstraction for screen
capture.
2025-03-07 22:23:55 -08:00
Michael Aaron Murphy
dc86f23a73
chore: upgrade all dependencies 2025-02-19 18:31:56 +01:00
Ian Douglas Scott
e9848a2d4f Update for toplevel-info cctk changes
Requires pop-os/cosmic-protocols#49.

The duplication between applets, and
cosmic-workspace/xdg-desktop-portal-cosmic, should be moved to shared
abstractions. But that can be done after moving to
`ext-image-copy-capture`.

`ToplevelInfo` now contains both ext and cosmic handles, so the tuples
of handles and info are needed. Use just the info.
2025-02-13 12:29:39 -08:00
Michael Aaron Murphy
69fd2b62df chore: update libcosmic with mmap threshold fix 2025-02-12 20:21:02 +01:00
Ian Douglas Scott
4dc6f8b99f Use updated screencopy abstraction 2025-02-06 15:14:47 -08:00
Vukašin Vojinović
2c79ca44e2 fix(app-list): toplevel preview styling 2025-01-14 19:38:22 +01:00
Vukašin Vojinović
6b740c59be fix(app-list): use context menu radius from theme 2024-11-04 08:47:36 -05:00
Ashley Wulber
5b5cd77e7c update iced 2024-10-31 17:52:33 -04:00
Vukašin Vojinović
941cbf546b
fix: padding, spacing, context menu style, and settings buttons 2024-09-24 15:52:17 +02:00
wiiznokes
adc2c7e871
chore: update freedesktop-desktop-entry to 0.7.5 2024-09-09 14:34:36 +02:00