Commit 0acf0a50 authored by Peter Maydell's avatar Peter Maydell
Browse files

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



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

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 7f6613ce bbbf9bfb
Loading
Loading
Loading
Loading
+37 −17
Original line number Diff line number Diff line
@@ -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"
      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
    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"
        fi
    else
        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"
fi

##########################################
# VTE probe

if test "$vte" != "no"; then
    if test "$gtkabi" = "3.0"; then
      vtepackage="vte-2.90"
      vteversion="0.32.0"
    else
	gtk_cflags=`$pkg_config --cflags $gtkpackage`
	gtk_libs=`$pkg_config --libs $gtkpackage`
      vtepackage="vte"
      vteversion="0.24.0"
    fi
    if $pkg_config --exists "$vtepackage >= $vteversion"; then
        vte_cflags=`$pkg_config --cflags $vtepackage`
        vte_libs=`$pkg_config --libs $vtepackage`
	libs_softmmu="$gtk_libs $vte_libs $libs_softmmu"
	gtk="yes"
        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
        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
+16 −1
Original line number Diff line number Diff line
@@ -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;
}