diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2015-05-11 15:40:11 -0500 |
---|---|---|
committer | Daniel Stone <daniels@collabora.com> | 2015-08-06 16:28:30 +0100 |
commit | f9318d145262444e2b671b40122fec9cab39b609 (patch) | |
tree | b0595e3f5de23db355dea0c5c567cb65183df631 /desktop-shell | |
parent | 2ccd9a2d6247d26975a8a846e9eb7a283c84a1ba (diff) |
input: add a weston_pointer_clear_focus() helper function
Valgrind has shown that in at least one place (default_grab_pointer_focus)
we're testing uninitialized values coming out of weston_compositor_pick_view.
This is happening when default_grab_pointer_focus is called when there is
nothing on the view list, and during the first repaint when only the black
surface with no input region exists.
This patch adds a function to clear pointer focus and also set the sx,sy
co-ordinates to a sentinel value we shouldn't compute with.
Assertions are added to make sure any time pointer focus is set to NULL
these values are used.
weston_compositor_pick_view() now returns these values too.
Now the values are always initialized, even when no view exists, and
they're initialized in such a way that actually doing computation
with them should fail in an obvious way, but we can compare them
safely for equality.
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Diffstat (limited to 'desktop-shell')
-rw-r--r-- | desktop-shell/exposay.c | 4 | ||||
-rw-r--r-- | desktop-shell/shell.c | 4 |
2 files changed, 2 insertions, 6 deletions
diff --git a/desktop-shell/exposay.c b/desktop-shell/exposay.c index 109f8e33..08b86a3e 100644 --- a/desktop-shell/exposay.c +++ b/desktop-shell/exposay.c @@ -589,9 +589,7 @@ exposay_transition_active(struct desktop_shell *shell) if (pointer) { weston_pointer_start_grab(pointer, &shell->exposay.grab_ptr); - weston_pointer_set_focus(pointer, NULL, - pointer->x, - pointer->y); + weston_pointer_clear_focus(pointer); } wl_list_for_each(shell_output, &shell->output_list, link) { enum exposay_layout_state state; diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index c1308c52..034d39b9 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -3218,9 +3218,7 @@ popup_grab_focus(struct weston_pointer_grab *grab) wl_resource_get_client(view->surface->resource) == client) { weston_pointer_set_focus(pointer, view, sx, sy); } else { - weston_pointer_set_focus(pointer, NULL, - wl_fixed_from_int(0), - wl_fixed_from_int(0)); + weston_pointer_clear_focus(pointer); } } |