From 86e58e1a29f74ed6ed9c63c0e9829e1029e7af72 Mon Sep 17 00:00:00 2001 From: Ward from fusion-voyager-3 Date: Tue, 9 Jul 2024 08:39:08 +0300 Subject: [PATCH] gio action --- .idea/workspace.xml | 1 + src/apt_update_page/mod.rs | 6 +++--- src/build_ui/mod.rs | 17 +++++++++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4bac60d..0cbc5b4 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -112,6 +112,7 @@ + diff --git a/src/apt_update_page/mod.rs b/src/apt_update_page/mod.rs index 2d2dbc6..12b0632 100644 --- a/src/apt_update_page/mod.rs +++ b/src/apt_update_page/mod.rs @@ -1,6 +1,6 @@ use std::rc::Rc; use crate::apt_package_row::AptPackageRow; -use adw::gio::Action; +use adw::gio::{Action, SimpleAction}; use adw::prelude::*; use adw::ActionRow; use gtk::glib::*; @@ -34,7 +34,7 @@ pub struct AptPackageSocket { pub installed_size: u64, pub is_last: bool, } -pub fn apt_update_page(window: adw::ApplicationWindow, retry_signal_action: >k::Button) -> gtk::Box { +pub fn apt_update_page(window: adw::ApplicationWindow, retry_signal_action: &SimpleAction) -> gtk::Box { let (update_percent_sender, update_percent_receiver) = async_channel::unbounded::(); let update_percent_sender = update_percent_sender.clone(); let (update_status_sender, update_status_receiver) = async_channel::unbounded::(); @@ -150,7 +150,7 @@ pub fn apt_update_page(window: adw::ApplicationWindow, retry_signal_action: >k apt_update_dialog.clone().choose(None::<&gio::Cancellable>, move |choice| { if choice == "apt_update_dialog_retry" { - retry_signal_action0.emit_by_name("clicked", &[]) + retry_signal_action0.activate(None); } }); diff --git a/src/build_ui/mod.rs b/src/build_ui/mod.rs index 4b4b12f..c15ec5e 100644 --- a/src/build_ui/mod.rs +++ b/src/build_ui/mod.rs @@ -11,6 +11,8 @@ use std::ops::Deref; use std::process::Command; use std::rc::Rc; use std::thread; +use adw::glib::ffi::G_VARIANT_TYPE_ANY; +use gtk::pango::AttrType::Variant; pub fn build_ui(app: &adw::Application) { // setup glib @@ -108,6 +110,10 @@ pub fn build_ui(app: &adw::Application) { .icon_name("dialog-information-symbolic") .build(); + let refresh_button = gtk::Button::builder() + .label(t!("refresh_button_label")) + .build(); + let credits_window = adw::AboutWindow::builder() .application_icon(APP_ICON) .application_name(t!("application_name")) @@ -119,6 +125,7 @@ pub fn build_ui(app: &adw::Application) { .issue_url(APP_GITHUB.to_owned() + "/issues") .build(); + window_headerbar.pack_end(&refresh_button); window_headerbar.pack_end(&credits_button); credits_button .connect_clicked(clone!(@weak credits_button => move |_| credits_window.present())); @@ -129,16 +136,22 @@ pub fn build_ui(app: &adw::Application) { // Apt Update Page - let apt_retry_signal_action = gtk::Button::builder().build(); + let apt_retry_signal_action = gio::SimpleAction::new("retry", None); let apt_update_view_stack_bin = adw::Bin::builder() .child(&apt_update_page::apt_update_page(window.clone(), &apt_retry_signal_action)) .build(); - apt_retry_signal_action.connect_clicked(clone!(@weak window, @strong apt_retry_signal_action, @strong apt_update_view_stack_bin => move |_| { + apt_retry_signal_action.connect_activate(clone!(@weak window, @strong apt_retry_signal_action, @strong apt_update_view_stack_bin => move |_, _| { apt_update_view_stack_bin.set_child(Some(&apt_update_page::apt_update_page(window, &apt_retry_signal_action))); })); window_adw_view_stack.add_titled_with_icon(&apt_update_view_stack_bin, Some("apt_update_page"), &t!("apt_update_page_title"), "software-update-available-symbolic"); window_adw_view_stack.add_titled(>k::Image::builder().icon_name("firefox").build(), Some("apt_update_page2"), &t!("apt_update_page_title2")); + + // + + refresh_button.connect_clicked(clone!(@weak apt_retry_signal_action => move |_| { + apt_retry_signal_action.activate(None); + })); }