Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/weil/qemu-2.0' into staging
Browse files Browse the repository at this point in the history
* remotes/weil/qemu-2.0:
  gtk: Support GTK without VTE

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
pm215 committed Mar 26, 2014
2 parents 7f6613c + bbbf9bf commit 0acf0a5
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 18 deletions.
54 changes: 37 additions & 17 deletions configure
Expand Up @@ -318,6 +318,7 @@ glusterfs_zerofill="no"
virtio_blk_data_plane=""
gtk=""
gtkabi="2.0"
vte=""
tpm="no"
libssh2=""
vhdx=""
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down
17 changes: 16 additions & 1 deletion ui/gtk.c
Expand Up @@ -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"
Expand All @@ -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)
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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];
Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit 0acf0a5

Please sign in to comment.