@@ -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}
4745glib:: 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"><ctrl>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"><ctrl>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"><ctrl>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"><alt>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"><ctrl>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"><ctrl>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