From 137256f7fa2d64e9695d654a3a19e74061af3d6e Mon Sep 17 00:00:00 2001 From: unsecretised Date: Wed, 14 Jan 2026 09:34:55 +0800 Subject: [PATCH 1/2] Add the ability to hide tray icon from tray icon menu --- src/app.rs | 1 + src/app/menubar.rs | 9 +++++++++ src/app/tile/update.rs | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/src/app.rs b/src/app.rs index 1106b51..d9acd0d 100644 --- a/src/app.rs +++ b/src/app.rs @@ -52,6 +52,7 @@ pub enum Message { ClearSearchResults, WindowFocusChanged(Id, bool), ClearSearchQuery, + HideTrayIcon, ReloadConfig, SetSender(ExtSender), SwitchToPage(Page), diff --git a/src/app/menubar.rs b/src/app/menubar.rs index bd19bf6..ff7f067 100644 --- a/src/app/menubar.rs +++ b/src/app/menubar.rs @@ -38,6 +38,7 @@ pub fn menu_icon(hotkey: (Option, Code), hotkey_id: u32, sender: ExtS &get_help_item(), &PredefinedMenuItem::separator(), &open_settings_item(), + &hide_tray_icon(), &quit_item(), ]) .unwrap(); @@ -71,6 +72,10 @@ fn init_event_handler(sender: ExtSender, hotkey_id: u32) { sender.clone().try_send(Message::ReloadConfig).unwrap(); }); } + "hide_tray_icon" => { + runtime + .spawn(async move { sender.clone().try_send(Message::HideTrayIcon).unwrap() }); + } "open_issue_page" => { open_url("https://github.com/unsecretised/rustcast/issues/new"); } @@ -101,6 +106,10 @@ fn version_item() -> MenuItem { MenuItem::new(version, false, None) } +fn hide_tray_icon() -> MenuItem { + MenuItem::with_id("hide_tray_icon", "Hide Tray Icon", true, None) +} + fn open_item(hotkey: (Option, Code)) -> MenuItem { MenuItem::with_id( "show_rustcast", diff --git a/src/app/tile/update.rs b/src/app/tile/update.rs index d92748e..ba3c722 100644 --- a/src/app/tile/update.rs +++ b/src/app/tile/update.rs @@ -2,6 +2,7 @@ use std::cmp::min; use std::fs; use std::path::Path; +use std::thread; use std::time::Duration; use global_hotkey::hotkey::HotKey; @@ -44,6 +45,14 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { tile.visible = true; Task::none() } + Message::HideTrayIcon => { + tile.tray_icon = None; + tile.config.show_trayicon = false; + let home = std::env::var("HOME").unwrap(); + let confg_str = toml::to_string(&tile.config).unwrap(); + thread::spawn(move || fs::write(home + "/.config/rustcast/config.toml", confg_str)); + Task::none() + } Message::SetSender(sender) => { tile.sender = Some(sender.clone()); From 123741fe35cde12838696480dc63a9ca7965b081 Mon Sep 17 00:00:00 2001 From: unsecretised Date: Wed, 14 Jan 2026 10:29:01 +0800 Subject: [PATCH 2/2] Fix rustcast crashing when arrow key pressed when 0 results are available --- src/app/tile/update.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/app/tile/update.rs b/src/app/tile/update.rs index ba3c722..3515174 100644 --- a/src/app/tile/update.rs +++ b/src/app/tile/update.rs @@ -212,12 +212,17 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { Message::ChangeFocus(key) => { let u32_len = tile.results.len() as u32; - match key { - ArrowKey::ArrowDown => tile.focus_id = (tile.focus_id + 1) % u32_len, - ArrowKey::ArrowUp => tile.focus_id = (tile.focus_id + u32_len - 1) % u32_len, - _ => {} + if u32_len > 0 { + match key { + ArrowKey::ArrowDown => tile.focus_id = (tile.focus_id + 1) % u32_len, + ArrowKey::ArrowUp => tile.focus_id = (tile.focus_id + u32_len - 1) % u32_len, + _ => {} + } + + operation::focus(format!("result-{}", tile.focus_id)) + } else { + Task::none() } - operation::focus(format!("result-{}", tile.focus_id)) } Message::OpenFocused => match tile.results.get(tile.focus_id as usize) {