desktop-shell: remove surface destroy listener when focus state is destroyed

Changing the focused surface did remove the surface_destroy_listener from the wl_signal list,
but destroying the focus state did not. As a result, sometimes the same listener would be added
to two surfaces, which would join their wl_signal lists together, which would cause infinite
loops and use-after-frees when closing desktop surfaces.
2 jobs for crash-fixes in 4 minutes and 3 seconds (queued for 1 second)
Status Job ID Name Coverage
  Build
passed #120814
build-native-autotools

00:04:03

passed #120815
build-native-meson

00:02:41