diff --git a/src/private/FloatingWindow.cpp b/src/private/FloatingWindow.cpp index ee7218cc..46cdadef 100644 --- a/src/private/FloatingWindow.cpp +++ b/src/private/FloatingWindow.cpp @@ -103,9 +103,23 @@ MainWindowBase *actualParent(MainWindowBase *candidate) : candidate; } +static FloatingWindow::Flags flagsForFloatingWindow() +{ + FloatingWindow::Flags flags = {}; + + if ((Config::self().flags() & Config::Flag_TitleBarHasMinimizeButton) == Config::Flag_TitleBarHasMinimizeButton) + flags |= FloatingWindow::Flag::TitleBarHasMinimizeButton; + + if (Config::self().flags() & Config::Flag_TitleBarHasMaximizeButton) + flags |= FloatingWindow::Flag::TitleBarHasMaximizeButton; + + return flags; +} + FloatingWindow::FloatingWindow(QRect suggestedGeometry, MainWindowBase *parent) : QWidgetAdapter(actualParent(parent), windowFlagsToUse()) , Draggable(this, KDDockWidgets::usesNativeDraggingAndResizing()) // FloatingWindow is only draggable when using a native title bar. Otherwise the KDDockWidgets::TitleBar is the draggable + , m_flags(flagsForFloatingWindow()) , m_dropArea(new DropArea(this)) , m_titleBar(Config::self().frameworkWidgetFactory()->createTitleBar(this)) { @@ -732,10 +746,10 @@ void FloatingWindow::ensureRectIsOnScreen(QRect &geometry) bool FloatingWindow::supportsMinimizeButton() const { - return (Config::self().flags() & Config::Flag_TitleBarHasMinimizeButton) == Config::Flag_TitleBarHasMinimizeButton; // this specific flag is not base^2 + return m_flags & Flag::TitleBarHasMinimizeButton; } bool FloatingWindow::supportsMaximizeButton() const { - return Config::self().flags() & Config::Flag_TitleBarHasMaximizeButton; + return m_flags & Flag::TitleBarHasMaximizeButton; } diff --git a/src/private/FloatingWindow_p.h b/src/private/FloatingWindow_p.h index f8f2b08d..19a9ffa2 100644 --- a/src/private/FloatingWindow_p.h +++ b/src/private/FloatingWindow_p.h @@ -41,6 +41,13 @@ class DOCKS_EXPORT FloatingWindow Q_PROPERTY(KDDockWidgets::TitleBar *titleBar READ titleBar CONSTANT) Q_PROPERTY(KDDockWidgets::DropArea *dropArea READ dropArea CONSTANT) public: + enum class Flag { + None = 0, + TitleBarHasMinimizeButton = 1, + TitleBarHasMaximizeButton = 2 + }; + Q_DECLARE_FLAGS(Flags, Flag); + explicit FloatingWindow(QRect suggestedGeometry, MainWindowBase *parent = nullptr); explicit FloatingWindow(Frame *frame, QRect suggestedGeometry, MainWindowBase *parent = nullptr); ~FloatingWindow() override; @@ -243,6 +250,7 @@ protected: bool event(QEvent *ev) override; void onCloseEvent(QCloseEvent *) override; + const FloatingWindow::Flags m_flags; QPointer m_dropArea; TitleBar *const m_titleBar; Qt::WindowState m_lastWindowManagerState = Qt::WindowNoState;