From nobody Mon Sep 28 00:33:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1790021209; cv=none; d=zohomail.com; s=zohoarc; b=KSHOZfoPv3969sSg0sXMoW1iV9OT9RLl/3Z+Y4m21mdsKLJ8K4McSrOVYPmKt4xNXdSW5WlWC2g2o9IqgHrKuH2gl8LR8VtNOTqWBOOrfMtSn+1BceRvgioVqF5AARokC6Sy9ll01x235VTnxyZikSXRgjSpZxer2WS22AaTk6o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790021209; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=LCbDUtdqPl2MH02lRdR8l6YD/Jsjj+6S2pgRsU4Ta1I=; b=gGwo9uoummwOMGT0WNcesjWckAzov/5vZ4vLE0ysEzDAd6GNUbLBrVxeSmvqxZyg/5At77gyNkyBLESm3Q1fr2dJQeUW5K3fO/pHzAMOxs5tuM1KSsphp5aMy1xK0rTSM4Vmn2JKsxwkCJqBDMhb6svmGhyiKOQN/a8sma0mauY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 179002120891158.15446039692449; Mon, 21 Sep 2026 13:06:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x8kGs-0004CS-Id; Mon, 21 Sep 2026 16:05:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x8kGh-0004BU-VV for qemu-devel@nongnu.org; Mon, 21 Sep 2026 16:05:41 -0400 Received: from mgamail.intel.com ([192.198.163.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x8kGg-0004w8-5N for qemu-devel@nongnu.org; Mon, 21 Sep 2026 16:05:39 -0400 Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2026 13:05:30 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.80.113.172]) by fmviesa010.fm.intel.com with ESMTP; 21 Sep 2026 13:05:29 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1790021138; x=1821557138; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=XfvZzDpEXLn4QuaLAjlHI0ftUmg5ZFJ7OxwmnzPDewk=; b=VlKYnukVJxPGrnA040t6naGD5ddjBBrhDQUT/6cSm1Bu/YzDpjWxmzif ORO7Pvm9YAJBONMVoigO93pv3iexG7b9xl+7yPHCuiv32fxJuVLDDzgis fOeHRSpcEbfOIXhllyfLocNAj5c/8/B4HyT1LQQtquSG28DJy/42Zlm68 ulhRnVy4FlGZ0ZP3uOI+4PUNYnY/TpjswcQivsEkQ3+gXMMmHWEP0HVRA 91rMuyIzVmwHZ7Rq82a5TqHz8R0uTQSCTAzQGLblBRAwmzZoAcxLzacNv LRu4WEKB14S8kyD5XA9ClcvixlErO4jPVvPsv9p/XpToIoCIVN+i8YgRc w==; X-CSE-ConnectionGUID: ro7XrRAvTie6lcG2D1zkxA== X-CSE-MsgGUID: vhY+2Zo0TUKmM1j7K7cwqQ== X-IronPort-AV: E=McAfee;i="6800,10657,11912"; a="94399578" X-IronPort-AV: E=Sophos;i="6.27,115,1787036400"; d="scan'208";a="94399578" X-CSE-ConnectionGUID: P7M3tj4ST9C9M9yneqiZUw== X-CSE-MsgGUID: 1BXPS1AVQ/qxzLkD650X0Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.27,115,1787036400"; d="scan'208";a="272001014" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Subject: [PATCH v2 1/3] ui/gtk: Enable fullscreen and zoom hotkeys for detached windows Date: Tue, 11 Aug 2026 03:24:24 -0700 Message-Id: <20260811102426.35538-2-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260811102426.35538-1-dongwon.kim@intel.com> References: <20260811102426.35538-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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=lists1p.gnu.org; Received-SPF: pass client-ip=192.198.163.12; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_96_XX=3.405, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1790021211620158500 From: Dongwon Kim Currently, the fullscreen toggle hotkey (Ctrl+Alt+f by default) and zoom hotkeys (Ctrl+Alt++, Ctrl+Alt+-, Ctrl+Alt+0) only function for the main QEMU window. When a VC is detached (untabified), it loses these capabilitie= s. Implement toggle helpers, gd_win_full_screen and zoom helpers (gd_win_zoom_in, gd_win_zoom_out, gd_win_zoom_fixed) and connect them to the detached window's accelerator group in gd_menu_untabify. Also remove a leftover debug fprintf in gd_win_grab. v2: - Reuse gd_win_zoom_* in gd_menu_zoom_* to avoid duplicated scaling logic - Guard zoom helpers against NULL or non-GFX consoles (!vc || vc->type !=3D GD_VC_GFX) - Keep both GDK_KEY_plus and GDK_KEY_equal accelerators Cc: Marc-Andr=C3=A9 Lureau Signed-off-by: Dongwon Kim --- ui/gtk.c | 148 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 111 insertions(+), 37 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index ed7ffc06b1..5427c2f174 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1562,7 +1562,6 @@ static gboolean gd_win_grab(void *opaque) { VirtualConsole *vc =3D opaque; =20 - fprintf(stderr, "%s: %s\n", __func__, vc->label); if (vc->s->ptr_owner) { gd_ungrab_pointer(vc->s); } else { @@ -1571,6 +1570,96 @@ static gboolean gd_win_grab(void *opaque) return TRUE; } =20 +static gboolean gd_win_full_screen(void *opaque) +{ + VirtualConsole *vc =3D opaque; + GdkWindow *window; + GdkWindowState state; + + if (!vc || !vc->window || !gtk_widget_get_realized(vc->window)) { + return TRUE; + } + + window =3D gtk_widget_get_window(vc->window); + if (!window) { + return TRUE; + } + + state =3D gdk_window_get_state(window); + + if (state & GDK_WINDOW_STATE_FULLSCREEN) { + gtk_window_unfullscreen(GTK_WINDOW(vc->window)); + + if (vc->type =3D=3D GD_VC_GFX) { + vc->gfx.scale_x =3D vc->gfx.preferred_scale; + vc->gfx.scale_y =3D vc->gfx.preferred_scale; + gd_update_windowsize(vc); + } + } else { + if (vc->type =3D=3D GD_VC_GFX) { + gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1); + } + gtk_window_fullscreen(GTK_WINDOW(vc->window)); + } + + gd_update_cursor(vc); + return TRUE; +} + +static gboolean gd_win_zoom_in(void *opaque) +{ + VirtualConsole *vc =3D opaque; + + if (!vc || vc->type !=3D GD_VC_GFX) { + return TRUE; + } + + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->s->zoom_fit_ite= m), + FALSE); + + vc->gfx.scale_x +=3D VC_SCALE_STEP; + vc->gfx.scale_y +=3D VC_SCALE_STEP; + + gd_update_windowsize(vc); + return TRUE; +} + +static gboolean gd_win_zoom_out(void *opaque) +{ + VirtualConsole *vc =3D opaque; + + if (!vc || vc->type !=3D GD_VC_GFX) { + return TRUE; + } + + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->s->zoom_fit_ite= m), + FALSE); + + vc->gfx.scale_x -=3D VC_SCALE_STEP; + vc->gfx.scale_y -=3D VC_SCALE_STEP; + + vc->gfx.scale_x =3D MAX(vc->gfx.scale_x, VC_SCALE_MIN); + vc->gfx.scale_y =3D MAX(vc->gfx.scale_y, VC_SCALE_MIN); + + gd_update_windowsize(vc); + return TRUE; +} + +static gboolean gd_win_zoom_fixed(void *opaque) +{ + VirtualConsole *vc =3D opaque; + + if (!vc || vc->type !=3D GD_VC_GFX) { + return TRUE; + } + + vc->gfx.scale_x =3D vc->gfx.preferred_scale; + vc->gfx.scale_y =3D vc->gfx.preferred_scale; + + gd_update_windowsize(vc); + return TRUE; +} + static void gd_menu_untabify(GtkMenuItem *item, void *opaque) { GtkDisplayState *s =3D opaque; @@ -1609,9 +1698,24 @@ static void gd_menu_untabify(GtkMenuItem *item, void= *opaque) GtkAccelGroup *ag =3D gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(vc->window), ag); =20 - GClosure *cb =3D g_cclosure_new_swap(G_CALLBACK(gd_win_grab), - vc, NULL); - gtk_accel_group_connect(ag, GDK_KEY_g, HOTKEY_MODIFIERS, 0, cb= ); + gtk_accel_group_connect(ag, GDK_KEY_g, HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_win_grab), + vc, NULL)); + gtk_accel_group_connect(ag, GDK_KEY_f, HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_win_full_screen), + vc, NULL)); + gtk_accel_group_connect(ag, GDK_KEY_plus, HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_win_zoom_in), + vc, NULL)); + gtk_accel_group_connect(ag, GDK_KEY_equal, HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_win_zoom_in), + vc, NULL)); + gtk_accel_group_connect(ag, GDK_KEY_minus, HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_win_zoom_out), + vc, NULL)); + gtk_accel_group_connect(ag, GDK_KEY_0, HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_win_zoom_fixed), + vc, NULL)); } =20 gd_rebuild_vc_menu(s); @@ -1691,17 +1795,7 @@ static void gd_menu_zoom_in(GtkMenuItem *item, void = *opaque) GtkDisplayState *s =3D opaque; VirtualConsole *vc =3D gd_vc_find_current(s); =20 - if (!vc) { - return; - } - - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->zoom_fit_item), - FALSE); - - vc->gfx.scale_x +=3D VC_SCALE_STEP; - vc->gfx.scale_y +=3D VC_SCALE_STEP; - - gd_update_windowsize(vc); + gd_win_zoom_in(vc); } =20 static void gd_accel_zoom_in(void *opaque) @@ -1715,20 +1809,7 @@ static void gd_menu_zoom_out(GtkMenuItem *item, void= *opaque) GtkDisplayState *s =3D opaque; VirtualConsole *vc =3D gd_vc_find_current(s); =20 - if (!vc) { - return; - } - - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->zoom_fit_item), - FALSE); - - vc->gfx.scale_x -=3D VC_SCALE_STEP; - vc->gfx.scale_y -=3D VC_SCALE_STEP; - - vc->gfx.scale_x =3D MAX(vc->gfx.scale_x, VC_SCALE_MIN); - vc->gfx.scale_y =3D MAX(vc->gfx.scale_y, VC_SCALE_MIN); - - gd_update_windowsize(vc); + gd_win_zoom_out(vc); } =20 static void gd_menu_zoom_fixed(GtkMenuItem *item, void *opaque) @@ -1736,14 +1817,7 @@ static void gd_menu_zoom_fixed(GtkMenuItem *item, vo= id *opaque) GtkDisplayState *s =3D opaque; VirtualConsole *vc =3D gd_vc_find_current(s); =20 - if (!vc) { - return; - } - - vc->gfx.scale_x =3D vc->gfx.preferred_scale; - vc->gfx.scale_y =3D vc->gfx.preferred_scale; - - gd_update_windowsize(vc); + gd_win_zoom_fixed(vc); } =20 static void gd_menu_zoom_fit(GtkMenuItem *item, void *opaque) --=20 2.43.0 From nobody Mon Sep 28 00:33:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1790021213; cv=none; d=zohomail.com; s=zohoarc; b=el0QILvvLoUOH/JdrgvSZUGMqMncpoSD/Kr3m1W8GPMAYobcY+gFNKAwwqu0T3kvYeF198dfPHv6e7R4A3W9GSVHdjVe/sPoaJvuZd+/xNC3GmmGuse0ex0DAPq0gIH0AyjnOTzbRePby5J9Rp+zk3gL4NsrODyntRDE95iuzs4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790021213; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=ceyhVoaUigsRw+KL0GFq+PNbLp3AbYF6BMva//wGfOo=; b=dnNr39BaMP7446f0ScSe9pCY6azlwiUL2LziyapHLPL2NqecjjkmTVycmm5+dvs1HlWs2gYTASysNPJkasOixg6GsPA1kUeZxo6m1Z5CEuRn7vZoN6mBJClrRGZz8kt7ImClUib40MOgCiNw2h6cajIRvZp5Ue9ghWn3jPS3n/Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1790021213437635.4389574997018; Mon, 21 Sep 2026 13:06:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x8kGs-0004CO-GO; Mon, 21 Sep 2026 16:05:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x8kGi-0004BV-K8 for qemu-devel@nongnu.org; Mon, 21 Sep 2026 16:05:43 -0400 Received: from mgamail.intel.com ([192.198.163.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x8kGh-0004xI-2m for qemu-devel@nongnu.org; Mon, 21 Sep 2026 16:05:40 -0400 Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2026 13:05:30 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.80.113.172]) by fmviesa010.fm.intel.com with ESMTP; 21 Sep 2026 13:05:29 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1790021139; x=1821557139; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=+NPZiYa/RikN7zOA/SsRfoYags3Ge2kpmFpJ+5PqWSE=; b=kFjVETeNPyINU5TdFf+FppTs4m1p1MES7sWbQPYW5e02pP9GKeRAveeQ 5s9uuhrNz9mBieHeczQQZFMDf8CGbfQXxMaz4baBGw18EHPC7Cu9kUKQC yyOKG6DqyKmWLTjq8D+DNLI9p0EgdQe89PA5PeUO30RI+2PvG+O1xeSPy bRgEN2tzlcQGd7gnBuJpQSl2QZK2XDgz2CDZ07nNbO58X2fuJrXc8TbG5 6TCLCrf9xBNKaJUVRVSznYZi0u0eSdvYkhZYn6ZLuajLn1fgtY6CTZuSJ fhPg92jWEDXn8dfxFL0gxRYfIbDNBqaERk9FiWjykJbY93y0JEFCW8sT/ Q==; X-CSE-ConnectionGUID: Nye7WiOZROWyHtIMtiLMSw== X-CSE-MsgGUID: U8dFi8n5TlyB1eMkwKgnPQ== X-IronPort-AV: E=McAfee;i="6800,10657,11912"; a="94399579" X-IronPort-AV: E=Sophos;i="6.27,115,1787036400"; d="scan'208";a="94399579" X-CSE-ConnectionGUID: GSSJUPS+SWSy1eoWJAIiHQ== X-CSE-MsgGUID: EtbtK12RRCuQTEV/iRFgDA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.27,115,1787036400"; d="scan'208";a="272001016" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Subject: [PATCH v2 2/3] ui/gtk: Register "Grab Input" shortcut to accel_group Date: Tue, 11 Aug 2026 03:24:25 -0700 Message-Id: <20260811102426.35538-3-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260811102426.35538-1-dongwon.kim@intel.com> References: <20260811102426.35538-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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=lists1p.gnu.org; Received-SPF: pass client-ip=192.198.163.12; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_96_XX=3.405, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1790021216190158500 From: Dongwon Kim The "Grab Input" shortcut key currently fails to trigger when the window is in fullscreen mode because the menubar is hidden, which disables GtkAccelMap-based shortcuts associated with it. To ensure the accelerator remains active in fullscreen, connect it directly to s->accel_group and explicitly set the hotkey display on the menu item label. v2: gd_accel_grab_input returns TRUE Cc: Marc-Andr=C3=A9 Lureau Signed-off-by: Dongwon Kim --- ui/gtk.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index 5427c2f174..f20edc5c5b 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1959,6 +1959,14 @@ static void gd_menu_grab_input(GtkMenuItem *item, vo= id *opaque) } } =20 +static gboolean gd_accel_grab_input(void *opaque) +{ + GtkDisplayState *s =3D opaque; + + gtk_menu_item_activate(GTK_MENU_ITEM(s->grab_item)); + return TRUE; +} + static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2, gpointer data) { @@ -2643,6 +2651,7 @@ static void gd_create_menu_view(GtkDisplayState *s, D= isplayOptions *opts) { GtkWidget *view_menu; GtkWidget *separator; + GtkWidget *child; QemuConsole *con; bool zoom_to_fit =3D false; int vc, i; @@ -2701,12 +2710,16 @@ static void gd_create_menu_view(GtkDisplayState *s,= DisplayOptions *opts) gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->grab_on_hover_item= ); =20 s->grab_item =3D gtk_check_menu_item_new_with_mnemonic(_("_Grab Input"= )); - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(s->grab_item), - "/View/Grab Input"); - gtk_accel_map_add_entry("/View/Grab Input", GDK_KEY_g, - HOTKEY_MODIFIERS); gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->grab_item); =20 + gtk_accel_group_connect(s->accel_group, GDK_KEY_g, HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_accel_grab_i= nput), + s, NULL)); + child =3D gtk_bin_get_child(GTK_BIN(s->grab_item)); + if (GTK_IS_ACCEL_LABEL(child)) { + gtk_accel_label_set_accel(GTK_ACCEL_LABEL(child), + GDK_KEY_g, HOTKEY_MODIFIERS); + } separator =3D gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), separator); =20 --=20 2.43.0 From nobody Mon Sep 28 00:33:04 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1790021188; cv=none; d=zohomail.com; s=zohoarc; b=i4RLVKHkgB+DcPUo0O5RxRXdEaVRNhsz6hoEmWMC88UkOO1zJ5Vkfza0f7qAloxzLyE/R7Xu7/AXKSlNtIU4dUV7RNJZcOyOBa0y9u53xLktAVDPsT2/teIqfcdj/0r5PevyrlzWj0dB8wxUPPmalsGI4pButZ7uWeJlVTrCAv4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1790021188; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=Pgjy3/ffduhfyOMl5EWUE5odKlNJDUp4hmBgyHm3Fus=; b=ggplHBFNUdXqTHwU1DLwca06gtUX19wGzb4ZZPjCiYKn6/McXD+tUGXnNkO05x02Bm91H/S7nsE8WmkDl+72xCGAzQOAedaWEJN92nK+3aD4CUJz5w7jYkCi5V4w5A7ddy+8j9jESjBz/mNK/lXL1BKhZ1NmgS/NlhrrWIOjmwI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1790021188554594.1173892475348; Mon, 21 Sep 2026 13:06:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x8kGt-0004CT-Be; Mon, 21 Sep 2026 16:05:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x8kGj-0004Bd-Qh for qemu-devel@nongnu.org; Mon, 21 Sep 2026 16:05:45 -0400 Received: from mgamail.intel.com ([192.198.163.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x8kGi-0004w8-9c for qemu-devel@nongnu.org; Mon, 21 Sep 2026 16:05:41 -0400 Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2026 13:05:30 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.80.113.172]) by fmviesa010.fm.intel.com with ESMTP; 21 Sep 2026 13:05:29 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1790021140; x=1821557140; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=YAH+inPY1fqAvyDyMLGqXX9CkA+KytM7+HVvUjUVZEQ=; b=fccpuKE7vbyk6OycUdL83Sa5dISpIZNkroICSh52b/73dgS4dTn4/X2y 2kMR6r214c5XpKnsb50X9swyOw8jXVvxcU5OVHZotHnGYe5g0AeSh5IGk yQUll7pXrR/JuDugp7S3bWEcwBOI3KZwVI6sOGfiC5snh3uStHvibEI5j PNmmRqTLjirJG0c1azCG/sS5IDhR8jPF0qulcDbggWDB+5RZyKylXe3Z7 y1Zi/Ltx7t7gIkE5BdgNotAmoeg8DCZWk5FMwi+OPyU3bnTyZyFJy2u8g j6rYCnoLdn5nxWJulH7SHYkBM1QKVNMFluMDfeeUtTAlfNyiUoLngomMj Q==; X-CSE-ConnectionGUID: anw5x4toQMCmwHTFgChd4Q== X-CSE-MsgGUID: p+cqTH6WTjOjGU+ddIl50g== X-IronPort-AV: E=McAfee;i="6800,10657,11912"; a="94399580" X-IronPort-AV: E=Sophos;i="6.27,115,1787036400"; d="scan'208";a="94399580" X-CSE-ConnectionGUID: BLSrRgEuQkWiMK0dGDRYrA== X-CSE-MsgGUID: 8vfOTQ6QTouD5KQ6sPVLPA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.27,115,1787036400"; d="scan'208";a="272001017" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Subject: [PATCH 3/3] ui/gtk: Defer initial fullscreen activation until window is mapped Date: Tue, 11 Aug 2026 03:24:26 -0700 Message-Id: <20260811102426.35538-4-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260811102426.35538-1-dongwon.kim@intel.com> References: <20260811102426.35538-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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=lists1p.gnu.org; Received-SPF: pass client-ip=192.198.163.12; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -9 X-Spam_score: -1.0 X-Spam_bar: - X-Spam_report: (-1.0 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_96_XX=3.405, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1790021189356158500 From: Dongwon Kim When QEMU is started with '-display gtk,full-screen=3Don', the fullscreen state is currently requested in gtk_display_init() before the window is realized or mapped by the display server. On certain compositors (such as GNOME/Mutter under Wayland or X11), requesting fullscreen on an unmapped window can be overridden or dropped when the window is subsequently mapped and assigned its initial windowed geometry constraints. Resolve this by deferring the initial fullscreen toggle until the window's "map-event" signal fires. Once the native surface is fully mapped and acknowledged by the compositor, activate the fullscreen action and disconnect the one-shot handler. Cc: Marc-Andr=C3=A9 Lureau Signed-off-by: Dongwon Kim --- ui/gtk.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/ui/gtk.c b/ui/gtk.c index f20edc5c5b..cace30114e 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2861,6 +2861,22 @@ static void gd_vc_free(void *p) static GtkDisplayState *gtk_display_state; static gboolean gtkinit; =20 +static gboolean gd_window_map_event(GtkWidget *widget, GdkEvent *event, gp= ointer opaque) +{ + GtkDisplayState *s =3D opaque; + + if (s->opts->has_full_screen && + s->opts->full_screen) { + if (!s->full_screen) { + gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item)); + } + } + + /* Disconnect or ensure it runs only once at launch */ + g_signal_handlers_disconnect_by_func(widget, gd_window_map_event, s); + return FALSE; +} + static void gtk_display_init(DisplayState *ds, DisplayOptions *opts) { VirtualConsole *vc; @@ -2960,7 +2976,8 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) =20 if (opts->has_full_screen && opts->full_screen) { - gtk_menu_item_activate(GTK_MENU_ITEM(s->full_screen_item)); + g_signal_connect(s->window, "map-event", + G_CALLBACK(gd_window_map_event), s); } if (opts->u.gtk.has_grab_on_hover && opts->u.gtk.grab_on_hover) { --=20 2.43.0