aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qemu-gtk.c55
-rw-r--r--qemu-gtk.h1
2 files changed, 50 insertions, 6 deletions
diff --git a/qemu-gtk.c b/qemu-gtk.c
index ae3d08a..1ea5c1e 100644
--- a/qemu-gtk.c
+++ b/qemu-gtk.c
@@ -58,11 +58,13 @@ static void config_write(void)
/* ------------------------------------------------------------------ */
-static void vte_configure(GtkWidget *vte)
+static void vte_configure(struct qemu_window *win, GtkWidget *vte)
{
vte_terminal_set_scrollback_lines(VTE_TERMINAL(vte), 4096);
vte_terminal_set_backspace_binding(VTE_TERMINAL(vte),
VTE_ERASE_ASCII_BACKSPACE);
+ if (win->tty_font)
+ vte_terminal_set_font_from_string(VTE_TERMINAL(vte), win->tty_font);
}
static void tabs_configure(struct qemu_window *win)
@@ -167,6 +169,36 @@ static void menu_cb_grab_kbd(GtkToggleAction *action, gpointer userdata)
config_dirty++;
}
+static void menu_cb_config_font(GtkAction *action, void *data)
+{
+ struct qemu_window *win = data;
+ GtkWidget *dialog;
+
+ dialog = gtk_font_selection_dialog_new("Terminal font");
+ if (win->tty_font)
+ gtk_font_selection_dialog_set_font_name
+ (GTK_FONT_SELECTION_DIALOG(dialog), win->tty_font);
+
+ gtk_widget_show_all(dialog);
+ switch (gtk_dialog_run(GTK_DIALOG(dialog))) {
+ case GTK_RESPONSE_OK:
+ win->tty_font = gtk_font_selection_dialog_get_font_name
+ (GTK_FONT_SELECTION_DIALOG(dialog));
+ g_key_file_set_string(config, "tty", "font", win->tty_font);
+ if (win->monitor.vte)
+ vte_terminal_set_font_from_string(VTE_TERMINAL(win->monitor.vte),
+ win->tty_font);
+ if (win->console.vte)
+ vte_terminal_set_font_from_string(VTE_TERMINAL(win->console.vte),
+ win->tty_font);
+ if (win->gdb_vte)
+ vte_terminal_set_font_from_string(VTE_TERMINAL(win->gdb_vte),
+ win->tty_font);
+ break;
+ }
+ gtk_widget_destroy(dialog);
+}
+
static void menu_cb_send_ctrlaltdel(GtkToggleAction *action, gpointer userdata)
{
struct qemu_window *win = userdata;
@@ -233,7 +265,7 @@ static void menu_cb_run_gdb(GtkAction *action, gpointer userdata)
if (win->gdb_vte)
return;
win->gdb_vte = vte_terminal_new();
- vte_configure(win->gdb_vte);
+ vte_configure(win, win->gdb_vte);
tabs_add(win, win->gdb_vte, "gdb", -1);
monitor_append(win, "gdbserver 1234");
@@ -501,6 +533,13 @@ static const GtkActionEntry entries[] = {
.callback = G_CALLBACK(menu_cb_send_ctrlaltdel),
},{
+ /* --- view menu --- */
+ .name = "TerminalFont",
+ .stock_id = GTK_STOCK_SELECT_FONT,
+ .label = "Terminal _font ...",
+ .callback = G_CALLBACK(menu_cb_config_font),
+ },{
+
/* --- vm menu --- */
.name = "MonitorStop",
.stock_id = GTK_STOCK_MEDIA_PAUSE,
@@ -564,6 +603,7 @@ static char ui_xml[] =
" <menu action='ViewMenu'>"
" <menuitem action='FullScreen'/>"
" <menuitem action='ScaleDisplay'/>"
+" <menuitem action='TerminalFont'/>"
" </menu>"
" <menu action='InputMenu'>"
" <menuitem action='GrabMouse'/>"
@@ -662,16 +702,19 @@ static struct qemu_window *qemu_create_window(void)
gtk_box_pack_end(GTK_BOX(vbox), win->fstatus, FALSE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(win->fstatus), win->status);
- /* apply config */
+ /* read config */
win->vnc_scale = g_key_file_get_boolean(config, "vnc", "scale", &err);
+ win->vnc_grab_mouse = g_key_file_get_boolean(config, "vnc", "grab-mouse", &err);
+ win->vnc_grab_kbd = g_key_file_get_boolean(config, "vnc", "grab-kbd", &err);
+ win->tty_font = g_key_file_get_string(config, "tty", "font", &err);
+
+ /* apply config */
item = gtk_ui_manager_get_widget(win->ui, "/MainMenu/ViewMenu/ScaleDisplay");
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), win->vnc_scale);
- win->vnc_grab_mouse = g_key_file_get_boolean(config, "vnc", "grab-mouse", &err);
item = gtk_ui_manager_get_widget(win->ui, "/MainMenu/InputMenu/GrabMouse");
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), win->vnc_grab_mouse);
- win->vnc_grab_kbd = g_key_file_get_boolean(config, "vnc", "grab-kbd", &err);
item = gtk_ui_manager_get_widget(win->ui, "/MainMenu/InputMenu/GrabKbd");
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), win->vnc_grab_kbd);
@@ -710,7 +753,7 @@ void qemu_conn_tab(struct qemu_window *win, struct qemu_conn *conn, int pos)
if (conn->vte)
return;
conn->vte = vte_terminal_new();
- vte_configure(conn->vte);
+ vte_configure(win, conn->vte);
g_signal_connect(conn->vte, "commit",
G_CALLBACK(conn_user_input), conn);
tabs_add(win, conn->vte, conn->name, pos);
diff --git a/qemu-gtk.h b/qemu-gtk.h
index 3785378..96e3113 100644
--- a/qemu-gtk.h
+++ b/qemu-gtk.h
@@ -69,6 +69,7 @@ struct qemu_window {
gboolean vnc_scale;
gboolean vnc_grab_mouse;
gboolean vnc_grab_kbd;
+ char *tty_font;
};
/* qemu-gtk.c */