From 220f4f79e86309ac15b72b52164defc3bafcacd2 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Sat, 3 Sep 2016 10:27:12 +0200 Subject: [PATCH] fix the close button use the c++ part aain for hasCloseableActiveWindow --- containments/taskpanel/package/contents/ui/main.qml | 2 +- containments/taskpanel/taskpanel.cpp | 13 ++++++++++--- containments/taskpanel/taskpanel.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/containments/taskpanel/package/contents/ui/main.qml b/containments/taskpanel/package/contents/ui/main.qml index 4fad7c4d..ccd68347 100644 --- a/containments/taskpanel/package/contents/ui/main.qml +++ b/containments/taskpanel/package/contents/ui/main.qml @@ -143,7 +143,7 @@ PlasmaCore.ColorScope { anchors.right: parent.right iconSource: "window-close" //FIXME:Qt.UserRole+9 is IsWindow Qt.UserRole+15 is IsClosable. We can't reach that enum from QML - enabled: taskSwitcher.model ? (taskSwitcher.model.data(taskSwitcher.model.activeTask, Qt.UserRole+9) === true && taskSwitcher.model.data(taskSwitcher.model.activeTask, Qt.UserRole+15) === true) : false + enabled: plasmoid.nativeInterface.hasCloseableActiveWindow onClicked: { var index = taskSwitcher.model.activeTask; if (index) { diff --git a/containments/taskpanel/taskpanel.cpp b/containments/taskpanel/taskpanel.cpp index 2d93f268..2e55ab10 100644 --- a/containments/taskpanel/taskpanel.cpp +++ b/containments/taskpanel/taskpanel.cpp @@ -42,6 +42,10 @@ TaskPanel::TaskPanel(QObject *parent, const QVariantList &args) { setHasConfigurationInterface(true); initWayland(); + m_activeTimer = new QTimer(this); + m_activeTimer->setSingleShot(true); + m_activeTimer->setInterval(250); + connect(m_activeTimer, &QTimer::timeout, this, &TaskPanel::updateActiveWindow); } TaskPanel::~TaskPanel() @@ -81,7 +85,10 @@ void TaskPanel::initWayland() emit showingDesktopChanged(m_showingDesktop); } ); - connect(m_windowManagement, &PlasmaWindowManagement::activeWindowChanged, this, &TaskPanel::updateActiveWindow); + //FIXME + //connect(m_windowManagement, &PlasmaWindowManagement::activeWindowChanged, this, &TaskPanel::updateActiveWindow, Qt::QueuedConnection); + + connect(m_windowManagement, SIGNAL(activeWindowChanged()), m_activeTimer, SLOT(start())); updateActiveWindow(); } ); @@ -132,7 +139,7 @@ void TaskPanel::setPanel(QWindow *panel) void TaskPanel::updateActiveWindow() { - if (!m_windowManagement) { + if (!m_windowManagement || m_activeWindow == m_windowManagement->activeWindow()) { return; } if (m_activeWindow) { @@ -154,7 +161,7 @@ void TaskPanel::updateActiveWindow() bool TaskPanel::hasCloseableActiveWindow() const { - return m_activeWindow && m_activeWindow->isCloseable() && !m_activeWindow->isMinimized(); + return m_activeWindow && m_activeWindow->isCloseable() /*&& !m_activeWindow->isMinimized()*/; } void TaskPanel::forgetActiveWindow() diff --git a/containments/taskpanel/taskpanel.h b/containments/taskpanel/taskpanel.h index 911535a7..c2327349 100644 --- a/containments/taskpanel/taskpanel.h +++ b/containments/taskpanel/taskpanel.h @@ -80,6 +80,7 @@ private: KWayland::Client::PlasmaWindowManagement *m_windowManagement = nullptr; KWayland::Client::PlasmaWindowModel *m_windowModel = nullptr; QPointer m_activeWindow; + QTimer *m_activeTimer; }; #endif