diff --git a/plasma/applets/tasks/tasks.cpp b/plasma/applets/tasks/tasks.cpp index c79276be..7d2e693e 100644 --- a/plasma/applets/tasks/tasks.cpp +++ b/plasma/applets/tasks/tasks.cpp @@ -18,6 +18,9 @@ #include "tasks.h" +#include +#include +#include #include #include #include @@ -32,6 +35,7 @@ // standard issue margin/spacing static const int s_spacing = 6; +static const TasksApplet::ToolTipMode s_defaultooltipmode = TasksApplet::ToolTipPreview; static bool kIsPanel(const Plasma::FormFactor formfactor) { @@ -74,12 +78,14 @@ class TasksSvg : public Plasma::SvgWidget { Q_OBJECT public: - TasksSvg(const WId task, QGraphicsItem *parent = nullptr); + TasksSvg(const WId task, const TasksApplet::ToolTipMode tooltipmode, QGraphicsItem *parent = nullptr); WId task() const; void animatedShow(); void animatedRemove(); + void setup(const TasksApplet::ToolTipMode tooltipmode); + protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) final; QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const final; @@ -101,16 +107,18 @@ private: Plasma::FrameSvg* m_framesvg; QPixmap m_pixmap; QString m_name; + TasksApplet::ToolTipMode m_tooltipmode; // for updateGeometry() friend TasksApplet; }; -TasksSvg::TasksSvg(const WId task, QGraphicsItem *parent) +TasksSvg::TasksSvg(const WId task, const TasksApplet::ToolTipMode tooltipmode, QGraphicsItem *parent) : Plasma::SvgWidget(parent), m_task(task), m_hovered(false), - m_framesvg(nullptr) + m_framesvg(nullptr), + m_tooltipmode(tooltipmode) { updatePixmapAndToolTip(); slotUpdateSvg(); @@ -164,6 +172,12 @@ void TasksSvg::animatedRemove() animation->start(QAbstractAnimation::DeleteWhenStopped); } +void TasksSvg::setup(const TasksApplet::ToolTipMode tooltipmode) +{ + m_tooltipmode = tooltipmode; + updatePixmapAndToolTip(); +} + void TasksSvg::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); @@ -248,8 +262,22 @@ void TasksSvg::updatePixmapAndToolTip() if (!m_name.isEmpty()) { plasmatooltip.setMainText(QString::fromLatin1("
%1
").arg(m_name)); } - plasmatooltip.setWindowToPreview(m_task); - plasmatooltip.setClickable(true); + switch (m_tooltipmode) { + case TasksApplet::ToolTipNone: { + break; + } + case TasksApplet::ToolTipPreview: { + plasmatooltip.setWindowToPreview(m_task); + plasmatooltip.setClickable(true); + break; + } + case TasksApplet::ToolTipHighlight: { + plasmatooltip.setWindowToPreview(m_task); + plasmatooltip.setHighlightWindows(true); + plasmatooltip.setClickable(true); + break; + } + } Plasma::ToolTipManager::self()->setContent(this, plasmatooltip); } @@ -295,10 +323,13 @@ void TasksSvg::slotUpdateSvg() TasksApplet::TasksApplet(QObject *parent, const QVariantList &args) : Plasma::Applet(parent, args), m_layout(nullptr), - m_spacer(nullptr) + m_spacer(nullptr), + m_tooltipmode(s_defaultooltipmode), + m_tooltipmodebox(nullptr) { KGlobal::locale()->insertCatalog("plasma_applet_tasks"); setAspectRatioMode(Plasma::AspectRatioMode::IgnoreAspectRatio); + setHasConfigurationInterface(true); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_layout = new QGraphicsLinearLayout(Qt::Horizontal, this); @@ -312,6 +343,9 @@ TasksApplet::TasksApplet(QObject *parent, const QVariantList &args) void TasksApplet::init() { + KConfigGroup configgroup = config(); + m_tooltipmode = static_cast(configgroup.readEntry("tooltipMode", static_cast(s_defaultooltipmode))); + foreach (const WId task, KTaskManager::self()->tasks()) { slotTaskAdded(task); } @@ -330,6 +364,30 @@ void TasksApplet::init() ); } + +void TasksApplet::createConfigurationInterface(KConfigDialog *parent) +{ + QWidget* widget = new QWidget(); + QGridLayout* widgetlayout = new QGridLayout(widget); + QLabel* pagermodelabel = new QLabel(widget); + pagermodelabel->setText(i18n("Tooltip:")); + widgetlayout->addWidget(pagermodelabel, 0, 0); + m_tooltipmodebox = new QComboBox(widget); + m_tooltipmodebox->addItem(i18n("Task name"), static_cast(TasksApplet::ToolTipPreview)); + m_tooltipmodebox->addItem(i18n("Task name and preview"), static_cast(TasksApplet::ToolTipPreview)); + m_tooltipmodebox->addItem(i18n("Task name, preview and highlight window"), static_cast(TasksApplet::ToolTipHighlight)); + m_tooltipmodebox->setCurrentIndex(static_cast(m_tooltipmode)); + widgetlayout->addWidget(m_tooltipmodebox, 0, 1); + QSpacerItem* spacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding); + widgetlayout->addItem(spacer, 1, 0, 1, 2); + widget->setLayout(widgetlayout); + parent->addPage(widget, i18n("General"), "preferences-system-windows"); + + connect(parent, SIGNAL(applyClicked()), this, SLOT(slotConfigAccepted())); + connect(parent, SIGNAL(okClicked()), this, SLOT(slotConfigAccepted())); + connect(m_tooltipmodebox, SIGNAL(currentIndexChanged(int)), parent, SLOT(settingsModified())); +} + void TasksApplet::constraintsEvent(Plasma::Constraints constraints) { // update once @@ -373,7 +431,7 @@ void TasksApplet::slotTaskAdded(const WId task) { QMutexLocker locker(&m_mutex); m_layout->removeItem(m_spacer); - TasksSvg* taskssvg = new TasksSvg(task, this); + TasksSvg* taskssvg = new TasksSvg(task, m_tooltipmode, this); m_layout->addItem(taskssvg); m_taskssvgs.append(taskssvg); taskssvg->setPreferredSize(kTaskSize(size(), formFactor())); @@ -416,5 +474,19 @@ void TasksApplet::slotCurrentDesktopChanged(const int desktop) } } +void TasksApplet::slotConfigAccepted() +{ + Q_ASSERT(m_tooltipmodebox != nullptr); + const int tooltipmodeindex = m_tooltipmodebox->currentIndex(); + m_tooltipmode = static_cast(tooltipmodeindex); + KConfigGroup configgroup = config(); + configgroup.writeEntry("tooltipMode", tooltipmodeindex); + QMutexLocker locker(&m_mutex); + foreach (TasksSvg* taskssvg, m_taskssvgs) { + taskssvg->setup(m_tooltipmode); + } + emit configNeedsSaving(); +} + #include "moc_tasks.cpp" #include "tasks.moc" diff --git a/plasma/applets/tasks/tasks.h b/plasma/applets/tasks/tasks.h index e0d80cec..328eaa61 100644 --- a/plasma/applets/tasks/tasks.h +++ b/plasma/applets/tasks/tasks.h @@ -22,8 +22,10 @@ #include "kworkspace/ktaskmanager.h" #include +#include #include #include +#include class TasksSvg; @@ -31,15 +33,23 @@ class TasksApplet : public Plasma::Applet { Q_OBJECT public: + enum ToolTipMode { + ToolTipNone = 0, + ToolTipPreview = 1, + ToolTipHighlight = 2 + }; + TasksApplet(QObject *parent, const QVariantList &args); // Plasma::Applet reimplementation void init() final; + void createConfigurationInterface(KConfigDialog *parent) final; private Q_SLOTS: void slotTaskAdded(const WId task); void slotTaskRemoved(const WId task); void slotCurrentDesktopChanged(const int desktop); + void slotConfigAccepted(); protected: // Plasma::Applet reimplementation @@ -52,6 +62,8 @@ private: QGraphicsLinearLayout* m_layout; QGraphicsWidget* m_spacer; QList m_taskssvgs; + TasksApplet::ToolTipMode m_tooltipmode; + QComboBox* m_tooltipmodebox; }; K_EXPORT_PLASMA_APPLET(tasks, TasksApplet) diff --git a/plasma/shells/plasma-desktop/data/plasma-desktoprc b/plasma/shells/plasma-desktop/data/plasma-desktoprc index ce9ad1ca..f2ecdae8 100644 --- a/plasma/shells/plasma-desktop/data/plasma-desktoprc +++ b/plasma/shells/plasma-desktop/data/plasma-desktoprc @@ -43,10 +43,9 @@ plugin=tasks zvalue=0 [Containments][1][Applets][4][Configuration] -highlightWindows=false +tooltipMode=1 showOnlyCurrentDesktop=true showOnlyCurrentScreen=false -showToolTip=true [Containments][1][Applets][4][LayoutInformation] Order=2