aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--types/wlr_cursor.c43
1 files changed, 25 insertions, 18 deletions
diff --git a/types/wlr_cursor.c b/types/wlr_cursor.c
index 97a4d1e9..bab5ed10 100644
--- a/types/wlr_cursor.c
+++ b/types/wlr_cursor.c
@@ -19,7 +19,7 @@ struct wlr_cursor_device {
struct wlr_input_device *device;
struct wl_list link;
struct wlr_output *mapped_output;
- struct wlr_box *mapped_box;
+ struct wlr_box mapped_box; // empty if unset
struct wl_listener motion;
struct wl_listener motion_absolute;
@@ -63,7 +63,7 @@ struct wlr_cursor_state {
struct wl_list output_cursors; // wlr_cursor_output_cursor::link
struct wlr_output_layout *layout;
struct wlr_output *mapped_output;
- struct wlr_box *mapped_box;
+ struct wlr_box mapped_box; // empty if unset
struct wl_listener layout_add;
struct wl_listener layout_change;
@@ -246,8 +246,8 @@ static void get_mapping(struct wlr_cursor *cur,
struct wlr_cursor_device *c_device = get_cursor_device(cur, dev);
if (c_device) {
- if (c_device->mapped_box) {
- *box = *c_device->mapped_box;
+ if (!wlr_box_empty(&c_device->mapped_box)) {
+ *box = c_device->mapped_box;
} else if (c_device->mapped_output) {
wlr_output_layout_get_box(cur->state->layout,
c_device->mapped_output, box);
@@ -255,8 +255,8 @@ static void get_mapping(struct wlr_cursor *cur,
return;
}
- if (cur->state->mapped_box) {
- *box = *cur->state->mapped_box;
+ if (!wlr_box_empty(&cur->state->mapped_box)) {
+ *box = cur->state->mapped_box;
} else if (cur->state->mapped_output) {
wlr_output_layout_get_box(cur->state->layout,
cur->state->mapped_output, box);
@@ -865,22 +865,19 @@ void wlr_cursor_map_input_to_output(struct wlr_cursor *cur,
void wlr_cursor_map_to_region(struct wlr_cursor *cur,
struct wlr_box *box) {
- if (box && wlr_box_empty(box)) {
- wlr_log(WLR_ERROR, "cannot map cursor to an empty region");
- return;
+ if (box) {
+ if (wlr_box_empty(box)) {
+ wlr_log(WLR_ERROR, "cannot map cursor to an empty region");
+ return;
+ }
+ cur->state->mapped_box = *box;
+ } else {
+ cur->state->mapped_box.width = cur->state->mapped_box.height = 0;
}
-
- cur->state->mapped_box = box;
}
void wlr_cursor_map_input_to_region(struct wlr_cursor *cur,
struct wlr_input_device *dev, struct wlr_box *box) {
- if (box && wlr_box_empty(box)) {
- wlr_log(WLR_ERROR, "cannot map device \"%s\" input to an empty region",
- dev->name);
- return;
- }
-
struct wlr_cursor_device *c_device = get_cursor_device(cur, dev);
if (!c_device) {
wlr_log(WLR_ERROR, "Cannot map device \"%s\" to geometry (not found in"
@@ -888,5 +885,15 @@ void wlr_cursor_map_input_to_region(struct wlr_cursor *cur,
return;
}
- c_device->mapped_box = box;
+ if (box) {
+ if (wlr_box_empty(box)) {
+ wlr_log(WLR_ERROR,
+ "cannot map device \"%s\" input to an empty region",
+ dev->name);
+ return;
+ }
+ c_device->mapped_box = *box;
+ } else {
+ c_device->mapped_box.width = c_device->mapped_box.height = 0;
+ }
}