ui/gtk.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-)
From: Dongwon Kim <dongwon.kim@intel.com>
Enable hotkey for toggling window fullscreening for all individual
untabified VCs
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
---
ui/gtk.c | 39 +++++++++++++++++++++++++++++++++++----
1 file changed, 35 insertions(+), 4 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 93b13b7a30..768e66bec4 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1396,6 +1396,34 @@ static gboolean gd_win_grab(void *opaque)
return TRUE;
}
+static void gd_vc_fullscreen_toggle(void *opaque)
+{
+ VirtualConsole *vc = opaque;
+ GdkWindow *window;
+ GdkWindowState state;
+
+ if (!vc->window)
+ return;
+
+ window = gtk_widget_get_window(vc->window);
+ 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) {
+ 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;
@@ -1428,10 +1456,13 @@ static void gd_menu_untabify(GtkMenuItem *item, void *opaque)
if (qemu_console_is_graphic(vc->gfx.dcl.con)) {
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_fs = g_cclosure_new_swap(
+ G_CALLBACK(gd_vc_fullscreen_toggle),
+ vc, NULL);
+ gtk_accel_group_connect(ag, GDK_KEY_f, HOTKEY_MODIFIERS, 0, cb_fs);
}
gd_update_geometry_hints(vc);
--
2.34.1
Hi On Tue, Jul 2, 2024 at 4:09 AM <dongwon.kim@intel.com> wrote: > From: Dongwon Kim <dongwon.kim@intel.com> > > Enable hotkey for toggling window fullscreening for all individual > untabified VCs > > Cc: Marc-André Lureau <marcandre.lureau@redhat.com> > Cc: Vivek Kasireddy <vivek.kasireddy@intel.com> > Signed-off-by: Dongwon Kim <dongwon.kim@intel.com> > Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> (/rant I wish we had more common code with gd_menu_full_screen.. and overall cleaner..) --- > ui/gtk.c | 39 +++++++++++++++++++++++++++++++++++---- > 1 file changed, 35 insertions(+), 4 deletions(-) > > diff --git a/ui/gtk.c b/ui/gtk.c > index 93b13b7a30..768e66bec4 100644 > --- a/ui/gtk.c > +++ b/ui/gtk.c > @@ -1396,6 +1396,34 @@ static gboolean gd_win_grab(void *opaque) > return TRUE; > } > > +static void gd_vc_fullscreen_toggle(void *opaque) > +{ > + VirtualConsole *vc = opaque; > + GdkWindow *window; > + GdkWindowState state; > + > + if (!vc->window) > + return; > + > + window = gtk_widget_get_window(vc->window); > + 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) { > + 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; > @@ -1428,10 +1456,13 @@ static void gd_menu_untabify(GtkMenuItem *item, > void *opaque) > if (qemu_console_is_graphic(vc->gfx.dcl.con)) { > 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_fs = g_cclosure_new_swap( > + > G_CALLBACK(gd_vc_fullscreen_toggle), > + vc, NULL); > + gtk_accel_group_connect(ag, GDK_KEY_f, HOTKEY_MODIFIERS, 0, > cb_fs); > } > > gd_update_geometry_hints(vc); > -- > 2.34.1 > > > -- Marc-André Lureau
© 2016 - 2025 Red Hat, Inc.