diff --git a/src/kjobwidgets.h b/src/kjobwidgets.h --- a/src/kjobwidgets.h +++ b/src/kjobwidgets.h @@ -44,12 +44,6 @@ */ KJOBWIDGETS_EXPORT void setWindow(KJob *job, QWidget *widget); -/** - * Overload that takes a QWindow. - * @since 5.0 - */ -//KJOBWIDGETS_EXPORT void setWindow(KJob *job, QWindow *window); - /** * Return the window associated with this job. * @since 5.0 @@ -68,4 +62,26 @@ KJOBWIDGETS_EXPORT unsigned long userTimestamp(KJob *job); } +namespace KJobWindows +{ +/** + * Associate this job with a window given by @p window. + * This is used: + * @li by KDialogJobUiDelegate as parent widget for error messages + * @li by KWidgetJobTracker as parent widget for progress dialogs + * @li by KIO::AbstractJobInteractionInterface as parent widget for rename/skip dialogs + * and possibly more. + * @li by KIO::DropJob as parent widget of popup menus. + * This is required on Wayland to properly position the menu. + * @since 5.42 + */ +KJOBWIDGETS_EXPORT void setWindow(KJob *job, QWindow *window); + +/** + * Return the window associated with this job. + * @since 5.42 + */ +KJOBWIDGETS_EXPORT QWindow *window(KJob *job); +} + #endif diff --git a/src/kjobwidgets.cpp b/src/kjobwidgets.cpp --- a/src/kjobwidgets.cpp +++ b/src/kjobwidgets.cpp @@ -27,30 +27,14 @@ void KJobWidgets::setWindow(KJob *job, QWidget *widget) { job->setProperty("widget", QVariant::fromValue(widget)); - QWindow *window = widget ? widget->windowHandle() : nullptr; - job->setProperty("window", QVariant::fromValue(window)); - if (window) { - job->setProperty("window-id", QVariant::fromValue(qptrdiff(window->winId()))); - } + KJobWindows::setWindow(job, widget ? widget->windowHandle() : nullptr); } QWidget *KJobWidgets::window(KJob *job) { return job->property("widget").value(); } -#if 0 -void KJobWidgets::setWindow(KJob *job, QWindow *window) -{ - job->setProperty("window", QVariant::fromValue(window)); -} - -QWindow *KJobWidgets::window(KJob *job) // ### will have to be in a different namespace -{ - return job->property("window").value(); -} -#endif - // duplicated from kwindowsystem static int timestampCompare(unsigned long time1_, unsigned long time2_) // like strcmp() { @@ -75,3 +59,16 @@ return job->property("userTimestamp").toULongLong(); } + +void KJobWindows::setWindow(KJob *job, QWindow *window) +{ + job->setProperty("window", QVariant::fromValue(window)); + if (window) { + job->setProperty("window-id", QVariant::fromValue(window->winId())); + } +} + +QWindow *KJobWindows::window(KJob *job) +{ + return job->property("window").value(); +}