From patchwork Sat Nov 9 16:07:20 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 290001 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 2E3802C00C2 for ; Sun, 10 Nov 2013 03:08:02 +1100 (EST) Received: from localhost ([::1]:57542 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VfB4p-0000Sf-Gr for incoming@patchwork.ozlabs.org; Sat, 09 Nov 2013 11:07:59 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59245) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VfB4S-0000LE-48 for qemu-devel@nongnu.org; Sat, 09 Nov 2013 11:07:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VfB4M-0008OD-DO for qemu-devel@nongnu.org; Sat, 09 Nov 2013 11:07:36 -0500 Received: from mout.web.de ([212.227.15.14]:61530) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VfB4M-0008O0-2U for qemu-devel@nongnu.org; Sat, 09 Nov 2013 11:07:30 -0500 Received: from mchn199C.mchp.siemens.de ([95.157.58.223]) by smtp.web.de (mrweb002) with ESMTPSA (Nemesis) id 0MYejS-1V9mQU1Kfy-00VPiU for ; Sat, 09 Nov 2013 17:07:28 +0100 Message-ID: <527E5DB8.40300@web.de> Date: Sat, 09 Nov 2013 17:07:20 +0100 From: Jan Kiszka User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 To: Anthony Liguori X-Enigmail-Version: 1.6 X-Provags-ID: V03:K0:m2aCS8/M2JdHjUq5I0+zas59oPTqrg8c/MvXGAkK0UCXE3Muaif ZJqSV3kVCzjiALdCl0UuL1o1J96sR8nW6GDjIuU4oDlY84Lwb+kkOl95Iu4HhZHdBiwFMR3 ELWAjq3ozLf2TkySx+3iDxUp+N560tIsSH36DnGILbRfl1Mr/264dIp/TvRg7U3CxitTvH1 xyhV46H3J7UhrYQQ4REZg== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 212.227.15.14 Cc: qemu-devel Subject: [Qemu-devel] [PATCH] gtk: Allow to activate grab-on-hover from the command line X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Jan Kiszka 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 --- include/ui/console.h | 2 +- qemu-options.hx | 5 +++++ ui/gtk.c | 5 ++++- vl.c | 22 +++++++++++++++++++++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index 98edf41..13420c1 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -339,6 +339,6 @@ int index_from_keycode(int code); /* 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 diff --git a/qemu-options.hx b/qemu-options.hx index 5dc8b75..2cb11b5 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -809,6 +809,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=[,]\n" " select display type\n", QEMU_ARCH_ALL) STEXI @@ -832,6 +833,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 @end table diff --git a/ui/gtk.c b/ui/gtk.c index b5f4f0b..43883b7 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1443,7 +1443,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; @@ -1522,6 +1522,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); diff --git a/vl.c b/vl.c index 4ad15b8..7b1b02b 100644 --- a/vl.c +++ b/vl.c @@ -201,6 +201,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]; @@ -2222,6 +2223,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); @@ -4284,7 +4304,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: