From 08086a0bb987bf5b18fe2ee0ae807852b757955f Mon Sep 17 00:00:00 2001 From: unsecretised Date: Sat, 28 Mar 2026 10:21:50 +0800 Subject: [PATCH] add ability to opt out of clipboard history --- src/app.rs | 1 + src/app/pages/settings.rs | 18 ++++++++++++++++++ src/app/tile/update.rs | 24 ++++++++++++++++++++---- src/config.rs | 2 ++ 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/app.rs b/src/app.rs index dc90071..160707b 100644 --- a/src/app.rs +++ b/src/app.rs @@ -124,6 +124,7 @@ pub enum SetConfigFields { ClipboardHotkey(String), PlaceHolder(String), SearchUrl(String), + ClipboardHistory(bool), HapticFeedback(bool), ShowMenubarIcon(bool), SetPage(MainPage), diff --git a/src/app/pages/settings.rs b/src/app/pages/settings.rs index 71742ba..5a04071 100644 --- a/src/app/pages/settings.rs +++ b/src/app/pages/settings.rs @@ -83,6 +83,23 @@ pub fn settings_page(config: Config) -> Element<'static, Message> { notice_item(theme.clone(), "Which search engine to use (%s = query)"), ]); + let theme_clone = theme.clone(); + let clipboard_history = Row::from_iter([ + settings_hint_text(theme.clone(), "Enable Clipboard history"), + checkbox(config.clone().cbhist) + .style(move |_, _| settings_checkbox_style(&theme_clone)) + .on_toggle(|input| Message::SetConfig(SetConfigFields::ClipboardHistory(input))) + .into(), + notice_item( + theme.clone(), + "If you want your clipboard history to be stored", + ), + ]) + .align_y(Alignment::Center) + .spacing(SETTINGS_ITEM_COL_SPACING * 2) + .padding(SETTINGS_ITEM_PADDING) + .height(SETTINGS_ITEM_HEIGHT); + let theme_clone = theme.clone(); let current_delay = config.debounce_delay; let debounce = settings_item_column([ @@ -396,6 +413,7 @@ pub fn settings_page(config: Config) -> Element<'static, Message> { debounce.into(), haptic.into(), tray_icon.into(), + clipboard_history.into(), auto_suggest.into(), show_scrollbar.into(), clear_on_hide.into(), diff --git a/src/app/tile/update.rs b/src/app/tile/update.rs index 8cac396..c9d8b89 100644 --- a/src/app/tile/update.rs +++ b/src/app/tile/update.rs @@ -345,9 +345,20 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { } Message::SwitchToPage(page) => { - tile.page = page; - let task = match tile.page { - Page::ClipboardHistory | Page::Settings => window::latest().map(|x| { + let task = match &page { + Page::ClipboardHistory => { + if !tile.config.cbhist { + return Task::none(); + } + window::latest().map(|x| { + let id = x.unwrap(); + Message::ResizeWindow( + id, + ((7 * 55) + 35 + DEFAULT_WINDOW_HEIGHT as usize) as f32, + ) + }) + } + Page::Settings => window::latest().map(|x| { let id = x.unwrap(); Message::ResizeWindow( id, @@ -357,6 +368,8 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { _ => Task::none(), }; + tile.page = page; + let refresh_empty_main_query = if tile.page == Page::Main { window::latest() .map(|x| x.unwrap()) @@ -477,6 +490,9 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { } Message::EditClipboardHistory(action) => { + if !tile.config.cbhist { + return Task::none(); + } match action { Editable::Create(content) => { if !tile.clipboard_content.contains(&content) { @@ -606,6 +622,7 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task { match config { SetConfigFields::ToggleHotkey(hk) => final_config.toggle_hotkey = hk, SetConfigFields::ClipboardHotkey(hk) => final_config.clipboard_hotkey = hk, + SetConfigFields::ClipboardHistory(cbhist) => final_config.cbhist = cbhist, SetConfigFields::Modes(Editable::Create((key, value))) => { final_config.modes.insert(key, value); } @@ -935,7 +952,6 @@ fn execute_query(tile: &mut Tile, id: Id) -> Task { } "cbhist" => { task = task.chain(Task::done(Message::SwitchToPage(Page::ClipboardHistory))); - tile.page = Page::ClipboardHistory; } "main" => { if tile.page != Page::Main { diff --git a/src/config.rs b/src/config.rs index 667fa76..cddb839 100644 --- a/src/config.rs +++ b/src/config.rs @@ -25,6 +25,7 @@ pub struct Config { pub placeholder: String, pub search_url: String, pub haptic_feedback: bool, + pub cbhist: bool, pub show_trayicon: bool, pub shells: Vec, pub modes: HashMap, @@ -44,6 +45,7 @@ impl Default for Config { theme: Theme::default(), placeholder: String::from("Time to be productive!"), search_url: "https://duckduckgo.com/search?q=%s".to_string(), + cbhist: true, haptic_feedback: false, show_trayicon: true, main_page: MainPage::default(),