X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/462982faa361c79daab43ce526ae64646b1ea63c..09a0a44a073cf6396f0a28dc3847d081c4dab24e:/src/dolphindockwidget.cpp diff --git a/src/dolphindockwidget.cpp b/src/dolphindockwidget.cpp index 16f575583..5e79e0316 100644 --- a/src/dolphindockwidget.cpp +++ b/src/dolphindockwidget.cpp @@ -6,29 +6,35 @@ #include "dolphindockwidget.h" +#include #include -namespace { - // Disable the 'Floatable' feature, i.e., the possibility to drag the - // dock widget out of the main window. This works around problems like - // https://bugs.kde.org/show_bug.cgi?id=288629 - // https://bugs.kde.org/show_bug.cgi?id=322299 - const QDockWidget::DockWidgetFeatures DefaultDockWidgetFeatures = QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable; +namespace +{ +// Disable the 'Floatable' feature, i.e., the possibility to drag the +// dock widget out of the main window. This works around problems like +// https://bugs.kde.org/show_bug.cgi?id=288629 +// https://bugs.kde.org/show_bug.cgi?id=322299 +const QDockWidget::DockWidgetFeatures DefaultDockWidgetFeatures = QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable; } - // Empty titlebar for the dock widgets when "Lock Layout" has been activated. +// Empty titlebar for the dock widgets when "Lock Layout" has been activated. class DolphinDockTitleBar : public QWidget { Q_OBJECT public: - explicit DolphinDockTitleBar(QWidget* parent = nullptr) : QWidget(parent) {} - ~DolphinDockTitleBar() override {} + explicit DolphinDockTitleBar(QWidget *parent = nullptr) + : QWidget(parent) + { + } + ~DolphinDockTitleBar() override + { + } QSize minimumSizeHint() const override { - const int border = style()->pixelMetric(QStyle::PM_DockWidgetTitleBarButtonMargin); - return QSize(border, border); + return QSize(0, 0); } QSize sizeHint() const override @@ -37,10 +43,10 @@ public: } }; -DolphinDockWidget::DolphinDockWidget(const QString& title, QWidget* parent, Qt::WindowFlags flags) : - QDockWidget(title, parent, flags), - m_locked(false), - m_dockTitleBar(nullptr) +DolphinDockWidget::DolphinDockWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags) + : QDockWidget(title, parent, flags) + , m_locked(false) + , m_dockTitleBar(nullptr) { setFeatures(DefaultDockWidgetFeatures); } @@ -59,7 +65,7 @@ void DolphinDockWidget::setLocked(bool lock) m_dockTitleBar = new DolphinDockTitleBar(this); } setTitleBarWidget(m_dockTitleBar); - setFeatures(QDockWidget::NoDockWidgetFeatures); + setFeatures(QDockWidget::DockWidgetClosable); } else { setTitleBarWidget(nullptr); setFeatures(DefaultDockWidgetFeatures); @@ -72,4 +78,21 @@ bool DolphinDockWidget::isLocked() const return m_locked; } +bool DolphinDockWidget::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::Show: + case QEvent::Hide: + if (event->spontaneous()) { + // The Dolphin window has been minimized or restored. We do not want this to be interpreted like a user was toggling the visibility of this widget. + // We return here so no QDockWidget::visibilityChanged() signal is emitted. This does not seem to happen either way on Wayland. + return true; + } + [[fallthrough]]; + default: + return QDockWidget::event(event); + } +} + #include "dolphindockwidget.moc" +#include "moc_dolphindockwidget.cpp"