plasma: implement interactive windows preview for pager applet

wasn't a thing before, is now

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-09-29 16:57:52 +03:00
parent 45dbe71270
commit 9e2b0ef99f
3 changed files with 30 additions and 0 deletions

View file

@ -8,6 +8,7 @@ kde4_add_plugin(plasma_applet_pager ${pager_SRCS})
target_link_libraries(plasma_applet_pager
KDE4::plasma
KDE4::kcmutils
kworkspace
)
install(

View file

@ -17,6 +17,7 @@
*/
#include "pager.h"
#include "kworkspace/ktaskmanager.h"
#include <QX11Info>
#include <QGridLayout>
@ -232,6 +233,17 @@ void PagerSvg::slotUpdateSvgAndToolTip()
setSvg(m_framesvg);
Plasma::ToolTipContent plasmatooltip;
plasmatooltip.setMainText(QString::fromLatin1("<center>%1</center>").arg(KWindowSystem::desktopName(m_desktop)));
QList<WId> windowstopreview;
foreach (const KTaskManager::Task &task, KTaskManager::self()->tasks()) {
const KWindowInfo kwindowinfo = KWindowSystem::windowInfo(task.window, NET::WMDesktop);
if (!kwindowinfo.isOnDesktop(m_desktop)) {
continue;
}
windowstopreview.append(task.window);
}
// NOTE: the limit of windows to preview is 4, perhaps add based on X11 timestamp?
plasmatooltip.setWindowsToPreview(windowstopreview);
plasmatooltip.setClickable(true);
Plasma::ToolTipManager::self()->setContent(this, plasmatooltip);
}
@ -272,6 +284,10 @@ void PagerApplet::init()
KWindowSystem::self(), SIGNAL(numberOfDesktopsChanged(int)),
this, SLOT(slotUpdateLayout())
);
connect(
Plasma::ToolTipManager::self(), SIGNAL(windowPreviewActivated(WId,Qt::MouseButtons,Qt::KeyboardModifiers,QPoint)),
this, SLOT(slotWindowPreviewActivated(WId))
);
}
void PagerApplet::createConfigurationInterface(KConfigDialog *parent)
@ -453,6 +469,18 @@ void PagerApplet::slotRemoveDesktop()
}
}
void PagerApplet::slotWindowPreviewActivated(const WId window)
{
// manually hide all tooltips first
QMutexLocker locker(&m_mutex);
foreach (PagerSvg* pagersvg, m_pagersvgs) {
Plasma::ToolTipManager::self()->hide(pagersvg);
}
locker.unlock();
KWindowSystem::activateWindow(window);
KWindowSystem::raiseWindow(window);
}
void PagerApplet::slotConfigAccepted()
{
Q_ASSERT(m_pagermodebox != nullptr);

View file

@ -55,6 +55,7 @@ private Q_SLOTS:
void slotUpdateLayout();
void slotAddDesktop();
void slotRemoveDesktop();
void slotWindowPreviewActivated(const WId window);
void slotConfigAccepted();
protected: