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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user