mirror of
https://github.com/KDE/latte-dock.git
synced 2025-03-21 10:50:30 +03:00
provide builtin Activity,VDs switching
--this way we will avoid also the crash on wayland produced by the deprecated PagerModel
This commit is contained in:
parent
0b6c07a1e5
commit
d312598f60
@ -25,6 +25,8 @@
|
||||
#include "tracker/trackerwindows.h"
|
||||
#include "../lattecorona.h"
|
||||
|
||||
// KDE
|
||||
#include <KActivities/Controller>
|
||||
|
||||
namespace Latte {
|
||||
namespace WindowSystem {
|
||||
@ -94,6 +96,44 @@ Tracker::Windows *AbstractWindowInterface::windowsTracker() const
|
||||
return m_windowsTracker;
|
||||
}
|
||||
|
||||
//! Activities switching
|
||||
void AbstractWindowInterface::switchToNextActivity()
|
||||
{
|
||||
QStringList runningActivities = m_activities->activities(KActivities::Info::State::Running);
|
||||
if (runningActivities.count() <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
int curPos = runningActivities.indexOf(m_currentActivity);
|
||||
int nextPos = curPos + 1;
|
||||
|
||||
if (curPos == runningActivities.count() -1) {
|
||||
nextPos = 0;
|
||||
}
|
||||
|
||||
KActivities::Controller activitiesController;
|
||||
activitiesController.setCurrentActivity(runningActivities.at(nextPos));
|
||||
}
|
||||
|
||||
void AbstractWindowInterface::switchToPreviousActivity()
|
||||
{
|
||||
QStringList runningActivities = m_activities->activities(KActivities::Info::State::Running);
|
||||
if (runningActivities.count() <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
int curPos = runningActivities.indexOf(m_currentActivity);
|
||||
int nextPos = curPos - 1;
|
||||
|
||||
if (curPos == 0) {
|
||||
nextPos = runningActivities.count() - 1;
|
||||
}
|
||||
|
||||
KActivities::Controller activitiesController;
|
||||
activitiesController.setCurrentActivity(runningActivities.at(nextPos));
|
||||
}
|
||||
|
||||
//! Delay window changed trigerring
|
||||
void AbstractWindowInterface::considerWindowChanged(WindowId wid)
|
||||
{
|
||||
//! Consider if the windowChanged signal should be sent DIRECTLY or WAIT
|
||||
@ -113,7 +153,7 @@ void AbstractWindowInterface::considerWindowChanged(WindowId wid)
|
||||
if (m_windowChangedWaiting != wid && m_windowWaitingTimer.isActive()) {
|
||||
m_windowWaitingTimer.stop();
|
||||
//! sent previous waiting window
|
||||
emit (m_windowChangedWaiting);
|
||||
emit windowChanged(m_windowChangedWaiting);
|
||||
|
||||
//! retrigger waiting for the upcoming window
|
||||
m_windowChangedWaiting = wid;
|
||||
|
@ -117,6 +117,12 @@ public:
|
||||
QString currentDesktop() const;
|
||||
QString currentActivity() const;
|
||||
|
||||
void switchToNextActivity();
|
||||
void switchToPreviousActivity();
|
||||
|
||||
virtual void switchToNextVirtualDesktop() const = 0;
|
||||
virtual void switchToPreviousVirtualDesktop() const = 0;
|
||||
|
||||
Latte::Corona *corona();
|
||||
Tracker::Schemes *schemesTracker();
|
||||
Tracker::Windows *windowsTracker() const;
|
||||
|
@ -224,6 +224,50 @@ void WaylandInterface::setViewStruts(QWindow &view, const QRect &rect, Plasma::T
|
||||
|
||||
}
|
||||
|
||||
void WaylandInterface::switchToNextVirtualDesktop() const
|
||||
{
|
||||
#if KF5_VERSION_MINOR >= 52
|
||||
if (!m_virtualDesktopManagement || m_desktops.count() <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
int curPos = m_desktops.indexOf(m_currentDesktop);
|
||||
int nextPos = curPos + 1;
|
||||
|
||||
if (curPos == m_desktops.count()-1) {
|
||||
nextPos = 0;
|
||||
}
|
||||
|
||||
KWayland::Client::PlasmaVirtualDesktop *desktopObj = m_virtualDesktopManagement->getVirtualDesktop(m_desktops[nextPos]);
|
||||
|
||||
if (desktopObj) {
|
||||
desktopObj->requestActivate();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void WaylandInterface::switchToPreviousVirtualDesktop() const
|
||||
{
|
||||
#if KF5_VERSION_MINOR >= 52
|
||||
if (!m_virtualDesktopManagement || m_desktops.count() <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
int curPos = m_desktops.indexOf(m_currentDesktop);
|
||||
int nextPos = curPos - 1;
|
||||
|
||||
if (curPos == 0) {
|
||||
nextPos = m_desktops.count()-1;
|
||||
}
|
||||
|
||||
KWayland::Client::PlasmaVirtualDesktop *desktopObj = m_virtualDesktopManagement->getVirtualDesktop(m_desktops[nextPos]);
|
||||
|
||||
if (desktopObj) {
|
||||
desktopObj->requestActivate();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void WaylandInterface::setWindowOnActivities(QWindow &window, const QStringList &activities)
|
||||
{
|
||||
//! needs to updated to wayland case
|
||||
|
@ -94,6 +94,9 @@ public:
|
||||
|
||||
void setEdgeStateFor(QWindow *view, bool active) const override;
|
||||
|
||||
void switchToNextVirtualDesktop() const override;
|
||||
void switchToPreviousVirtualDesktop() const override;
|
||||
|
||||
void initWindowManagement(KWayland::Client::PlasmaWindowManagement *windowManagement);
|
||||
|
||||
#if KF5_VERSION_MINOR >= 52
|
||||
|
@ -142,6 +142,40 @@ void XWindowInterface::setViewStruts(QWindow &view, const QRect &rect
|
||||
);
|
||||
}
|
||||
|
||||
void XWindowInterface::switchToNextVirtualDesktop() const
|
||||
{
|
||||
int desktops = KWindowSystem::numberOfDesktops();
|
||||
if (desktops <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
int curPos = KWindowSystem::currentDesktop();
|
||||
int nextPos = curPos + 1;
|
||||
|
||||
if (curPos == desktops -1) {
|
||||
nextPos = 0;
|
||||
}
|
||||
|
||||
KWindowSystem::setCurrentDesktop(nextPos);
|
||||
}
|
||||
|
||||
void XWindowInterface::switchToPreviousVirtualDesktop() const
|
||||
{
|
||||
int desktops = KWindowSystem::numberOfDesktops();
|
||||
if (desktops <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
int curPos = KWindowSystem::currentDesktop();
|
||||
int nextPos = curPos - 1;
|
||||
|
||||
if (curPos == 0) {
|
||||
nextPos = desktops - 1;
|
||||
}
|
||||
|
||||
KWindowSystem::setCurrentDesktop(nextPos);
|
||||
}
|
||||
|
||||
void XWindowInterface::setWindowOnActivities(QWindow &window, const QStringList &activities)
|
||||
{
|
||||
KWindowSystem::setOnActivities(window.winId(), activities);
|
||||
|
@ -78,6 +78,9 @@ public:
|
||||
|
||||
void setEdgeStateFor(QWindow *view, bool active) const override;
|
||||
|
||||
void switchToNextVirtualDesktop() const override;
|
||||
void switchToPreviousVirtualDesktop() const override;
|
||||
|
||||
private:
|
||||
bool hasScreenGeometry(const KWindowInfo &winfo) const;
|
||||
bool isValidWindow(WindowId wid) const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user