From patchwork Fri Mar 15 10:48:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhijian Li (Fujitsu)\" via" X-Patchwork-Id: 10854835 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E51891708 for ; Fri, 15 Mar 2019 14:01:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8D682AA28 for ; Fri, 15 Mar 2019 14:01:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C75322AA58; Fri, 15 Mar 2019 14:01:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 3E69A2AA43 for ; Fri, 15 Mar 2019 14:01:07 +0000 (UTC) Received: from localhost ([127.0.0.1]:55616 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h4nOU-00007E-Fz for patchwork-qemu-devel@patchwork.kernel.org; Fri, 15 Mar 2019 10:01:06 -0400 Received: from eggs.gnu.org ([209.51.188.92]:53609) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h4mZ7-0007bl-R9 for qemu-devel@nongnu.org; Fri, 15 Mar 2019 09:08:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h4mZ2-0003Gf-N9 for qemu-devel@nongnu.org; Fri, 15 Mar 2019 09:08:01 -0400 Received: from pv50p00im-ztdg10021801.me.com ([17.58.6.56]:42160) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h4mZ2-00035O-4O for qemu-devel@nongnu.org; Fri, 15 Mar 2019 09:07:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=me.com; s=04042017; t=1552646910; bh=QPkcVTp1ytyY5hxk+SU1bl0Z8xjT0bDimQpGJvrt/aM=; h=From:Message-Id:Content-Type:Mime-Version:Subject:Date:To; b=w3fYmotj4tER0ZtI6mdLfvZfhvLfCL1cz/osEvS3AWChzYeq3SNLhDNemsRNxtYxm Mo5dh2t2s/ipx3MgD0G62mucNXBdFME6T3aJ9Sf05JUk/infVs9lRb/WIRIUYTGgcF A5z24VjCVM8OlxToENhMhYQ1PFg5dgcSX2/mng4BgnKLtN60jCP7DY7jnWgwPJQbq6 aUVngEQaL4XVptbi1yHDTahH+ds1TtmTi39Hwkc2McIx8phga2vrsAzxKrBCAFVWF8 7nsxE19fg5ERuPq0euK93f0n/8ovqs/qjuBzuHX0W6qLIGL86sX0aICIxucquxyz2d s1rjRD4cuDblQ== Received: from [172.18.2.102] (unknown [36.106.166.130]) by pv50p00im-ztdg10021801.me.com (Postfix) with ESMTPSA id 73FBE36011C; Fri, 15 Mar 2019 10:48:29 +0000 (UTC) Message-Id: <3C058793-9AAE-4C01-B099-1ED4D713243F@me.com> Mime-Version: 1.0 (Mac OS X Mail 12.2 \(3445.102.3\)) Date: Fri, 15 Mar 2019 18:48:29 +0800 In-Reply-To: To: qemu-devel@nongnu.org References: X-Mailer: Apple Mail (2.3445.102.3) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-03-15_08:, , signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=1 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1812120000 definitions=main-1903150078 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 17.58.6.56 X-Content-Filtered-By: Mailman/MimeDel 2.1.21 Subject: [Qemu-devel] [PATCH 2/2] ui/cocoa: fix grabbing issue in fullscreen mode 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: , X-Patchwork-Original-From: Chen Zhang via Qemu-devel From: "Zhijian Li (Fujitsu)\" via" Reply-To: Chen Zhang Cc: Peter Maydell , Gerd Hoffmann Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Chen Zhang > --- ui/cocoa.m | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index 5d0a6599d9..8e74f6e283 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -410,11 +410,31 @@ QemuCocoaView *cocoaView; { NSWindow *eventWindow = [ev window]; if (!eventWindow) { - return [self.window convertPointFromScreen:[ev locationInWindow]]; - } else if ([self.window isEqual:eventWindow]) { - return [ev locationInWindow]; + if (!isFullscreen) { + return [[self window] convertPointFromScreen:[ev locationInWindow]]; + } else { + CGPoint loc = [self convertPoint:[[self window] convertPointFromScreen:[ev locationInWindow]] fromView:nil]; + if (!stretch_video) { + return loc; + } + loc.x /= cdx; + loc.y /= cdy; + return loc; + } + } else if ([[self window] isEqual:eventWindow]) { + if (!isFullscreen) { + return [ev locationInWindow]; + } else { + CGPoint loc = [self convertPoint:[ev locationInWindow] fromView:nil]; + if (!stretch_video) { + return loc; + } + loc.x /= cdx; + loc.y /= cdy; + return loc; + } } else { - return [self.window convertPointFromScreen:[eventWindow convertPointToScreen:[ev locationInWindow]]]; + return [[self window] convertPointFromScreen:[eventWindow convertPointToScreen:[ev locationInWindow]]]; } } @@ -722,7 +742,6 @@ QemuCocoaView *cocoaView; int keycode = 0; bool mouse_event = false; static bool switched_to_fullscreen = false; - NSPoint p = [event locationInWindow]; switch ([event type]) { case NSEventTypeFlagsChanged: @@ -835,7 +854,7 @@ QemuCocoaView *cocoaView; if (isAbsoluteEnabled) { BOOL is_key_window = [[self window] isKeyWindow]; BOOL is_in_screen = [self screenContainsPointOfEvent: event]; - if (!is_in_screen || !is_key_window) { + if (!is_in_screen || !(is_key_window || isFullscreen)) { if (isMouseGrabbed) { [self ungrabMouse]; } @@ -881,7 +900,7 @@ QemuCocoaView *cocoaView; break; case NSEventTypeLeftMouseUp: mouse_event = true; - if (!isMouseGrabbed && [self screenContainsPoint:p]) { + if (!isMouseGrabbed && [self screenContainsPointOfEvent:event]) { if([[self window] isKeyWindow]) { [self grabMouse]; } @@ -944,7 +963,7 @@ QemuCocoaView *cocoaView; if (isMouseGrabbed) { if (isAbsoluteEnabled) { /* Note that the origin for Cocoa mouse coords is bottom left, not top left. - * The check on screenContainsPoint is to avoid sending out of range values for + * The check on screenContainsPointOfEvent is to avoid sending out of range values for * clicks in the titlebar. */ if ([self screenContainsPointOfEvent:event]) {