diff --git a/abstract_backend.h b/abstract_backend.h index 0a255366be..13db34134d 100644 --- a/abstract_backend.h +++ b/abstract_backend.h @@ -78,6 +78,7 @@ public: void touchFrame(); Q_SIGNALS: + void screensQueried(); void cursorChanged(); void readyChanged(bool); diff --git a/backends/drm/drm_backend.h b/backends/drm/drm_backend.h index 0be291aa18..644b3ed791 100644 --- a/backends/drm/drm_backend.h +++ b/backends/drm/drm_backend.h @@ -76,7 +76,6 @@ public: void bufferDestroyed(DrmBuffer *b); Q_SIGNALS: - void screensQueried(); void outputRemoved(KWin::DrmOutput *output); void outputAdded(KWin::DrmOutput *output); diff --git a/backends/fbdev/fb_backend.h b/backends/fbdev/fb_backend.h index a0da7a77ab..81620dd81e 100644 --- a/backends/fbdev/fb_backend.h +++ b/backends/fbdev/fb_backend.h @@ -69,9 +69,6 @@ public: } QImage::Format imageFormat() const; -Q_SIGNALS: - void screensQueried(); - private: void openFrameBuffer(); bool queryScreenInfo(); diff --git a/backends/wayland/wayland_backend.cpp b/backends/wayland/wayland_backend.cpp index 5caae84b2f..252dcf1094 100644 --- a/backends/wayland/wayland_backend.cpp +++ b/backends/wayland/wayland_backend.cpp @@ -367,6 +367,7 @@ WaylandBackend::WaylandBackend(const QByteArray &display, QObject *parent) , m_cursor(nullptr) , m_displayName(display) { + connect(this, &WaylandBackend::outputsChanged, this, &WaylandBackend::screensQueried); } WaylandBackend::~WaylandBackend() diff --git a/backends/x11/x11windowed_backend.cpp b/backends/x11/x11windowed_backend.cpp index 4cb930dff9..334ba7503e 100644 --- a/backends/x11/x11windowed_backend.cpp +++ b/backends/x11/x11windowed_backend.cpp @@ -99,6 +99,7 @@ void X11WindowedBackend::init() setReady(true); waylandServer()->seat()->setHasPointer(true); waylandServer()->seat()->setHasKeyboard(true); + emit screensQueried(); } } diff --git a/main_wayland.cpp b/main_wayland.cpp index d5467b020b..51cb0bf676 100644 --- a/main_wayland.cpp +++ b/main_wayland.cpp @@ -94,9 +94,6 @@ void ApplicationWayland::performStartup() // try creating the Wayland Backend createInput(); createBackend(); - if (dynamic_cast(waylandServer()->backend())) { - continueStartupWithScreens(); - } } void ApplicationWayland::createBackend() @@ -111,37 +108,29 @@ void ApplicationWayland::createBackend() ::exit(1); } ); - connect(b, &Wayland::WaylandBackend::outputsChanged, this, &ApplicationWayland::continueStartupWithScreens); - b->init(); backend = b; } if (!backend && !m_x11Display.isEmpty()) { KWin::X11WindowedBackend *x11Backend = new KWin::X11WindowedBackend(m_x11Display, m_backendSize, this); - x11Backend->init(); - if (x11Backend->isValid()) { - backend = x11Backend; - } else { - delete x11Backend; - } + backend = x11Backend; } } #if HAVE_DRM if (m_drm) { DrmBackend *b = new DrmBackend(this); - connect(b, &DrmBackend::screensQueried, this, &ApplicationWayland::continueStartupWithScreens); - b->init(); backend = b; } #endif if (!m_framebuffer.isEmpty()) { FramebufferBackend *b = new FramebufferBackend(this); - connect(b, &FramebufferBackend::screensQueried, this, &ApplicationWayland::continueStartupWithScreens); b->setDevice(m_framebuffer); - b->init(); backend = b; } - if (!backend) { + if (backend) { + connect(backend, &AbstractBackend::screensQueried, this, &ApplicationWayland::continueStartupWithScreens); + backend->init(); + } else { std::cerr << "FATAL ERROR: could not create a backend, exiting now" << std::endl; ::exit(1); } @@ -149,14 +138,7 @@ void ApplicationWayland::createBackend() void ApplicationWayland::continueStartupWithScreens() { - if (Wayland::WaylandBackend *w = dynamic_cast(waylandServer()->backend())) { - disconnect(w, &Wayland::WaylandBackend::outputsChanged, this, &ApplicationWayland::continueStartupWithScreens); - } -#if HAVE_DRM - if (DrmBackend *b = dynamic_cast(waylandServer()->backend())) { - disconnect(b, &DrmBackend::screensQueried, this, &ApplicationWayland::continueStartupWithScreens); - } -#endif + disconnect(waylandServer()->backend(), &AbstractBackend::screensQueried, this, &ApplicationWayland::continueStartupWithScreens); createScreens(); waylandServer()->initOutputs();