From c58661b8f1d12f81ef9ceb474c786b593cfbf023 Mon Sep 17 00:00:00 2001
From: Stefan Weil <stefan@kiwi.(none)>
Date: Sat, 23 Feb 2013 09:51:43 +0100
Subject: [PATCH] vte

---
 configure |   36 +++++++++++++++++++++++++++++-------
 ui/gtk.c  |   25 +++++++++++++++++++++++--
 2 files changed, 52 insertions(+), 9 deletions(-)

diff --git a/configure b/configure
index dcaa67c..5d7effe 100755
--- a/configure
+++ b/configure
@@ -227,6 +227,7 @@ seccomp=""
 glusterfs=""
 virtio_blk_data_plane=""
 gtk=""
+vte=""
 
 # parse CC options first
 for opt do
@@ -902,6 +903,10 @@ for opt do
   ;;
   --enable-gtk) gtk="yes"
   ;;
+  --disable-vte) vte="no"
+  ;;
+  --enable-vte) vte="yes"
+  ;;
   *) echo "ERROR: unknown option $opt"; show_help="yes"
   ;;
   esac
@@ -1644,13 +1649,10 @@ fi
 # GTK probe
 
 if test "$gtk" != "no"; then
-    if $pkg_config --exists 'gtk+-2.0 >= 2.18.0' && \
-       $pkg_config --exists 'vte >= 0.24.0'; then
-	gtk_cflags=`$pkg_config --cflags gtk+-2.0 2>/dev/null`
-	gtk_libs=`$pkg_config --libs gtk+-2.0 2>/dev/null`
-	vte_cflags=`$pkg_config --cflags vte 2>/dev/null`
-	vte_libs=`$pkg_config --libs vte 2>/dev/null`
-	libs_softmmu="$gtk_libs $vte_libs $libs_softmmu"
+    if $pkg_config --exists 'gtk+-2.0 >= 2.18.0'; then
+        gtk_cflags=`$pkg_config --cflags gtk+-2.0`
+        gtk_libs=`$pkg_config --libs gtk+-2.0`
+        libs_softmmu="$gtk_libs $libs_softmmu"
 	gtk="yes"
     else
 	if test "$gtk" = "yes" ; then
@@ -1661,6 +1663,23 @@ if test "$gtk" != "no"; then
 fi
 
 ##########################################
+# VTE probe
+
+if test "$vte" != "no"; then
+    if $pkg_config --exists 'vte >= 0.24.0'; then
+        vte_cflags=`$pkg_config --cflags vte`
+        vte_libs=`$pkg_config --libs vte`
+        libs_softmmu="$vte_libs $libs_softmmu"
+        vte="yes"
+    else
+        if test "$vte" = "yes"; then
+            feature_not_found "vte"
+        fi
+        vte="no"
+    fi
+fi
+
+##########################################
 # SDL probe
 
 # Look for sdl configuration program (pkg-config or sdl-config).  Try
@@ -3335,6 +3354,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"
@@ -3629,6 +3649,8 @@ 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 "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
 fi
 if test "$xen" = "yes" ; then
diff --git a/ui/gtk.c b/ui/gtk.c
index dcce36d..0276ff5 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -49,7 +49,9 @@
 #include <gdk/gdkkeysyms.h>
 #include <glib/gi18n.h>
 #include <locale.h>
+#if defined(CONFIG_VTE)
 #include <vte/vte.h>
+#endif
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
@@ -72,6 +74,10 @@
 #define DPRINTF(fmt, ...) do { } while (0)
 #endif
 
+#if !defined(CONFIG_VTE)
+# define VTE_CHECK_VERSION(a, b, c) 0
+#endif
+
 #define MAX_VCS 10
 
 typedef struct VirtualConsole
@@ -669,7 +675,7 @@ static void gd_menu_full_screen(GtkMenuItem *item, void *opaque)
 
     if (!s->full_screen) {
         gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), FALSE);
-        gtk_widget_set_size_request(s->menu_bar, 0, 0);
+        gtk_widget_hide(s->menu_bar);
         gtk_widget_set_size_request(s->drawing_area, -1, -1);
         gtk_window_fullscreen(GTK_WINDOW(s->window));
         if (gd_on_vga(s)) {
@@ -679,7 +685,7 @@ static void gd_menu_full_screen(GtkMenuItem *item, void *opaque)
     } else {
         gtk_window_unfullscreen(GTK_WINDOW(s->window));
         gd_menu_show_tabs(GTK_MENU_ITEM(s->show_tabs_item), s);
-        gtk_widget_set_size_request(s->menu_bar, -1, -1);
+        gtk_widget_show(s->menu_bar);
         gtk_widget_set_size_request(s->drawing_area,
                                     ds_get_width(s->ds), ds_get_height(s->ds));
         gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->grab_item), FALSE);
@@ -815,6 +821,7 @@ static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2,
         gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(s->vga_item), TRUE);
     } else {
         VirtualConsole *vc = &s->vc[arg2 - 1];
+#if defined(CONFIG_VTE)
         VteTerminal *term = VTE_TERMINAL(vc->terminal);
         int width, height;
 
@@ -823,6 +830,10 @@ 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
+        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE);
+        gtk_widget_set_size_request(vc->terminal, 640, 480);
+#endif
     }
 
     gtk_widget_set_sensitive(s->grab_item, on_vga);
@@ -906,8 +917,10 @@ static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSL
     VtePty *pty;
 #endif
     GIOChannel *chan;
+#if defined(CONFIG_VTE)
     GtkWidget *scrolled_window;
     GtkAdjustment *vadjustment;
+#endif
     int master_fd, slave_fd, ret;
     struct termios tty;
 
@@ -927,7 +940,11 @@ static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSL
     gtk_menu_item_set_accel_path(GTK_MENU_ITEM(vc->menu_item), path);
     gtk_accel_map_add_entry(path, GDK_KEY_2 + index, GDK_CONTROL_MASK | GDK_MOD1_MASK);
 
+#if defined(CONFIG_VTE)
     vc->terminal = vte_terminal_new();
+#else
+    //~ vc->terminal = vte_terminal_new();
+#endif
 
     ret = openpty(&master_fd, &slave_fd, NULL, NULL, NULL);
     g_assert(ret != -1);
@@ -937,6 +954,7 @@ static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSL
     cfmakeraw(&tty);
     tcsetattr(slave_fd, TCSAFLUSH, &tty);
 
+#if defined(CONFIG_VTE)
 #if VTE_CHECK_VERSION(0, 26, 0)
     pty = vte_pty_new_foreign(master_fd, NULL);
     vte_terminal_set_pty_object(VTE_TERMINAL(vc->terminal), pty);
@@ -952,15 +970,18 @@ static GSList *gd_vc_init(GtkDisplayState *s, VirtualConsole *vc, int index, GSL
     gtk_container_add(GTK_CONTAINER(scrolled_window), vc->terminal);
 
     vte_terminal_set_size(VTE_TERMINAL(vc->terminal), 80, 25);
+#endif
 
     vc->fd = slave_fd;
     vc->chr->opaque = vc;
+#if defined(CONFIG_VTE)
     vc->scrolled_window = scrolled_window;
 
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vc->scrolled_window),
                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
     gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook), scrolled_window, gtk_label_new(label));
+#endif
     g_signal_connect(vc->menu_item, "activate",
                      G_CALLBACK(gd_menu_switch_vc), s);
 
-- 
1.7.9.5

