mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-01 17:15:28 +00:00
55 lines
1.6 KiB
Rust
55 lines
1.6 KiB
Rust
use super::{ItemAction, Request, TabAction, WindowAction};
|
|
use crate::app::browser::window::action::Position;
|
|
use gtk::{
|
|
Button, GestureClick,
|
|
gdk::BUTTON_MIDDLE,
|
|
prelude::{ActionExt, WidgetExt},
|
|
};
|
|
use std::rc::Rc;
|
|
|
|
pub trait Home {
|
|
fn home(
|
|
action: (&Rc<WindowAction>, &Rc<TabAction>, &Rc<ItemAction>),
|
|
request: &Rc<Request>,
|
|
) -> Self;
|
|
}
|
|
|
|
impl Home for Button {
|
|
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();
|
|
|
|
// 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
|
|
}
|
|
}
|