diff mbox

[1/2] gtk: Fix VTE focus grabbing

Message ID 1430126631.22166.9.camel@nilsson.home.kraxel.org
State New
Headers show

Commit Message

Gerd Hoffmann April 27, 2015, 9:23 a.m. UTC
On So, 2015-04-26 at 21:04 +0200, Jan Kiszka wrote:
> From: Jan Kiszka <jan.kiszka@siemens.com>
> 
> 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.

Fails to build with CONFIG_VTE=n, update attached, please verify.

thanks,
  Gerd

Comments

Jan Kiszka April 27, 2015, 12:26 p.m. UTC | #1
Am 2015-04-27 um 11:23 schrieb Gerd Hoffmann:
> On So, 2015-04-26 at 21:04 +0200, Jan Kiszka wrote:
>> From: Jan Kiszka <jan.kiszka@siemens.com>
>>
>> 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.
> 
> Fails to build with CONFIG_VTE=n, update attached, please verify.

Works fine, thanks!

Jan
diff mbox

Patch

From 9d677e1c2fa479336fb7a2b90aea78c10d037e98 Mon Sep 17 00:00:00 2001
From: Jan Kiszka <jan.kiszka@siemens.com>
Date: Sun, 26 Apr 2015 21:04:20 +0200
Subject: [PATCH] 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>
---
 ui/gtk.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/ui/gtk.c b/ui/gtk.c
index 7180066..763d97a 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));
 
-- 
1.8.3.1