Normalize how we set top level window geometry

Prefer Window API, since for QtQuick the root view isn't so tighly
coupled with the QWindow as in QWidgets world. Hide the difference in
Window_qtwidgets.cpp, which now prefers the QWidget API whenever possible,
as that's better tested than using QWindow direclty.
This commit is contained in:
Sergio Martins
2022-06-06 11:17:42 +01:00
parent 581451c342
commit 9c881ec53e
7 changed files with 36 additions and 4 deletions

View File

@@ -590,8 +590,8 @@ void LayoutSaver::Private::deserializeWindowGeometry(const T &saved, View *topLe
Controllers::FloatingWindow::ensureRectIsOnScreen(geometry);
topLevel->setGeometry(geometry);
topLevel->setVisible(saved.isVisible);
topLevel->window()->setGeometry(geometry);
topLevel->window()->setVisible(saved.isVisible);
}
LayoutSaver::Private::Private(RestoreOptions options)

View File

@@ -38,6 +38,7 @@ public:
virtual void setProperty(const char *name, const QVariant &value) = 0;
virtual QVariant property(const char *name) const = 0;
virtual bool isVisible() const = 0;
virtual void setVisible(bool) = 0;
virtual WId handle() const = 0;
virtual bool equals(std::shared_ptr<Window> other) const = 0;

View File

@@ -154,7 +154,12 @@ void Window_qt::startSystemMove()
m_window->startSystemMove();
}
void KDDockWidgets::Window_qt::setGeometry(QRect geo) const
void Window_qt::setGeometry(QRect geo) const
{
m_window->setGeometry(geo);
}
void Window_qt::setVisible(bool is)
{
m_window->setVisible(is);
}

View File

@@ -28,6 +28,7 @@ public:
QRect geometry() const override;
void setGeometry(QRect) const override;
bool isVisible() const override;
void setVisible(bool) override;
WId handle() const override;
// TODOm3: Remove

View File

@@ -22,4 +22,5 @@ public:
std::shared_ptr<ViewWrapper> rootView() const override;
Window::Ptr transientParent() const override;
};
}
}

View File

@@ -57,3 +57,25 @@ Window::Ptr Window_qtwidgets::transientParent() const
return nullptr;
}
void Window_qtwidgets::setGeometry(QRect geo) const
{
if (auto v = rootView()) {
// In QWidget world QWidget interface is prefered over QWindow
v->setGeometry(geo);
} else {
// Go via QWindow instead
Window_qt::setGeometry(geo);
}
}
void Window_qtwidgets::setVisible(bool is)
{
if (auto v = rootView()) {
// In QWidget world QWidget interface is prefered over QWindow
v->setVisible(is);
} else {
// Go via QWindow instead
Window_qt::setVisible(is);
}
}

View File

@@ -23,6 +23,8 @@ public:
~Window_qtwidgets() override;
std::shared_ptr<ViewWrapper> rootView() const override;
Window::Ptr transientParent() const override;
void setGeometry(QRect) const override;
void setVisible(bool) override;
};
}