--- a/src/force-fullscreen.cpp +++ b/src/force-fullscreen.cpp @@ -24,6 +24,7 @@ */ #include +#include #include #include #include @@ -640,9 +641,22 @@ output->rem_binding(&on_toggle_fullscreen); wayfire_force_fullscreen_instances.erase(output); + // Toggling off erases the entry from backgrounds. Keep view references + // in a separate list so cleanup does not invalidate its own iterator. + std::vector views; for (auto& b : backgrounds) { - toggle_fullscreen(b.first); + views.push_back(b.first); + } + + for (auto view : views) + { + // Teardown is mandatory even when another plugin or a session lock + // prevents user actions. Do not leave transformers referring to + // background data which is about to be destroyed. + view->toplevel()->pending().fullscreen = false; + wf::get_core().tx_manager->schedule_object(view->toplevel()); + deactivate(view); } } };