From 157227cbfe8f7b11d2b877f9bb7fbca08428eeb6 Mon Sep 17 00:00:00 2001 From: yggverse Date: Fri, 1 Nov 2024 03:23:49 +0200 Subject: [PATCH] delegate action registration to widget --- src/app/browser.rs | 34 ++++++++++++++++++---------------- src/app/browser/widget.rs | 12 ++++++++++-- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/app/browser.rs b/src/app/browser.rs index 3327b6ff..3174e739 100644 --- a/src/app/browser.rs +++ b/src/app/browser.rs @@ -9,7 +9,7 @@ use window::Window; use adw::ApplicationWindow; use gtk::{ gio::{Cancellable, File, SimpleAction}, - prelude::{ActionMapExt, GtkWindowExt}, + prelude::GtkWindowExt, FileLauncher, }; use sqlite::Transaction; @@ -57,21 +57,23 @@ impl Browser { )); // Init widget - let widget = Arc::new(Widget::new(window.gobject())); - - // Assign actions - widget.gobject().add_action(&action_debug); - widget.gobject().add_action(&action_profile); - widget.gobject().add_action(&action_quit); - widget.gobject().add_action(&action_update); - widget.gobject().add_action(&action_page_new); - widget.gobject().add_action(&action_page_close); - widget.gobject().add_action(&action_page_close_all); - widget.gobject().add_action(&action_page_home); - widget.gobject().add_action(&action_page_history_back); - widget.gobject().add_action(&action_page_history_forward); - widget.gobject().add_action(&action_page_reload); - widget.gobject().add_action(&action_page_pin); + let widget = Arc::new(Widget::new( + window.gobject(), + &[ + action_debug.clone(), + action_profile.clone(), + action_quit.clone(), + action_update.clone(), + action_page_new.clone(), + action_page_close.clone(), + action_page_close_all.clone(), + action_page_home.clone(), + action_page_history_back.clone(), + action_page_history_forward.clone(), + action_page_reload.clone(), + action_page_pin.clone(), + ], + )); // Init events action_debug.connect_activate({ diff --git a/src/app/browser/widget.rs b/src/app/browser/widget.rs index 98e63e45..4a13e3f8 100644 --- a/src/app/browser/widget.rs +++ b/src/app/browser/widget.rs @@ -3,7 +3,10 @@ mod database; use database::Database; use adw::ApplicationWindow; -use gtk::{prelude::GtkWindowExt, Box}; +use gtk::{ + gio::SimpleAction, + prelude::{ActionMapExt, GtkWindowExt, IsA}, +}; use sqlite::Transaction; // Default options @@ -17,7 +20,7 @@ pub struct Widget { impl Widget { // Construct - pub fn new(content: &Box) -> Self { + pub fn new(content: &impl IsA, actions: &[SimpleAction]) -> Self { // Init GTK let gobject = ApplicationWindow::builder() .content(content) @@ -26,6 +29,11 @@ impl Widget { .maximized(MAXIMIZED) .build(); + // Register actions + for action in actions { + gobject.add_action(action); + } + // Return new struct Self { gobject } }