diff options
Diffstat (limited to 'results/classifier/105/device/558')
| -rw-r--r-- | results/classifier/105/device/558 | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/results/classifier/105/device/558 b/results/classifier/105/device/558 deleted file mode 100644 index 344481ee..00000000 --- a/results/classifier/105/device/558 +++ /dev/null @@ -1,70 +0,0 @@ -device: 0.987 -mistranslation: 0.975 -graphic: 0.949 -semantic: 0.720 -vnc: 0.667 -instruction: 0.643 -KVM: 0.626 -network: 0.613 -boot: 0.587 -socket: 0.585 -other: 0.288 -assembly: 0.265 - -gtk UI interprets double/triple click as button release -Description of problem: -When using the GTK interface clicking rapidly in a down-up-down pattern, the final "down" event is erroneously followed by an immediate "up" event and the mouse device in the guest reports the pressed button as no longer being held. -Steps to reproduce: -1. Start a VM using the GTK interface. -2. Open a tool to examine guest mouse input events, such as `xev` or `yutani-test` -3. Click twice with any button, without releasing on the second click. -4. Observe erroneous 'up' event in guest. -5. Move the mouse while keeping the button pressed. -6. Observe the guest reports the button is not held. -Additional information: -GTK 3 sends an additional `GDK_2BUTTON_PRESS` event after the initial `GDK_BUTTON_PRESS` event, which QEMU is misinterpreting as a release event. I confirmed this with the addition of some logging of `button->type` in `gd_button_event`: - -``` -button = 1, type = 4 -button = 1, type = 7 -button = 1, type = 4 -button = 1, type = 7 -button = 1, type = 4 # = PRESS -button = 1, type = 5 # = 2BUTTON_PRESS -button = 1, type = 7 -button = 1, type = 4 -button = 1, type = 7 -button = 1, type = 4 -button = 1, type = 5 -button = 1, type = 7 -button = 1, type = 4 -button = 1, type = 7 -button = 1, type = 4 -button = 1, type = 7 -button = 1, type = 4 -button = 1, type = 7 -button = 1, type = 4 -button = 1, type = 5 -button = 1, type = 7 -``` - -```diff -diff --git a/ui/gtk.c b/ui/gtk.c -index cfb0728d1f..b9979f0e11 100644 ---- a/ui/gtk.c -+++ b/ui/gtk.c -@@ -925,6 +925,13 @@ static gboolean gd_button_event(GtkWidget *widget, GdkEventButton *button, - return TRUE; - } - -+ /* ignore additional events for double- and triple- press, as they are -+ * sent to us after a regular press event; otherwise we will misinterpret -+ * these as release events and eat the button! */ -+ if (button->type == GDK_2BUTTON_PRESS || button->type == GDK_3BUTTON_PRESS) { -+ return TRUE; -+ } -+ - qemu_input_queue_btn(vc->gfx.dcl.con, btn, - button->type == GDK_BUTTON_PRESS); - qemu_input_event_sync(); -``` |
