From bbbf9bfb9c27e389340cf50a11c22fa46c572150 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Wed, 19 Feb 2014 07:04:34 +0100 Subject: [PATCH] gtk: Support GTK without VTE GTK without VTE is needed for hosts which don't support VTE (for example all variants of MinGW), but it can also be reasonable for other hosts. Signed-off-by: Stefan Weil --- configure | 54 +++++++++++++++++++++++++++++++++++++----------------- ui/gtk.c | 17 ++++++++++++++++- 2 files changed, 53 insertions(+), 18 deletions(-) diff --git a/configure b/configure index aae617e765..5eaa802a80 100755 --- a/configure +++ b/configure @@ -318,6 +318,7 @@ glusterfs_zerofill="no" virtio_blk_data_plane="" gtk="" gtkabi="2.0" +vte="" tpm="no" libssh2="" vhdx="" @@ -1063,6 +1064,10 @@ for opt do ;; --with-gtkabi=*) gtkabi="$optarg" ;; + --disable-vte) vte="no" + ;; + --enable-vte) vte="yes" + ;; --enable-tpm) tpm="yes" ;; --disable-libssh2) libssh2="no" @@ -1946,30 +1951,41 @@ if test "$gtk" != "no"; then gtkpackage="gtk+-$gtkabi" if test "$gtkabi" = "3.0" ; then gtkversion="3.0.0" + else + gtkversion="2.18.0" + fi + if $pkg_config --exists "$gtkpackage >= $gtkversion"; then + gtk_cflags=`$pkg_config --cflags $gtkpackage` + gtk_libs=`$pkg_config --libs $gtkpackage` + libs_softmmu="$gtk_libs $libs_softmmu" + gtk="yes" + elif test "$gtk" = "yes"; then + feature_not_found "gtk" "Install gtk2 or gtk3 (requires --with-gtkabi=3.0 option to configure) devel" + else + gtk="no" + fi +fi + +########################################## +# VTE probe + +if test "$vte" != "no"; then + if test "$gtkabi" = "3.0"; then vtepackage="vte-2.90" vteversion="0.32.0" else - gtkversion="2.18.0" vtepackage="vte" vteversion="0.24.0" fi - if ! $pkg_config --exists "$gtkpackage >= $gtkversion"; then - if test "$gtk" = "yes" ; then - feature_not_found "gtk" "Install gtk2 or gtk3 (requires --with-gtkabi=3.0 option to configure) devel" - fi - gtk="no" - elif ! $pkg_config --exists "$vtepackage >= $vteversion"; then - if test "$gtk" = "yes" ; then - error_exit "libvte not found (required for gtk support)" - fi - gtk="no" + if $pkg_config --exists "$vtepackage >= $vteversion"; then + vte_cflags=`$pkg_config --cflags $vtepackage` + vte_libs=`$pkg_config --libs $vtepackage` + libs_softmmu="$vte_libs $libs_softmmu" + vte="yes" + elif test "$vte" = "yes"; then + feature_not_found "vte" "Install libvte or libvte-2.90 (requires --with-gtkabi=3.0 option to configure) devel" else - gtk_cflags=`$pkg_config --cflags $gtkpackage` - gtk_libs=`$pkg_config --libs $gtkpackage` - vte_cflags=`$pkg_config --cflags $vtepackage` - vte_libs=`$pkg_config --libs $vtepackage` - libs_softmmu="$gtk_libs $vte_libs $libs_softmmu" - gtk="yes" + vte="no" fi fi @@ -4053,6 +4069,7 @@ fi echo "pixman $pixman" echo "SDL support $sdl" echo "GTK support $gtk" +echo "VTE support $vte" echo "curses support $curses" echo "curl support $curl" echo "mingw32 support $mingw32" @@ -4381,6 +4398,9 @@ echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak if test "$gtk" = "yes" ; then echo "CONFIG_GTK=y" >> $config_host_mak echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak +fi +if test "$vte" = "yes" ; then + echo "CONFIG_VTE=y" >> $config_host_mak echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak fi if test "$xen" = "yes" ; then diff --git a/ui/gtk.c b/ui/gtk.c index baabf865c0..f056e4034b 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -54,7 +54,9 @@ #include #include #include +#if defined(CONFIG_VTE) #include +#endif #include #include "trace.h" @@ -68,6 +70,9 @@ #define MAX_VCS 10 +#if !defined(CONFIG_VTE) +# define VTE_CHECK_VERSION(a, b, c) 0 +#endif /* Compatibility define to let us build on both Gtk2 and Gtk3 */ #if GTK_CHECK_VERSION(3, 0, 0) @@ -105,8 +110,10 @@ typedef struct VirtualConsole { GtkWidget *menu_item; GtkWidget *terminal; +#if defined(CONFIG_VTE) GtkWidget *scrolled_window; CharDriverState *chr; +#endif int fd; } VirtualConsole; @@ -1063,6 +1070,7 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2, if (arg2 == 0) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->vga_item), TRUE); } else { +#if defined(CONFIG_VTE) VirtualConsole *vc = &s->vc[arg2 - 1]; VteTerminal *term = VTE_TERMINAL(vc->terminal); int width, height; @@ -1072,6 +1080,9 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2, gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE); gtk_widget_set_size_request(vc->terminal, width, height); +#else + g_assert_not_reached(); +#endif } gtk_widget_set_sensitive(s->grab_item, on_vga); @@ -1117,7 +1128,7 @@ static int gd_vc_chr_write(CharDriverState *chr, const uint8_t *buf, int len) { VirtualConsole *vc = chr->opaque; - return write(vc->fd, buf, len); + return vc ? write(vc->fd, buf, len) : len; } static int nb_vcs; @@ -1142,6 +1153,7 @@ void early_gtk_display_init(void) register_vc_handler(gd_vc_handler); } +#if defined(CONFIG_VTE) static gboolean gd_vc_in(GIOChannel *chan, GIOCondition cond, void *opaque) { VirtualConsole *vc = opaque; @@ -1157,10 +1169,12 @@ static gboolean gd_vc_in(GIOChannel *chan, GIOCondition cond, void *opaque) return TRUE; } +#endif static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSList *group, GtkWidget *view_menu) { +#if defined(CONFIG_VTE) const char *label; char buffer[32]; char path[32]; @@ -1230,6 +1244,7 @@ static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSL chan = g_io_channel_unix_new(vc->fd); g_io_add_watch(chan, G_IO_IN, gd_vc_in, vc); +#endif /* CONFIG_VTE */ return group; }