From: Dongwon Kim <[email protected]> Currently, the fullscreen toggle hotkey (Ctrl+Alt+f by default) only functions for the main QEMU window. When a Virtual Console (VC) is detached into its own separate window (untabified), it loses this capability.
Implement a toggle helper, gd_win_fullscreen, and connect it to the 'f' accelerator when a detached window is created in gd_menu_untabify. This allows individual detached windows to be toggled fullscreen independently. Cc: Marc-André Lureau <[email protected]> Signed-off-by: Dongwon Kim <[email protected]> --- ui/gtk.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index a723c8215d..3c9720a330 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1556,6 +1556,42 @@ static gboolean gd_win_grab(void *opaque) return TRUE; } +static void gd_win_fullscreen(void *opaque) +{ + VirtualConsole *vc = opaque; + GtkDisplayState *s = vc->s; + GdkWindow *window; + GdkWindowState state; + + if (!vc->window || !gtk_widget_get_realized(vc->window)) { + return; + } + + window = gtk_widget_get_window(vc->window); + if (!window) { + return; + } + + state = gdk_window_get_state(window); + + if (state & GDK_WINDOW_STATE_FULLSCREEN) { + gtk_window_unfullscreen(GTK_WINDOW(vc->window)); + + if (vc->type == GD_VC_GFX) { + if (!s->free_scale) { + vc->gfx.scale_x = 1.0; + vc->gfx.scale_y = 1.0; + } + gd_update_windowsize(vc); + } + } else { + if (vc->type == GD_VC_GFX) { + gtk_widget_set_size_request(vc->gfx.drawing_area, -1, -1); + } + gtk_window_fullscreen(GTK_WINDOW(vc->window)); + } +} + static void gd_menu_untabify(GtkMenuItem *item, void *opaque) { GtkDisplayState *s = opaque; @@ -1590,9 +1626,13 @@ static void gd_menu_untabify(GtkMenuItem *item, void *opaque) GtkAccelGroup *ag = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(vc->window), ag); - GClosure *cb = g_cclosure_new_swap(G_CALLBACK(gd_win_grab), - vc, NULL); - gtk_accel_group_connect(ag, GDK_KEY_g, HOTKEY_MODIFIERS, 0, cb); + GClosure *cb_grab = g_cclosure_new_swap(G_CALLBACK(gd_win_grab), + vc, NULL); + gtk_accel_group_connect(ag, GDK_KEY_g, HOTKEY_MODIFIERS, 0, cb_grab); + GClosure *cb_fullscreen = g_cclosure_new_swap( + G_CALLBACK(gd_win_fullscreen), + vc, NULL); + gtk_accel_group_connect(ag, GDK_KEY_f, HOTKEY_MODIFIERS, 0, cb_fullscreen); } gd_rebuild_vc_menu(s); -- 2.43.0
