From: Roman Bolshakov <r.bolshakov@yadro.com>
To: BALATON Zoltan <balaton@eik.bme.hu>
Cc: Peter Maydell <peter.maydell@linaro.org>,
QEMU Developers <qemu-devel@nongnu.org>,
Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur
Date: Sun, 10 Jan 2021 03:14:24 +0300 [thread overview]
Message-ID: <X/pG4MVxih424H+a@SPB-NB-133.local> (raw)
In-Reply-To: <e585d6ab-2dc8-4d1d-fbf7-96ecfdaa79@eik.bme.hu>
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/
> >
next prev parent reply other threads:[~2021-01-10 0:15 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-02 15:07 [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur Roman Bolshakov
2021-01-08 13:50 ` Peter Maydell
2021-01-08 15:00 ` Peter Maydell
2021-01-08 15:05 ` Peter Maydell
2021-01-08 21:48 ` Roman Bolshakov
2021-01-08 22:20 ` Peter Maydell
2021-01-12 11:40 ` Peter Maydell
2021-01-08 21:09 ` Roman Bolshakov
2021-01-08 23:13 ` BALATON Zoltan
2021-01-09 12:25 ` Christian Schoenebeck via
2021-01-10 0:31 ` Roman Bolshakov
2021-01-10 0:14 ` Roman Bolshakov [this message]
2021-01-10 1:13 ` BALATON Zoltan
2021-01-10 2:27 ` Roman Bolshakov
2021-03-22 17:03 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=X/pG4MVxih424H+a@SPB-NB-133.local \
--to=r.bolshakov@yadro.com \
--cc=balaton@eik.bme.hu \
--cc=kraxel@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).