feat: allow config for showing the main app on tray icon click (#5361)
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit is contained in:
1 parent
b94f8c6b5f
commit
371dfe5264
2 files changed
+17
-1
No files matched your search
@@ -36,6 +36,7 @@ pub(crate) struct App {
|
|||||||
pub(crate) webviews: HashMap<WindowId, WebviewInstance>,
|
pub(crate) webviews: HashMap<WindowId, WebviewInstance>,
|
||||||
pub(crate) float_all: bool,
|
pub(crate) float_all: bool,
|
||||||
pub(crate) show_devtools: bool,
|
pub(crate) show_devtools: bool,
|
||||||
|
pub(crate) tray_icon_show_window_on_click: bool,
|
||||||
|
|
||||||
/// This single blob of state is shared between all the windows so they have access to the runtime state
|
/// This single blob of state is shared between all the windows so they have access to the runtime state
|
||||||
///
|
///
|
||||||
@@ -60,6 +61,8 @@ impl App {
|
|||||||
.take()
|
.take()
|
||||||
.unwrap_or_else(|| EventLoopBuilder::<UserWindowEvent>::with_user_event().build());
|
.unwrap_or_else(|| EventLoopBuilder::<UserWindowEvent>::with_user_event().build());
|
||||||
|
|
||||||
|
let tray_icon_show_window_on_click = cfg.tray_icon_show_window_on_click;
|
||||||
|
|
||||||
let app = Self {
|
let app = Self {
|
||||||
exit_on_last_window_close: cfg.exit_on_last_window_close,
|
exit_on_last_window_close: cfg.exit_on_last_window_close,
|
||||||
disable_dma_buf_on_wayland: cfg.disable_dma_buf_on_wayland,
|
disable_dma_buf_on_wayland: cfg.disable_dma_buf_on_wayland,
|
||||||
@@ -69,6 +72,7 @@ impl App {
|
|||||||
unmounted_dom: Cell::new(Some(virtual_dom)),
|
unmounted_dom: Cell::new(Some(virtual_dom)),
|
||||||
float_all: false,
|
float_all: false,
|
||||||
show_devtools: false,
|
show_devtools: false,
|
||||||
|
tray_icon_show_window_on_click,
|
||||||
cfg: Cell::new(Some(cfg)),
|
cfg: Cell::new(Some(cfg)),
|
||||||
shared: Rc::new(SharedContext {
|
shared: Rc::new(SharedContext {
|
||||||
event_handlers: WindowEventHandlers::default(),
|
event_handlers: WindowEventHandlers::default(),
|
||||||
@@ -162,7 +166,7 @@ impl App {
|
|||||||
button_state: _,
|
button_state: _,
|
||||||
} = event
|
} = event
|
||||||
{
|
{
|
||||||
if button == tray_icon::MouseButton::Left {
|
if button == tray_icon::MouseButton::Left && self.tray_icon_show_window_on_click {
|
||||||
for webview in self.webviews.values() {
|
for webview in self.webviews.values() {
|
||||||
webview.desktop_context.window.set_visible(true);
|
webview.desktop_context.window.set_visible(true);
|
||||||
webview.desktop_context.window.set_focus();
|
webview.desktop_context.window.set_focus();
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ pub struct Config {
|
|||||||
pub(crate) disable_file_drop_handler: bool,
|
pub(crate) disable_file_drop_handler: bool,
|
||||||
pub(crate) disable_dma_buf_on_wayland: bool,
|
pub(crate) disable_dma_buf_on_wayland: bool,
|
||||||
pub(crate) additional_windows_args: Option<String>,
|
pub(crate) additional_windows_args: Option<String>,
|
||||||
|
pub(crate) tray_icon_show_window_on_click: bool,
|
||||||
|
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
pub(crate) on_window: Option<Box<dyn FnMut(Arc<Window>, &mut VirtualDom) + 'static>>,
|
pub(crate) on_window: Option<Box<dyn FnMut(Arc<Window>, &mut VirtualDom) + 'static>>,
|
||||||
@@ -122,6 +123,7 @@ impl Config {
|
|||||||
disable_dma_buf_on_wayland: true,
|
disable_dma_buf_on_wayland: true,
|
||||||
on_window: None,
|
on_window: None,
|
||||||
additional_windows_args: None,
|
additional_windows_args: None,
|
||||||
|
tray_icon_show_window_on_click: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,6 +340,16 @@ impl Config {
|
|||||||
self.additional_windows_args = Some(additional_args.to_string());
|
self.additional_windows_args = Some(additional_args.to_string());
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set whether the main window is shown and focused when the tray icon is left-clicked.
|
||||||
|
///
|
||||||
|
/// Defaults to `true` (preserves current behavior). Set to `false` for tray/menu bar apps
|
||||||
|
/// that only want to show the context menu when the tray icon is clicked, without
|
||||||
|
/// activating the main window.
|
||||||
|
pub fn with_tray_icon_show_window_on_click(mut self, show: bool) -> Self {
|
||||||
|
self.tray_icon_show_window_on_click = show;
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
|
|||||||
Reference in new issue
Block a user