Skip to content

Commit a48b99a

Browse files
committed
Merge pull request godotengine#94557 from Riteo/they-just-keep-coming
Wayland: Fix error spam when interacting with decorations
2 parents e3b8525 + e307fd6 commit a48b99a

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

platform/linuxbsd/wayland/wayland_thread.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2047,6 +2047,11 @@ void WaylandThread::_wp_relative_pointer_on_relative_motion(void *data, struct z
20472047
SeatState *ss = (SeatState *)data;
20482048
ERR_FAIL_NULL(ss);
20492049

2050+
if (!ss->pointed_surface) {
2051+
// We're probably on a decoration or some other third-party thing.
2052+
return;
2053+
}
2054+
20502055
PointerData &pd = ss->pointer_data_buffer;
20512056

20522057
WindowState *ws = wl_surface_get_window_state(ss->pointed_surface);
@@ -2249,13 +2254,11 @@ void WaylandThread::_wp_tablet_tool_on_done(void *data, struct zwp_tablet_tool_v
22492254

22502255
void WaylandThread::_wp_tablet_tool_on_removed(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2) {
22512256
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2252-
22532257
if (!ts) {
22542258
return;
22552259
}
22562260

22572261
SeatState *ss = wl_seat_get_seat_state(ts->wl_seat);
2258-
22592262
if (!ss) {
22602263
return;
22612264
}
@@ -2275,14 +2278,17 @@ void WaylandThread::_wp_tablet_tool_on_removed(void *data, struct zwp_tablet_too
22752278
}
22762279

22772280
void WaylandThread::_wp_tablet_tool_on_proximity_in(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t serial, struct zwp_tablet_v2 *tablet, struct wl_surface *surface) {
2278-
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2281+
if (!surface || !wl_proxy_is_godot((struct wl_proxy *)surface)) {
2282+
// We're probably on a decoration or something.
2283+
return;
2284+
}
22792285

2286+
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
22802287
if (!ts) {
22812288
return;
22822289
}
22832290

22842291
SeatState *ss = wl_seat_get_seat_state(ts->wl_seat);
2285-
22862292
if (!ss) {
22872293
return;
22882294
}
@@ -2304,13 +2310,12 @@ void WaylandThread::_wp_tablet_tool_on_proximity_in(void *data, struct zwp_table
23042310

23052311
void WaylandThread::_wp_tablet_tool_on_proximity_out(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2) {
23062312
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2307-
2308-
if (!ts) {
2313+
if (!ts || !ts->data_pending.proximal_surface) {
2314+
// Not our stuff, we don't care.
23092315
return;
23102316
}
23112317

23122318
SeatState *ss = wl_seat_get_seat_state(ts->wl_seat);
2313-
23142319
if (!ss) {
23152320
return;
23162321
}
@@ -2331,7 +2336,6 @@ void WaylandThread::_wp_tablet_tool_on_proximity_out(void *data, struct zwp_tabl
23312336

23322337
void WaylandThread::_wp_tablet_tool_on_down(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t serial) {
23332338
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2334-
23352339
if (!ts) {
23362340
return;
23372341
}
@@ -2349,7 +2353,6 @@ void WaylandThread::_wp_tablet_tool_on_down(void *data, struct zwp_tablet_tool_v
23492353

23502354
void WaylandThread::_wp_tablet_tool_on_up(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2) {
23512355
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2352-
23532356
if (!ts) {
23542357
return;
23552358
}
@@ -2365,11 +2368,15 @@ void WaylandThread::_wp_tablet_tool_on_up(void *data, struct zwp_tablet_tool_v2
23652368

23662369
void WaylandThread::_wp_tablet_tool_on_motion(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, wl_fixed_t x, wl_fixed_t y) {
23672370
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2368-
23692371
if (!ts) {
23702372
return;
23712373
}
23722374

2375+
if (!ts->data_pending.proximal_surface) {
2376+
// We're probably on a decoration or some other third-party thing.
2377+
return;
2378+
}
2379+
23732380
WindowState *ws = wl_surface_get_window_state(ts->data_pending.proximal_surface);
23742381
ERR_FAIL_NULL(ws);
23752382

@@ -2386,7 +2393,6 @@ void WaylandThread::_wp_tablet_tool_on_motion(void *data, struct zwp_tablet_tool
23862393

23872394
void WaylandThread::_wp_tablet_tool_on_pressure(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t pressure) {
23882395
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2389-
23902396
if (!ts) {
23912397
return;
23922398
}
@@ -2400,7 +2406,6 @@ void WaylandThread::_wp_tablet_tool_on_distance(void *data, struct zwp_tablet_to
24002406

24012407
void WaylandThread::_wp_tablet_tool_on_tilt(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, wl_fixed_t tilt_x, wl_fixed_t tilt_y) {
24022408
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2403-
24042409
if (!ts) {
24052410
return;
24062411
}
@@ -2425,7 +2430,6 @@ void WaylandThread::_wp_tablet_tool_on_wheel(void *data, struct zwp_tablet_tool_
24252430

24262431
void WaylandThread::_wp_tablet_tool_on_button(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t serial, uint32_t button, uint32_t state) {
24272432
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2428-
24292433
if (!ts) {
24302434
return;
24312435
}
@@ -2461,13 +2465,11 @@ void WaylandThread::_wp_tablet_tool_on_button(void *data, struct zwp_tablet_tool
24612465

24622466
void WaylandThread::_wp_tablet_tool_on_frame(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t time) {
24632467
TabletToolState *ts = wp_tablet_tool_get_state(wp_tablet_tool_v2);
2464-
24652468
if (!ts) {
24662469
return;
24672470
}
24682471

24692472
SeatState *ss = wl_seat_get_seat_state(ts->wl_seat);
2470-
24712473
if (!ss) {
24722474
return;
24732475
}

0 commit comments

Comments
 (0)