mirror of https://gitee.com/openkylin/qemu.git
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 <sw@weilnetz.de>
This commit is contained in:
parent
7f6613cedc
commit
bbbf9bfb9c
|
@ -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
|
||||||
|
|
17
ui/gtk.c
17
ui/gtk.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue