Commit graph

237 commits

Author SHA1 Message Date
8d1d873918 yoda: drop x11 defaults on iced_winit + iced_tiny_skia
Dep chain audit showed winit, iced_winit and iced_tiny_skia all had
"x11" in their default features. Even though our Wayland-only build
doesn't use any X11 code path, the defaults were propagating through
cargo feature unification — winit-x11, tiny-xlib, x11-dl, etc. were
all being linked.

Fix, at the dep declaration level:
- [dependencies.iced_winit] default-features = false + wayland/wayland-dlopen
- [dependencies.iced_tiny_skia] default-features = false + wayland
- iced submodule's workspace winit = { ..., default-features = false }

Result on cosmic-yoterm binary:
- size:  55.4 MB -> 53.8 MB (-1.6 MB, ~3%)
- winit symbols: 2151 -> 1340 (-811)
- x11 symbols:   1526 -> 503  (-1023)

Remaining x11 footprint (~500 symbols):
- clipboard_x11 / x11rb: window_clipboard pulls both x11 + wayland
  backends unconditionally on unix targets. Would need forking
  window_clipboard to gate x11 behind a feature.
- tiny-xlib / as-raw-xcb-connection: low-level window-handle bindings
  pulled by wgpu/softbuffer even when no X11 windows ever exist.
  Dead code at runtime, probably best left alone until wgpu/raw-window-handle
  upstream make these optional.
2026-04-24 06:00:03 +02:00
8ab7b15807 yoda-v2: color_picker Theme ref + context_menu/menu ungate winit
Two perf + correctness wins packaged as +yoda-v2 (version bump 0.1.0-yoda
-> 0.1.0-yoda.2):

1. color_picker::draw() — use the theme: &Theme parameter already passed
   to draw() instead of THEME.lock().unwrap().clone() which cloned the
   whole Theme on every redraw (src/widget/color_picker/mod.rs:622).
   Upstreamable.

2. Dropped feature = "winit" from 21 combined cfg attrs in context_menu.rs,
   menu/menu_bar.rs, menu/menu_inner.rs. These triple-gates (wayland +
   winit + surface-message) were silently disabling all context-menu and
   menubar popup creation in yoda apps (which don't activate the winit
   feature). Now the code only gates on wayland + surface-message, which
   is our actual runtime path. Matches the ungate we already did on
   surface/action.rs in Phase 3d.

cargo check --lib passes. All 4 consumer apps rebuilt + installed as
+yoda-v2 (backup of previous yoda binaries in .pre-yoda-v2 siblings).
2026-04-23 18:43:52 +02:00
3e23d08728 yoda: re-apply hard rename — libcosmic → libcosmic-yoda (0.1.0-yoda)
Reverts the soft-fork pivot (6736a596). Strategy chosen with user:
full cascade fork. Every consumer (leyoda/cosmic-files + each leyoda/app)
depends on libcosmic-yoda by explicit path, so there are no transitive
deps left asking for the upstream 'libcosmic' crate — no [patch]
unification issues, no two-version traps.

Changes:
- Cargo.toml: name = libcosmic-yoda, version = 0.1.0-yoda
- i18n/*/libcosmic.ftl -> libcosmic_yoda.ftl (71 locales)
- examples/*/Cargo.toml dep refs back to libcosmic-yoda
- compat stub features (winit=[], x11=[]) kept for upstream deps that
  might still request them during the migration window

cargo check --lib passes.
2026-04-23 15:32:29 +02:00
6736a596ac yoda: soft-fork pivot — keep Cargo name "libcosmic" for dep unification
The initial hard rename (255cf7cc) broke because Cargo's [patch] with
`package = libcosmic-yoda` does NOT unify across the transitive graph.
cosmic-files (still upstream) asks for "libcosmic"; patched with a
renamed package it ends up as a separate crate, leading to two copies
of cosmic::Theme/Action with incompatible types.

Soft fork keeps the yoda identity where it counts and stays compatible:
- Cargo name  : libcosmic (for patch/unification)
- Version     : 1.0.0 (same major as upstream so [patch] semver-accepts it)
- Lib name    : cosmic (unchanged)
- Repo        : leyoda/libcosmic-yoda on Forgejo (yoda lineage)
- Branch      : main (vs upstream master)

Revert parts:
- examples/*/Cargo.toml dep refs back to libcosmic
- i18n/*/libcosmic_yoda.ftl renamed back to libcosmic.ftl

Added:
- Compat stub features: winit = [], x11 = [] — empty so Cargo can satisfy
  upstream deps asking for these, but no code is actually gated on them
  any more (all removed in Phase 2).

Ungates done to make the Wayland path self-sufficient after winit removal:
- src/lib.rs: pub mod app + pub use Application/ApplicationExt no longer
  gated on winit; prelude exports ApplicationExt unconditionally
