feat: macos services menu added (#3231)
This commit is contained in:
parent
a7241b3db3
commit
075996b1fa
4 changed files with 30 additions and 7 deletions
|
|
@ -11,6 +11,7 @@ Unreleased` header.
|
||||||
|
|
||||||
# Unreleased
|
# Unreleased
|
||||||
|
|
||||||
|
- On macOS, add services menu.
|
||||||
- On macOS, remove spurious error logging when handling `Fn`.
|
- On macOS, remove spurious error logging when handling `Fn`.
|
||||||
|
|
||||||
# 0.29.4
|
# 0.29.4
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,9 @@ extern_methods!(
|
||||||
#[method(setMainMenu:)]
|
#[method(setMainMenu:)]
|
||||||
pub fn setMainMenu(&self, menu: &NSMenu);
|
pub fn setMainMenu(&self, menu: &NSMenu);
|
||||||
|
|
||||||
|
#[method(setServicesMenu:)]
|
||||||
|
pub fn setServicesMenu(&self, menu: &NSMenu);
|
||||||
|
|
||||||
#[method_id(effectiveAppearance)]
|
#[method_id(effectiveAppearance)]
|
||||||
pub fn effectiveAppearance(&self) -> Id<NSAppearance>;
|
pub fn effectiveAppearance(&self) -> Id<NSAppearance>;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,11 @@ extern_methods!(
|
||||||
#[method_id(new)]
|
#[method_id(new)]
|
||||||
pub fn new() -> Id<Self>;
|
pub fn new() -> Id<Self>;
|
||||||
|
|
||||||
pub fn newWithTitle(title: &NSString, action: Sel, key_equivalent: &NSString) -> Id<Self> {
|
pub fn newWithTitle(
|
||||||
|
title: &NSString,
|
||||||
|
action: Option<Sel>,
|
||||||
|
key_equivalent: &NSString,
|
||||||
|
) -> Id<Self> {
|
||||||
unsafe {
|
unsafe {
|
||||||
msg_send_id![
|
msg_send_id![
|
||||||
Self::alloc(),
|
Self::alloc(),
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,16 @@ pub fn initialize() {
|
||||||
|
|
||||||
// About menu item
|
// About menu item
|
||||||
let about_item_title = ns_string!("About ").stringByAppendingString(&process_name);
|
let about_item_title = ns_string!("About ").stringByAppendingString(&process_name);
|
||||||
let about_item = menu_item(&about_item_title, sel!(orderFrontStandardAboutPanel:), None);
|
let about_item = menu_item(
|
||||||
|
&about_item_title,
|
||||||
|
Some(sel!(orderFrontStandardAboutPanel:)),
|
||||||
|
None,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Services menu item
|
||||||
|
let services_menu = NSMenu::new();
|
||||||
|
let services_item = menu_item(ns_string!("Services"), None, None);
|
||||||
|
services_item.setSubmenu(&services_menu);
|
||||||
|
|
||||||
// Seperator menu item
|
// Seperator menu item
|
||||||
let sep_first = NSMenuItem::separatorItem();
|
let sep_first = NSMenuItem::separatorItem();
|
||||||
|
|
@ -30,7 +39,7 @@ pub fn initialize() {
|
||||||
let hide_item_title = ns_string!("Hide ").stringByAppendingString(&process_name);
|
let hide_item_title = ns_string!("Hide ").stringByAppendingString(&process_name);
|
||||||
let hide_item = menu_item(
|
let hide_item = menu_item(
|
||||||
&hide_item_title,
|
&hide_item_title,
|
||||||
sel!(hide:),
|
Some(sel!(hide:)),
|
||||||
Some(KeyEquivalent {
|
Some(KeyEquivalent {
|
||||||
key: ns_string!("h"),
|
key: ns_string!("h"),
|
||||||
masks: None,
|
masks: None,
|
||||||
|
|
@ -41,7 +50,7 @@ pub fn initialize() {
|
||||||
let hide_others_item_title = ns_string!("Hide Others");
|
let hide_others_item_title = ns_string!("Hide Others");
|
||||||
let hide_others_item = menu_item(
|
let hide_others_item = menu_item(
|
||||||
hide_others_item_title,
|
hide_others_item_title,
|
||||||
sel!(hideOtherApplications:),
|
Some(sel!(hideOtherApplications:)),
|
||||||
Some(KeyEquivalent {
|
Some(KeyEquivalent {
|
||||||
key: ns_string!("h"),
|
key: ns_string!("h"),
|
||||||
masks: Some(
|
masks: Some(
|
||||||
|
|
@ -52,7 +61,11 @@ pub fn initialize() {
|
||||||
|
|
||||||
// Show applications menu item
|
// Show applications menu item
|
||||||
let show_all_item_title = ns_string!("Show All");
|
let show_all_item_title = ns_string!("Show All");
|
||||||
let show_all_item = menu_item(show_all_item_title, sel!(unhideAllApplications:), None);
|
let show_all_item = menu_item(
|
||||||
|
show_all_item_title,
|
||||||
|
Some(sel!(unhideAllApplications:)),
|
||||||
|
None,
|
||||||
|
);
|
||||||
|
|
||||||
// Seperator menu item
|
// Seperator menu item
|
||||||
let sep = NSMenuItem::separatorItem();
|
let sep = NSMenuItem::separatorItem();
|
||||||
|
|
@ -61,7 +74,7 @@ pub fn initialize() {
|
||||||
let quit_item_title = ns_string!("Quit ").stringByAppendingString(&process_name);
|
let quit_item_title = ns_string!("Quit ").stringByAppendingString(&process_name);
|
||||||
let quit_item = menu_item(
|
let quit_item = menu_item(
|
||||||
&quit_item_title,
|
&quit_item_title,
|
||||||
sel!(terminate:),
|
Some(sel!(terminate:)),
|
||||||
Some(KeyEquivalent {
|
Some(KeyEquivalent {
|
||||||
key: ns_string!("q"),
|
key: ns_string!("q"),
|
||||||
masks: None,
|
masks: None,
|
||||||
|
|
@ -70,6 +83,7 @@ pub fn initialize() {
|
||||||
|
|
||||||
app_menu.addItem(&about_item);
|
app_menu.addItem(&about_item);
|
||||||
app_menu.addItem(&sep_first);
|
app_menu.addItem(&sep_first);
|
||||||
|
app_menu.addItem(&services_item);
|
||||||
app_menu.addItem(&hide_item);
|
app_menu.addItem(&hide_item);
|
||||||
app_menu.addItem(&hide_others_item);
|
app_menu.addItem(&hide_others_item);
|
||||||
app_menu.addItem(&show_all_item);
|
app_menu.addItem(&show_all_item);
|
||||||
|
|
@ -78,12 +92,13 @@ pub fn initialize() {
|
||||||
app_menu_item.setSubmenu(&app_menu);
|
app_menu_item.setSubmenu(&app_menu);
|
||||||
|
|
||||||
let app = NSApp();
|
let app = NSApp();
|
||||||
|
app.setServicesMenu(&services_menu);
|
||||||
app.setMainMenu(&menubar);
|
app.setMainMenu(&menubar);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn menu_item(
|
fn menu_item(
|
||||||
title: &NSString,
|
title: &NSString,
|
||||||
selector: Sel,
|
selector: Option<Sel>,
|
||||||
key_equivalent: Option<KeyEquivalent<'_>>,
|
key_equivalent: Option<KeyEquivalent<'_>>,
|
||||||
) -> Id<NSMenuItem> {
|
) -> Id<NSMenuItem> {
|
||||||
let (key, masks) = match key_equivalent {
|
let (key, masks) = match key_equivalent {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue