iced_core/settings.rs: drop dead `From<Settings> for iced_winit::Settings`
impl gated behind a `winit` feature that doesn't exist on iced_core (and
shouldn't — that would invert the dep direction). The impl was
unreachable code.
iced_wgpu/window/compositor.rs: collapse the unused initial
`adapter_options` declaration into the only branch that uses it (the
fallback path that re-creates the instance with GL allowed). The
original allocation was always re-assigned before being read.
iced_wgpu/lib.rs: remove `Renderer::draw_overlay` — private debug method
with no caller anywhere in the workspace. cargo fix then dropped the
imports that became orphans (Color, Size, Vector, alignment).
Leyoda 2026 – GPLv3
- overlay/menu.rs:578: real bug fix — List::draw was rendering with
text::Wrapping::default() instead of the configured self.text_wrap.
Wiring it through eliminates the 'field never read' warning AND
honors the wrap setting that was being silently dropped.
- slider.rs:735-744: replace `if let Ok(x) = …try_into() { … }` with
irrefutable `let Ok(x) = …try_into();` (the conversion is provably
Infallible at the call site). Same behavior, no compiler noise.
- lazy.rs:8 / lazy/component.rs:13: drop unused
`iced_renderer::core::widget::Operation` imports.
Leyoda 2026 – GPLv3
Removed code paths inherited from past refactors that no longer have any
reader:
- ViewFn type alias (window.rs)
- a11y_enabled flag and resized flag (lib.rs) — assigned but never read
- BootConfig.fonts/graphics_settings/is_wayland — already passed to
run_instance(...) directly; the BootConfig copies were never read
- Runner.system_theme oneshot::Sender — stored but no producer ever
wired; receiver side already falls back to default
- event_loop/control_flow.rs — local ControlFlow enum, all callers use
winit::event_loop::ControlFlow
- event_loop/proxy.rs — Proxy<Message> never constructed
- Error::Connect(ConnectError) variant — never constructed
- Common.has_focus / ime_pos / ime_size — never read after assignment
- SctkPopupData.grab — replicated settings.grab, never read back
- SubsurfaceEventVariant::Created.surface field — destructure does
`surface: _` everywhere, the value is unused
Visibility tightening:
- a11y.rs WinitActivationHandler / WinitActionHandler /
WinitDeactivationHandler: pub proxy → pub(crate) proxy
- conversion::touch_event: pub → private (no external callers)
- proxy::Proxy:🆕 pub → pub(crate)
Allow attributes (intentional, not warning-suppression):
- conversion::RawImage: #[allow(dead_code)] — fields kept for
IconProvider downcast-via-AsAny on winit's side
- event_loop::Error: #[allow(dead_code)] — variant payloads kept for
Debug, never inspected programmatically
- lib.rs Event<Message>: #[allow(hidden_glob_reexports)] — intentional
shadow of winit::event::Event coming from `pub use winit`
- window.rs/lib.rs: #[allow(deprecated)] on enable_ime/disable_ime/
process_event with TODOs for set_ime_* → request_ime_update and
try_next → try_recv migrations
Five orphan imports also removed (Hash/Hasher, BorrowMut, 3× Compositor).
Leyoda 2026 – GPLv3
- conversion.rs: drop 4 duplicate Interaction arms (Cell/Move/Copy/Help)
that were already handled higher in the same match — pure dead code
from a past merge, not a real bug.
- platform_specific/wayland/mod.rs: migrate HasRawDisplayHandle →
HasDisplayHandle (display_handle().map(|h| h.as_raw())).
- conversion.rs: #[allow(deprecated)] on key_code/winit_key_code — the
warning suggests Meta but no Meta variant exists in this enum
(only MetaLeft/MetaRight, which aren't equivalent to Super).
- window.rs: #[allow(deprecated)] on enable_ime/disable_ime with TODO
to migrate set_ime_* → request_ime_update(ImeRequest::*).
- lib.rs: #[allow(deprecated)] on process_event with TODO to migrate
try_next → try_recv (futures-channel API change).
Leyoda 2026 – GPLv3
Replace pop-os/window_clipboard sctk-0.20 (no wayland feature) with
forge.aditua.com/leyoda/window_clipboard branch yoda-x11-optional. This
removes the need for cosmic-files' [patch] redirect to a local path and
makes libcosmic build standalone again.
Leyoda 2026 – GPLv3
Two one-line workspace-dep fixes that drop the last remaining X11 crates
for Wayland-only builds:
- softbuffer: its default = [kms, x11, x11-dlopen, wayland, wayland-dlopen]
pulled tiny-xlib + as-raw-xcb-connection unconditionally even though
iced_tiny_skia only needed softbuffer/wayland. Disabling the default
lets iced_tiny_skia's own feature propagation ask for just wayland +
wayland-dlopen.
- window_clipboard: upstream pulled clipboard_x11 + clipboard_wayland
unconditionally on unix. Our local fork (branch yoda-x11-optional)
gates clipboard_x11 behind an opt-in feature, so default-features=false
+ features=["wayland"] drops ~500 x11 symbols (clipboard_x11, x11rb,
x11rb-protocol).
Combined with previous yoda-v4 cuts, cosmic-yoterm goes from
1526 -> 43 x11 symbols (-97%), and 55.4 MB -> 53.3 MB (-2.1 MB).
iced_wgpu's unix block unconditionally depended on as-raw-xcb-connection,
tiny-xlib and x11rb for a DRI3 device-id fallback in
window/compositor.rs that only fires when wayland can't determine the
GPU. On a Wayland-only build this code path never runs, so the deps
are pure bloat.
Changes:
- Cargo.toml: move the 3 x11 crates to optional + new feature `x11`
(not in default — wayland-only is the yoda target; users who need
X11 opt in).
- window.rs: cfg-gate `mod x11;` on feature = "x11"
- window/compositor.rs: cfg-gate `use super::x11::get_x11_device_ids`
+ the or_else fallback on feature = "x11" (wrapped in a let-binding
so the non-x11 branch compiles cleanly).
Result: iced_wgpu no longer pulls any x11 crate when built without
the feature.
Was pulling winit's full x11 backend (winit-x11 + x11-dl) unconditionally
despite iced_winit's own x11 feature being disabled. Fixed by adding
default-features=false on the workspace-level winit dep — iced_winit/wayland
+ wayland-dlopen propagate to winit/wayland + wayland-dlopen as needed.
`hypot` while useful for most of the cases, may break sorting
assumptions like deterministic comparison.
As seen in: https://github.com/pop-os/cosmic-launcher/issues/352
Add and use a new method that trades the performance for more
determinism.
- At least, following apps are using `single-instance` feature:
- cosmic-launcher
- cosmic-app-library
- Once libcosmic text widgets supported the IME, these apps start hitting following methods of SctkWinitWindow which is `todo!()` and will crash at startup:
- `set_ime_cursor_area()`
- `set_ime_allowed()`
- `set_ime_purpose()`
- So, this PR implements these method utilizing following wayland protocols.
- zwp_text_input_v3
- zwp_text_input_manager_v3