desktop-shell: don't crash if a surface disappears while grabbed

A surface can get destroyed while a shell grab is active, which can
for example happen if the command running in weston-terminal exits.

When a surface gets destroyed, grab->shsurf is reset to NULL by
destroy_shell_grab_shsurf(), but otherwise the grab remains active and
its callbacks continue to be called. Thus, dereferencing grab->shsurf
in a callback without checking it for NULL first can lead to undefined
behavior, including crashes.

Several functions were already properly checking grab->shsurf for NULL,
move_grab_motion() being one example. Others, however, were not, which
is what this commit fixes.

Related to wayland/weston#192

Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
2 jobs for fix-surface-disappearing-while-grabbed in 3 minutes and 56 seconds (queued for 2 seconds)
Status Job ID Name Coverage
  Build
passed #120816
build-native-autotools

00:03:56

passed #120817
build-native-meson

00:02:14