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 3 minutes and 6 seconds
Status Job ID Name Coverage
  Build
failed #120812
build-native-autotools

00:03:06

failed #120813
build-native-meson

00:02:41

 
Name Stage Failure
failed
build-native-autotools Build
make: *** [all] Error 2
Makefile:3585: recipe for target 'all' failed
Uploading artifacts...
WARNING: build-*/weston-*.tar.xz: no matching files
build-*/*.log: found 1 matching files

WARNING: build-*/logs: no matching files
prefix-*: found 54 matching files

Uploading artifacts to coordinator... ok
id=120812 responseStatus=201 Created token=HFQ3aRAH
ERROR: Job failed: exit code 1
failed
build-native-meson Build
[410/413] Generating symbol file 'libweston-desktop/87ca47f@@weston-desktop-6@sha/libweston-desktop-6.so.0.0.0.symbols'.
[411/413] Linking target tests/weston-test-desktop-shell.so.
[412/413] Linking target ivi-shell/ivi-shell.so.
ninja: build stopped: cannot make progress due to previous errors.
Uploading artifacts...
build-*/meson-logs: found 2 matching files
prefix-*: found 54 matching files

Uploading artifacts to coordinator... ok
id=120813 responseStatus=201 Created token=mnhZqyVS
ERROR: Job failed: exit code 1