summary refs log tree commit diff stats
path: root/ui/gtk.c
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2015-04-26 21:04:20 +0200
committerGerd Hoffmann <kraxel@redhat.com>2015-04-27 11:00:07 +0200
commit9d677e1c2fa479336fb7a2b90aea78c10d037e98 (patch)
treed34a0cdc3308cad93532a48c0d8c94b8ced926a1 /ui/gtk.c
parent779ce88fbd3f977112bc77ccb028b0ace762105e (diff)
downloadfocaccia-qemu-9d677e1c2fa479336fb7a2b90aea78c10d037e98.tar.gz
focaccia-qemu-9d677e1c2fa479336fb7a2b90aea78c10d037e98.zip
gtk: Fix VTE focus grabbing
At least on GTK2, the VTE terminal has to be specified as target of
gtk_widget_grab_focus. Otherwise, switching from one VTE terminal to
another causes the focus to get lost.

CC: John Snow <jsnow@redhat.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>

[ kraxel: fixed build with CONFIG_VTE=n ]

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui/gtk.c')
-rw-r--r--ui/gtk.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/ui/gtk.c b/ui/gtk.c
index 7180066bde..763d97ac99 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -170,6 +170,7 @@ typedef struct VirtualConsole {
     GtkWidget *window;
     GtkWidget *menu_item;
     GtkWidget *tab_item;
+    GtkWidget *focus;
     VirtualConsoleType type;
     union {
         VirtualGfxConsole gfx;
@@ -1060,15 +1061,13 @@ static void gd_menu_switch_vc(GtkMenuItem *item, void *opaque)
     GtkDisplayState *s = opaque;
     VirtualConsole *vc = gd_vc_find_by_menu(s);
     GtkNotebook *nb = GTK_NOTEBOOK(s->notebook);
-    GtkWidget *child;
     gint page;
 
     gtk_release_modifiers(s);
     if (vc) {
         page = gtk_notebook_page_num(nb, vc->tab_item);
         gtk_notebook_set_current_page(nb, page);
-        child = gtk_notebook_get_nth_page(nb, page);
-        gtk_widget_grab_focus(child);
+        gtk_widget_grab_focus(vc->focus);
     }
 }
 
@@ -1588,6 +1587,7 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc,
 
     vc->type = GD_VC_VTE;
     vc->tab_item = box;
+    vc->focus = vc->vte.terminal;
     gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook), vc->tab_item,
                              gtk_label_new(vc->label));
 
@@ -1749,6 +1749,7 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
 
     vc->type = GD_VC_GFX;
     vc->tab_item = vc->gfx.drawing_area;
+    vc->focus = vc->gfx.drawing_area;
     gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook),
                              vc->tab_item, gtk_label_new(vc->label));