Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/app/tile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ pub struct Tile {
pub config: Config,
/// The opening hotkey
hotkey: HotKey,
clipboard_hotkey: Option<HotKey>,
clipboard_content: Vec<ClipBoardContentType>,
tray_icon: Option<TrayIcon>,
sender: Option<ExtSender>,
Expand Down
4 changes: 4 additions & 0 deletions src/app/tile/elm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ pub fn new(hotkey: HotKey, config: &Config) -> (Tile, Task<Message>) {
emoji_apps: AppIndex::from_apps(App::emoji_apps()),
hotkey,
visible: true,
clipboard_hotkey: config
.clipboard_hotkey
.clone()
.and_then(|x| x.parse::<HotKey>().ok()),
frontmost: None,
focused: false,
config: config.clone(),
Expand Down
61 changes: 40 additions & 21 deletions src/app/tile/update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,29 +199,39 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task<Message> {
}

Message::KeyPressed(hk_id) => {
if hk_id == tile.hotkey.id {
let is_clipboard_hotkey = tile
.clipboard_hotkey
.map(|hotkey| hotkey.id == hk_id)
.unwrap_or(true);
let is_open_hotkey = hk_id == tile.hotkey.id;

let clipboard_page_task = if is_clipboard_hotkey {
Task::done(Message::SwitchToPage(Page::ClipboardHistory))
} else if is_open_hotkey {
Task::done(Message::SwitchToPage(Page::Main))
} else {
Task::none()
};

if is_open_hotkey || is_clipboard_hotkey {
if !tile.visible {
return Task::batch([open_window(), clipboard_page_task]);
}

tile.visible = !tile.visible;
if tile.visible {
Task::chain(
window::open(default_settings())
.1
.map(|_| Message::OpenWindow),
operation::focus("query"),
)

let clear_search_query = if tile.config.buffer_rules.clear_on_hide {
Task::done(Message::ClearSearchQuery)
} else {
let clear_search_query = if tile.config.buffer_rules.clear_on_hide {
Task::done(Message::ClearSearchQuery)
} else {
Task::none()
};

let to_close = window::latest().map(|x| x.unwrap());
Task::batch([
to_close.map(Message::HideWindow),
clear_search_query,
Task::done(Message::ReturnFocus),
])
}
Task::none()
};

let to_close = window::latest().map(|x| x.unwrap());
Task::batch([
to_close.map(Message::HideWindow),
clear_search_query,
Task::done(Message::ReturnFocus),
])
} else {
Task::none()
}
Expand Down Expand Up @@ -478,3 +488,12 @@ pub fn handle_update(tile: &mut Tile, message: Message) -> Task<Message> {
}
}
}

fn open_window() -> Task<Message> {
Task::chain(
window::open(default_settings())
.1
.map(|_| Message::OpenWindow),
operation::focus("query"),
)
}
2 changes: 2 additions & 0 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use crate::{
#[serde(default)]
pub struct Config {
pub toggle_hotkey: String,
pub clipboard_hotkey: Option<String>,
pub buffer_rules: Buffer,
pub theme: Theme,
pub placeholder: String,
Expand All @@ -29,6 +30,7 @@ impl Default for Config {
fn default() -> Self {
Self {
toggle_hotkey: "ALT+SPACE".to_string(),
clipboard_hotkey: None,
buffer_rules: Buffer::default(),
theme: Theme::default(),
placeholder: String::from("Time to be productive!"),
Expand Down
9 changes: 7 additions & 2 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,13 @@ fn main() -> iced::Result {

let show_hide = config.toggle_hotkey.parse().unwrap();

// Hotkeys are stored as a vec so that hyperkey support can be added later
let hotkeys = vec![show_hide];
let mut hotkeys = vec![show_hide];

if let Some(show_clipboard) = &config.clipboard_hotkey
&& let Some(cb_page_hk) = show_clipboard.parse().ok()
{
hotkeys.push(cb_page_hk);
}

manager
.register_all(&hotkeys)
Expand Down