diff --git a/applets/pager/package/contents/ui/main.qml b/applets/pager/package/contents/ui/main.qml --- a/applets/pager/package/contents/ui/main.qml +++ b/applets/pager/package/contents/ui/main.qml @@ -126,6 +126,8 @@ Pager { id: pager + // don't bother updating the models when we're not visible + enabled: root.visible orientation: plasmoid.formFactor == PlasmaCore.Types.Vertical ? Qt.Vertical : Qt.Horizontal size: Qt.size(root.width, root.height) showWindowIcons: plasmoid.configuration.showWindowIcons diff --git a/applets/pager/plugin/pager.h b/applets/pager/plugin/pager.h --- a/applets/pager/plugin/pager.h +++ b/applets/pager/plugin/pager.h @@ -44,6 +44,7 @@ { Q_OBJECT Q_PROPERTY(QObject* model READ model CONSTANT) + Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(int currentDesktop READ currentDesktop NOTIFY currentDesktopChanged) Q_PROPERTY(int desktopCount READ desktopCount NOTIFY desktopCountChanged) Q_PROPERTY(bool showWindowIcons READ showWindowIcons WRITE setShowWindowIcons NOTIFY showWindowIconsChanged) @@ -72,6 +73,9 @@ QObject *model() const { return m_pagerModel; } + bool enabled() const { return m_enabled; } + void setEnabled(bool enabled); + int currentDesktop() const { return m_currentDesktop; } void setCurrentDesktop(int desktop); @@ -99,6 +103,7 @@ Q_INVOKABLE void dropMimeData(QMimeData *mimeData, int desktopId); Q_SIGNALS: + void enabledChanged(); void currentDesktopChanged(); void desktopCountChanged(); void showWindowIconsChanged(); @@ -155,6 +160,7 @@ bool m_showWindowIcons : 1; bool m_desktopDown : 1; bool m_validSizes : 1; + bool m_enabled : 1; QDesktopWidget *m_desktopWidget; bool m_isX11; diff --git a/applets/pager/plugin/pager.cpp b/applets/pager/plugin/pager.cpp --- a/applets/pager/plugin/pager.cpp +++ b/applets/pager/plugin/pager.cpp @@ -67,6 +67,7 @@ m_showWindowIcons(false), m_desktopDown(false), m_validSizes(false), + m_enabled(true), m_desktopWidget(QApplication::desktop()) #if HAVE_X11 , m_isX11(QX11Info::isPlatformX11()) @@ -121,6 +122,18 @@ { } +void Pager::setEnabled(bool enabled) +{ + if (m_enabled != enabled) { + m_enabled = enabled; + emit enabledChanged(); + + if (enabled) { + startTimerFast(); + } + } +} + int Pager::desktopCount() const { return m_desktopCount; @@ -355,6 +368,10 @@ void Pager::recalculateWindowRects() { + if (!m_enabled) { + return; + } + if (!m_isX11) { return; }