make navigation entries private

This commit is contained in:
yggverse 2025-01-27 16:38:01 +02:00
parent 3d1a07213c
commit 51e3f54661
6 changed files with 49 additions and 52 deletions

View file

@ -2,7 +2,7 @@ use super::{BrowserAction, Profile, WindowAction};
use gtk::{ use gtk::{
gio::{self}, gio::{self},
glib::{gformat, GString, Uri}, glib::{gformat, GString, Uri},
prelude::{ActionExt, EditableExt, ToVariant}, prelude::{ActionExt, ToVariant},
Align, MenuButton, Align, MenuButton,
}; };
use indexmap::IndexMap; use indexmap::IndexMap;
@ -210,7 +210,7 @@ impl Menu for MenuButton {
// Recently closed history // Recently closed history
main_history_tab.remove_all(); main_history_tab.remove_all();
for item in profile.history.memory.tab.recent() { for item in profile.history.memory.tab.recent() {
let item_request = item.page.navigation.request.text(); // @TODO restore entire `Item` let item_request = item.page.navigation.request(); // @TODO restore entire `Item`
let menu_item = gio::MenuItem::new(Some(&ellipsize(&item_request, LABEL_MAX_LENGTH)), None); let menu_item = gio::MenuItem::new(Some(&ellipsize(&item_request, LABEL_MAX_LENGTH)), None);
menu_item.set_action_and_target_value(Some(&format!( menu_item.set_action_and_target_value(Some(&format!(
"{}.{}", "{}.{}",

View file

@ -12,7 +12,7 @@ use error::Error;
use gtk::{ use gtk::{
gio::Icon, gio::Icon,
glib::{DateTime, Propagation}, glib::{DateTime, Propagation},
prelude::{ActionExt, EditableExt}, prelude::ActionExt,
}; };
pub use item::Item; pub use item::Item;
use menu::Menu; use menu::Menu;
@ -235,7 +235,7 @@ impl Tab {
if let Some(item) = self.item(tab_page_position) { if let Some(item) = self.item(tab_page_position) {
if let Some(home) = item.page.navigation.home() { if let Some(home) = item.page.navigation.home() {
let home = home.to_string(); let home = home.to_string();
item.page.navigation.request.set_text(&home); item.page.navigation.set_request(&home);
item.client.handle(&home, true); item.client.handle(&home, true);
} }
} }

View file

@ -10,7 +10,7 @@ use crate::Profile;
use action::Action; use action::Action;
use adw::TabView; use adw::TabView;
use client::Client; use client::Client;
use gtk::prelude::{ActionMapExt, Cast, EditableExt}; use gtk::prelude::{ActionMapExt, Cast};
use page::Page; use page::Page;
use sqlite::Transaction; use sqlite::Transaction;
use std::rc::Rc; use std::rc::Rc;
@ -84,7 +84,7 @@ impl Item {
this.set_enabled(false); this.set_enabled(false);
if let Some(uri) = page.navigation.home() { if let Some(uri) = page.navigation.home() {
let request = uri.to_string(); let request = uri.to_string();
page.navigation.request.set_text(&request); page.navigation.set_request(&request);
client.handle(&request, true); client.handle(&request, true);
} }
} }
@ -112,7 +112,7 @@ impl Item {
let client = client.clone(); let client = client.clone();
move |request, is_history| { move |request, is_history| {
if let Some(text) = request { if let Some(text) = request {
page.navigation.request.set_text(&text); page.navigation.set_request(&text);
client.handle(&text, is_history); client.handle(&text, is_history);
} }
} }
@ -122,13 +122,13 @@ impl Item {
let page = page.clone(); let page = page.clone();
let client = client.clone(); let client = client.clone();
move |_, _| { move |_, _| {
client.handle(&page.navigation.request.text(), false); client.handle(&page.navigation.request(), false);
} }
}); });
// Handle immediately on request // Handle immediately on request
if let Some(text) = request { if let Some(text) = request {
page.navigation.request.set_text(text); page.navigation.set_request(text);
if is_load { if is_load {
client.handle(text, true); client.handle(text, true);
} }

View file

@ -9,7 +9,7 @@ use feature::Feature;
use gtk::{ use gtk::{
gio::Cancellable, gio::Cancellable,
glib::{Uri, UriFlags}, glib::{Uri, UriFlags},
prelude::{ActionExt, CancellableExt, EntryExt}, prelude::{ActionExt, CancellableExt},
}; };
use std::{cell::Cell, rc::Rc}; use std::{cell::Cell, rc::Rc};
use subject::Subject; use subject::Subject;
@ -58,11 +58,7 @@ impl Client {
self.subject.page.search.unset(); self.subject.page.search.unset();
self.subject.page.input.unset(); self.subject.page.input.unset();
self.subject.tab_page.set_title("Loading.."); self.subject.tab_page.set_title("Loading..");
self.subject self.subject.page.navigation.set_progress_fraction(0.1);
.page
.navigation
.request
.set_progress_fraction(0.1);
self.subject.tab_page.set_loading(true); self.subject.tab_page.set_loading(true);
@ -86,7 +82,7 @@ impl Client {
"Scheme `{scheme}` yet not supported" "Scheme `{scheme}` yet not supported"
))); )));
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
} }
}, },

View file

@ -9,12 +9,9 @@ use gtk::{
gdk_pixbuf::Pixbuf, gdk_pixbuf::Pixbuf,
gio::{Cancellable, SocketClientEvent}, gio::{Cancellable, SocketClientEvent},
glib::{Priority, Uri}, glib::{Priority, Uri},
prelude::{EntryExt, SocketClientExt}, prelude::SocketClientExt,
};
use gtk::{
glib::Bytes,
prelude::{EditableExt, FileExt},
}; };
use gtk::{glib::Bytes, prelude::FileExt};
use std::{cell::Cell, path::MAIN_SEPARATOR, rc::Rc, time::Duration}; use std::{cell::Cell, path::MAIN_SEPARATOR, rc::Rc, time::Duration};
/// Multi-protocol client API for `Page` object /// Multi-protocol client API for `Page` object
@ -59,7 +56,6 @@ impl Gemini {
subject subject
.page .page
.navigation .navigation
.request
.set_progress_fraction(progress_fraction); .set_progress_fraction(progress_fraction);
} }
}); });
@ -129,11 +125,7 @@ impl Gemini {
} }
}); });
self.subject.tab_page.set_title("Titan input"); self.subject.tab_page.set_title("Titan input");
self.subject self.subject.page.navigation.set_progress_fraction(0.0);
.page
.navigation
.request
.set_progress_fraction(0.0);
self.subject.tab_page.set_loading(false); self.subject.tab_page.set_loading(false);
} }
_ => panic!(), // unexpected _ => panic!(), // unexpected
@ -201,7 +193,7 @@ fn handle(
Some(1024), Some(1024),
); );
} }
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&title); subject.tab_page.set_title(&title);
redirects.replace(0); // reset redirects.replace(0); // reset
@ -273,7 +265,7 @@ fn handle(
} }
}, },
); );
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -296,7 +288,7 @@ fn handle(
Some(title) => title.into(), // @TODO Some(title) => title.into(), // @TODO
None => uri_to_title(&uri), None => uri_to_title(&uri),
}); });
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.page.window_action subject.page.window_action
.find .find
@ -307,7 +299,7 @@ fn handle(
Err(e) => { Err(e) => {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some(&e.to_string())); status.set_description(Some(&e.to_string()));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -351,7 +343,7 @@ fn handle(
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
} }
} }
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
redirects.replace(0); // reset redirects.replace(0); // reset
}, },
@ -360,7 +352,7 @@ fn handle(
Err(e) => { Err(e) => {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some(&e.to_string())); status.set_description(Some(&e.to_string()));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -374,7 +366,7 @@ fn handle(
.content .content
.to_status_mime(mime, Some((&subject.page.item_action, &uri))); .to_status_mime(mime, Some((&subject.page.item_action, &uri)));
status.set_description(Some(&format!("Content type `{mime}` yet not supported"))); status.set_description(Some(&format!("Content type `{mime}` yet not supported")));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -383,7 +375,7 @@ fn handle(
None => { None => {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some("MIME type not found")); status.set_description(Some("MIME type not found"));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -421,7 +413,7 @@ fn handle(
if total > 5 { if total > 5 {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some("Redirection limit reached")); status.set_description(Some("Redirection limit reached"));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -432,7 +424,7 @@ fn handle(
|| uri.host() != target.host() { || uri.host() != target.host() {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some("External redirects not allowed by protocol specification")); status.set_description(Some("External redirects not allowed by protocol specification"));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -440,8 +432,7 @@ fn handle(
} else { } else {
if matches!(response.meta.status, Status::PermanentRedirect) { if matches!(response.meta.status, Status::PermanentRedirect) {
subject.page.navigation subject.page.navigation
.request .set_request(&uri.to_string());
.set_text(&uri.to_string());
} }
redirects.replace(total); redirects.replace(total);
subject.page.item_action.load.activate(Some(&target.to_string()), false); subject.page.item_action.load.activate(Some(&target.to_string()), false);
@ -450,7 +441,7 @@ fn handle(
Err(e) => { Err(e) => {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some(&e.to_string())); status.set_description(Some(&e.to_string()));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -459,7 +450,7 @@ fn handle(
None => { None => {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some("Redirection target not found")); status.set_description(Some("Redirection target not found"));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -478,7 +469,7 @@ fn handle(
None => response.meta.status.to_string(), None => response.meta.status.to_string(),
})); }));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -486,7 +477,7 @@ fn handle(
error => { error => {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some(&error.to_string())); status.set_description(Some(&error.to_string()));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset
@ -496,7 +487,7 @@ fn handle(
Err(e) => { Err(e) => {
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status.set_description(Some(&e.to_string())); status.set_description(Some(&e.to_string()));
subject.page.navigation.request.set_progress_fraction(0.0); subject.page.navigation.set_progress_fraction(0.0);
subject.tab_page.set_loading(false); subject.tab_page.set_loading(false);
subject.tab_page.set_title(&status.title()); subject.tab_page.set_title(&status.title());
redirects.replace(0); // reset redirects.replace(0); // reset

View file

@ -9,7 +9,7 @@ use super::{ItemAction, Profile, TabAction, WindowAction};
use bookmark::Bookmark; use bookmark::Bookmark;
use gtk::{ use gtk::{
glib::{GString, Uri}, glib::{GString, Uri},
prelude::{BoxExt, EditableExt, WidgetExt}, prelude::{BoxExt, EditableExt, EntryExt, WidgetExt},
Box, Button, Entry, Orientation, Box, Button, Entry, Orientation,
}; };
use history::History; use history::History;
@ -23,10 +23,10 @@ const MARGIN: i32 = 6;
const SPACING: i32 = 6; const SPACING: i32 = 6;
pub struct Navigation { pub struct Navigation {
pub home: Button, //home: Button,
pub reload: Button, //reload: Button,
pub bookmark: Button, //bookmark: Button,
pub request: Entry, request: Entry,
pub g_box: Box, pub g_box: Box,
} }
@ -62,10 +62,10 @@ impl Navigation {
g_box.append(&bookmark); g_box.append(&bookmark);
Self { Self {
home, //home,
request, request,
reload, //reload,
bookmark, //bookmark,
g_box, g_box,
} }
} }
@ -135,6 +135,16 @@ impl Navigation {
self.request.grab_focus() self.request.grab_focus()
} }
// Setters
pub fn set_request(&self, value: &str) {
self.request.set_text(value);
}
pub fn set_progress_fraction(&self, fraction: f64) {
self.request.set_progress_fraction(fraction);
}
pub fn to_download(&self) { pub fn to_download(&self) {
self.request.to_download(); self.request.to_download();
} }