- src/surface/action.rs: 6 functions had #[cfg(all(wayland, linux, winit))]
  triple-gates; simplified to #[cfg(all(wayland, linux))] since winit is
  no longer a meaningful gate (wayland is now the only shell)
- 12 standalone #[cfg(feature = "winit")] annotations removed from src/
  (their gated code is now always compiled)

cargo check --lib + cargo check in cosmic-yoterm both pass with a single
libcosmic v1.0.0 in the tree.
2026-04-23 15:05:31 +02:00
8701aa31d8 feat(yoda): Wayland-only cut — drop winit and x11 features
Part of the yoda fork direction: libcosmic-yoda is Wayland-only going forward.

Cargo.toml changes:
- default features: remove winit, x11, iced-wayland, multi-window -> add wayland
- applet feature: remove winit dep
- merge iced-wayland into wayland (simpler feature graph)
- remove winit, winit_debug, winit_tokio, winit_wgpu, x11, iced-wayland features
- keep iced_winit dep (it's a misnomer — also hosts the wayland/cctk runtime)

Workspace:
- examples/* excluded (many depend on winit/x11) — revisited in a later phase

Behavior:
- Library builds clean in release with default features (cargo check + cargo build --release --lib OK)
- 58 lines in src/ gated on feature "winit" become unreachable (dead-code warnings — cleanup deferred)
- 108 lines gated on feature "wayland" now always active via default

--all-features is known-broken because tokio/async-std/smol are mutually
exclusive — this is pre-existing, not a Phase 2 regression.
2026-04-23 14:29:08 +02:00
255cf7cc0b rename: libcosmic → libcosmic-yoda (fork 0.1.0-yoda)
Fork point: pop-os/libcosmic 1.0.0 + perf/quickwins-bundle + macOS
window controls feature. From here the crate diverges under the yoda
lineage with its own versioning.

Changes:
- Cargo.toml: name = libcosmic-yoda, version = 0.1.0-yoda
- [lib] name = cosmic kept unchanged — consumer code still does 'use cosmic::...'
- examples/*/Cargo.toml: updated all libcosmic dep references to libcosmic-yoda
- i18n/*/libcosmic.ftl renamed to libcosmic_yoda.ftl (71 locales) to match
  the new name expected by fluent_language_loader!() macro

cargo check --lib passes. Examples not yet validated — Phase 2 (Wayland-only
cut) will rework them anyway.
2026-04-23 07:35:22 +02:00
Hojjat
3d8d8915be chore: enable ico and xpm image support for desktop feature 2026-04-15 13:10:25 +02:00
Ian Douglas Scott
46d9f0c344 widget/icon: Bundle icons on macOS, not just Windows 2026-04-14 21:46:05 +02:00
Hojjat
ab3eedd0f2 chore: update iced
This pulls in the fix in cosmic-text to fallback to the default
SansSerif if there are missing glyphs in basic shaping.

Also removes advanced-shaping from the default features list.
2026-04-06 15:15:30 -04:00
Ashley Wulber
34219d1fd4 chore: wgpu cctk feature for wayland 2026-04-03 20:15:31 +02:00
Ashley Wulber
b0f4e931f2 fix: font issues
some fonts are not falling back when a glyph is missing for a selected font and weight
2026-04-03 16:17:44 +02:00
Ashley Wulber
413e63f62a chore: update features and feature gates 2026-03-30 22:25:27 -04:00
Vukašin Vojinović
54bcb9ec12
chore: update dependencies and examples 2026-03-18 15:54:07 +01:00
Ashley Wulber
0bfda2e28c chore: update deps and test fixes 2026-03-04 12:04:33 -05:00
Ashley Wulber
e8d53b14ea chore: various fixes and some cleanup 2026-03-04 12:04:32 -05:00
Ashley Wulber
e10459fb37 wip rebase updates 2026-03-04 12:04:32 -05:00
Vukašin Vojinović
990e2e291b refactor(calendar): use jiff instead of chrono
This refactors the calendar widget to use `jiff` instead of `chrono`.
Also mostly matches the design of the widget to the time applet.
2026-02-17 21:18:55 +01:00
Vukašin Vojinović
cf19ac665f chore: update dependencies 2026-01-27 18:07:35 -07:00
Michael Aaron Murphy
03c440b97a
chore(cargo): update all crate dependencies 2026-01-14 18:46:53 +01:00
Michael Aaron Murphy
e9bb5ed97d
chore: update freedesktop-desktop-entry 2026-01-06 02:25:11 +01:00
Kyle Scheuing
80875d5962
fix: compiling on windows requires cosmic-icons in project root
* fix: compiling on windows requires cosmic-icons in project root

crabtime provides crabtime::WORKSPACE_PATH to refer to the
CARGO_MANIFEST_DIR of the top level crate being built, which means when
building libcosmic directly, crabtime::WORKSPACE_PATH will work, but
when building it as a dependency of another crate,
crabtime::WORKSPACE_PATH will no longer refer to the path to libcosmic.

I don't think there's a good workaround, since when in the context of
crabtime, CARGO_MANIFEST_DIR refers to the path to the crate generated
by crabtime rather than to libcosmic.

This replaces crabtime with a simple build.rs script that generates a
file in OUT_DIR.

* fix: do not generate icon bundle for unix targets

---------

Co-authored-by: Michael Aaron Murphy <michael@mmurphy.dev>
2025-12-04 17:31:47 +01:00
Michael Aaron Murphy
639326fcc3 feat(icon): optimize & bundle icons with crabtime for non-unix platforms 2025-11-21 18:37:49 +01:00
Stephan Buys
7f321cb0a3 segmented button: support tab drag + drop 2025-11-20 22:33:13 +01:00
Stephan Buys
690f1d331d
feat(desktop): add DesktopEntryCache and unit tests for known problematic entries 2025-11-13 16:02:12 +01:00
Ashley Wulber
2296e8e94d
feat(applets): configurable applet overlap and padding increases 2025-11-11 21:04:09 +01:00
Michael Aaron Murphy
6a0c06a368 chore: update taffy crate to crates.io release 2025-09-30 22:31:43 +02:00
Michael Aaron Murphy
df9df40963 chore(about): drop license dependency
Not needed since the application can already give URLs to their license
2025-09-30 22:31:32 +02:00
Ashley Wulber
4a71189d34 chore: update cosmic-protocols 2025-09-30 11:41:36 -04:00
Ashley Wulber
7015b8ace4 chore: update iced 2025-09-30 10:59:51 -04:00
Ashley Wulber
9815d4d981 feat(wayland): corner-radius protocol support 2025-09-30 10:59:51 -04:00
Vukašin Vojinović
e568122083 fix(context_drawer): title alignment
Something caused text alignment to break, so this gets around it by wrapping the text in a container.
2025-09-11 10:49:26 -04:00
Vukašin Vojinović
066999586b
feat: add i18n support for libcosmic widgets 2025-09-05 18:50:25 +02:00
Vukašin Vojinović
ea349aca82 chore: use std::syncLazyLock
Also migrates workspace members to Rust 2024.
2025-09-03 21:54:46 +02:00
Vukašin Vojinović
b72b15d719 chore: update dependencies 2025-09-03 21:54:46 +02:00
Ashley Wulber
f5f7c14f03 chore: update cctk 2025-09-03 19:33:34 +02:00
Michael Aaron Murphy
e7b7c3a126 improv: enable dbus-config by default, but only for Linux targets 2025-08-20 17:31:26 +02:00
Friedrich
562e885872 Make ashpd optional for async-std feature 2025-08-06 09:15:00 -06:00
wiiznokes
5e136f9499
fix!(windows): remove desktop dependency for the about feature
BREAKING CHANGE: Icon must be provided as a handle instead of a string.
2025-07-28 16:33:22 +02:00
Ashley Wulber
00ba16fe01 refactor(menu): fallback behavior for non wayland windowing system 2025-06-12 10:21:45 -06:00
Michael Aaron Murphy
8edbbec1e8
fix!(desktop): support launching terminal-based desktop entries 2025-06-11 09:26:18 +02:00
Ian Douglas Scott
b61a7ebd5f
chore: update rfd and ashpd 2025-05-23 01:48:57 +02:00
Ian Douglas Scott
25322e0263
feat!: update zbus from 4.x to 5.x 2025-05-23 00:02:23 +02:00
Michael Aaron Murphy
6763abec41
chore(cargo): update fde to 0.7.11 2025-04-30 17:13:59 +02:00
Juniper
e5802b535b
chore: add highlighter feature for iced 2025-04-24 17:26:33 +02:00
Michael Aaron Murphy
f7d22446c1
fix: update imports for fde and fd-icons 2025-04-04 02:37:35 +02:00
Michael Aaron Murphy
9b9600a5d6
fix(desktop): matching the wrong desktop enrties and not getting icons 2025-04-04 01:56:19 +02:00
Michael Aaron Murphy
92b2756e26
chore: update dependencies; including ron 0.9 2025-03-21 13:20:45 +01:00
Michael Aaron Murphy
77c3a8ed90
feat(task): add stream function 2025-03-21 13:20:45 +01:00
Ashley Wulber
202684d021
chore: update fde and iced 2025-03-19 20:46:12 +01:00
Ashley Wulber
337b80d4ca
feat: Tooltips and Better Surface Management 2025-03-14 16:56:21 +01:00