From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 86FF7C433DB for ; Sun, 10 Jan 2021 00:15:00 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DECD223888 for ; Sun, 10 Jan 2021 00:14:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DECD223888 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=yadro.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:42368 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kyONm-0002z7-Ma for qemu-devel@archiver.kernel.org; Sat, 09 Jan 2021 19:14:58 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:46464) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kyON0-0002Zy-HE for qemu-devel@nongnu.org; Sat, 09 Jan 2021 19:14:10 -0500 Received: from mta-02.yadro.com ([89.207.88.252]:59278 helo=mta-01.yadro.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kyOMx-0000hy-9I for qemu-devel@nongnu.org; Sat, 09 Jan 2021 19:14:09 -0500 Received: from localhost (unknown [127.0.0.1]) by mta-01.yadro.com (Postfix) with ESMTP id C01F641243; Sun, 10 Jan 2021 00:14:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yadro.com; h= in-reply-to:content-disposition:content-type:content-type :mime-version:references:message-id:subject:subject:from:from :date:date:received:received:received; s=mta-01; t=1610237642; x=1612052043; bh=6kKYeUjBrMmP1Bdu/+5xvQmWIbc89nkMg85MM61TfS4=; b= ZdWyLHh2cMpUxSRO0roZ86tjL/5c5dH1HAXJs/VQffa/jgBVR3b9efR9fXJ7qIXz IAUyCdjfw07EDFazr4N7dAIfqoRRjhJTh8Yw/OtOGamqByxyH8w2GEouQkraHgSd MEHGF6TkciJDWbocAyKILqCNBjKDFzICLV5B6A3qbu0= X-Virus-Scanned: amavisd-new at yadro.com Received: from mta-01.yadro.com ([127.0.0.1]) by localhost (mta-01.yadro.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hbAy18BsPFKY; Sun, 10 Jan 2021 03:14:02 +0300 (MSK) Received: from T-EXCH-03.corp.yadro.com (t-exch-03.corp.yadro.com [172.17.100.103]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mta-01.yadro.com (Postfix) with ESMTPS id C73194120D; Sun, 10 Jan 2021 03:14:01 +0300 (MSK) Received: from localhost (172.17.204.212) by T-EXCH-03.corp.yadro.com (172.17.100.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.669.32; Sun, 10 Jan 2021 03:14:01 +0300 Date: Sun, 10 Jan 2021 03:14:24 +0300 From: Roman Bolshakov To: BALATON Zoltan Subject: Re: [PATCH v2] ui/cocoa: Fix openFile: deprecation on Big Sur Message-ID: References: <20210102150718.47618-1-r.bolshakov@yadro.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: X-Originating-IP: [172.17.204.212] X-ClientProxiedBy: T-EXCH-01.corp.yadro.com (172.17.10.101) To T-EXCH-03.corp.yadro.com (172.17.100.103) Received-SPF: pass client-ip=89.207.88.252; envelope-from=r.bolshakov@yadro.com; helo=mta-01.yadro.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , QEMU Developers , Gerd Hoffmann Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" 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 wrote: > > > > > > > > On Sat, 2 Jan 2021 at 15:14, Roman Bolshakov 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 > > > > > --- > > > > > > > > Reviewed-by: Peter Maydell > > > > > > > > > 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 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/ > >