diff --git a/src/LayoutSaver.cpp b/src/LayoutSaver.cpp index 2bf4986d..398c8da4 100644 --- a/src/LayoutSaver.cpp +++ b/src/LayoutSaver.cpp @@ -1032,7 +1032,7 @@ void LayoutSaver::Placeholder::fromVariantMap(const QVariantMap &map) mainWindowUniqueName = map.value(QStringLiteral("mainWindowUniqueName")).toString(); } -static QScreen *screenForMainWindow(Controllers::MainWindow *mw) +static Screen::Ptr screenForMainWindow(Controllers::MainWindow *mw) { return mw->view()->screen(); } @@ -1055,7 +1055,7 @@ LayoutSaver::ScalingInfo::ScalingInfo(const QString &mainWindowId, QRect savedMa return; } - const int currentScreenIndex = qGuiApp->screens().indexOf(screenForMainWindow(mainWindow)); + const int currentScreenIndex = Platform::instance()->screens().indexOf(screenForMainWindow(mainWindow)); this->mainWindowName = mainWindowId; this->savedMainWindowGeometry = savedMainWindowGeo; diff --git a/src/Platform.h b/src/Platform.h index 04804aa4..bbb73b63 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -143,6 +143,9 @@ public: /// @brief Returns whether the left mouse button is pressed virtual bool isLeftMouseButtonPressed() const = 0; + /// @brief Returns all available screens + virtual Screen::List screens() const = 0; + #ifdef DOCKS_DEVELOPER_MODE struct CreateViewOptions diff --git a/src/View.cpp b/src/View.cpp index 5a508d9c..aabd023b 100644 --- a/src/View.cpp +++ b/src/View.cpp @@ -25,8 +25,6 @@ #include "Platform.h" #include "Window.h" -#include - using namespace KDDockWidgets; namespace KDDockWidgets { @@ -333,7 +331,7 @@ void View::closeRootView() view->close(); } -QScreen *View::screen() const +Screen::Ptr View::screen() const { if (Window::Ptr window = this->window()) return window->screen(); diff --git a/src/View.h b/src/View.h index b4eff99c..4177df27 100644 --- a/src/View.h +++ b/src/View.h @@ -14,6 +14,7 @@ #include "kddockwidgets/docks_export.h" #include "kddockwidgets/KDDockWidgets.h" #include "Controller.h" +#include "Screen.h" #include // TODOm4 Remove Qt headers, introduce Size and Rect structs #include @@ -28,7 +29,6 @@ QT_BEGIN_NAMESPACE class QCloseEvent; class QFocusEvent; class QSizePolicy; -class QScreen; class QPainter; QT_END_NAMESPACE @@ -36,6 +36,7 @@ namespace KDDockWidgets { class EventFilterInterface; class Controller; +class Screen; class Window; namespace Controllers { @@ -219,7 +220,7 @@ public: bool equals(const std::shared_ptr &) const; static bool equals(const View *one, const View *two); - QScreen *screen() const; + Screen::Ptr screen() const; /// @brief Returns the views's geometry, but always in global space QRect globalGeometry() const; diff --git a/src/Window.h b/src/Window.h index 87babe31..955b570a 100644 --- a/src/Window.h +++ b/src/Window.h @@ -12,16 +12,13 @@ #pragma once #include "View.h" +#include "Screen.h" #include "KDDockWidgets_p.h" #include #include "kdbindings/signal.h" -QT_BEGIN_NAMESPACE -class QScreen; -QT_END_NAMESPACE - namespace KDDockWidgets { /// @brief Represents a top-level window @@ -103,7 +100,7 @@ public: virtual QPoint mapToGlobal(QPoint localPos) const = 0; /// @brief Returns the screen this window is on - virtual QScreen *screen() const = 0; + virtual Screen::Ptr screen() const = 0; /// Deletes the underlying window. Only used during tests. virtual void destroy() = 0; diff --git a/src/controllers/FloatingWindow.cpp b/src/controllers/FloatingWindow.cpp index 499ca30c..30d8bac3 100644 --- a/src/controllers/FloatingWindow.cpp +++ b/src/controllers/FloatingWindow.cpp @@ -659,7 +659,7 @@ void FloatingWindow::updateSizeConstraints() void FloatingWindow::ensureRectIsOnScreen(QRect &geometry) { - const auto screens = qGuiApp->screens(); + const auto screens = Platform::instance()->screens(); if (screens.empty()) return; diff --git a/src/private/LayoutSaver_p.h b/src/private/LayoutSaver_p.h index f44321ea..061305bc 100644 --- a/src/private/LayoutSaver_p.h +++ b/src/private/LayoutSaver_p.h @@ -15,12 +15,12 @@ #include "KDDockWidgets_p.h" #include "kddockwidgets/KDDockWidgets.h" #include "kddockwidgets/LayoutSaver.h" +#include "kddockwidgets/Platform.h" #include "Window.h" #include #include #include -#include #include #include @@ -260,7 +260,7 @@ public: { s_currentLayoutBeingRestored = this; - const QList screens = qGuiApp->screens(); + const auto screens = Platform::instance()->screens(); const int numScreens = screens.size(); screenInfo.reserve(numScreens); for (int i = 0; i < numScreens; ++i) { diff --git a/src/private/Utils_p.h b/src/private/Utils_p.h index 8fa77368..2917923b 100644 --- a/src/private/Utils_p.h +++ b/src/private/Utils_p.h @@ -17,7 +17,6 @@ #include "kddockwidgets/View.h" #include "kddockwidgets/Platform.h" -#include #include #include #include diff --git a/src/private/multisplitter/Item.cpp b/src/private/multisplitter/Item.cpp index 967cc2a7..1fb84b95 100644 --- a/src/private/multisplitter/Item.cpp +++ b/src/private/multisplitter/Item.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #ifdef Q_CC_MSVC @@ -2102,7 +2101,7 @@ void ItemBoxContainer::dumpLayout(int level) { if (level == 0 && hostView()) { - const auto screens = qGuiApp->screens(); + const auto screens = Platform::instance()->screens(); for (auto screen : screens) { qDebug().noquote() << "Screen" << screen->geometry() << screen->availableGeometry() << "; drp=" << screen->devicePixelRatio(); diff --git a/src/qtcommon/Platform_qt.cpp b/src/qtcommon/Platform_qt.cpp index b025c7ee..47cfd74e 100644 --- a/src/qtcommon/Platform_qt.cpp +++ b/src/qtcommon/Platform_qt.cpp @@ -494,3 +494,14 @@ Platform_qt *Platform_qt::instance() { return static_cast(Platform::instance()); } + +Screen::List Platform_qt::screens() const +{ + const auto qscreens = qGuiApp->screens(); + Screen::List screens; + screens.reserve(qscreens.size()); + for (auto qscreen : qscreens) { + screens.push_back(std::make_shared(qscreen)); + } + return screens; +} diff --git a/src/qtcommon/Platform_qt.h b/src/qtcommon/Platform_qt.h index d652997e..3b4915ad 100644 --- a/src/qtcommon/Platform_qt.h +++ b/src/qtcommon/Platform_qt.h @@ -48,6 +48,8 @@ public: DisplayType displayType() const override; bool isLeftMouseButtonPressed() const override; + Screen::List screens() const override; + /// @brief Returns the specified QObject casted to View /// Nullptr if it's not a view. TODOm3: This is shared between the /// QtQuick and QWidgets impl, but will be remove once we started removing Qt from backend diff --git a/src/qtcommon/Window_qt.cpp b/src/qtcommon/Window_qt.cpp index 6befa5e1..d4008f69 100644 --- a/src/qtcommon/Window_qt.cpp +++ b/src/qtcommon/Window_qt.cpp @@ -10,6 +10,7 @@ */ +#include "kddockwidgets/Screen_qt.h" #include "kddockwidgets/Window_qt.h" #include @@ -108,9 +109,9 @@ QPoint Window_qt::mapToGlobal(QPoint localPos) const return m_window->mapToGlobal(localPos); } -QScreen *Window_qt::screen() const +Screen::Ptr Window_qt::screen() const { - return m_window->screen(); + return std::make_shared(m_window->screen()); } void Window_qt::destroy() diff --git a/src/qtcommon/Window_qt.h b/src/qtcommon/Window_qt.h index 3893956d..9c3b5b1a 100644 --- a/src/qtcommon/Window_qt.h +++ b/src/qtcommon/Window_qt.h @@ -12,6 +12,7 @@ #pragma once #include "kddockwidgets/Window.h" +#include "Screen_qt.h" #include @@ -47,7 +48,7 @@ public: QPoint mapFromGlobal(QPoint globalPos) const override; QPoint mapToGlobal(QPoint localPos) const override; - QScreen *screen() const override; + Screen_qt::Ptr screen() const override; void destroy() override; QSize minSize() const override; QSize maxSize() const override;