diff --git a/Changelog b/Changelog index af57d9f0..ca4fccc5 100644 --- a/Changelog +++ b/Changelog @@ -3,6 +3,8 @@ * v1.2.0 (unreleased, November) - [DONE] Wayland support + - Added Flag_KeepAboveIfNotUtilityWindow, so you can have keep above even if + floating window is shown in the task-bar. * v1.1.0 (26 October 2020) - New drop indicator style type: Segmented Indicators diff --git a/examples/dockwidgets/main.cpp b/examples/dockwidgets/main.cpp index 4196340a..14ca3a4f 100644 --- a/examples/dockwidgets/main.cpp +++ b/examples/dockwidgets/main.cpp @@ -91,6 +91,9 @@ int main(int argc, char **argv) QCommandLineOption noUtilityWindows("u", QCoreApplication::translate("main", "FloatingWindows will be normal windows instead of utility windows")); parser.addOption(noUtilityWindows); + QCommandLineOption keepAbove("o", QCoreApplication::translate("main", "FloatingWindows will have Qt::WindowStaysOnTopHint. Implies not being an utility window (try it with -u too)")); + parser.addOption(keepAbove); + parser.addPositionalArgument("savedlayout", QCoreApplication::translate("main", "loads the specified json file at startup")); #ifdef KDDOCKWIDGETS_SUPPORTS_NESTED_MAINWINDOWS @@ -143,6 +146,9 @@ int main(int argc, char **argv) if (parser.isSet(noQtTool)) flags |= KDDockWidgets::Config::Flag_internal_DontUseQtToolWindowsForFloatingWindows; + if (parser.isSet(keepAbove)) + flags |= KDDockWidgets::Config::Flag_KeepAboveIfNotUtilityWindow; + if (parser.isSet(noParentForFloating)) flags |= KDDockWidgets::Config::Flag_internal_DontUseParentForFloatingWindows; diff --git a/src/Config.h b/src/Config.h index e1dc429b..be1e9946 100644 --- a/src/Config.h +++ b/src/Config.h @@ -83,6 +83,7 @@ public: Flag_TitleBarNoFloatButton = 0x4000, ///> The TitleBar won't show the float button Flag_AutoHideSupport = 0x8000 | Flag_TitleBarNoFloatButton, ///> Supports minimizing dock widgets to the side-bar. ///> By default it also turns off the float button, but you can remove Flag_TitleBarNoFloatButton to have both. + Flag_KeepAboveIfNotUtilityWindow = 0x10000, ///> Only meaningful if Flag_DontUseUtilityFloatingWindows is set. If floating windows are normal windows, you might still want them to keep above and not minimize when you focus the main window. Flag_Default = Flag_AeroSnapWithClientDecos ///> The defaults }; Q_DECLARE_FLAGS(Flags, Flag) diff --git a/src/private/FloatingWindow.cpp b/src/private/FloatingWindow.cpp index cbefa682..6f234084 100644 --- a/src/private/FloatingWindow.cpp +++ b/src/private/FloatingWindow.cpp @@ -158,6 +158,9 @@ FloatingWindow::FloatingWindow(MainWindowBase *parent) DockRegistry::self()->registerFloatingWindow(this); qCDebug(creation) << "FloatingWindow()" << this; + if (Config::self().flags() & Config::Flag_KeepAboveIfNotUtilityWindow) + setWindowFlag(Qt::WindowStaysOnTopHint, true); + maybeCreateResizeHandler(); updateTitleBarVisibility(); diff --git a/src/private/quick/QWidgetAdapter_quick.cpp b/src/private/quick/QWidgetAdapter_quick.cpp index bd3a701e..03be0bca 100644 --- a/src/private/quick/QWidgetAdapter_quick.cpp +++ b/src/private/quick/QWidgetAdapter_quick.cpp @@ -397,6 +397,12 @@ QSize QWidgetAdapter::sizeHint() const return m_sizeHint; } +void QWidgetAdapter::setWindowFlag(int flag, bool enable) +{ + Q_UNUSED(flag); + Q_UNUSED(enable); +} + Qt::WindowFlags QWidgetAdapter::windowFlags() const { return m_windowFlags; diff --git a/src/private/quick/QWidgetAdapter_quick_p.h b/src/private/quick/QWidgetAdapter_quick_p.h index 62b7711a..12f51733 100644 --- a/src/private/quick/QWidgetAdapter_quick_p.h +++ b/src/private/quick/QWidgetAdapter_quick_p.h @@ -149,6 +149,7 @@ public: void setFocus(Qt::FocusReason); virtual QSize sizeHint() const; + void setWindowFlag(int flag, bool enable = true); Qt::WindowFlags windowFlags() const; void setWindowOpacity(qreal);