gtk: Allow to activate grab-on-hover from the command line
PATCH RESEND 1/1 gtk: Allow to activate grab-on-hover from the command line
As long as we have no persistent GTK configuration, this allows to enable the useful grab-on-hover feature already when starting the VM.
Signed-off-by Jan Kiszka <[email protected]>
--- include/ui/console.h | 2 +- qemu-options.hx | 5 +++++ ui/gtk.c | 5 ++++- vl.c | 22 +++++++++++++++++++++- 4 files changed, 31 insertions(+), 3 deletions(-)
include/ui/console.h +1 -1
@@ -345,6 +345,6 @@ int index_from_key(const char *key);/* gtk.c */ void early_gtk_display_init (void ); -void gtk_display_init (DisplayState *ds,bool full_screen); +void gtk_display_init (DisplayState *ds,bool full_screen,bool grab_on_hover);#endif
qemu-options.hx +5 -0
@@ -810,6 +810,7 @@ ETEXI DEF("display", HAS_ARG, QEMU_OPTION_display, "-display sdl[,frame=on|off][,alt_grab=on|off][,ctrl_grab=on|off]\n" " [,window_close=on|off]|curses|none|\n" + " gtk[,grab_on_hover=on|off]|\n" " vnc=<display>[,<optargs>]\n" " select display type\n", QEMU_ARCH_ALL) STEXI
@@ -833,6 +834,10 @@ graphics card, but its output will not be displayed to the QEMU user. This option differs from the -nographic option in that it only affects what is done with video output; -nographic also changes the destination of the serial and parallel port data. +@item gtk +Display video output in a GTK window. This interface provides drop-down +menus and other UI elements to configure and control the VM during +runtime. @item vnc Start a VNC server on display <arg> @end table
ui/gtk.c +4 -1
@@ -1415,7 +1415,7 @@ static const DisplayChangeListenerOps dcl_ops = { .dpy_cursor_define = gd_cursor_define, }; -void gtk_display_init (DisplayState *ds,bool full_screen) +void gtk_display_init (DisplayState *ds,bool full_screen,bool grab_on_hover) {GtkDisplayState *s =g_malloc0 (sizeof (*s));char *filename;
@@ -1494,6 +1494,9 @@ void gtk_display_init(DisplayState *ds, bool full_screen)if (full_screen) {gtk_menu_item_activate (GTK_MENU_ITEM (s->full_screen_item)); } +if (grab_on_hover) { +gtk_menu_item_activate (GTK_MENU_ITEM (s->grab_on_hover_item)); + }register_displaychangelistener (&s->dcl);
vl.c +21 -1
@@ -143,6 +143,7 @@ int vga_interface_type = VGA_NONE;static int full_screen =0 ;static int no_frame =0 ;int no_quit =0 ; +static bool grab_on_hover;CharDriverState *serial_hds[MAX_SERIAL_PORTS ];CharDriverState *parallel_hds[MAX_PARALLEL_PORTS ];CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES ];
@@ -2241,6 +2242,25 @@ static DisplayType select_display(const char *p) }else if (strstart (p,"gtk" , &opts)) {#ifdef CONFIG_GTK display =DT_GTK ; +while (*opts) { +const char *nextopt; + +if (strstart (opts,",grab_on_hover=" , &nextopt)) { + opts = nextopt; +if (strstart (opts,"on" , &nextopt)) { + grab_on_hover = true; + }else if (strstart (opts,"off" , &nextopt)) { + grab_on_hover = false; + }else { + goto invalid_gtk_args; + } + }else { + invalid_gtk_args: +fprintf (stderr,"Invalid GTK option string: %s\n" , p); +exit (1 ); + } + opts = nextopt; + }#else fprintf (stderr,"GTK support is disabled\n" );exit (1 );
@@ -4351,7 +4371,7 @@ int main(int argc, char **argv, char **envp)#endif #if defined(CONFIG_GTK )case DT_GTK : -gtk_display_init (ds, full_screen); +gtk_display_init (ds, full_screen, grab_on_hover);break ;#endif default :
Signature · 1 line
1.8.1.1.298.ge7eed54