This commit is contained in:
Ward from fusion-voyager-3 2024-01-15 21:20:01 +03:00
parent 0f60c21e6b
commit 76766a4b48
3 changed files with 24 additions and 17 deletions

1
Cargo.lock generated
View File

@ -572,6 +572,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"async-channel", "async-channel",
"fragile", "fragile",
"glib",
"gtk4", "gtk4",
"libadwaita", "libadwaita",
"time", "time",

View File

@ -9,5 +9,6 @@ edition = "2021"
adw = { version = "0.5.3", package = "libadwaita" } adw = { version = "0.5.3", package = "libadwaita" }
async-channel = "2.1.1" async-channel = "2.1.1"
fragile = "2.0.0" fragile = "2.0.0"
glib = "0.18.5"
gtk = { version = "0.7.3", package = "gtk4" } gtk = { version = "0.7.3", package = "gtk4" }
time = "0.3.31" time = "0.3.31"

View File

@ -139,25 +139,30 @@ pub fn build_ui(app: &adw::Application) {
window.connect_hide(clone!(@weak window => move |_| save_window_size(&window, &glib_settings))); window.connect_hide(clone!(@weak window => move |_| save_window_size(&window, &glib_settings)));
window.connect_hide(clone!(@weak window => move |_| window.destroy())); window.connect_hide(clone!(@weak window => move |_| window.destroy()));
window.show(); let (sender, receiver) = MainContext::channel(Priority::default());
window.connect_show(move |_| {
let bottom_box_clone = fragile::Fragile::new(bottom_box.clone()); let sender = sender.clone();
let content_stack_clone = fragile::Fragile::new(content_stack.clone()); // The long running operation runs now in a separate thread
thread::spawn(move || {
gio::spawn_blocking(move || { sender.send(false).expect("Could not send through channel");
while gtk_loops == true { });
glib::MainContext::default().invoke( move || {
bottom_box_loop( &bottom_box_clone, &content_stack_clone)
});
}
}); });
window.show();
receiver.attach(
None,
clone!(@weak bottom_box => @default-return Continue(false),
move |state| {
bottom_box_loop(&bottom_box, state);
glib::ControlFlow::Continue
}
),
);
} }
fn bottom_box_loop(bottom_box: &Fragile<gtk::Box>, content_stack: &Fragile<Stack>) { fn bottom_box_loop(bottom_box: &gtk::Box, state: bool) {
if content_stack.get().visible_child_name().expect("gstring to string").as_str() == "welcome_page" { bottom_box.set_visible(state)
bottom_box.get().set_visible(false)
} else {
bottom_box.get().set_visible(true)
}
} }