KWin
Loading...
Searching...
No Matches
virtualdesktops.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2012 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#pragma once
10// KWin
11#include "effect/globals.h"
12#include <kwin_export.h>
13// Qt includes
14#include <QAction>
15#include <QObject>
16#include <QPoint>
17#include <QPointer>
18#include <QSize>
19
20// KDE includes
21#include <KConfig>
22#include <KSharedConfig>
23
24class KLocalizedString;
25class NETRootInfo;
26class QAction;
27
28namespace KWin
29{
30
31class Options;
32class PlasmaVirtualDesktopManagementInterface;
33
34class KWIN_EXPORT VirtualDesktop : public QObject
35{
36 Q_OBJECT
37 Q_PROPERTY(QString id READ id CONSTANT)
38 Q_PROPERTY(uint x11DesktopNumber READ x11DesktopNumber NOTIFY x11DesktopNumberChanged)
39 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
40public:
41 explicit VirtualDesktop(QObject *parent = nullptr);
42 ~VirtualDesktop() override;
43
44 void setId(const QString &id);
45 QString id() const
46 {
47 return m_id;
48 }
49
50 void setName(const QString &name);
51 QString name() const
52 {
53 return m_name;
54 }
55
56 void setX11DesktopNumber(uint number);
57 uint x11DesktopNumber() const
58 {
59 return m_x11DesktopNumber;
60 }
61
62Q_SIGNALS:
69
70private:
71 QString m_id;
72 QString m_name;
73 int m_x11DesktopNumber = 0;
74};
75
85{
86public:
89 void update(const QSize &size, const QList<VirtualDesktop *> &desktops);
93 QPoint gridCoords(uint id) const;
97 QPoint gridCoords(VirtualDesktop *vd) const;
102 VirtualDesktop *at(const QPoint &coords) const;
103 int width() const;
104 int height() const;
105 const QSize &size() const;
106
107private:
108 QSize m_size;
109 QList<QList<VirtualDesktop *>> m_grid;
110};
111
130class KWIN_EXPORT VirtualDesktopManager : public QObject
131{
132 Q_OBJECT
137 Q_PROPERTY(uint count READ count WRITE setCount NOTIFY countChanged)
141 Q_PROPERTY(uint current READ current WRITE setCurrent NOTIFY currentChanged)
145 Q_PROPERTY(bool navigationWrappingAround READ isNavigationWrappingAround WRITE setNavigationWrappingAround NOTIFY navigationWrappingAroundChanged)
146public:
147 ~VirtualDesktopManager() override;
151 void setRootInfo(NETRootInfo *info);
155 void setVirtualDesktopManagement(PlasmaVirtualDesktopManagementInterface *management);
159 void setConfig(KSharedConfig::Ptr config);
165 uint count() const;
171 uint rows() const;
177 uint current() const;
183 VirtualDesktop *currentDesktop() const;
189 template<typename Direction>
190 void moveTo(bool wrap = false);
191
197 bool isNavigationWrappingAround() const;
198
202 const VirtualDesktopGrid &grid() const;
203
204 enum class Direction {
205 Up,
206 Down,
207 Right,
208 Left,
209 Next,
210 Previous
211 };
212 VirtualDesktop *inDirection(VirtualDesktop *desktop, Direction direction, bool wrap = true);
213 uint inDirection(uint desktop, Direction direction, bool wrap = true);
214 void moveTo(Direction direction, bool wrap = true);
215
220 VirtualDesktop *above(VirtualDesktop *desktop, bool wrap = true) const;
225 VirtualDesktop *toRight(VirtualDesktop *desktop, bool wrap = true) const;
230 VirtualDesktop *below(VirtualDesktop *desktop, bool wrap = true) const;
235 VirtualDesktop *toLeft(VirtualDesktop *desktop, bool wrap = true) const;
240 VirtualDesktop *next(VirtualDesktop *desktop = nullptr, bool wrap = true) const;
245 VirtualDesktop *previous(VirtualDesktop *desktop = nullptr, bool wrap = true) const;
246
247 void initShortcuts();
248
252 QList<VirtualDesktop *> desktops() const
253 {
254 return m_desktops;
255 }
256
260 VirtualDesktop *desktopForX11Id(uint id) const;
261
265 VirtualDesktop *desktopForId(const QString &id) const;
266
274 VirtualDesktop *createVirtualDesktop(uint position, const QString &name = QString());
275
282 void removeVirtualDesktop(const QString &id);
283 void removeVirtualDesktop(VirtualDesktop *desktop);
284
288 void updateRootInfo();
289
293 static uint maximum();
294
295public Q_SLOTS:
314 void setCount(uint count);
322 bool setCurrent(uint current);
330 bool setCurrent(VirtualDesktop *current);
334 void setRows(uint rows);
338 void updateLayout();
344 void setNavigationWrappingAround(bool enabled);
348 void load();
352 void save();
353
354Q_SIGNALS:
360 void countChanged(uint previousCount, uint newCount);
361
366 void rowsChanged(uint rows);
367
373
381
387 void currentChanged(KWin::VirtualDesktop *previousDesktop, KWin::VirtualDesktop *newDesktop);
388
396 void currentChanging(KWin::VirtualDesktop *currentDesktop, QPointF offset);
398
404 void layoutChanged(int columns, int rows);
409
410private Q_SLOTS:
416 void slotSwitchTo();
420 void slotNext();
424 void slotPrevious();
428 void slotRight();
432 void slotLeft();
436 void slotUp();
440 void slotDown();
441
442 /* For gestured desktopSwitching
443 * Called when gesture ended, the thing that actually switches the desktop.
444 */
445 void gestureReleasedY();
446 void gestureReleasedX();
447
448private:
452 QString defaultName(int desktop) const;
456 void initSwitchToShortcuts();
467 QAction *addAction(const QString &name, const KLocalizedString &label, uint value, const QKeySequence &key, void (VirtualDesktopManager::*slot)());
476 QAction *addAction(const QString &name, const QString &label, const QKeySequence &key, void (VirtualDesktopManager::*slot)());
477
478 QList<VirtualDesktop *> m_desktops;
479 QPointer<VirtualDesktop> m_current;
480 quint32 m_rows = 2;
481 bool m_navigationWrapsAround;
482 VirtualDesktopGrid m_grid;
483 // TODO: QPointer
484 NETRootInfo *m_rootInfo;
485 PlasmaVirtualDesktopManagementInterface *m_virtualDesktopManagement = nullptr;
486 KSharedConfig::Ptr m_config;
487
488 std::unique_ptr<QAction> m_swipeGestureReleasedY;
489 std::unique_ptr<QAction> m_swipeGestureReleasedX;
490 QPointF m_currentDesktopOffset = QPointF(0, 0);
491
493};
494
496{
497 return m_size.width();
498}
499
501{
502 return m_size.height();
503}
504
505inline const QSize &VirtualDesktopGrid::size() const
506{
507 return m_size;
508}
509
511{
512 return 20;
513}
514
516{
517 return m_desktops.count();
518}
519
521{
522 return m_navigationWrapsAround;
523}
524
525inline void VirtualDesktopManager::setConfig(KSharedConfig::Ptr config)
526{
527 m_config = std::move(config);
528}
529
531{
532 return m_grid;
533}
534
535} // namespace KWin
Wrapper for the org_kde_plasma_virtual_desktop_management interface.
Two dimensional grid containing the ID of the virtual desktop at a specific position in the grid.
void update(const QSize &size, const QList< VirtualDesktop * > &desktops)
QPoint gridCoords(uint id) const
VirtualDesktop * at(const QPoint &coords) const
const QSize & size() const
QString name() const
void x11DesktopNumberChanged()
uint x11DesktopNumber() const
Manages the number of available virtual desktops, the layout of those and which virtual desktop is th...
const VirtualDesktopGrid & grid() const
void layoutChanged(int columns, int rows)
void desktopAdded(KWin::VirtualDesktop *desktop)
void setConfig(KSharedConfig::Ptr config)
void countChanged(uint previousCount, uint newCount)
QList< VirtualDesktop * > desktops() const
void currentChanging(KWin::VirtualDesktop *currentDesktop, QPointF offset)
void currentChanged(KWin::VirtualDesktop *previousDesktop, KWin::VirtualDesktop *newDesktop)
void rowsChanged(uint rows)
void desktopRemoved(KWin::VirtualDesktop *desktop)
#define KWIN_SINGLETON_VARIABLE(ClassName, variableName)
Definition globals.h:309
#define explicit