If the grab surface happens to be unresponsive, the busy cursor grab
will be started and that will cause the grab surface to receive focus,
which in turn leads to it being pingged again. Break the cycle by not
sending pings to it. If the shell is unresponsive it won't be able to
set the busy cursor anyway.
if (!shsurf->resource.client)
return;
+ if (shsurf->surface == shsurf->shell->grab_surface)
+ return;
+
if (!shsurf->ping_timer) {
shsurf->ping_timer = malloc(sizeof *shsurf->ping_timer);
if (!shsurf->ping_timer)