summaryrefslogtreecommitdiff
path: root/gui/components/Systray.qml
diff options
context:
space:
mode:
Diffstat (limited to 'gui/components/Systray.qml')
-rw-r--r--gui/components/Systray.qml64
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"
+ }
+ }
}