Move the "kddockwidgets_qwidget" property hack into the Qt platform

This removes the last usages of asQWidget() from the generic part.
This commit is contained in:
Sergio Martins
2022-04-25 20:44:05 +01:00
parent 41383bf7a4
commit 00bee2edcb
4 changed files with 13 additions and 6 deletions

View File

@@ -540,7 +540,6 @@ const Window::List DockRegistry::floatingQWindows() const
for (Controllers::FloatingWindow *fw : m_floatingWindows) {
if (!fw->beingDeleted()) {
if (Window::Ptr window = fw->view()->windowHandle()) {
window->setProperty("kddockwidgets_qwidget", QVariant::fromValue<QWidgetOrQuick *>(fw->view()->asQWidget())); // Since QWidgetWindow is private API
windows.push_back(window);
} else {
qWarning() << Q_FUNC_INFO << "FloatingWindow doesn't have QWindow";
@@ -608,8 +607,7 @@ Window::List DockRegistry::topLevels(bool excludeFloatingDocks) const
if (!excludeFloatingDocks) {
for (Controllers::FloatingWindow *fw : m_floatingWindows) {
if (fw->isVisible()) {
if (auto window = fw->view()->windowHandle()) {
window->setProperty("kddockwidgets_qwidget", QVariant::fromValue<QWidgetOrQuick *>(fw->view()->asQWidget())); // Since QWidgetWindow is private API
if (Window::Ptr window = fw->view()->windowHandle()) {
windows << window;
} else {
qWarning() << Q_FUNC_INFO << "FloatingWindow doesn't have QWindow";
@@ -621,7 +619,6 @@ Window::List DockRegistry::topLevels(bool excludeFloatingDocks) const
for (Controllers::MainWindow *m : m_mainWindows) {
if (m->isVisible()) {
if (Window::Ptr window = m->view()->windowHandle()) {
window->setProperty("kddockwidgets_qwidget", QVariant::fromValue<QWidgetOrQuick *>(m->view()->asQWidget()));
windows << window;
} else {
qWarning() << Q_FUNC_INFO << "MainWindow doesn't have QWindow";

View File

@@ -21,6 +21,14 @@ using namespace KDDockWidgets;
Window_qtwidgets::~Window_qtwidgets() = default;
Window_qtwidgets::Window_qtwidgets(QWidget *topLevel)
: Window_qt(topLevel->windowHandle())
{
// QWidgetWindow is private API, we have no way for going from QWindow to the top-level QWidget
// So set it as a property
setProperty("kddockwidgets_qwidget", QVariant::fromValue<QWidget *>(topLevel));
}
std::shared_ptr<ViewWrapper> Window_qtwidgets::rootView() const
{
if (!m_window)

View File

@@ -18,6 +18,8 @@ class DOCKS_EXPORT Window_qtwidgets : public Window_qt
{
public:
using Window_qt::Window_qt;
explicit Window_qtwidgets(QWidget *topLevel);
~Window_qtwidgets() override;
std::shared_ptr<ViewWrapper> rootView() const override;
Window::Ptr transientParent() const override;

View File

@@ -348,8 +348,8 @@ public:
std::shared_ptr<Window> windowHandle() const override
{
if (QWidget *root = QWidget::window()) {
if (QWindow *window = root->windowHandle()) {
return std::shared_ptr<Window>(new Window_qtwidgets(window));
if (root->windowHandle()) {
return std::shared_ptr<Window>(new Window_qtwidgets(root));
}
}