qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] Usability fixes for GTK2
@ 2015-04-26 19:04 Jan Kiszka
  2015-04-26 19:04 ` [Qemu-devel] [PATCH 1/2] gtk: Fix VTE focus grabbing Jan Kiszka
  2015-04-26 19:04 ` [Qemu-devel] [PATCH 2/2] gtk: Avoid accel key leakage into guest on console switch Jan Kiszka
  0 siblings, 2 replies; 6+ messages in thread
From: Jan Kiszka @ 2015-04-26 19:04 UTC (permalink / raw)
  To: qemu-devel, Gerd Hoffmann; +Cc: John Snow

Two small patches to fix annoying problems on GTK2. Both weren't tested
on GTK3 (no working setup at hand). The first one comes with a tiny risk
of behaving differently there. The second one may actually be required
on GTK3 as well or is at least a nop there and doesn't need the version
check.

Jan

CC: John Snow <jsnow@redhat.com>

Jan Kiszka (2):
  gtk: Fix VTE focus grabbing
  gtk: Avoid accel key leakage into guest on console switch

 ui/gtk.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

-- 
2.1.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 1/2] gtk: Fix VTE focus grabbing
  2015-04-26 19:04 [Qemu-devel] [PATCH 0/2] Usability fixes for GTK2 Jan Kiszka
@ 2015-04-26 19:04 ` Jan Kiszka
  2015-04-27  9:23   ` Gerd Hoffmann
  2015-04-26 19:04 ` [Qemu-devel] [PATCH 2/2] gtk: Avoid accel key leakage into guest on console switch Jan Kiszka
  1 sibling, 1 reply; 6+ messages in thread
From: Jan Kiszka @ 2015-04-26 19:04 UTC (permalink / raw)
  To: qemu-devel, Gerd Hoffmann; +Cc: John Snow

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.

CC: John Snow <jsnow@redhat.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 ui/gtk.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/ui/gtk.c b/ui/gtk.c
index 51abac9..76d9b73 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1021,15 +1021,17 @@ 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);
+        if (vc->type == GD_VC_VTE) {
+            gtk_widget_grab_focus(vc->vte.terminal);
+        } else {
+            gtk_widget_grab_focus(vc->tab_item);
+        }
     }
 }
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 2/2] gtk: Avoid accel key leakage into guest on console switch
  2015-04-26 19:04 [Qemu-devel] [PATCH 0/2] Usability fixes for GTK2 Jan Kiszka
  2015-04-26 19:04 ` [Qemu-devel] [PATCH 1/2] gtk: Fix VTE focus grabbing Jan Kiszka
@ 2015-04-26 19:04 ` Jan Kiszka
  2015-04-27  9:24   ` Gerd Hoffmann
  1 sibling, 1 reply; 6+ messages in thread
From: Jan Kiszka @ 2015-04-26 19:04 UTC (permalink / raw)
  To: qemu-devel, Gerd Hoffmann

From: Jan Kiszka <jan.kiszka@siemens.com>

GTK2 sends the accel key to the guest when switching to the graphic
console via that shortcut. Resolve this by ignoring any keys until the
next key-release event. However, do not ignore keys when switching via
the menu or when on GTK3.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 ui/gtk.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/ui/gtk.c b/ui/gtk.c
index 76d9b73..0ef03e7 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -230,6 +230,7 @@ struct GtkDisplayState {
 
     bool modifier_pressed[ARRAY_SIZE(modifier_keycode)];
     bool has_evdev;
+    bool ignore_keys;
 };
 
 static void gd_grab_pointer(VirtualConsole *vc);
@@ -953,6 +954,11 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
     int qemu_keycode;
     int i;
 
+    if (s->ignore_keys) {
+        s->ignore_keys = (key->type == GDK_KEY_PRESS);
+        return TRUE;
+    }
+
     if (key->keyval == GDK_KEY_Pause) {
         qemu_input_event_send_key_qcode(vc->gfx.dcl.con, Q_KEY_CODE_PAUSE,
                                         key->type == GDK_KEY_PRESS);
@@ -1033,12 +1039,18 @@ static void gd_menu_switch_vc(GtkMenuItem *item, void *opaque)
             gtk_widget_grab_focus(vc->tab_item);
         }
     }
+    s->ignore_keys = false;
 }
 
 static void gd_accel_switch_vc(void *opaque)
 {
     VirtualConsole *vc = opaque;
+
     gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE);
+#if !GTK_CHECK_VERSION(3, 0, 0)
+    /* GTK2 sends the accel key to the target console - ignore this until */
+    vc->s->ignore_keys = true;
+#endif
 }
 
 static void gd_menu_show_tabs(GtkMenuItem *item, void *opaque)
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] gtk: Fix VTE focus grabbing
  2015-04-26 19:04 ` [Qemu-devel] [PATCH 1/2] gtk: Fix VTE focus grabbing Jan Kiszka
@ 2015-04-27  9:23   ` Gerd Hoffmann
  2015-04-27 12:26     ` Jan Kiszka
  0 siblings, 1 reply; 6+ messages in thread
From: Gerd Hoffmann @ 2015-04-27  9:23 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: John Snow, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 364 bytes --]

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


[-- Attachment #2: 0001-gtk-Fix-VTE-focus-grabbing.patch --]
[-- Type: text/x-patch, Size: 2165 bytes --]

>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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] gtk: Avoid accel key leakage into guest on console switch
  2015-04-26 19:04 ` [Qemu-devel] [PATCH 2/2] gtk: Avoid accel key leakage into guest on console switch Jan Kiszka
@ 2015-04-27  9:24   ` Gerd Hoffmann
  0 siblings, 0 replies; 6+ messages in thread
From: Gerd Hoffmann @ 2015-04-27  9:24 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: qemu-devel

On So, 2015-04-26 at 21:04 +0200, Jan Kiszka wrote:
> GTK2 sends the accel key to the guest when switching to the graphic
> console via that shortcut. Resolve this by ignoring any keys until the
> next key-release event. However, do not ignore keys when switching via
> the menu or when on GTK3.

Added to gtk queue

thanks,
  Gerd

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] gtk: Fix VTE focus grabbing
  2015-04-27  9:23   ` Gerd Hoffmann
@ 2015-04-27 12:26     ` Jan Kiszka
  0 siblings, 0 replies; 6+ messages in thread
From: Jan Kiszka @ 2015-04-27 12:26 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: John Snow, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 446 bytes --]

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



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-04-27 12:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-26 19:04 [Qemu-devel] [PATCH 0/2] Usability fixes for GTK2 Jan Kiszka
2015-04-26 19:04 ` [Qemu-devel] [PATCH 1/2] gtk: Fix VTE focus grabbing Jan Kiszka
2015-04-27  9:23   ` Gerd Hoffmann
2015-04-27 12:26     ` Jan Kiszka
2015-04-26 19:04 ` [Qemu-devel] [PATCH 2/2] gtk: Avoid accel key leakage into guest on console switch Jan Kiszka
2015-04-27  9:24   ` Gerd Hoffmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).