provide builtin Activity,VDs switching

--this way we will avoid also the crash
on wayland produced by the deprecated
PagerModel
pull/6/head
Michail Vourlakos 6 years ago
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…
Cancel
Save