From eef4cc6b2b18275486e6ba00c2e07e1392e0c8c0 Mon Sep 17 00:00:00 2001 From: Harald Date: Fri, 9 Oct 2026 09:33:13 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20App-Symbol=20f=C3=BCr=20das=20laufende?= =?UTF-8?q?=20Fenster?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fenster meldet die App-Kennung eu.pansi.ink-notes (Wayland: app_id, X11: WM_CLASS), passend zur .desktop-Datei (StartupWMClass): Dock und Taskleiste zeigen das ink-notes-Symbol statt eines allgemeinen Symbols - Unter X11 zusätzlich das eingebaute Symbol als Fenstersymbol (64 × 64) - Fenstertitel ohne Werbezusatz Co-Authored-By: Claude Opus 5.5 --- packaging/eu.pansi.ink-notes.desktop | 2 +- packaging/ink-notes.desktop | 2 +- src/main.rs | 35 +++++++++++++++++++++++----- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/packaging/eu.pansi.ink-notes.desktop b/packaging/eu.pansi.ink-notes.desktop index 873f30f..4d05e3d 100644 --- a/packaging/eu.pansi.ink-notes.desktop +++ b/packaging/eu.pansi.ink-notes.desktop @@ -9,7 +9,7 @@ Terminal=false Type=Application Categories=Office;Graphics;Utility; Keywords=Note;Notiz;Pen;Stift;Ink;Inking;Stylus;Drawing;Zeichnen;PDF;Vector;Text;Annotation; -StartupWMClass=ink-notes +StartupWMClass=eu.pansi.ink-notes MimeType=application/x-inknotes; Actions=NewWindow; diff --git a/packaging/ink-notes.desktop b/packaging/ink-notes.desktop index 873f30f..4d05e3d 100644 --- a/packaging/ink-notes.desktop +++ b/packaging/ink-notes.desktop @@ -9,7 +9,7 @@ Terminal=false Type=Application Categories=Office;Graphics;Utility; Keywords=Note;Notiz;Pen;Stift;Ink;Inking;Stylus;Drawing;Zeichnen;PDF;Vector;Text;Annotation; -StartupWMClass=ink-notes +StartupWMClass=eu.pansi.ink-notes MimeType=application/x-inknotes; Actions=NewWindow; diff --git a/src/main.rs b/src/main.rs index 56a4d66..0e56934 100644 --- a/src/main.rs +++ b/src/main.rs @@ -37,6 +37,23 @@ use ink_notes::storage::{self, NotebookManifest}; use ink_notes::ui::{self, ActiveTool, UiAction, UiState}; use ink_notes::updater::UpdaterController; +/// Kennung der App (Name der .desktop-Datei und des Symbols). +const APP_ID: &str = "eu.pansi.ink-notes"; + +/// Fenstersymbol aus dem eingebauten App-Symbol, auf 64 × 64 Pixel verkleinert: In voller +/// Größe (256 × 256) überschreitet es die Größe einer einzelnen X11-Anfrage und fehlt dann. +fn app_icon() -> Option { + const SIZE: u32 = 64; + let image = image::load_from_memory(include_bytes!("../assets/ink-notes.png")).ok()?; + let small = image::imageops::resize( + &image.into_rgba8(), + SIZE, + SIZE, + image::imageops::FilterType::Triangle, + ); + winit::window::Icon::from_rgba(small.into_raw(), SIZE, SIZE).ok() +} + /// Platz schaffen: Druck auf das Blatt (physische Pixel) setzt die Ansatzhöhe auf der /// aktuellen Seite. `false` neben dem Blatt oder auf einer PDF-Seite. fn space_press( @@ -1099,12 +1116,18 @@ fn main() -> Result<(), Box> { DisplayBackend::Automatic => {} } let event_loop = event_loop_builder.build()?; - let window = Arc::new( - WindowBuilder::new() - .with_title("ink-notes (Latenzoptimiertes Linux-Inking)") - .with_inner_size(winit::dpi::LogicalSize::new(1280.0, 850.0)) - .build(&event_loop)?, - ); + // App-Kennung wie die .desktop-Datei (eu.pansi.ink-notes): Daran ordnen Dock und Taskleiste + // das Fenster dem App-Symbol zu (Wayland: app_id, X11: WM_CLASS). Das Fenstersymbol selbst + // nutzt nur X11. + let builder = WindowBuilder::new() + .with_title("ink-notes") + .with_inner_size(winit::dpi::LogicalSize::new(1280.0, 850.0)) + .with_window_icon(app_icon()); + let builder = + winit::platform::wayland::WindowBuilderExtWayland::with_name(builder, APP_ID, "ink-notes"); + let builder = + winit::platform::x11::WindowBuilderExtX11::with_name(builder, APP_ID, "ink-notes"); + let window = Arc::new(builder.build(&event_loop)?); let mut canvas = match pollster::block_on(CanvasState::new(window.clone())) { Ok(canvas) => canvas,