Implemented ViewWrapper::window()

Implementation was missing for qtquick and add a bug for qtwidgets.
This commit is contained in:
Sergio Martins
2022-05-03 20:02:14 +01:00
parent dc9a0145e2
commit 0a1a783054
7 changed files with 43 additions and 9 deletions

View File

@@ -32,6 +32,7 @@ std::shared_ptr<ViewWrapper> Window_qtquick::rootView() const
qWarning() << Q_FUNC_INFO << "Expected QQuickView";
}
qWarning() << Q_FUNC_INFO << "Window does not have a root";
return {};
}

View File

@@ -73,12 +73,17 @@ std::shared_ptr<ViewWrapper> ViewWrapper_qtquick::childViewAt(QPoint) const
std::shared_ptr<Window> ViewWrapper_qtquick::window() const
{
if (QWindow *w = m_item->window()) {
auto windowqtquick = new Window_qtquick(w);
return std::shared_ptr<Window>(windowqtquick);
}
return {};
}
bool ViewWrapper_qtquick::isRootView() const
{
return {};
return View_qtquick::isRootView(m_item);
}
void ViewWrapper_qtquick::setVisible(bool)
@@ -164,7 +169,10 @@ bool ViewWrapper_qtquick::is(Type t) const
std::shared_ptr<ViewWrapper> ViewWrapper_qtquick::rootView() const
{
// return std::shared_ptr<ViewWrapper>(new ViewWrapper_qtquick(m_item->window()));
if (Window::Ptr window = this->window())
return window->rootView();
qWarning() << Q_FUNC_INFO << "No window present";
return {};
}
@@ -197,9 +205,9 @@ QString ViewWrapper_qtquick::objectName() const
return m_item->objectName();
}
QVariant ViewWrapper_qtquick::property(const char *) const
QVariant ViewWrapper_qtquick::property(const char *name) const
{
return {};
return m_item->property(name);
}
bool ViewWrapper_qtquick::isNull() const
@@ -221,8 +229,9 @@ bool ViewWrapper_qtquick::testAttribute(Qt::WidgetAttribute) const
return {};
}
void ViewWrapper_qtquick::setCursor(Qt::CursorShape)
void ViewWrapper_qtquick::setCursor(Qt::CursorShape shape)
{
m_item->QQuickItem::setCursor(shape);
}
QSize ViewWrapper_qtquick::minSize() const

View File

@@ -557,13 +557,13 @@ QVariant View_qtquick::property(const char *name) const
return QObject::property(name);
}
bool View_qtquick::isRootView() const
/*static*/ bool View_qtquick::isRootView(const QQuickItem *item)
{
QQuickItem *parent = parentItem();
QQuickItem *parent = item->parentItem();
if (!parent)
return true;
if (QQuickView *w = quickView()) {
if (QQuickView *w = qobject_cast<QQuickView *>(item->window())) {
if (parent == w->contentItem() || parent == w->rootObject())
return true;
}
@@ -571,6 +571,11 @@ bool View_qtquick::isRootView() const
return false;
}
bool View_qtquick::isRootView() const
{
return View_qtquick::isRootView(this);
}
QQuickView *View_qtquick::quickView() const
{
return qobject_cast<QQuickView *>(QQuickItem::window());

View File

@@ -96,6 +96,7 @@ public:
void activateWindow() override;
void raise() override;
QVariant property(const char *name) const override;
static bool isRootView(const QQuickItem *);
bool isRootView() const override;
QQuickView *quickView() const;
QPoint mapToGlobal(QPoint localPt) const override;

View File

@@ -16,6 +16,7 @@
#include <QWidget>
#include <QVariant>
#include <QWindow>
#include <QDebug>
using namespace KDDockWidgets;
@@ -37,6 +38,7 @@ std::shared_ptr<ViewWrapper> Window_qtwidgets::rootView() const
if (QWidget *widget = m_window->property("kddockwidgets_qwidget").value<QWidget *>())
return std::shared_ptr<ViewWrapper>(new Views::ViewWrapper_qtwidgets(widget));
qWarning() << Q_FUNC_INFO << "Window does not have a root";
return nullptr;
}

View File

@@ -141,7 +141,7 @@ void ViewWrapper_qtwidgets::setGeometry(QRect rect)
std::shared_ptr<Window> ViewWrapper_qtwidgets::window() const
{
if (QWindow *w = m_widget->window()->windowHandle())
return std::shared_ptr<Window>(new Window_qtwidgets(w));
return std::shared_ptr<Window>(new Window_qtwidgets(m_widget->window()));
return nullptr;
}

View File

@@ -45,6 +45,22 @@ TEST_CASE("ViewWrapper::setParent")
delete r2;
}
TEST_CASE("ViewWrapper::windowHandle,rootView,Window::rootView")
{
auto r = Platform::instance()->tests_createView({});
auto rootView = r->asWrapper();
auto childView = Platform::instance()->tests_createView({ true }, r)->asWrapper();
auto window = rootView->window();
REQUIRE(window);
CHECK_EQ(window->handle(), childView->window()->handle());
CHECK(rootView->rootView()->equals(rootView));
CHECK(childView->rootView()->equals(rootView));
REQUIRE(window->rootView());
CHECK(window->rootView()->equals(rootView));
}
TEST_CASE("ViewWrapper::minSize")
{
const QSize sizeHint = {};