reorganize home action, add middle click handler

This commit is contained in:
yggverse 2025-01-26 13:07:20 +02:00
parent 418b04c86c
commit 3ee6a03c30
5 changed files with 93 additions and 30 deletions

View file

@ -38,10 +38,10 @@ impl Navigation {
) -> Self {
// init children components
let home = Button::home(window_action);
let history = Box::history((window_action, tab_action, item_action));
let reload = Button::reload(window_action);
let request = Rc::new(Request::build((browser_action, item_action)));
let home = Button::home((window_action, tab_action, item_action), &request);
let bookmark = Button::bookmark(window_action);
// init main widget
@ -80,11 +80,6 @@ impl Navigation {
.get(&self.request.strip_prefix())
.is_some(),
);
self.home.set_sensitive(
self.request
.home()
.is_some_and(|home| home.to_string() != request),
);
}
pub fn clean(

View file

@ -1,21 +1,55 @@
use super::WindowAction;
use gtk::{prelude::ActionExt, Button};
use super::{ItemAction, Request, TabAction, WindowAction};
use crate::app::browser::window::action::Position;
use gtk::{
gdk::BUTTON_MIDDLE,
prelude::{ActionExt, WidgetExt},
Button, GestureClick,
};
use std::rc::Rc;
pub trait Home {
fn home(action: &Rc<WindowAction>) -> Self;
fn home(
action: (&Rc<WindowAction>, &Rc<TabAction>, &Rc<ItemAction>),
request: &Rc<Request>,
) -> Self;
}
impl Home for Button {
fn home(action: &Rc<WindowAction>) -> Self {
Button::builder()
.action_name(format!(
"{}.{}",
action.id,
action.home.simple_action.name()
)) // @TODO
fn home(
(window_action, tab_action, item_action): (
&Rc<WindowAction>,
&Rc<TabAction>,
&Rc<ItemAction>,
),
request: &Rc<Request>,
) -> Self {
let button = Button::builder()
.action_name(format!("{}.{}", tab_action.id, item_action.home.name()))
.icon_name("go-home-symbolic")
.tooltip_text("Home")
.build()
.build();
// Navigate home in the new tab (feature)
let button_middle_controller = GestureClick::builder().button(BUTTON_MIDDLE).build();
button_middle_controller.connect_pressed({
let request = request.clone();
let window_action = window_action.clone();
move |_, _, _, _| {
if let Some(uri) = request.home() {
window_action.append.activate_stateful_once(
Position::After,
Some(uri.to_string()),
false,
true,
false,
true,
);
}
}
});
button.add_controller(button_middle_controller);
button
}
}