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:
commit
0acf0a50c8
54
configure
vendored
54
configure
vendored
@ -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
|
||||
|
17
ui/gtk.c
17
ui/gtk.c
@ -54,7 +54,9 @@
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <locale.h>
|
||||
#if defined(CONFIG_VTE)
|
||||
#include <vte/vte.h>
|
||||
#endif
|
||||
#include <math.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user