diff --git a/app/settings/delegates/activitiesdelegate.cpp b/app/settings/delegates/activitiesdelegate.cpp index 15408e237..35c09668b 100644 --- a/app/settings/delegates/activitiesdelegate.cpp +++ b/app/settings/delegates/activitiesdelegate.cpp @@ -51,8 +51,8 @@ ActivitiesDelegate::ActivitiesDelegate(QObject *parent) QWidget *ActivitiesDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { int row = index.row(); - QPushButton *button = new QPushButton(parent); + PersistentMenu *menu = new PersistentMenu(button); button->setMenu(menu); menu->setMinimumWidth(option.rect.width()); @@ -75,6 +75,14 @@ QWidget *ActivitiesDelegate::createEditor(QWidget *parent, const QStyleOptionVie action->setCheckable(true); action->setChecked(isFreeActivitiesChecked); + bool isActive = m_settingsDialog->isActive(row); + + if (isActive) { + QFont font = action->font(); + font.setBold(true); + action->setFont(font); + } + menu->addAction(action); if (isFreeActivitiesChecked) { menu->setMasterIndex(i); @@ -191,7 +199,7 @@ void ActivitiesDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op QStringList assignedActivities = index.model()->data(index, Qt::UserRole).toStringList(); if (assignedActivities.count() > 0) { - myOptions.text = joinedActivities(assignedActivities); + myOptions.text = joinedActivities(assignedActivities, index.row()); QTextDocument doc; QString css; @@ -278,7 +286,7 @@ void ActivitiesDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op } } -QString ActivitiesDelegate::joinedActivities(const QStringList &activities, bool boldForActive) const +QString ActivitiesDelegate::joinedActivities(const QStringList &activities, int index) const { QString finalText; @@ -288,10 +296,17 @@ QString ActivitiesDelegate::joinedActivities(const QStringList &activities, bool for (const auto &activityId : activities) { QString name; - bool isActive{false}; + bool bold{false}; + bool italic{false}; if (activityId == freeActivitiesId) { name = m_settingsDialog->freeActivities_text(); + + if (index >= 0) { + bool isActive = m_settingsDialog->isActive(index); + bold = isActive; + italic = !isActive; + } } else { KActivities::Info info(activityId); @@ -301,17 +316,25 @@ QString ActivitiesDelegate::joinedActivities(const QStringList &activities, bool } i++; - bool isActive{false}; - - if (boldForActive && (info.state() == KActivities::Info::Running) || (info.state() == KActivities::Info::Starting)) { - isActive = true; + if ((info.state() == KActivities::Info::Running) || (info.state() == KActivities::Info::Starting)) { + bold = true; } name = info.name(); } } - finalText += isActive ? "" + name + "" : name; + QString styledText = name; + + if (bold) { + styledText = "" + styledText + ""; + } + + if (italic) { + styledText = "" + styledText + ""; + } + + finalText += styledText; } return finalText; @@ -331,6 +354,6 @@ void ActivitiesDelegate::updateButton(QWidget *editor) const } } - button->setText(joinedActivities(assignedActivities,false)); + button->setText(joinedActivities(assignedActivities, -1)); } diff --git a/app/settings/delegates/activitiesdelegate.h b/app/settings/delegates/activitiesdelegate.h index a5cf0fca1..cc0868e0d 100644 --- a/app/settings/delegates/activitiesdelegate.h +++ b/app/settings/delegates/activitiesdelegate.h @@ -46,11 +46,13 @@ public: private: void updateButton(QWidget *editor) const; - QString joinedActivities(const QStringList &activities, bool boldForActive = true) const; + QString joinedActivities(const QStringList &activities, int index = -1) const; private: Latte::SettingsDialog *m_settingsDialog{nullptr}; + + int m_lastCurrentIndex{-1}; }; #endif diff --git a/app/settings/settingsdialog.cpp b/app/settings/settingsdialog.cpp index 4705938ec..0d8b86ee8 100644 --- a/app/settings/settingsdialog.cpp +++ b/app/settings/settingsdialog.cpp @@ -2071,6 +2071,16 @@ bool SettingsDialog::inMultipleLayoutsLook() const return inMemoryOption == Latte::Types::MultipleLayouts; } +bool SettingsDialog::isActive(int row) const +{ + QString id = m_model->data(m_model->index(row, IDCOLUMN), Qt::DisplayRole).toString(); + if (m_originalLayoutNames.contains(id)){ + return (m_corona->layoutsManager()->synchronizer()->layout(m_originalLayoutNames[id]) != nullptr); + } + + return false; +} + bool SettingsDialog::isActive(QString layoutName) const { return (m_corona->layoutsManager()->synchronizer()->layout(layoutName) != nullptr); diff --git a/app/settings/settingsdialog.h b/app/settings/settingsdialog.h index 7b97953a2..181ee441d 100644 --- a/app/settings/settingsdialog.h +++ b/app/settings/settingsdialog.h @@ -71,6 +71,7 @@ public: void updateShareAt(const int &row, const QString &fromId, const QString &toId); bool inMultipleLayoutsLook() const; + bool isActive(int row) const; bool isActive(QString layoutName) const; bool isShared(int row) const; bool isMenuCell(int column) const;