diff --git a/src/backends/x11/windowed/x11_windowed_backend.cpp b/src/backends/x11/windowed/x11_windowed_backend.cpp index ca97beb6f8..432e887f5a 100644 --- a/src/backends/x11/windowed/x11_windowed_backend.cpp +++ b/src/backends/x11/windowed/x11_windowed_backend.cpp @@ -3,6 +3,7 @@ This file is part of the KDE project. SPDX-FileCopyrightText: 2015 Martin Gräßlin + SPDX-FileCopyrightText: 2023 Harald Sitter SPDX-License-Identifier: GPL-2.0-or-later */ @@ -160,6 +161,7 @@ X11WindowedBackend::X11WindowedBackend(const X11WindowedBackendOptions &options) X11WindowedBackend::~X11WindowedBackend() { + destroyOutputs(); m_pointerDevice.reset(); m_keyboardDevice.reset(); m_touchDevice.reset(); @@ -172,6 +174,7 @@ X11WindowedBackend::~X11WindowedBackend() xcb_key_symbols_free(m_keySymbols); } xcb_disconnect(m_connection); + m_connection = nullptr; } } @@ -691,4 +694,14 @@ Outputs X11WindowedBackend::outputs() const return m_outputs; } +void X11WindowedBackend::destroyOutputs() +{ + while (!m_outputs.isEmpty()) { + auto output = m_outputs.takeLast(); + output->updateEnabled(false); + Q_EMIT outputRemoved(output); + delete output; + } +} + } // namespace KWin diff --git a/src/backends/x11/windowed/x11_windowed_backend.h b/src/backends/x11/windowed/x11_windowed_backend.h index 4d289f9f47..d82c3bf2d5 100644 --- a/src/backends/x11/windowed/x11_windowed_backend.h +++ b/src/backends/x11/windowed/x11_windowed_backend.h @@ -129,6 +129,7 @@ private: void updateSize(xcb_configure_notify_event_t *event); void initXInput(); X11WindowedOutput *findOutput(xcb_window_t window) const; + void destroyOutputs(); X11WindowedBackendOptions m_options; xcb_connection_t *m_connection = nullptr;