Fallback to hamburger when the environment doesn't like app menus
This commit is contained in:
parent
e181a9837a
commit
079ae0e1f3
@ -258,7 +258,8 @@ Tobias Bernard
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuButton" id="menu_toggle">
|
||||
<property name="visible">True</property>
|
||||
<property name="visible">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="valign">center</property>
|
||||
@ -284,125 +285,5 @@ Tobias Bernard
|
||||
<object class="GtkPopover" id="menu_popover">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="relative_to">menu_toggle</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_left">10</property>
|
||||
<property name="margin_right">10</property>
|
||||
<property name="margin_top">10</property>
|
||||
<property name="margin_bottom">10</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkModelButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="text" translatable="yes">Preferences</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="update_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="text" translatable="yes">Check for new episodes</property>
|
||||
<property name="action-name">app.refresh</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="import">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="text" translatable="yes">Import Shows</property>
|
||||
<property name="action-name">app.import</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="export">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="text" translatable="yes">Export Shows</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="about">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="text" translatable="yes">About</property>
|
||||
<property name="action-name">app.about</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="text" translatable="yes">Help</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="text" translatable="yes">Keyboard Shortcuts</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
|
||||
@ -118,7 +118,8 @@ impl App {
|
||||
"Content Initialization failed."));
|
||||
|
||||
// Create the headerbar
|
||||
let header = Rc::new(Header::new(&content, &window, &sender));
|
||||
let local_menu = !app.prefers_app_menu();
|
||||
let header = Rc::new(Header::new(&content, &window, &sender, local_menu));
|
||||
|
||||
// Add the content main stack to the overlay.
|
||||
let overlay = gtk::Overlay::new();
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
use glib;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
use gio::MenuModel;
|
||||
|
||||
use failure::Error;
|
||||
use failure::ResultExt;
|
||||
@ -22,10 +23,12 @@ pub struct Header {
|
||||
switch: gtk::StackSwitcher,
|
||||
back: gtk::Button,
|
||||
show_title: gtk::Label,
|
||||
export: gtk::ModelButton,
|
||||
update_box: gtk::Box,
|
||||
update_label: gtk::Label,
|
||||
update_spinner: gtk::Spinner,
|
||||
menu_button: gtk::Button,
|
||||
menu_popover: gtk::Popover,
|
||||
app_menu: MenuModel
|
||||
}
|
||||
|
||||
impl Default for Header {
|
||||
@ -37,10 +40,13 @@ impl Default for Header {
|
||||
let switch = builder.get_object("switch").unwrap();
|
||||
let back = builder.get_object("back").unwrap();
|
||||
let show_title = builder.get_object("show_title").unwrap();
|
||||
let export = builder.get_object("export").unwrap();
|
||||
let update_box = builder.get_object("update_notification").unwrap();
|
||||
let update_label = builder.get_object("update_label").unwrap();
|
||||
let update_spinner = builder.get_object("update_spinner").unwrap();
|
||||
let menu_button = builder.get_object("menu_toggle").unwrap();
|
||||
let menu_popover = builder.get_object("menu_popover").unwrap();
|
||||
let menus = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/menus.ui");
|
||||
let app_menu = menus.get_object("app-menu").unwrap();
|
||||
|
||||
Header {
|
||||
container: header,
|
||||
@ -48,23 +54,27 @@ impl Default for Header {
|
||||
switch,
|
||||
back,
|
||||
show_title,
|
||||
export,
|
||||
update_box,
|
||||
update_label,
|
||||
update_spinner,
|
||||
menu_button,
|
||||
menu_popover,
|
||||
app_menu,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Refactor components into smaller state machines
|
||||
impl Header {
|
||||
pub fn new(content: &Content, window: >k::ApplicationWindow, sender: &Sender<Action>) -> Header {
|
||||
pub fn new(content: &Content, window: >k::ApplicationWindow,
|
||||
sender: &Sender<Action>, local_menu: bool) -> Header {
|
||||
let h = Header::default();
|
||||
h.init(content, window, &sender);
|
||||
h.init(content, window, &sender, local_menu);
|
||||
h
|
||||
}
|
||||
|
||||
pub fn init(&self, content: &Content, window: >k::ApplicationWindow, sender: &Sender<Action>) {
|
||||
pub fn init(&self, content: &Content, window: >k::ApplicationWindow,
|
||||
sender: &Sender<Action>, local_menu: bool) {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/headerbar.ui");
|
||||
|
||||
let add_popover: gtk::Popover = builder.get_object("add_popover").unwrap();
|
||||
@ -105,6 +115,11 @@ impl Header {
|
||||
.ok();
|
||||
}),
|
||||
);
|
||||
|
||||
if local_menu {
|
||||
self.menu_popover.bind_model(Some(&self.app_menu), None);
|
||||
self.menu_button.set_visible(true);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn switch_to_back(&self, title: &str) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user