mirror of
https://github.com/brl/mutter.git
synced 2024-11-30 03:50:47 -05:00
input-capture: Fix off-by-one for barrier validation
Assuming two 1920x1080 screens next to each other: a horizontal barrier starting at 1920 going east is always outside the left screen. Assuming two 1920x1080 screens on top of each other: a vertical barrier starting at 1080 going south is always outside the top screen. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3319>
This commit is contained in:
parent
909cc6c240
commit
b7078ddab7
@ -640,7 +640,7 @@ get_barrier_adjacency (MtkRectangle *rect,
|
|||||||
return LINE_ADJACENCY_NONE;
|
return LINE_ADJACENCY_NONE;
|
||||||
|
|
||||||
if (y_max < rect->y ||
|
if (y_max < rect->y ||
|
||||||
y_min > rect->y + rect->height)
|
y_min >= rect->y + rect->height)
|
||||||
return LINE_ADJACENCY_NONE;
|
return LINE_ADJACENCY_NONE;
|
||||||
|
|
||||||
if (rect->x + rect->width == x || rect->x == x)
|
if (rect->x + rect->width == x || rect->x == x)
|
||||||
@ -664,7 +664,7 @@ get_barrier_adjacency (MtkRectangle *rect,
|
|||||||
return LINE_ADJACENCY_NONE;
|
return LINE_ADJACENCY_NONE;
|
||||||
|
|
||||||
if (x_max < rect->x ||
|
if (x_max < rect->x ||
|
||||||
x_min > rect->x + rect->width)
|
x_min >= rect->x + rect->width)
|
||||||
return LINE_ADJACENCY_NONE;
|
return LINE_ADJACENCY_NONE;
|
||||||
|
|
||||||
if (rect->y + rect->height == y || rect->y == y)
|
if (rect->y + rect->height == y || rect->y == y)
|
||||||
|
@ -683,7 +683,7 @@ test_barriers (void)
|
|||||||
InputCapture *input_capture;
|
InputCapture *input_capture;
|
||||||
InputCaptureSession *session;
|
InputCaptureSession *session;
|
||||||
g_autolist (Zone) zones = NULL;
|
g_autolist (Zone) zones = NULL;
|
||||||
unsigned int barrier1, barrier2;
|
unsigned int barrier1, barrier2, barrier3;
|
||||||
BarriersTestData data = {};
|
BarriersTestData data = {};
|
||||||
unsigned int prev_activated_serial;
|
unsigned int prev_activated_serial;
|
||||||
|
|
||||||
@ -693,20 +693,24 @@ test_barriers (void)
|
|||||||
zones = input_capture_session_get_zones (session);
|
zones = input_capture_session_get_zones (session);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* +-------------+--------------+
|
* +-------------+==============+
|
||||||
* || | |
|
* || | ^ |
|
||||||
* ||<--B#1 | |
|
* ||<--B#1 | | |
|
||||||
* || | B#2 |
|
* || | B#2 B#3 |
|
||||||
* +-------------+ | |
|
* +-------------+ | |
|
||||||
* | V |
|
* | V |
|
||||||
* +==============+
|
* +==============+
|
||||||
*/
|
*/
|
||||||
barrier1 = input_capture_session_add_barrier (session, 0, 0, 0, 600);
|
barrier1 = input_capture_session_add_barrier (session, 0, 0, 0, 600);
|
||||||
barrier2 = input_capture_session_add_barrier (session, 800, 768, 1824, 768);
|
barrier2 = input_capture_session_add_barrier (session, 800, 768, 1824, 768);
|
||||||
|
barrier3 = input_capture_session_add_barrier (session, 800, 0, 1824, 0);
|
||||||
|
|
||||||
g_assert_cmpuint (barrier1, !=, 0);
|
g_assert_cmpuint (barrier1, !=, 0);
|
||||||
g_assert_cmpuint (barrier2, !=, 0);
|
g_assert_cmpuint (barrier2, !=, 0);
|
||||||
|
g_assert_cmpuint (barrier3, !=, 0);
|
||||||
g_assert_cmpuint (barrier1, !=, barrier2);
|
g_assert_cmpuint (barrier1, !=, barrier2);
|
||||||
|
g_assert_cmpuint (barrier1, !=, barrier3);
|
||||||
|
g_assert_cmpuint (barrier2, !=, barrier3);
|
||||||
|
|
||||||
g_signal_connect (session->proxy, "activated",
|
g_signal_connect (session->proxy, "activated",
|
||||||
G_CALLBACK (on_activated), &data);
|
G_CALLBACK (on_activated), &data);
|
||||||
|
Loading…
Reference in New Issue
Block a user