Por all usages of QWindop/windowHandle to KDDockWidgets::Window

Removes a lot of asQWidget() code and is also prepared for non-Qt
views.
This commit is contained in:
Sergio Martins
2022-04-09 19:21:56 +01:00
parent 5a8f176860
commit d6fd54cec4
40 changed files with 556 additions and 135 deletions

View File

@@ -10,7 +10,9 @@
*/
#include "Platform_qt.h"
#include "Window_qt.h"
#include <QWindow>
#include <QGuiApplication>
using namespace KDDockWidgets;
@@ -28,3 +30,22 @@ std::shared_ptr<ViewWrapper> Platform_qt::focusedView() const
{
return qobjectAsView(qApp->focusObject());
}
Window::List Platform_qt::windows() const
{
Window::List windows;
const auto qtwindows = qApp->topLevelWindows();
windows.reserve(qtwindows.size());
for (QWindow *qtwindow : qtwindows) {
windows << windowFromQWindow(qtwindow);
}
return windows;
}
std::shared_ptr<Window> Platform_qt::qobjectAsWindow(QObject *obj) const
{
if (auto window = qobject_cast<QWindow *>(obj))
return windowFromQWindow(window);
return nullptr;
}

View File

@@ -25,6 +25,9 @@ public:
~Platform_qt() override;
std::shared_ptr<ViewWrapper> focusedView() const override;
QVector<std::shared_ptr<Window>> windows() const override;
std::shared_ptr<Window> qobjectAsWindow(QObject *) const override;
virtual std::shared_ptr<Window> windowFromQWindow(QWindow *) const = 0;
};
}

View File

@@ -13,14 +13,92 @@
#include "Window_qt.h"
#include <QWindow>
#include <QScreen>
using namespace KDDockWidgets;
Window_qt::Window_qt(QWindow *window)
: m_window(window)
{
m_connection = QObject::connect(window, &QWindow::screenChanged, [this] {
screenChanged.emit();
});
}
Window_qt::~Window_qt()
{
QObject::disconnect(m_connection);
}
void Window_qt::setWindowState(Qt::WindowState state)
{
m_window->setWindowState(state);
}
Qt::WindowState Window_qt::windowState() const
{
return m_window->windowState();
}
QRect Window_qt::geometry() const
{
return m_window->geometry();
}
void Window_qt::setProperty(const char *name, const QVariant &value)
{
m_window->setProperty(name, value);
}
bool Window_qt::isVisible() const
{
return m_window->isVisible();
}
WId Window_qt::handle() const
{
if (m_window->handle())
return m_window->winId();
return 0;
}
QWindow *Window_qt::qtWindow() const
{
return m_window;
}
bool Window_qt::equals(std::shared_ptr<Window> other) const
{
auto otherQt = static_cast<Window_qt *>(other.get());
return other && otherQt->m_window == m_window;
}
void Window_qt::setFramePosition(QPoint targetPos)
{
m_window->setFramePosition(targetPos);
}
void Window_qt::setPosition(QPoint targetPos)
{
m_window->setFramePosition(targetPos);
}
QRect Window_qt::frameGeometry() const
{
return m_window->frameGeometry();
}
void Window_qt::resize(int width, int height)
{
m_window->resize(width, height);
}
bool Window_qt::isActive() const
{
return m_window->isActive();
}
QSize Window_qt::size() const
{
return m_window->size();
}

View File

@@ -19,14 +19,34 @@ class QWindow;
namespace KDDockWidgets {
class Window_qt : public Window
class DOCKS_EXPORT Window_qt : public Window
{
public:
explicit Window_qt(QWindow *);
~Window_qt();
~Window_qt() override;
void setWindowState(Qt::WindowState) override;
QRect geometry() const override;
bool isVisible() const override;
WId handle() const override;
// TODOv2: Remoove
void setProperty(const char *name, const QVariant &value) override;
bool equals(std::shared_ptr<Window> other) const override;
void setFramePosition(QPoint targetPos) override;
void setPosition(QPoint targetPos) override;
void resize(int width, int height) override;
bool isActive() const override;
Qt::WindowState windowState() const override;
QSize size() const override;
QRect frameGeometry() const override;
QWindow *qtWindow() const;
protected:
QPointer<QWindow> m_window;
private:
QPointer<QWindow> m_window;
QMetaObject::Connection m_connection;
};
}