qemu-devel
[Top][All Lists]
Advanced

[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/
> > 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]