diff options
Diffstat (limited to 'gui/components/Systray.qml')
-rw-r--r-- | gui/components/Systray.qml | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/gui/components/Systray.qml b/gui/components/Systray.qml index 9ed52f5..d23a7c4 100644 --- a/gui/components/Systray.qml +++ b/gui/components/Systray.qml @@ -17,6 +17,19 @@ Labs.SystemTrayIcon { enabled: false } + Labs.MenuItem { + id: vpnSystrayToggle + text: getConnectionText() + enabled: isConnectionTextEnabled() + onTriggered: { + if (ctx.status == "off") { + backend.switchOn() + } else if (ctx.status == "on") { + backend.switchOff() + } + } + } + Labs.MenuSeparator {} Labs.MenuItem { @@ -27,8 +40,59 @@ Labs.SystemTrayIcon { Labs.MenuSeparator {} Labs.MenuItem { + id: showAppItem + //: Part of the systray menu; show or hide the main app window + text: isVisible() ? qsTr("Hide") : qsTr("Show") + onTriggered: { + if (isVisible()) { + root.hide() + } else { + root.bringToFront() + } + } + } + + Labs.MenuItem { + //: Part of the systray menu; quits que application text: qsTr("Quit") onTriggered: backend.quit() } } + + function isVisible() { + return root.visibility != 0 && root.visibility != 3 + } + + function getConnectionText() { + if (!ctx) { + return "" + } else if (ctx.status == "off") { + // Not Turn on, because we will can later append "to <Location>" + if (ctx.locations && ctx.bestLocation) { + return qsTr("Connect to") + " " + getCanonicalLocation(ctx.bestLocation) + } else { + return qsTr("Connect") + } + } else if (ctx.status == "on") { + return qsTr("Disconnect") + } + return "" + } + + function isConnectionTextEnabled() { + if (!ctx) { + return false + } + return ctx.status == "off" || ctx.status == "on" + } + + // returns the composite of Location, CC + function getCanonicalLocation(label) { + try { + let loc = ctx.locationLabels[label] + return loc[0] + ", " + loc[1] + } catch(e) { + return "unknown" + } + } } |