From 9663e4b4f143d0277c1d1e6aa70a0ce3c24c3b8d Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 24 Aug 2022 04:57:43 +0300 Subject: [PATCH] Fixed items of system top menu bar on macOS. (#14288) The second attempt. This reverts commit e1caf32817df57895f43b8667e7072790659e48d. --- pkg/apple/OSX/en.lproj/MainMenu.xib | 4 +-- pkg/apple/OSX/en.lproj/MainMenu_Metal.xib | 4 +-- ui/drivers/ui_cocoa.m | 40 ++++++++++++++++++++++- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/pkg/apple/OSX/en.lproj/MainMenu.xib b/pkg/apple/OSX/en.lproj/MainMenu.xib index 5db4edfa08..eb7046193a 100644 --- a/pkg/apple/OSX/en.lproj/MainMenu.xib +++ b/pkg/apple/OSX/en.lproj/MainMenu.xib @@ -104,7 +104,7 @@ - + @@ -185,7 +185,7 @@ - + diff --git a/pkg/apple/OSX/en.lproj/MainMenu_Metal.xib b/pkg/apple/OSX/en.lproj/MainMenu_Metal.xib index 74760bc834..45cca8488a 100644 --- a/pkg/apple/OSX/en.lproj/MainMenu_Metal.xib +++ b/pkg/apple/OSX/en.lproj/MainMenu_Metal.xib @@ -104,7 +104,7 @@ - + @@ -185,7 +185,7 @@ - + diff --git a/ui/drivers/ui_cocoa.m b/ui/drivers/ui_cocoa.m index 81bddae04f..36c7675417 100644 --- a/ui/drivers/ui_cocoa.m +++ b/ui/drivers/ui_cocoa.m @@ -332,6 +332,33 @@ static ui_application_t ui_application_cocoa = { "cocoa" }; +@interface CommandPerformer : NSObject +@end // @interface CommandPerformer + +@implementation CommandPerformer { + void *data; + enum event_command cmd; +} + +- (id)initWithData:(void *)data command:(enum event_command)cmd +{ + self = [super init]; + if (!self) + return self; + + self->data = data; + self->cmd = cmd; + + return self; +} + +- (void)perform +{ + command_event(self->cmd, self->data); +} + +@end // @implementation CommandPerformer + #if defined(HAVE_COCOA_METAL) @interface RAWindow : NSWindow @end @@ -877,6 +904,12 @@ static void open_document_handler( case 20: cmd = CMD_EVENT_FULLSCREEN_TOGGLE; break; + case 21: + cmd = CMD_EVENT_TAKE_SCREENSHOT; + break; + case 22: + cmd = CMD_EVENT_AUDIO_MUTE_TOGGLE; + break; default: break; } @@ -921,7 +954,12 @@ static void ui_companion_cocoa_deinit(void *data) static void *ui_companion_cocoa_init(void) { return (void*)-1; } static void ui_companion_cocoa_notify_content_loaded(void *data) { } static void ui_companion_cocoa_toggle(void *data, bool force) { } -static void ui_companion_cocoa_event_command(void *data, enum event_command cmd) { } +static void ui_companion_cocoa_event_command(void *data, enum event_command cmd) +{ + id performer = [[CommandPerformer alloc] initWithData:data command:cmd]; + [performer performSelectorOnMainThread:@selector(perform) withObject:nil waitUntilDone:NO]; + RELEASE(performer); +} static void ui_companion_cocoa_notify_list_pushed(void *data, file_list_t *list, file_list_t *menu_list) { }