1
0
Fork 0
mirror of synced 2024-04-28 17:42:26 +12:00
czkawka/czkawka_gui/src/connect_things/connect_button_stop.rs
Kerfuffle 2b86e9079e
Fix accumulated stop events (#623)
* Change stop message channel from unbounded to bounded with size 1.

* Clear out any stale stop messages before beginning a search operation.
2022-02-15 19:00:52 +01:00

38 lines
1.4 KiB
Rust

use crossbeam_channel::{Sender, TrySendError};
use gtk::prelude::*;
use crate::gui_structs::gui_data::GuiData;
use crate::help_functions::KEY_ENTER;
fn send_stop_message(stop_sender: &Sender<()>) {
stop_sender
.try_send(())
.map_or_else(|e| if matches!(e, TrySendError::Full(_)) { Ok(()) } else { Err(e) }, |_| Ok(()))
.unwrap();
}
pub fn connect_button_stop(gui_data: &GuiData) {
let evk_button_stop_in_dialog = gui_data.progress_window.evk_button_stop_in_dialog.clone();
let stop_sender = gui_data.stop_sender.clone();
evk_button_stop_in_dialog.connect_key_released(move |_, _, key_code, _| {
if key_code == KEY_ENTER {
// Only accept enter key to stop search
send_stop_message(&stop_sender);
}
});
let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone();
let stop_sender = gui_data.stop_sender.clone();
button_stop_in_dialog.connect_button_release_event(move |_, _e| {
send_stop_message(&stop_sender);
gtk::Inhibit(false)
});
// let gc_button_stop_in_dialog = gui_data.progress_window.gc_button_stop_in_dialog.clone();
// let stop_sender = gui_data.stop_sender.clone();
// gc_button_stop_in_dialog.connect_button_release_event(move |_, _e| {
// stop_sender.send(()).unwrap();
// gtk::Inhibit(false)
// });
}