Skip to content

Commit eb5ab9e

Browse files
committed
hamburger menu, shortcuts window, clamp url-bar
1 parent d396c0a commit eb5ab9e

File tree

2 files changed

+118
-17
lines changed

2 files changed

+118
-17
lines changed

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ fn main() {
8888
application.set_accels_for_action("win.new-tab", &["<Ctrl>t"]);
8989
application.set_accels_for_action("win.close-tab", &["<Ctrl>w"]);
9090
application.set_accels_for_action("win.focus-url-bar", &["F6"]);
91+
// FIXME: win.view-source
9192
let ret = application.run();
9293
std::process::exit(ret);
9394
}

src/window.rs

Lines changed: 117 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ pub mod imp {
2222
pub(crate) url_bar: gtk::SearchEntry,
2323
pub(crate) progress_bar: gtk::ProgressBar,
2424
pub(crate) back_btn: gtk::Button,
25-
pub(crate) add_bookmark_btn: gtk::Button,
26-
pub(crate) show_bookmarks_btn: gtk::Button,
2725
pub(crate) tab_bar: adw::TabBar,
2826
pub(crate) tab_view: adw::TabView,
2927
pub(crate) config: RefCell<config::Config>,
@@ -46,7 +44,7 @@ pub mod imp {
4644
}
4745
glib::wrapper! {
4846
pub struct Window(ObjectSubclass<imp::Window>)
49-
@extends adw::ApplicationWindow, gtk::Window,
47+
@extends adw::ApplicationWindow, gtk::Window, gtk::Widget,
5048
@implements gio::ActionMap, gio::ActionGroup;
5149
}
5250

@@ -71,27 +69,51 @@ impl Window {
7169
header_bar.set_show_title_buttons(true);
7270

7371
imp.back_btn.set_icon_name("go-previous-symbolic");
74-
imp.add_bookmark_btn.set_icon_name("star-new-symbolic");
75-
imp.show_bookmarks_btn.set_icon_name("view-list-symbolic");
7672
imp.add_tab_btn.set_icon_name("tab-new-symbolic");
7773

74+
let menu_button = gtk::MenuButton::new();
75+
menu_button.set_primary(true);
76+
menu_button.set_icon_name("open-menu");
77+
let menu_model = gio::Menu::new();
78+
79+
let menu_model_bookmarks = gio::Menu::new();
80+
menu_model_bookmarks.insert(0, Some("All Bookmarks"), Some("win.show-bookmarks"));
81+
menu_model_bookmarks.insert(1, Some("Add Bookmark"), Some("win.bookmark-current"));
82+
menu_model.insert_section(0, None, &menu_model_bookmarks);
83+
84+
let menu_model_about = gio::Menu::new();
85+
menu_model_about.insert(1, Some("Keyboard Shortcuts"), Some("win.shortcuts"));
86+
menu_model_about.insert(2, Some("About"), Some("win.about"));
87+
menu_model_about.insert(3, Some("Donate 💝"), Some("win.donate"));
88+
menu_model.insert_section(1, None, &menu_model_about);
89+
90+
menu_button.set_menu_model(Some(&menu_model));
91+
7892
header_bar.pack_start(&imp.back_btn);
7993
header_bar.pack_start(&imp.add_tab_btn);
80-
header_bar.pack_end(&imp.add_bookmark_btn);
81-
header_bar.pack_end(&imp.show_bookmarks_btn);
94+
header_bar.pack_end(&menu_button);
8295

8396
imp.url_bar.set_hexpand(true);
8497

85-
header_bar.set_title_widget(Some(&imp.url_bar));
98+
let bar_clamp = adw::Clamp::new();
99+
bar_clamp.set_child(Some(&imp.url_bar));
100+
bar_clamp.set_maximum_size(768);
101+
bar_clamp.set_tightening_threshold(720);
102+
header_bar.set_title_widget(Some(&bar_clamp));
86103

87104
content.append(&header_bar);
88105

89-
imp.tab_bar.set_view(Some(&imp.tab_view));
90-
content.append(&imp.tab_bar);
91-
106+
let overlay = gtk::Overlay::new();
107+
let content_view = gtk::Box::new(gtk::Orientation::Vertical, 0);
108+
overlay.set_child(Some(&content_view));
92109
imp.progress_bar.add_css_class("osd");
93-
content.append(&imp.progress_bar);
94-
content.append(&imp.tab_view);
110+
imp.progress_bar.set_valign(gtk::Align::Start);
111+
overlay.add_overlay(&imp.progress_bar);
112+
content.append(&overlay);
113+
114+
imp.tab_bar.set_view(Some(&imp.tab_view));
115+
content_view.append(&imp.tab_bar);
116+
content_view.append(&imp.tab_view);
95117

96118
this.set_default_size(800, 600);
97119
this.set_content(Some(&content));
@@ -109,6 +131,8 @@ impl Window {
109131
self_action!(self, "bookmark-current", bookmark_current);
110132
self_action!(self, "close-tab", close_tab);
111133
self_action!(self, "focus-url-bar", focus_url_bar);
134+
self_action!(self, "shortcuts", present_shortcuts);
135+
self_action!(self, "about", present_about);
112136

113137
let act_open_page = gio::SimpleAction::new("open-omni", Some(glib::VariantTy::STRING));
114138
act_open_page.connect_activate(
@@ -332,9 +356,85 @@ impl Window {
332356
});
333357
imp.back_btn.set_action_name(Some("win.back"));
334358
imp.add_tab_btn.set_action_name(Some("win.new-tab"));
335-
imp.add_bookmark_btn
336-
.set_action_name(Some("win.bookmark-current"));
337-
imp.show_bookmarks_btn
338-
.set_action_name(Some("win.show-bookmarks"))
339359
}
360+
fn present_shortcuts(&self) {
361+
let builder = gtk::Builder::from_string(
362+
r#"
363+
<?xml version="1.0" encoding="UTF-8"?>
364+
<interface>
365+
<object class="GtkShortcutsWindow" id="shortcuts-geopard">
366+
<property name="modal">1</property>
367+
<child>
368+
<object class="GtkShortcutsSection">
369+
<property name="section-name">shortcuts</property>
370+
<child>
371+
<object class="GtkShortcutsGroup">
372+
<property name="title" translatable="yes">Tabs</property>
373+
<child>
374+
<object class="GtkShortcutsShortcut">
375+
<property name="accelerator">&lt;ctrl&gt;T</property>
376+
<property name="title" translatable="yes">Open New Tab</property>
377+
</object>
378+
</child>
379+
<child>
380+
<object class="GtkShortcutsShortcut">
381+
<property name="accelerator">&lt;ctrl&gt;W</property>
382+
<property name="title" translatable="yes">Close Current Tab</property>
383+
</object>
384+
</child>
385+
<child>
386+
<object class="GtkShortcutsShortcut">
387+
<property name="accelerator">&lt;ctrl&gt;U</property>
388+
<property name="title" translatable="yes">View Source</property>
389+
</object>
390+
</child>
391+
</object>
392+
</child>
393+
<child>
394+
<object class="GtkShortcutsGroup">
395+
<property name="title" translatable="yes">Navigation</property>
396+
<child>
397+
<object class="GtkShortcutsShortcut">
398+
<property name="accelerator">&lt;alt&gt;Left</property>
399+
<property name="direction">ltr</property>
400+
<property name="title" translatable="yes">Back</property>
401+
</object>
402+
</child>
403+
<child>
404+
<object class="GtkShortcutsShortcut">
405+
<property name="accelerator">F6</property>
406+
<property name="title" translatable="yes">Focus Url Bar</property>
407+
</object>
408+
</child>
409+
</object>
410+
</child>
411+
<child>
412+
<object class="GtkShortcutsGroup">
413+
<property name="view">world</property>
414+
<property name="title" translatable="yes">Bookmarks</property>
415+
<child>
416+
<object class="GtkShortcutsShortcut">
417+
<property name="accelerator">&lt;ctrl&gt;D</property>
418+
<property name="title" translatable="yes">Bookmark Current Page</property>
419+
</object>
420+
</child>
421+
<child>
422+
<object class="GtkShortcutsShortcut">
423+
<property name="accelerator">&lt;ctrl&gt;B</property>
424+
<property name="title" translatable="yes">Show All Bookmarks</property>
425+
</object>
426+
</child>
427+
</object>
428+
</child>
429+
</object>
430+
</child>
431+
</object>
432+
</interface>
433+
"#,
434+
);
435+
let sw: gtk::ShortcutsWindow = builder.object("shortcuts-geopard").unwrap();
436+
sw.set_transient_for(Some(self));
437+
sw.present();
438+
}
439+
fn present_about(&self) {}
340440
}

0 commit comments

Comments
 (0)