We discard motion outside the window on the assumption it's from before
some event that caused the window to shrink. However, if we have a grab
it's likely that this motion is actually from dragging from the inside
of the window out.

This fixes a problem where drag selecting in weston terminal behaves
oddly - it doesn't update the select region while the drag is happening
outside the window.

Signed-off-by: Derek Foreman <[email protected]>
---
 clients/window.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index 52de248..9c20480 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -2746,12 +2746,13 @@ pointer_handle_motion(void *data, struct wl_pointer 
*pointer,
 
        /* when making the window smaller - e.g. after a unmaximise we might
         * still have a pending motion event that the compositor has picked
-        * based on the old surface dimensions
+        * based on the old surface dimensions. However, if we have an active
+        * grab, we expect to see input from outside the window anyway.
         */
-       if (sx < window->main_surface->allocation.x ||
+       if (!input->grab && (sx < window->main_surface->allocation.x ||
            sy < window->main_surface->allocation.y ||
            sx > window->main_surface->allocation.width ||
-           sy > window->main_surface->allocation.height)
+           sy > window->main_surface->allocation.height))
                return;
 
        if (!(input->grab && input->grab_button)) {
-- 
2.4.6

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to