You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.5 KiB
65 lines
2.5 KiB
From 400a02e6d34a4e6f1e39ce0377a378cb58ab681b Mon Sep 17 00:00:00 2001
|
|
From: Adam Williamson <awilliam@redhat.com>
|
|
Date: Tue, 9 Aug 2016 09:43:58 -0700
|
|
Subject: [PATCH] assert_and_click: handle undefined previous mouse position
|
|
|
|
assert_and_click tries to record the previous mouse cursor
|
|
position and return the cursor there after clicking. However if
|
|
the mouse has never been explicitly positioned anywhere before,
|
|
`backend_get_last_mouse_set` returns undefined for each
|
|
co-ordinate, which results in a couple of 'use of uninitialized
|
|
value in int' warnings and the cursor being set to 0,0, which
|
|
may trigger the GNOME overview under Wayland. So catch when the
|
|
values are undefined and in this case, call mouse_hide() - which
|
|
puts the cursor at bottom-right - instead. This avoids both the
|
|
warnings and the overview trigger.
|
|
|
|
Also fix another uninitialized value warning in `mouse_hide`
|
|
while we're at it - check if border_offset is defined before
|
|
using it.
|
|
---
|
|
consoles/vnc_base.pm | 8 +++++---
|
|
testapi.pm | 10 ++++++++--
|
|
2 files changed, 13 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/consoles/vnc_base.pm b/consoles/vnc_base.pm
|
|
index 58d0223..765fb8b 100644
|
|
--- a/consoles/vnc_base.pm
|
|
+++ b/consoles/vnc_base.pm
|
|
@@ -188,9 +188,11 @@ sub mouse_hide {
|
|
$self->{mouse}->{x} = $self->{vnc}->width - 1;
|
|
$self->{mouse}->{y} = $self->{vnc}->height - 1;
|
|
|
|
- my $border_offset = int($args->{border_offset});
|
|
- $self->{mouse}->{x} -= $border_offset;
|
|
- $self->{mouse}->{y} -= $border_offset;
|
|
+ if (defined $args->{border_offset}) {
|
|
+ my $border_offset = int($args->{border_offset});
|
|
+ $self->{mouse}->{x} -= $border_offset;
|
|
+ $self->{mouse}->{y} -= $border_offset;
|
|
+ }
|
|
|
|
bmwqemu::diag "mouse_move $self->{mouse}->{x}, $self->{mouse}->{y}";
|
|
$self->{vnc}->mouse_move_to($self->{mouse}->{x}, $self->{mouse}->{y});
|
|
diff --git a/testapi.pm b/testapi.pm
|
|
index 60eb757..1d70bf5 100755
|
|
--- a/testapi.pm
|
|
+++ b/testapi.pm
|
|
@@ -311,8 +311,14 @@ sub assert_and_click {
|
|
}
|
|
# We can't just move the mouse, or we end up in a click-and-drag situation
|
|
sleep 1;
|
|
- # move mouse back to where it was before we clicked
|
|
- return mouse_set($old_mouse_coords->{x}, $old_mouse_coords->{y});
|
|
+ # move mouse back to where it was before we clicked, or to the 'hidden'
|
|
+ # position if it had never been positioned
|
|
+ if (defined $old_mouse_coords->{x} && defined $old_mouse_coords->{y}) {
|
|
+ return mouse_set($old_mouse_coords->{x}, $old_mouse_coords->{y});
|
|
+ }
|
|
+ else {
|
|
+ return mouse_hide();
|
|
+ }
|
|
}
|
|
|
|
=head2 assert_and_dclick
|