Desktop: Add app menu for Mac (#3428)

* add mac app menu

* review fixup

* Remove "About Graphite" ellipsis, add "Show All", make it say "Quit Graphite"

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
Timon
2025-11-29 00:42:14 +01:00
committed by GitHub
parent 406f3d93f3
commit bb4516e377
15 changed files with 230 additions and 93 deletions

View File

@@ -117,7 +117,7 @@ pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMess
Platform::Mac => AppWindowPlatform::Mac,
Platform::Linux => AppWindowPlatform::Linux,
};
let message = AppWindowMessage::AppWindowUpdatePlatform { platform };
let message = AppWindowMessage::UpdatePlatform { platform };
dispatcher.queue_editor_message(message);
}
DesktopWrapperMessage::UpdateMaximized { maximized } => {

View File

@@ -67,18 +67,6 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
FrontendMessage::TriggerVisitLink { url } => {
dispatcher.respond(DesktopFrontendMessage::OpenUrl(url));
}
FrontendMessage::DragWindow => {
dispatcher.respond(DesktopFrontendMessage::DragWindow);
}
FrontendMessage::CloseWindow => {
dispatcher.respond(DesktopFrontendMessage::CloseWindow);
}
FrontendMessage::TriggerMinimizeWindow => {
dispatcher.respond(DesktopFrontendMessage::MinimizeWindow);
}
FrontendMessage::TriggerMaximizeWindow => {
dispatcher.respond(DesktopFrontendMessage::MaximizeWindow);
}
FrontendMessage::UpdateViewportPhysicalBounds { x, y, width, height } => {
dispatcher.respond(DesktopFrontendMessage::UpdateViewportPhysicalBounds { x, y, width, height });
}
@@ -131,6 +119,27 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
return Some(FrontendMessage::UpdateMenuBarLayout { layout, layout_target });
}
FrontendMessage::WindowClose => {
dispatcher.respond(DesktopFrontendMessage::WindowClose);
}
FrontendMessage::WindowMinimize => {
dispatcher.respond(DesktopFrontendMessage::WindowMinimize);
}
FrontendMessage::WindowMaximize => {
dispatcher.respond(DesktopFrontendMessage::WindowMaximize);
}
FrontendMessage::WindowDrag => {
dispatcher.respond(DesktopFrontendMessage::WindowDrag);
}
FrontendMessage::WindowHide => {
dispatcher.respond(DesktopFrontendMessage::WindowHide);
}
FrontendMessage::WindowHideOthers => {
dispatcher.respond(DesktopFrontendMessage::WindowHideOthers);
}
FrontendMessage::WindowShowAll => {
dispatcher.respond(DesktopFrontendMessage::WindowShowAll);
}
m => return Some(m),
}
None
@@ -151,11 +160,7 @@ fn convert_menu_bar_entry_to_menu_item(
}: &MenuBarEntry,
) -> Option<MenuItem> {
let id = action.widget_id.0;
let text = if label.is_empty() {
return None;
} else {
label.clone()
};
let text = label.clone();
let enabled = !*disabled;
if !children.0.is_empty() {

View File

@@ -32,10 +32,6 @@ pub enum DesktopFrontendMessage {
height: f64,
},
UpdateOverlays(vello::Scene),
MinimizeWindow,
MaximizeWindow,
DragWindow,
CloseWindow,
PersistenceWriteDocument {
id: DocumentId,
document: Document,
@@ -58,6 +54,13 @@ pub enum DesktopFrontendMessage {
UpdateMenu {
entries: Vec<MenuItem>,
},
WindowClose,
WindowMinimize,
WindowMaximize,
WindowDrag,
WindowHide,
WindowHideOthers,
WindowShowAll,
}
pub enum DesktopWrapperMessage {