[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 7/8] gtk: Fix -serial vc
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 7/8] gtk: Fix -serial vc |
Date: |
Tue, 29 Apr 2014 11:46:13 +0200 |
From: Cole Robinson <address@hidden>
Try kicking off a rhel5 text install over serial, the text menu navigation
is all messed up, and some of the kernel boot messages are randomly
corrupted.
Drop use of a pty and just use vte infrastructure for reading and writing.
This fixes the above corruption, and is simpler to boot.
(I don't know what was wrong with the original code though. FWIW this is
what virt-manager has done for years).
Signed-off-by: Cole Robinson <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
ui/gtk.c | 41 +++++++++--------------------------------
1 file changed, 9 insertions(+), 32 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index c85aea3..1465a38 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -115,7 +115,6 @@ typedef struct VirtualConsole
GtkWidget *scrolled_window;
CharDriverState *chr;
#endif
- int fd;
} VirtualConsole;
typedef struct GtkDisplayState
@@ -1162,9 +1161,12 @@ static gboolean gd_focus_out_event(GtkWidget *widget,
static int gd_vc_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
{
+#if defined(CONFIG_VTE)
VirtualConsole *vc = chr->opaque;
- return vc ? write(vc->fd, buf, len) : len;
+ vte_terminal_feed(VTE_TERMINAL(vc->terminal), (const char *)buf, len);
+#endif
+ return len;
}
static int nb_vcs;
@@ -1190,19 +1192,12 @@ void early_gtk_display_init(void)
}
#if defined(CONFIG_VTE)
-static gboolean gd_vc_in(GIOChannel *chan, GIOCondition cond, void *opaque)
+static gboolean gd_vc_in(VteTerminal *terminal, gchar *text, guint size,
+ gpointer user_data)
{
- VirtualConsole *vc = opaque;
- uint8_t buffer[1024];
- ssize_t len;
-
- len = read(vc->fd, buffer, sizeof(buffer));
- if (len <= 0) {
- return FALSE;
- }
-
- qemu_chr_be_write(vc->chr, buffer, len);
+ VirtualConsole *vc = user_data;
+ qemu_chr_be_write(vc->chr, (uint8_t *)text, (unsigned int)size);
return TRUE;
}
#endif
@@ -1214,13 +1209,8 @@ static GSList *gd_vc_init(GtkDisplayState *s,
VirtualConsole *vc, int index, GSL
const char *label;
char buffer[32];
char path[32];
-#if VTE_CHECK_VERSION(0, 26, 0)
- VtePty *pty;
-#endif
- GIOChannel *chan;
GtkWidget *scrolled_window;
GtkAdjustment *vadjustment;
- int master_fd, slave_fd;
snprintf(buffer, sizeof(buffer), "vc%d", index);
snprintf(path, sizeof(path), "<QEMU>/View/VC%d", index);
@@ -1239,16 +1229,7 @@ static GSList *gd_vc_init(GtkDisplayState *s,
VirtualConsole *vc, int index, GSL
gtk_accel_map_add_entry(path, GDK_KEY_2 + index, HOTKEY_MODIFIERS);
vc->terminal = vte_terminal_new();
-
- master_fd = qemu_openpty_raw(&slave_fd, NULL);
- g_assert(master_fd != -1);
-
-#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);
-#else
- vte_terminal_set_pty(VTE_TERMINAL(vc->terminal), master_fd);
-#endif
+ g_signal_connect(vc->terminal, "commit", G_CALLBACK(gd_vc_in), vc);
vte_terminal_set_scrollback_lines(VTE_TERMINAL(vc->terminal), -1);
@@ -1263,7 +1244,6 @@ static GSList *gd_vc_init(GtkDisplayState *s,
VirtualConsole *vc, int index, GSL
vte_terminal_set_size(VTE_TERMINAL(vc->terminal), 80, 25);
- vc->fd = slave_fd;
vc->chr->opaque = vc;
vc->scrolled_window = scrolled_window;
@@ -1281,9 +1261,6 @@ static GSList *gd_vc_init(GtkDisplayState *s,
VirtualConsole *vc, int index, GSL
vc->chr->init(vc->chr);
}
- 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;
}
--
1.8.3.1
- [Qemu-devel] [PULL 0/8] gtk patch queue, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 2/8] configure: Re-run make if gtkabi/sdlabi is changed, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 5/8] gtk: Remove use of deprecated stock items, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 1/8] configure: Document --with-gtkabi, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 6/8] gtk: Use ctrl+alt+q for quit accelerator, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 3/8] gtk: Don't use deprecated gtk_image_menu_item_new_with_mnemonic, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 4/8] gtk: Don't use deprecated vte_terminal_get_adjustment, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 8/8] gtk: Fix accelerators being triggered twice with gtk3, Gerd Hoffmann, 2014/04/29
- [Qemu-devel] [PULL 7/8] gtk: Fix -serial vc,
Gerd Hoffmann <=