From 5943ea622a413b900f7983baba87f09cf43d8b73 Mon Sep 17 00:00:00 2001 From: yggverse Date: Thu, 23 Jan 2025 14:34:46 +0200 Subject: [PATCH] update home button status detection --- .../window/tab/item/page/navigation.rs | 16 +++++++++--- .../window/tab/item/page/navigation/home.rs | 9 +++---- .../tab/item/page/navigation/request.rs | 25 +++++++++---------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/app/browser/window/tab/item/page/navigation.rs b/src/app/browser/window/tab/item/page/navigation.rs index 654a8ab2..ea9d69a2 100644 --- a/src/app/browser/window/tab/item/page/navigation.rs +++ b/src/app/browser/window/tab/item/page/navigation.rs @@ -42,7 +42,7 @@ impl Navigation { let reload = Rc::new(Reload::build(window_action)); let request = Rc::new(Request::build((browser_action, tab_action))); let bookmark = Rc::new(Bookmark::build(window_action)); - let home = Rc::new(Home::build(window_action, &request)); + let home = Rc::new(Home::build(window_action)); // init main widget let widget = Rc::new(Widget::build( @@ -76,9 +76,17 @@ impl Navigation { .update(self.profile.bookmark.get(&request).is_ok()); self.history.update(); self.reload.update(!request.is_empty()); - self.request - .update(self.profile.identity.get(&request).is_some()); - self.home.update(); + self.request.update( + self.profile + .identity + .get(&self.request.strip_prefix()) + .is_some(), + ); + self.home.update( + self.request + .home() + .is_some_and(|home| home.to_string() != request), + ); } pub fn clean( diff --git a/src/app/browser/window/tab/item/page/navigation/home.rs b/src/app/browser/window/tab/item/page/navigation/home.rs index f7a1536e..c7f1ff57 100644 --- a/src/app/browser/window/tab/item/page/navigation/home.rs +++ b/src/app/browser/window/tab/item/page/navigation/home.rs @@ -1,4 +1,4 @@ -use super::{Request, WindowAction}; +use super::WindowAction; use gtk::{ prelude::{ButtonExt, WidgetExt}, Button, @@ -7,13 +7,12 @@ use std::rc::Rc; pub struct Home { action: Rc, - request: Rc, pub button: Button, } impl Home { // Construct - pub fn build(action: &Rc, request: &Rc) -> Self { + pub fn build(action: &Rc) -> Self { // Init gobject let button = Button::builder() .icon_name("go-home-symbolic") @@ -30,14 +29,12 @@ impl Home { // Return activated `Self` Self { action: action.clone(), - request: request.clone(), button, } } // Actions - pub fn update(&self) { - let has_home = self.request.home().is_some(); + pub fn update(&self, has_home: bool) { self.action.home.simple_action.set_enabled(has_home); self.button.set_sensitive(has_home); } diff --git a/src/app/browser/window/tab/item/page/navigation/request.rs b/src/app/browser/window/tab/item/page/navigation/request.rs index 72195545..dc7e0bf1 100644 --- a/src/app/browser/window/tab/item/page/navigation/request.rs +++ b/src/app/browser/window/tab/item/page/navigation/request.rs @@ -119,20 +119,19 @@ impl Request { strip_prefix(self.widget.entry.text()) } - /// Parse home [Uri](https://docs.gtk.org/glib/struct.Uri.html) for self - pub fn home(&self) -> Option { + /// Parse home [Uri](https://docs.gtk.org/glib/struct.Uri.html) of `Self` + pub fn home(&self) -> Option { match self.uri() { - Some(uri) => { - let scheme = uri.scheme().replace("titan", "gemini"); - let port = uri.port(); - uri.host().map(|host| { - if port.is_positive() { - gformat!("{scheme}://{host}:{port}/") - } else { - gformat!("{scheme}://{host}/") - } - }) - } + Some(uri) => Some(Uri::build( + UriFlags::NONE, + &uri.scheme(), + uri.userinfo().as_deref(), + uri.host().as_deref(), + uri.port(), + "/", + None, + None, + )), None => None, } }