diff --git a/src/app/browser/window/tab/item/page.rs b/src/app/browser/window/tab/item/page.rs
index 3910231d..e1a42b2c 100644
--- a/src/app/browser/window/tab/item/page.rs
+++ b/src/app/browser/window/tab/item/page.rs
@@ -55,13 +55,13 @@ impl Page {
// Init components
let content = Arc::new(Content::new(action_page_open.clone()));
- let navigation = Arc::new(Navigation::new(
+ let navigation = Navigation::new_arc(
action_tab_page_navigation_base.clone(),
action_tab_page_navigation_history_back.clone(),
action_tab_page_navigation_history_forward.clone(),
action_tab_page_navigation_reload.clone(),
action_update.clone(),
- ));
+ );
let widget = Widget::new_arc(
action_page_open.clone(),
&name, // ID
diff --git a/src/app/browser/window/tab/item/page/navigation.rs b/src/app/browser/window/tab/item/page/navigation.rs
index 587abe9b..3323c32b 100644
--- a/src/app/browser/window/tab/item/page/navigation.rs
+++ b/src/app/browser/window/tab/item/page/navigation.rs
@@ -4,6 +4,7 @@ mod database;
mod history;
mod reload;
mod request;
+mod widget;
use base::Base;
use bookmark::Bookmark;
@@ -11,73 +12,61 @@ use database::Database;
use history::History;
use reload::Reload;
use request::Request;
+use widget::Widget;
-use gtk::{
- gio::SimpleAction,
- glib::GString,
- prelude::{BoxExt, WidgetExt},
- Box, DirectionType, Orientation,
-};
+use gtk::{gio::SimpleAction, glib::GString, prelude::WidgetExt, Box};
use sqlite::Transaction;
use std::sync::Arc;
pub struct Navigation {
- // GTK
- widget: Box,
- // Components
- base: Base,
- history: History,
- reload: Reload,
+ base: Arc,
+ bookmark: Arc,
+ history: Arc,
+ reload: Arc,
request: Arc,
- bookmark: Bookmark,
+ widget: Arc,
}
impl Navigation {
- pub fn new(
+ pub fn new_arc(
action_tab_page_navigation_base: Arc,
action_tab_page_navigation_history_back: Arc,
action_tab_page_navigation_history_forward: Arc,
action_tab_page_navigation_reload: Arc,
action_update: Arc,
- ) -> Self {
+ ) -> Arc {
// Init components
- let base = Base::new(action_tab_page_navigation_base);
- let history = History::new(
+ let base = Base::new_arc(action_tab_page_navigation_base);
+ let history = History::new_arc(
action_tab_page_navigation_history_back,
action_tab_page_navigation_history_forward,
);
- let reload = Reload::new(action_tab_page_navigation_reload.clone());
+ let reload = Reload::new_arc(action_tab_page_navigation_reload.clone());
let request = Request::new_arc(
action_update.clone(),
action_tab_page_navigation_reload.clone(),
);
- let bookmark = Bookmark::new();
+ let bookmark = Bookmark::new_arc();
// Init widget
- let widget = Box::builder()
- .orientation(Orientation::Horizontal)
- .spacing(8)
- .margin_start(6)
- .margin_end(6)
- .margin_bottom(6)
- .build();
-
- widget.append(base.widget());
- widget.append(history.widget());
- widget.append(reload.widget());
- widget.append(request.gobject());
- widget.append(bookmark.widget()); // @TODO update api to gobject
+ let widget = Widget::new_arc(
+ base.gobject(),
+ history.gobject(),
+ reload.gobject(),
+ request.gobject(),
+ bookmark.gobject(),
+ );
// Result
- Self {
+ Arc::new(Self {
widget,
base,
history,
reload,
request,
bookmark,
- }
+ })
}
// Actions
@@ -171,14 +160,14 @@ impl Navigation {
// Setters
pub fn set_request_text(&self, value: &GString) {
// Focus out from content area on activate the link @TODO
- self.widget.child_focus(DirectionType::Right);
+ self.widget.focus();
self.request.set_text(value);
}
// Getters
pub fn gobject(&self) -> &Box {
- &self.widget
+ &self.widget.gobject()
}
pub fn base_url(&self) -> Option {
diff --git a/src/app/browser/window/tab/item/page/navigation/base.rs b/src/app/browser/window/tab/item/page/navigation/base.rs
index 18c45af5..f42c1447 100644
--- a/src/app/browser/window/tab/item/page/navigation/base.rs
+++ b/src/app/browser/window/tab/item/page/navigation/base.rs
@@ -1,64 +1,51 @@
+mod widget;
+
+use widget::Widget;
+
use gtk::{
gio::SimpleAction,
glib::{gformat, GString, Uri},
- prelude::{ActionExt, ButtonExt, WidgetExt},
Button,
};
use std::{cell::RefCell, sync::Arc};
pub struct Base {
- // Actions
action_tab_page_navigation_base: Arc,
- // Mutable URI cache (parsed on update)
uri: RefCell