Add virtual desktop actions to the dock pager

Open desktop management from the convergence pager and let the
pager add or remove the last virtual desktop without leaving the
dock.
This commit is contained in:
Marco Allegretti 2026-05-09 10:48:52 +02:00
parent ebb80d5838
commit a9e5a2f1e4
3 changed files with 84 additions and 4 deletions

View file

@ -115,6 +115,22 @@ void HomeScreen::activateVirtualDesktop(const QVariant &desktop) const
virtualDesktopInfo.requestActivate(desktop);
}
void HomeScreen::createVirtualDesktop() const
{
TaskManager::VirtualDesktopInfo virtualDesktopInfo;
virtualDesktopInfo.requestCreateDesktop(virtualDesktopInfo.numberOfDesktops());
}
void HomeScreen::removeLastVirtualDesktop() const
{
TaskManager::VirtualDesktopInfo virtualDesktopInfo;
if (virtualDesktopInfo.numberOfDesktops() <= 1) {
return;
}
virtualDesktopInfo.requestRemoveDesktop(virtualDesktopInfo.numberOfDesktops() - 1);
}
void HomeScreen::emptyTrash() const
{
QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kio.trash"),

View file

@ -53,6 +53,8 @@ public:
Q_INVOKABLE void triggerOverview() const;
Q_INVOKABLE void triggerMinimizeAll() const;
Q_INVOKABLE void activateVirtualDesktop(const QVariant &desktop) const;
Q_INVOKABLE void createVirtualDesktop() const;
Q_INVOKABLE void removeLastVirtualDesktop() const;
Q_INVOKABLE void emptyTrash() const;
FolioSettings *folioSettings();

View file

@ -562,10 +562,41 @@ MouseArea {
id: leftPagerHover
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
cursorShape: Qt.PointingHandCursor
onClicked: {
if (leftDesktopBtn.desktopId)
onClicked: (mouse) => {
if (mouse.button === Qt.RightButton) {
leftPagerContextMenu.open()
} else if (leftDesktopBtn.desktopId) {
root.folio.activateVirtualDesktop(leftDesktopBtn.desktopId)
}
}
onPressAndHold: {
leftPagerContextMenu.open()
haptics.buttonVibrate()
}
}
PC3.Menu {
id: leftPagerContextMenu
popupType: T.Popup.Window
PC3.MenuItem {
icon.name: "list-add"
text: i18n("Add Virtual Desktop")
onTriggered: root.folio.createVirtualDesktop()
}
PC3.MenuItem {
icon.name: "list-remove"
text: i18n("Remove Virtual Desktop")
enabled: virtualDesktopInfo.numberOfDesktops > 1
onTriggered: root.folio.removeLastVirtualDesktop()
}
Controls.MenuSeparator {}
PC3.MenuItem {
icon.name: "preferences-desktop-virtual"
text: i18n("Configure Virtual Desktops…")
onTriggered: MobileShell.ShellUtil.executeCommand("plasma-open-settings kcm_kwin_virtualdesktops")
}
}
}
@ -625,10 +656,41 @@ MouseArea {
id: rightPagerHover
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
cursorShape: Qt.PointingHandCursor
onClicked: {
if (rightDesktopBtn.desktopId)
onClicked: (mouse) => {
if (mouse.button === Qt.RightButton) {
rightPagerContextMenu.open()
} else if (rightDesktopBtn.desktopId) {
root.folio.activateVirtualDesktop(rightDesktopBtn.desktopId)
}
}
onPressAndHold: {
rightPagerContextMenu.open()
haptics.buttonVibrate()
}
}
PC3.Menu {
id: rightPagerContextMenu
popupType: T.Popup.Window
PC3.MenuItem {
icon.name: "list-add"
text: i18n("Add Virtual Desktop")
onTriggered: root.folio.createVirtualDesktop()
}
PC3.MenuItem {
icon.name: "list-remove"
text: i18n("Remove Virtual Desktop")
enabled: virtualDesktopInfo.numberOfDesktops > 1
onTriggered: root.folio.removeLastVirtualDesktop()
}
Controls.MenuSeparator {}
PC3.MenuItem {
icon.name: "preferences-desktop-virtual"
text: i18n("Configure Virtual Desktops…")
onTriggered: MobileShell.ShellUtil.executeCommand("plasma-open-settings kcm_kwin_virtualdesktops")
}
}
}