Set up an application quit action group
This ties together a menu item, closing the main window, and Ctrl-Q into the same action, which is to quit the application.
This commit is contained in:
parent
56ff5527ba
commit
c14b20b79e
|
@ -56,9 +56,8 @@ impl AppWindow {
|
||||||
.width_request(800)
|
.width_request(800)
|
||||||
.height_request(746)
|
.height_request(746)
|
||||||
.build();
|
.build();
|
||||||
window.connect_destroy({
|
window.connect_destroy(|s| {
|
||||||
let adw_app = adw_app.clone();
|
let _ = gtk::prelude::WidgetExt::activate_action(s, "app.quit", None);
|
||||||
move |_| adw_app.quit()
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let stylesheet = String::from_utf8(
|
let stylesheet = String::from_utf8(
|
||||||
|
@ -87,10 +86,22 @@ impl AppWindow {
|
||||||
|
|
||||||
let initial_view = View::Placeholder(PlaceholderView::default().upcast());
|
let initial_view = View::Placeholder(PlaceholderView::default().upcast());
|
||||||
|
|
||||||
|
let header_bar = adw::HeaderBar::new();
|
||||||
|
|
||||||
|
let main_menu = gio::Menu::new();
|
||||||
|
main_menu.append(Some("Quit"), Some("app.quit"));
|
||||||
|
let main_menu_button = gtk::MenuButton::builder()
|
||||||
|
.icon_name("open-menu")
|
||||||
|
.direction(gtk::ArrowType::Down)
|
||||||
|
.halign(gtk::Align::End)
|
||||||
|
.menu_model(&main_menu)
|
||||||
|
.build();
|
||||||
|
header_bar.pack_end(&main_menu_button);
|
||||||
|
|
||||||
layout.append(&initial_view.widget());
|
layout.append(&initial_view.widget());
|
||||||
|
|
||||||
let nav_layout = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
let nav_layout = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
||||||
nav_layout.append(&adw::HeaderBar::new());
|
nav_layout.append(&header_bar);
|
||||||
nav_layout.append(&layout);
|
nav_layout.append(&layout);
|
||||||
navigation.push(
|
navigation.push(
|
||||||
&adw::NavigationPage::builder()
|
&adw::NavigationPage::builder()
|
||||||
|
|
|
@ -25,6 +25,8 @@ mod views;
|
||||||
|
|
||||||
use adw::prelude::*;
|
use adw::prelude::*;
|
||||||
use app_window::AppWindow;
|
use app_window::AppWindow;
|
||||||
|
use components::ActionGroup;
|
||||||
|
use gio::{Action, ActionEntry};
|
||||||
use std::{env, path::PathBuf};
|
use std::{env, path::PathBuf};
|
||||||
|
|
||||||
const APP_ID_DEV: &str = "com.luminescent-dreams.fitnesstrax.dev";
|
const APP_ID_DEV: &str = "com.luminescent-dreams.fitnesstrax.dev";
|
||||||
|
@ -65,6 +67,14 @@ fn main() {
|
||||||
let icon_theme = gtk::IconTheme::for_display(&gdk::Display::default().unwrap());
|
let icon_theme = gtk::IconTheme::for_display(&gdk::Display::default().unwrap());
|
||||||
icon_theme.add_resource_path(&(RESOURCE_BASE_PATH.to_owned() + "/icons/scalable/actions"));
|
icon_theme.add_resource_path(&(RESOURCE_BASE_PATH.to_owned() + "/icons/scalable/actions"));
|
||||||
|
|
||||||
|
let app_close_action = ActionEntry::builder("quit")
|
||||||
|
.activate(|app: &adw::Application, _, _| {
|
||||||
|
app.quit();
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
adw_app.add_action_entries([app_close_action]);
|
||||||
|
adw_app.set_accels_for_action("app.quit", &["<Ctrl>Q"]);
|
||||||
|
|
||||||
AppWindow::new(app_id, RESOURCE_BASE_PATH, adw_app, ft_app.clone());
|
AppWindow::new(app_id, RESOURCE_BASE_PATH, adw_app, ft_app.clone());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue