On Sat, Jan 09, 2021 at 12:13:36AM +0100, BALATON Zoltan wrote: > On Sat, 9 Jan 2021, Roman Bolshakov wrote: > > On Fri, Jan 08, 2021 at 03:00:07PM +0000, Peter Maydell wrote: > > > On Fri, 8 Jan 2021 at 13:50, Peter Maydell <peter.mayd...@linaro.org> > > > wrote: > > > > > > > > On Sat, 2 Jan 2021 at 15:14, Roman Bolshakov <r.bolsha...@yadro.com> > > > > wrote: > > > > > > > > > > ui/cocoa.m:1188:44: warning: 'openFile:' is deprecated: first > > > > > deprecated in macOS 11.0 - Use -[NSWorkspace openURL:] instead. > > > > > [-Wdeprecated-declarations] > > > > > if ([[NSWorkspace sharedWorkspace] openFile: full_file_path] > > > > > == YES) { > > > > > ^ > > > > > /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWorkspace.h:350:1: > > > > > note: > > > > > 'openFile:' has been explicitly marked deprecated here > > > > > - (BOOL)openFile:(NSString *)fullPath API_DEPRECATED("Use > > > > > -[NSWorkspace openURL:] instead.", macos(10.0, 11.0)); > > > > > ^ > > > > > > > > > > Signed-off-by: Roman Bolshakov <r.bolsha...@yadro.com> > > > > > --- > > > > > > > > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> > > > > > > > > > So I was just trying to test this patch, and I found that at least > > > for me the osx menu bar has stopped working in QEMU -- keyboard > > > shortcuts to it still work but none of the menu buttons respond > > > to the mouse. Does that happen for anybody else? > > > > > > > There's an old bug when QEMU menu bar is not responsive because it's not > > properly activated. If you click off qemu and click on the qemu dock > > icon then it "gets fixed" (cmd-tab works too). Do you hit the issue as > > described in the article [1]? The code in the article does exactly the > > same what I'm doing manually. I wanted to fix it but somehow it got > > postponed for like a whole year :) I might try to make a fix this but > > note, the issue is not related to the patch. > > This does not sound like the best solution to the problem. There's some info > on this here (and blog post linked from it): > > https://stackoverflow.com/questions/7460092/nswindow-makekeyandorderfront-makes-window-appear-but-not-key-or-front > > Maybe we call makeKeyAndOrderFront: too early before the app is active and > that's causing the problem? Would it work better if that's moved after > [NSApp run]? (Maybe we also need canBecomeKey: somewhere but I don't see why > would that be needed for normal windows.) >
Hi Zoltan, Thanks for the suggestions. I have tried to move it around but that doesn't help. Note that minimal cococa app calls makeKeyAndOrderFront: before [NSApp run] and doesn't experience the issue: https://github.com/rgl/minimal-cocoa-app/blob/master/main.m The minimal program that experiences the issue of frozen menubar is: /* cc -framework Cocoa menufreeze.m */ #import <Cocoa/Cocoa.h> int main(void) { [NSApplication sharedApplication]; [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; dispatch_async(dispatch_get_main_queue(), ^{ [NSApp activateIgnoringOtherApps:YES]; }); [NSApp run]; return 0; } However if the program belongs to an app bundle it doesn't have the issue. (Simply move a.out into minimal-cocoa-app.app/Contents/MacOS/minimal-cocoa-app and use "open minimal-cocoa-app.app" in shell) Now if we apply the workaround mentioned in the article [1] that switches focus to Dock and then back to the app we can resolve the issue in QEMU: diff --git a/ui/cocoa.m b/ui/cocoa.m index f32adc3074..0986891ca0 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -1114,6 +1114,15 @@ QemuCocoaView *cocoaView; allow_events = true; /* Tell cocoa_display_init to proceed */ qemu_sem_post(&app_started_sem); + + /* Workaround unresponsive menu bar in macOS prior to Big Sur */ + NSArray *docks = [NSRunningApplication runningApplicationsWithBundleIdentifier: @"com.apple.dock"]; + if ([docks.firstObject activateWithOptions: NSApplicationActivateAllWindows]) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 200 * NSEC_PER_MSEC), + dispatch_get_main_queue(), ^{ + [NSApp activateIgnoringOtherApps:YES]; + }); + } } - (void)applicationWillTerminate:(NSNotification *)aNotification Peter, does it help you? And what version of macOS do you use? BTW, similar workaround was applied to javafx: https://github.com/openjdk/jfx/pull/361 Regards, Roman > > > > 1. > > https://ar.al/2018/09/17/workaround-for-unclickable-app-menu-bug-with-window.makekeyandorderfront-and-nsapp.activate-on-macos/ > >