Merge remote-tracking branch 'remotes/weil/qemu-2.0' into staging

* remotes/weil/qemu-2.0:
  gtk: Support GTK without VTE

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2014-03-26 14:07:25 +00:00
commit 0acf0a50c8
2 changed files with 53 additions and 18 deletions

54
configure vendored
View File

@ -318,6 +318,7 @@ glusterfs_zerofill="no"
virtio_blk_data_plane="" virtio_blk_data_plane=""
gtk="" gtk=""
gtkabi="2.0" gtkabi="2.0"
vte=""
tpm="no" tpm="no"
libssh2="" libssh2=""
vhdx="" vhdx=""
@ -1063,6 +1064,10 @@ for opt do
;; ;;
--with-gtkabi=*) gtkabi="$optarg" --with-gtkabi=*) gtkabi="$optarg"
;; ;;
--disable-vte) vte="no"
;;
--enable-vte) vte="yes"
;;
--enable-tpm) tpm="yes" --enable-tpm) tpm="yes"
;; ;;
--disable-libssh2) libssh2="no" --disable-libssh2) libssh2="no"
@ -1946,30 +1951,41 @@ if test "$gtk" != "no"; then
gtkpackage="gtk+-$gtkabi" gtkpackage="gtk+-$gtkabi"
if test "$gtkabi" = "3.0" ; then if test "$gtkabi" = "3.0" ; then
gtkversion="3.0.0" 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" vtepackage="vte-2.90"
vteversion="0.32.0" vteversion="0.32.0"
else else
gtkversion="2.18.0"
vtepackage="vte" vtepackage="vte"
vteversion="0.24.0" vteversion="0.24.0"
fi fi
if ! $pkg_config --exists "$gtkpackage >= $gtkversion"; then if $pkg_config --exists "$vtepackage >= $vteversion"; then
if test "$gtk" = "yes" ; then vte_cflags=`$pkg_config --cflags $vtepackage`
feature_not_found "gtk" "Install gtk2 or gtk3 (requires --with-gtkabi=3.0 option to configure) devel" vte_libs=`$pkg_config --libs $vtepackage`
fi libs_softmmu="$vte_libs $libs_softmmu"
gtk="no" vte="yes"
elif ! $pkg_config --exists "$vtepackage >= $vteversion"; then elif test "$vte" = "yes"; then
if test "$gtk" = "yes" ; then feature_not_found "vte" "Install libvte or libvte-2.90 (requires --with-gtkabi=3.0 option to configure) devel"
error_exit "libvte not found (required for gtk support)"
fi
gtk="no"
else else
gtk_cflags=`$pkg_config --cflags $gtkpackage` vte="no"
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"
fi fi
fi fi
@ -4053,6 +4069,7 @@ fi
echo "pixman $pixman" echo "pixman $pixman"
echo "SDL support $sdl" echo "SDL support $sdl"
echo "GTK support $gtk" echo "GTK support $gtk"
echo "VTE support $vte"
echo "curses support $curses" echo "curses support $curses"
echo "curl support $curl" echo "curl support $curl"
echo "mingw32 support $mingw32" echo "mingw32 support $mingw32"
@ -4381,6 +4398,9 @@ echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
if test "$gtk" = "yes" ; then if test "$gtk" = "yes" ; then
echo "CONFIG_GTK=y" >> $config_host_mak echo "CONFIG_GTK=y" >> $config_host_mak
echo "GTK_CFLAGS=$gtk_cflags" >> $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 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
fi fi
if test "$xen" = "yes" ; then if test "$xen" = "yes" ; then

View File

@ -54,7 +54,9 @@
#include <gdk/gdkkeysyms.h> #include <gdk/gdkkeysyms.h>
#include <glib/gi18n.h> #include <glib/gi18n.h>
#include <locale.h> #include <locale.h>
#if defined(CONFIG_VTE)
#include <vte/vte.h> #include <vte/vte.h>
#endif
#include <math.h> #include <math.h>
#include "trace.h" #include "trace.h"
@ -68,6 +70,9 @@
#define MAX_VCS 10 #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 */ /* Compatibility define to let us build on both Gtk2 and Gtk3 */
#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 0, 0)
@ -105,8 +110,10 @@ typedef struct VirtualConsole
{ {
GtkWidget *menu_item; GtkWidget *menu_item;
GtkWidget *terminal; GtkWidget *terminal;
#if defined(CONFIG_VTE)
GtkWidget *scrolled_window; GtkWidget *scrolled_window;
CharDriverState *chr; CharDriverState *chr;
#endif
int fd; int fd;
} VirtualConsole; } VirtualConsole;
@ -1063,6 +1070,7 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2,
if (arg2 == 0) { if (arg2 == 0) {
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->vga_item), TRUE); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->vga_item), TRUE);
} else { } else {
#if defined(CONFIG_VTE)
VirtualConsole *vc = &s->vc[arg2 - 1]; VirtualConsole *vc = &s->vc[arg2 - 1];
VteTerminal *term = VTE_TERMINAL(vc->terminal); VteTerminal *term = VTE_TERMINAL(vc->terminal);
int width, height; 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_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE);
gtk_widget_set_size_request(vc->terminal, width, height); gtk_widget_set_size_request(vc->terminal, width, height);
#else
g_assert_not_reached();
#endif
} }
gtk_widget_set_sensitive(s->grab_item, on_vga); 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; VirtualConsole *vc = chr->opaque;
return write(vc->fd, buf, len); return vc ? write(vc->fd, buf, len) : len;
} }
static int nb_vcs; static int nb_vcs;
@ -1142,6 +1153,7 @@ void early_gtk_display_init(void)
register_vc_handler(gd_vc_handler); register_vc_handler(gd_vc_handler);
} }
#if defined(CONFIG_VTE)
static gboolean gd_vc_in(GIOChannel *chan, GIOCondition cond, void *opaque) static gboolean gd_vc_in(GIOChannel *chan, GIOCondition cond, void *opaque)
{ {
VirtualConsole *vc = opaque; VirtualConsole *vc = opaque;
@ -1157,10 +1169,12 @@ static gboolean gd_vc_in(GIOChannel *chan, GIOCondition cond, void *opaque)
return TRUE; return TRUE;
} }
#endif
static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSList *group, static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSList *group,
GtkWidget *view_menu) GtkWidget *view_menu)
{ {
#if defined(CONFIG_VTE)
const char *label; const char *label;
char buffer[32]; char buffer[32];
char path[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); chan = g_io_channel_unix_new(vc->fd);
g_io_add_watch(chan, G_IO_IN, gd_vc_in, vc); g_io_add_watch(chan, G_IO_IN, gd_vc_in, vc);
#endif /* CONFIG_VTE */
return group; return group;
} }