Skip to content

Commit

Permalink
fix(launcher): popup not closing when hover leaves widget
Browse files Browse the repository at this point in the history
Fixes #224
  • Loading branch information
JakeStanger committed Aug 13, 2023
1 parent 5255ddf commit 54f0f23
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 5 deletions.
34 changes: 31 additions & 3 deletions src/modules/launcher/item.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
use super::open_state::OpenState;
use crate::clients::wayland::ToplevelHandle;
use crate::config::BarPosition;
use crate::gtk_helpers::IronbarGtkExt;
use crate::image::ImageProvider;
use crate::modules::launcher::{ItemEvent, LauncherUpdate};
use crate::modules::ModuleUpdateEvent;
use crate::{read_lock, try_send};
use color_eyre::{Report, Result};
use gtk::prelude::*;
use gtk::{Button, IconTheme, Orientation};
use gtk::{Button, IconTheme};
use indexmap::IndexMap;
use std::rc::Rc;
use std::sync::RwLock;
Expand Down Expand Up @@ -176,7 +177,7 @@ impl ItemButton {
item: &Item,
appearance: AppearanceOptions,
icon_theme: &IconTheme,
orientation: Orientation,
bar_position: BarPosition,
tx: &Sender<ModuleUpdateEvent<LauncherUpdate>>,
controller_tx: &Sender<ItemEvent>,
) -> Self {
Expand Down Expand Up @@ -249,7 +250,9 @@ impl ItemButton {

try_send!(
tx,
ModuleUpdateEvent::OpenPopupAt(button.geometry(orientation))
ModuleUpdateEvent::OpenPopupAt(
button.geometry(bar_position.get_orientation())
)
);
} else {
try_send!(tx, ModuleUpdateEvent::ClosePopup);
Expand All @@ -259,6 +262,31 @@ impl ItemButton {
});
}

{
let tx = tx.clone();

button.connect_leave_notify_event(move |button, ev| {
const THRESHOLD: f64 = 5.0;

let alloc = button.allocation();

let (x, y) = ev.position();

let close = match bar_position {
BarPosition::Top => y + THRESHOLD < alloc.height() as f64,
BarPosition::Bottom => y > 0.0,
BarPosition::Left => x + THRESHOLD < alloc.width() as f64,
BarPosition::Right => x > THRESHOLD,
};

if close {
try_send!(tx, ModuleUpdateEvent::ClosePopup);
}

Inhibit(false)
});
}

button.show_all();

Self {
Expand Down
4 changes: 2 additions & 2 deletions src/modules/launcher/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ impl Module<gtk::Box> for LauncherModule {
};

let show_names = self.show_names;
let orientation = info.bar_position.get_orientation();
let bar_position = info.bar_position;

let mut buttons = IndexMap::<String, ItemButton>::new();

Expand All @@ -350,7 +350,7 @@ impl Module<gtk::Box> for LauncherModule {
&item,
appearance_options,
&icon_theme,
orientation,
bar_position,
&context.tx,
&controller_tx,
);
Expand Down

0 comments on commit 54f0f23

Please sign in to comment.