[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur
From: |
Roman Bolshakov |
Subject: |
Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur |
Date: |
Sun, 10 Jan 2021 03:14:24 +0300 |
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.maydell@linaro.org>
> > > wrote:
> > > >
> > > > On Sat, 2 Jan 2021 at 15:14, Roman Bolshakov <r.bolshakov@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.bolshakov@yadro.com>
> > > > > ---
> > > >
> > > > Reviewed-by: Peter Maydell <peter.maydell@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/
> >
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur, (continued)
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur, Roman Bolshakov, 2021/01/08
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur, BALATON Zoltan, 2021/01/08
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur, Christian Schoenebeck, 2021/01/09
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur, Roman Bolshakov, 2021/01/09
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur,
Roman Bolshakov <=
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur, BALATON Zoltan, 2021/01/09
- Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur, Roman Bolshakov, 2021/01/09