Skip to content

Ignore setActive() for windows that are being deleted

Vlad Zahorodnii requested to merge work/surface-fall-out into master

Recently, I rewrote our wl_surface wrapper with the new approach. With the new approach, we destroy wrappers immediately. Unfortunately, it so happens that the workspace may call setActive() on a destroyed window in order to activate the next client.

The setActive() method besides changing the active status also updates the stacking order. The layer to which the client belongs depends on things such as window type and window state.

Since the surface is now gone at the moment when setActive() is called, we will crash in WaylandClient::isLockScreen() because it expects the surface to be valid.

In order to fix that crash, this merge request makes the WaylandClient (the base class for all wayland clients) realize its window type during initialization. Furthermore, to make things more sensible, this merge request prevents activating clients that are in the middle of being destroyed just to make things extra robust.

Sorry for the inconvenience caused by my port of the wl_surface wrapper in kwayland-server.

Merge request reports