mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-02 09:35:28 +00:00
make navigation entries private
This commit is contained in:
parent
3d1a07213c
commit
51e3f54661
6 changed files with 49 additions and 52 deletions
|
|
@ -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!(
|
||||||
"{}.{}",
|
"{}.{}",
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue