diff --git a/crates/pdfs-gui/resources/icons/scalable/actions/pdfs-menu-symbolic.svg b/crates/pdfs-gui/resources/icons/scalable/actions/pdfs-menu-symbolic.svg
deleted file mode 100644
index 5796a0f..0000000
--- a/crates/pdfs-gui/resources/icons/scalable/actions/pdfs-menu-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/crates/pdfs-gui/resources/pdfs.gresource.xml b/crates/pdfs-gui/resources/pdfs.gresource.xml
index 1026a5a..80b0b1b 100644
--- a/crates/pdfs-gui/resources/pdfs.gresource.xml
+++ b/crates/pdfs-gui/resources/pdfs.gresource.xml
@@ -14,7 +14,6 @@
scalable/actions/pdfs-details-pane-symbolic.svg
scalable/actions/pdfs-link-symbolic.svg
scalable/actions/pdfs-map-symbolic.svg
- scalable/actions/pdfs-menu-symbolic.svg
scalable/actions/pdfs-people-symbolic.svg
scalable/actions/pdfs-share-symbolic.svg
scalable/actions/pdfs-sync-symbolic.svg
diff --git a/crates/pdfs-gui/resources/style.css b/crates/pdfs-gui/resources/style.css
index e46a333..a21039a 100644
--- a/crates/pdfs-gui/resources/style.css
+++ b/crates/pdfs-gui/resources/style.css
@@ -18,7 +18,9 @@
.sidebar-status image.warning { color: var(--warning-color); }
.sidebar-status image.error { color: var(--error-color); }
.sidebar-quota progressbar trough, .sidebar-quota progressbar progress { min-height: 4px; }
-.sidebar-account { padding: 4px 4px 4px 8px; }
+/* The account row is the main menu's button: a row, not a pushbutton, so
+ * the name keeps the text weight. */
+button.sidebar-account { padding: 4px 8px; font-weight: normal; }
/* A count of what waits on a page, at the end of its sidebar row */
.sidebar-badge {
min-width: 10px;
diff --git a/crates/pdfs-gui/src/app/main.rs b/crates/pdfs-gui/src/app/main.rs
index 8feb958..7f8f67e 100644
--- a/crates/pdfs-gui/src/app/main.rs
+++ b/crates/pdfs-gui/src/app/main.rs
@@ -831,7 +831,6 @@ fn build_sidebar(footer: >k4::Box) -> (adw::NavigationPage, gtk4::ListBox) {
let header = adw::HeaderBar::new();
header.set_title_widget(Some(&brand));
- header.pack_end(&build_primary_menu());
let scroll = gtk4::ScrolledWindow::builder()
.hscrollbar_policy(gtk4::PolicyType::Never)
@@ -1154,25 +1153,7 @@ fn toast_failure(ui: &Rc, what: &str, message: &str, kind: ErrorKind) {
}
}
-/// The sidebar's primary (hamburger) menu: the app-level entries that don't
-/// belong on any one page.
-fn build_primary_menu() -> gtk4::MenuButton {
- let menu = gio::Menu::new();
- menu.append(Some(&gettext("Preferences")), Some("win.preferences"));
- menu.append(Some(&gettext("Keyboard Shortcuts")), Some("win.shortcuts"));
- menu.append(
- Some(&gettext("About Proton Drive for Linux")),
- Some("win.about"),
- );
- gtk4::MenuButton::builder()
- .icon_name("pdfs-menu-symbolic")
- .tooltip_text(gettext("Main menu"))
- .primary(true)
- .menu_model(&menu)
- .build()
-}
-
-/// Back the primary and account menus' entries with window actions.
+/// Back the main menu's entries with window actions.
fn install_window_actions(ui: &Rc, window: &adw::ApplicationWindow) {
let preferences = gio::SimpleAction::new("preferences", None);
let ui_prefs = ui.clone();
diff --git a/crates/pdfs-gui/src/app/pages/status.rs b/crates/pdfs-gui/src/app/pages/status.rs
index adaece5..fab7142 100644
--- a/crates/pdfs-gui/src/app/pages/status.rs
+++ b/crates/pdfs-gui/src/app/pages/status.rs
@@ -381,23 +381,34 @@ pub(crate) fn build_main_page() -> MainWidgets {
.hexpand(true)
.ellipsize(gtk4::pango::EllipsizeMode::Middle)
.build();
+ // The app's one menu, on the account row the way Proton's own apps keep it:
+ // app-wide entries first, the account's last. The whole row opens it, and
+ // F10 too, as the primary menu.
+ let app_section = gio::Menu::new();
+ app_section.append(Some(&gettext("Preferences")), Some("win.preferences"));
+ app_section.append(Some(&gettext("Keyboard Shortcuts")), Some("win.shortcuts"));
+ app_section.append(
+ Some(&gettext("About Proton Drive for Linux")),
+ Some("win.about"),
+ );
+ let account_section = gio::Menu::new();
+ account_section.append(Some(&gettext("Sign Out…")), Some("win.sign-out"));
let account_menu = gio::Menu::new();
- account_menu.append(Some(&gettext("Preferences")), Some("win.preferences"));
- let sign_out = gio::Menu::new();
- sign_out.append(Some(&gettext("Sign Out…")), Some("win.sign-out"));
- account_menu.append_section(None, &sign_out);
- let account_button = gtk4::MenuButton::builder()
- .icon_name("view-more-symbolic")
- .tooltip_text(gettext("Account"))
+ account_menu.append_section(None, &app_section);
+ account_menu.append_section(None, &account_section);
+ let row = gtk4::Box::new(gtk4::Orientation::Horizontal, 10);
+ row.append(&avatar);
+ row.append(&account_name);
+ row.append(>k4::Image::from_icon_name("view-more-symbolic"));
+ let account = gtk4::MenuButton::builder()
+ .child(&row)
+ .tooltip_text(gettext("Main menu"))
.menu_model(&account_menu)
- .valign(gtk4::Align::Center)
+ .direction(gtk4::ArrowType::Up)
+ .primary(true)
.build();
- account_button.add_css_class("flat");
- let account = gtk4::Box::new(gtk4::Orientation::Horizontal, 10);
+ account.add_css_class("flat");
account.add_css_class("sidebar-account");
- account.append(&avatar);
- account.append(&account_name);
- account.append(&account_button);
let footer = gtk4::Box::new(gtk4::Orientation::Vertical, 10);
footer.add_css_class("sidebar-footer");