diff --git a/src/app/browser/window/tab/item/page.rs b/src/app/browser/window/tab/item/page.rs index 8b04ff9a..4c0f2609 100644 --- a/src/app/browser/window/tab/item/page.rs +++ b/src/app/browser/window/tab/item/page.rs @@ -70,6 +70,7 @@ impl Page { action_page_history_back.clone(), action_page_history_forward.clone(), action_page_reload.clone(), + action_page_open.clone(), action_update.clone(), ); @@ -89,15 +90,25 @@ impl Page { action_page_open.connect_activate({ let navigation = navigation.clone(); let action_page_reload = action_page_reload.clone(); - move |_, request| { - // Update request - navigation.set_request_text( - request - .expect("Parameter required for this action") - .get::() - .expect("Parameter does not match `String`") - .as_str(), - ); + move |_, parameter| { + // Get request value from action parameter + let request = parameter + .expect("Parameter required for this action") + .get::() + .expect("Parameter does not match `String`"); + + // Update navigation entry + navigation.set_request_text(&request); + + // Add history record + match navigation.history_current() { + Some(current) => { + if current != request { + navigation.history_add(request.into()); + } + } + None => navigation.history_add(request.into()), + } // Reload page action_page_reload.activate(None); @@ -188,18 +199,6 @@ impl Page { // Return value from redirection holder redirect.request() } else { - // Add history record - let value = self.navigation.request_text(); - - match self.navigation.history_current() { - Some(current) => { - if current != value { - self.navigation.history_add(value); - } - } - None => self.navigation.history_add(value), - } - // Reset redirect counter as request value taken from user input self.meta.unset_redirect_count(); diff --git a/src/app/browser/window/tab/item/page/navigation.rs b/src/app/browser/window/tab/item/page/navigation.rs index 27f24c85..ee46f54c 100644 --- a/src/app/browser/window/tab/item/page/navigation.rs +++ b/src/app/browser/window/tab/item/page/navigation.rs @@ -34,13 +34,14 @@ impl Navigation { action_page_history_back: SimpleAction, action_page_history_forward: SimpleAction, action_page_reload: SimpleAction, + action_page_open: SimpleAction, action_update: SimpleAction, ) -> Arc { // Init components let home = Home::new_arc(action_page_home); let history = History::new_arc(action_page_history_back, action_page_history_forward); let reload = Reload::new_arc(action_page_reload.clone()); - let request = Request::new_arc(action_update.clone(), action_page_reload.clone()); + let request = Request::new_arc(action_update.clone(), action_page_open.clone()); let bookmark = Bookmark::new_arc(); // Init widget diff --git a/src/app/browser/window/tab/item/page/navigation/request/widget.rs b/src/app/browser/window/tab/item/page/navigation/request/widget.rs index cf28eaa3..cf696a9b 100644 --- a/src/app/browser/window/tab/item/page/navigation/request/widget.rs +++ b/src/app/browser/window/tab/item/page/navigation/request/widget.rs @@ -29,10 +29,7 @@ pub struct Widget { impl Widget { // Construct - pub fn new_arc( - action_update: SimpleAction, - action_page_reload: SimpleAction, // @TODO local `action_page_open`? - ) -> Arc { + pub fn new_arc(action_update: SimpleAction, action_page_open: SimpleAction) -> Arc { // Init animated progress bar state let progress = Arc::new(Progress { fraction: RefCell::new(0.0), @@ -50,8 +47,8 @@ impl Widget { action_update.activate(Some(&"".to_variant())); // @TODO }); - gobject.connect_activate(move |_| { - action_page_reload.activate(None); + gobject.connect_activate(move |this| { + action_page_open.activate(Some(&this.text().to_variant())); }); gobject.connect_state_flags_changed({