From e0ea91afdf0dccef7e3afbf23a159bf5a8d6b249 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Mon, 15 Jul 2024 09:45:20 +0300
Subject: [PATCH] Remove parent for DropMenu

QWidget::winId() will force creating window handles for all its ancestor
widgets unless the Qt::WA_DontCreateNativeAncestors flag is set.

For example, on wayland, this would result in creating sub-surfaces, and
depending on the client, it's likely that there are going to be issues with
painting.

On the other hand, since the DropJob takes care of setting the transient
parent for the DropMenu, the parent can be simply omitted.

BUG: 490183
---
 src/widgets/dropjob.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/widgets/dropjob.cpp b/src/widgets/dropjob.cpp
index e11e762bd0..f4a23f5688 100644
--- a/src/widgets/dropjob.cpp
+++ b/src/widgets/dropjob.cpp
@@ -520,8 +520,7 @@ void DropJobPrivate::slotDropActionDetermined(int error)
 
     // There was an error, handle it
     if (error == KIO::ERR_UNKNOWN) {
-        auto *window = KJobWidgets::window(q);
-        KIO::DropMenu *menu = new KIO::DropMenu(window);
+        KIO::DropMenu *menu = new KIO::DropMenu();
         QObject::connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater);
 
         // If the user clicks outside the menu, it will be destroyed without emitting the triggered signal.
@@ -541,6 +540,7 @@ void DropJobPrivate::slotDropActionDetermined(int error)
                     menu->windowHandle()->setTransientParent(transientParent);
                 }
             }
+            auto *window = KJobWidgets::window(q);
             menu->popup(window ? window->mapToGlobal(m_relativePos) : QCursor::pos());
         }
         m_menus.insert(menu);
-- 
GitLab

