@@ -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
22502255void 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
22772280void 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
23052311void 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
23322337void 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
23502354void 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
23662369void 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
23872394void 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
24012407void 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
24262431void 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
24622466void 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