diff --git a/package/contents/ui/Notifications.qml b/package/contents/ui/Notifications.qml new file mode 100644 index 0000000..ab006fb --- /dev/null +++ b/package/contents/ui/Notifications.qml @@ -0,0 +1,21 @@ +import QtQuick 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore + +PlasmaCore.DataSource { + id: notificationSource + engine: "notifications" + connectedSources: "org.freedesktop.Notifications" + + function createNotification(text, { appName = plasmoid.title, appIcon = plasmoid.icon } = {}) { + const service = notificationSource.serviceForSource("notification"); + const operation = service.operationDescription("createNotification"); + + operation.appName = appName + operation.appIcon = appIcon + operation.body = text + operation.expireTimeout = 5000 + + service.startOperationCall(operation); + } +} \ No newline at end of file diff --git a/package/contents/ui/Warp.qml b/package/contents/ui/Warp.qml index d33d36e..98c71ce 100644 --- a/package/contents/ui/Warp.qml +++ b/package/contents/ui/Warp.qml @@ -1,7 +1,6 @@ import QtQuick 2.0 import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.private.quicklaunch 1.0 Item { property bool watchStats: false @@ -18,21 +17,24 @@ Item { readonly property bool isBusy: p.isConnecting || p.isOperationInProgress PlasmaCore.DataSource { - id: dataSource - readonly property string sourceStatus: "warp-cli status" - readonly property string sourceStats: "warp-cli warp-stats" + id: watcher + readonly property string cmdStatus: "warp-cli status" + readonly property string cmdStats: "warp-cli warp-stats" readonly property var handlers: ({ - [sourceStatus]: p.updateStatus, - [sourceStats]: p.updateStats + [cmdStatus]: p.updateStatus, + [cmdStats]: p.updateStats }) engine: "executable" - connectedSources: [sourceStatus] + connectedSources: [cmdStatus] interval: p.isServiceRunning ? 1000 : 5000 onNewData: handlers[sourceName](data) } - Logic { - id: kRun + PlasmaCore.DataSource { + id: exec + engine: "executable" + onNewData: disconnectSource(sourceName) + readonly property var run: connectSource } QtObject { @@ -49,16 +51,16 @@ Item { function connect() { isOperationInProgress = true - return kRun.openExec("warp-cli connect") + exec.run("warp-cli connect") } function disconnect() { isOperationInProgress = true - return kRun.openExec("warp-cli disconnect") + exec.run("warp-cli disconnect") } function disableDefaultApp() { - return kRun.openExec("systemctl --user stop warp-taskbar") + exec.run("systemctl --user stop warp-taskbar") } function parseStdoutProperties(text) { @@ -76,7 +78,7 @@ Item { function updateStatus(data) { const isRunning = !data["exit code"] if (!isRunning) { - errorMessage = parseStdoutProperties(data.stderr)[0][1] + errorMessage = data.stderr status = "" } else { const statusMessage = parseStdoutProperties(data.stdout)[0][1] @@ -98,9 +100,9 @@ Item { onWatchStatsFlagChanged: { if (watchStatsFlag) { - dataSource.connectSource(dataSource.sourceStats) + watcher.connectSource(watcher.cmdStats) } else { - dataSource.disconnectSource(dataSource.sourceStats) + watcher.disconnectSource(watcher.cmdStats) stats = null } } diff --git a/package/contents/ui/main.qml b/package/contents/ui/main.qml index d2725b5..31a7a3c 100644 --- a/package/contents/ui/main.qml +++ b/package/contents/ui/main.qml @@ -1,9 +1,7 @@ -import QtQuick 2.0 +import QtQuick 2.7 import QtQuick.Layouts 1.1 import QtQuick.Controls 2.3 -import Qt.labs.platform 1.1 - import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore @@ -11,7 +9,13 @@ Item { id: root Plasmoid.compactRepresentation: CompactRepresentation {} Plasmoid.fullRepresentation: FullRepresentation {} - Plasmoid.toolTipSubText: client.status || '' + Plasmoid.toolTipSubText: { + if (plasmoid.configuration.toggleConnectionOnMiddleButton) { + const hint = client.isConnected ? i18n("Middle-click to disconnect") : i18n("Middle-click to connect") + return client.status + "\n" + hint + } + return client.status + } Plasmoid.busy: client.isBusy Plasmoid.status: client.isServiceRunning && (client.isConnected || !plasmoid.configuration.hideWhenDisconnected) ? PlasmaCore.Types.ActiveStatus @@ -23,17 +27,12 @@ Item { Warp { id: client watchStats: plasmoid.expanded - onStatusChanged: { - if (plasmoid.configuration.showNotifications) { - createNotification(status) - } - } - onIsConnectedChanged: { - plasmoid.clearActions() - plasmoid.setAction(...actionToContextual(client.isConnected ? actionDisconnect : actionConnect)) - } + onIsConnectedChanged: prepareContextualActions() - Component.onCompleted: disableDefaultApp() + Component.onCompleted: { + disableDefaultApp() + prepareContextualActions() + } } Action { @@ -54,22 +53,21 @@ Item { return [action.text.toLowerCase(), action.text, action.icon.name] } - PlasmaCore.DataSource { - id: notificationSource - engine: "notifications" - connectedSources: "org.freedesktop.Notifications" + Loader { + id: nLoader + active: plasmoid.configuration.showNotifications + source: "Notifications.qml" } - function createNotification(text, { appName = plasmoid.title, appIcon = plasmoid.icon } = {}) { - const service = notificationSource.serviceForSource("notification"); - const operation = service.operationDescription("createNotification"); - - operation.appName = appName - operation.appIcon = appIcon - operation.body = text - operation.expireTimeout = 5000 + Connections { + target: client + enabled: nLoader.status === Loader.Ready + onStatusChanged: nLoader.item.createNotification(client.status) + } - service.startOperationCall(operation); + function prepareContextualActions() { + plasmoid.clearActions() + plasmoid.setAction(...actionToContextual(client.isConnected ? actionDisconnect : actionConnect)) } function action_disconnect() {