mirror of
https://github.com/xemu-project/xemu.git
synced 2025-01-20 02:42:49 +00:00
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 <jan.kiszka@siemens.com> [ kraxel: fix warning with CONFIG_GTK=n ] Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
f4b11eee2f
commit
881249c792
@ -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
|
||||
|
@ -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
|
||||
|
5
ui/gtk.c
5
ui/gtk.c
@ -1438,7 +1438,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;
|
||||
@ -1517,6 +1517,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);
|
||||
|
||||
|
24
vl.c
24
vl.c
@ -143,6 +143,9 @@ int vga_interface_type = VGA_NONE;
|
||||
static int full_screen = 0;
|
||||
static int no_frame = 0;
|
||||
int no_quit = 0;
|
||||
#ifdef CONFIG_GTK
|
||||
static bool grab_on_hover;
|
||||
#endif
|
||||
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
|
||||
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
|
||||
CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
|
||||
@ -2276,6 +2279,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);
|
||||
@ -4399,7 +4421,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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user