From nobody Sun Nov 9 19:11:27 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1551718687518133.71626797630313; Mon, 4 Mar 2019 08:58:07 -0800 (PST) Received: from localhost ([127.0.0.1]:57253 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0quf-0001xM-F3 for importer@patchew.org; Mon, 04 Mar 2019 11:58:01 -0500 Received: from eggs.gnu.org ([209.51.188.92]:52500) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0qn2-0004P3-Hm for qemu-devel@nongnu.org; Mon, 04 Mar 2019 11:50:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0qn1-0005ka-G2 for qemu-devel@nongnu.org; Mon, 04 Mar 2019 11:50:08 -0500 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:36970) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h0qn1-0005k0-6J for qemu-devel@nongnu.org; Mon, 04 Mar 2019 11:50:07 -0500 Received: by mail-wr1-x42a.google.com with SMTP id w6so6320563wrs.4 for ; Mon, 04 Mar 2019 08:50:07 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id x74sm7238018wmf.22.2019.03.04.08.50.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Mar 2019 08:50:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=gcFShq28SeXckPj3K18dzebRvmC0E8l9cqlRJnbBFbk=; b=I6Ex5jd7Kx5Hj8d3+R/598uMfNWKBqpUWemACPwp65E5SG2vbv1GSzQ+WGV0y3rSti 63TqU8A3pJZDFOG4/iQJ/5SV6ooLanM4gFPBARX4wq7i8vn2oKGTZwcbhD5CYiHOWCBq F4QgUv+EbX/r5DvJaiJA5O8vIspUaDcwqJ54OCBBFx8jbUQcE3DmKvX4S8h3Imxc/Bc0 cqTn6GJ35aX2wjkRdv9X5J+q6WSarNNIp3lYWdcr0bRZNwDqzW4uPSej29eP5d0mZFbp FU1CeuFzy6DaAEIbi+386vZhcAV1C4VVfWLV5d+4gTMIr81vKseStD/CVbon9Vzz/VKR IGBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gcFShq28SeXckPj3K18dzebRvmC0E8l9cqlRJnbBFbk=; b=dHP6xDSCb3QDReAXOlh1KMkSGd88ef04XSMXKvhPldhYrRVJwzu60ewCbkxERh5A7Q VYNX57lIQE4iKJ33l+xJdL6wUDtflt9lBxUcZhkkK8CvhNhFtavdSDKKzMwylnV+P0wQ rzz8yAWQUBgOHG+73rtKklgImUKjE3+mu4KgShQoSwEu8Wd8S8QJBv0zSAB/Nj1e+YBm kozao5wEuNNygkW0KBR9mvzClnHh6lE/3ChVkjCTfQJ5e4ab5QcbYreilU4LcwupbWhE 93aeKqAxAduEd7jSxdoi5lEYgYtpZ6GS2CvtfP1KaQR5pwb2hvBBAVtQnMZtfJNCjBfa gnnw== X-Gm-Message-State: APjAAAWSBD7V70ncuLUpPeNxDG6yQe4A/hSOXykcpOQfuO4E5ERneM+1 VYP7dvvIJjTiCqdq/j0srDSkam9Cm+I= X-Google-Smtp-Source: APXvYqwPOslKa0XJL72XRZNvNkbOU/m5SYWsvpb2SaXGwooJkeYF8Cooth2xtlaEqfn0LO0M180ydQ== X-Received: by 2002:adf:9e0c:: with SMTP id u12mr12951608wre.216.1551718205949; Mon, 04 Mar 2019 08:50:05 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Mon, 4 Mar 2019 16:49:56 +0000 Message-Id: <20190304164958.9362-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190304164958.9362-1-peter.maydell@linaro.org> References: <20190304164958.9362-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::42a Subject: [Qemu-devel] [PULL 5/7] ui/cocoa: Don't call NSApp sendEvent directly from handleEvent X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Currently the handleEvent method will directly call the NSApp sendEvent method for any events that we want to let OSX deal with. When we rearrange the event handling code, the way that we say "let OSX have this event" is going to change. Prepare for that by refactoring so that handleEvent returns a flag indicating whether it consumed the event. Suggested-by: BALATON Zoltan Signed-off-by: Peter Maydell Reviewed-by: BALATON Zoltan Reviewed-by: Roman Bolshakov Tested-by: Roman Bolshakov Message-id: 20190225102433.22401-6-peter.maydell@linaro.org Message-id: 20190214102816.3393-6-peter.maydell@linaro.org --- ui/cocoa.m | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index d1fc1a6aff4..1b54d42aba6 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -129,8 +129,9 @@ bool stretch_video; NSTextField *pauseLabel; NSArray * supportedImageFileTypes; =20 -// Utility function to run specified code block with iothread lock held +// Utility functions to run specified code block with iothread lock held typedef void (^CodeBlock)(void); +typedef bool (^BoolCodeBlock)(void); =20 static void with_iothread_lock(CodeBlock block) { @@ -144,6 +145,21 @@ static void with_iothread_lock(CodeBlock block) } } =20 +static bool bool_with_iothread_lock(BoolCodeBlock block) +{ + bool locked =3D qemu_mutex_iothread_locked(); + bool val; + + if (!locked) { + qemu_mutex_lock_iothread(); + } + val =3D block(); + if (!locked) { + qemu_mutex_unlock_iothread(); + } + return val; +} + // Mac to QKeyCode conversion const int mac_to_qkeycode_map[] =3D { [kVK_ANSI_A] =3D Q_KEY_CODE_A, @@ -320,8 +336,8 @@ static void handleAnyDeviceErrors(Error * err) - (void) ungrabMouse; - (void) toggleFullScreen:(id)sender; - (void) handleMonitorInput:(NSEvent *)event; -- (void) handleEvent:(NSEvent *)event; -- (void) handleEventLocked:(NSEvent *)event; +- (bool) handleEvent:(NSEvent *)event; +- (bool) handleEventLocked:(NSEvent *)event; - (void) setAbsoluteEnabled:(BOOL)tIsAbsoluteEnabled; /* The state surrounding mouse grabbing is potentially confusing. * isAbsoluteEnabled tracks qemu_input_is_absolute() [ie "is the emulated @@ -664,15 +680,16 @@ QemuCocoaView *cocoaView; } } =20 -- (void) handleEvent:(NSEvent *)event +- (bool) handleEvent:(NSEvent *)event { - with_iothread_lock(^{ - [self handleEventLocked:event]; + return bool_with_iothread_lock(^{ + return [self handleEventLocked:event]; }); } =20 -- (void) handleEventLocked:(NSEvent *)event +- (bool) handleEventLocked:(NSEvent *)event { + /* Return true if we handled the event, false if it should be given to= OSX */ COCOA_DEBUG("QemuCocoaView: handleEvent\n"); int buttons =3D 0; int keycode =3D 0; @@ -743,8 +760,7 @@ QemuCocoaView *cocoaView; if (keycode =3D=3D Q_KEY_CODE_F) { switched_to_fullscreen =3D true; } - [NSApp sendEvent:event]; - return; + return false; } =20 // default @@ -759,12 +775,12 @@ QemuCocoaView *cocoaView; // enable graphic console case '1' ... '9': console_select(key - '0' - 1); /* ascii math */ - return; + return true; =20 // release the mouse grab case 'g': [self ungrabMouse]; - return; + return true; } } } @@ -781,7 +797,7 @@ QemuCocoaView *cocoaView; // don't pass the guest a spurious key-up if we treated this // command-key combo as a host UI action if (!isMouseGrabbed && ([event modifierFlags] & NSEventModifie= rFlagCommand)) { - return; + return true; } =20 if (qemu_console_is_graphic(NULL)) { @@ -875,7 +891,7 @@ QemuCocoaView *cocoaView; mouse_event =3D false; break; default: - [NSApp sendEvent:event]; + return false; } =20 if (mouse_event) { @@ -911,10 +927,11 @@ QemuCocoaView *cocoaView; qemu_input_queue_rel(dcl->con, INPUT_AXIS_Y, (int)[event d= eltaY]); } } else { - [NSApp sendEvent:event]; + return false; } qemu_input_event_sync(); } + return true; } =20 - (void) grabMouse @@ -1753,7 +1770,9 @@ static void cocoa_refresh(DisplayChangeListener *dcl) event =3D [NSApp nextEventMatchingMask:NSEventMaskAny untilDate:di= stantPast inMode: NSDefaultRunLoopMode dequeue:YES]; if (event !=3D nil) { - [cocoaView handleEvent:event]; + if (![cocoaView handleEvent:event]) { + [NSApp sendEvent:event]; + } } } while(event !=3D nil); [pool release]; --=20 2.20.1