From: Kai Uwe Broulik Date: Fri, 28 Jan 2022 18:40:11 +0000 (+0100) Subject: Hide "Places" section header when panels are unlocked X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/0dac70d059551ad143b9bb9849efb28840b7ba4b?ds=inline Hide "Places" section header when panels are unlocked Avoids showing "Places" twice. --- diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 9b4ac64c9..166091ca7 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -912,6 +912,8 @@ void DolphinMainWindow::togglePanelLockState() } } + DolphinPlacesModelSingleton::instance().placesModel()->setPanelsLocked(newLockState); + GeneralSettings::setLockPanels(newLockState); } @@ -1814,6 +1816,8 @@ void DolphinMainWindow::setupDockWidgets() { const bool lock = GeneralSettings::lockPanels(); + DolphinPlacesModelSingleton::instance().placesModel()->setPanelsLocked(lock); + KDualAction* lockLayoutAction = actionCollection()->add(QStringLiteral("lock_panels")); lockLayoutAction->setActiveText(i18nc("@action:inmenu Panels", "Unlock Panels")); lockLayoutAction->setActiveIcon(QIcon::fromTheme(QStringLiteral("object-unlocked"))); diff --git a/src/dolphinplacesmodelsingleton.cpp b/src/dolphinplacesmodelsingleton.cpp index 02fbf05d0..c31ffc4c3 100644 --- a/src/dolphinplacesmodelsingleton.cpp +++ b/src/dolphinplacesmodelsingleton.cpp @@ -20,9 +20,37 @@ DolphinPlacesModel::DolphinPlacesModel(const QString &alternativeApplicationName DolphinPlacesModel::~DolphinPlacesModel() = default; +bool DolphinPlacesModel::panelsLocked() const +{ + return m_panelsLocked; +} + +void DolphinPlacesModel::setPanelsLocked(bool locked) +{ + if (m_panelsLocked == locked) { + return; + } + + m_panelsLocked = locked; + + if (rowCount() > 0) { + int lastPlace = rowCount() - 1; + + for (int i = 0; i < rowCount(); ++i) { + if (KFilePlacesModel::groupType(index(i, 0)) != KFilePlacesModel::PlacesType) { + lastPlace = i - 1; + break; + } + } + + Q_EMIT dataChanged(index(0, 0), index(lastPlace, 0), {KFilePlacesModel::GroupRole}); + } +} + QVariant DolphinPlacesModel::data(const QModelIndex &index, int role) const { - if (role == Qt::DecorationRole) { + switch (role) { + case Qt::DecorationRole: if (isTrash(index)) { if (m_isEmpty) { return QIcon::fromTheme(QStringLiteral("user-trash")); @@ -30,6 +58,18 @@ QVariant DolphinPlacesModel::data(const QModelIndex &index, int role) const return QIcon::fromTheme(QStringLiteral("user-trash-full")); } } + break; + case KFilePlacesModel::GroupRole: { + // When panels are unlocked, avoid a double "Places" heading, + // one from the panel title bar, one from the places view section. + if (!m_panelsLocked) { + const auto groupType = KFilePlacesModel::groupType(index); + if (groupType == KFilePlacesModel::PlacesType) { + return QString(); + } + } + break; + } } return KFilePlacesModel::data(index, role); diff --git a/src/dolphinplacesmodelsingleton.h b/src/dolphinplacesmodelsingleton.h index 84151fa8c..996f9de78 100644 --- a/src/dolphinplacesmodelsingleton.h +++ b/src/dolphinplacesmodelsingleton.h @@ -26,6 +26,9 @@ public: explicit DolphinPlacesModel(const QString &alternativeApplicationName, QObject *parent = nullptr); ~DolphinPlacesModel() override; + bool panelsLocked() const; + void setPanelsLocked(bool locked); + protected: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; @@ -36,6 +39,7 @@ private: bool isTrash(const QModelIndex &index) const; bool m_isEmpty = false; + bool m_panelsLocked = true; // common-case, panels are locked }; /**