diff --git a/backend.go b/backend.go
index 4efea54..dfddde3 100644
--- a/backend.go
+++ b/backend.go
@@ -36,6 +36,9 @@ const (
KeyMediaPlayPause
KeyMediaPrevTrack
KeyMediaNextTrack
+ KeyBrowserBack
+ KeyBrowserForward
+ KeySuper
KeyLimit
)
diff --git a/backend_windows.go b/backend_windows.go
index 78574e0..4ff3d04 100644
--- a/backend_windows.go
+++ b/backend_windows.go
@@ -34,6 +34,9 @@ const (
keyeventfKeyup uint32 = 0x2
keyeventfUnicode uint32 = 0x4
+ vkLwin uint16 = 0x5B
+ vkBrowserBack uint16 = 0xA6
+ vkBrowserForward uint16 = 0xA7
vkVolumeMute uint16 = 0xAD
vkVolumeDown uint16 = 0xAE
vkVolumeUp uint16 = 0xAF
@@ -119,7 +122,13 @@ func (p *windowsBackend) KeyboardText(text string) error {
func (p *windowsBackend) KeyboardKey(key Key) error {
input := keybdInput{typ: inputKeyboard}
- if key == KeyVolumeMute {
+ if key == KeySuper {
+ input.wVk = vkLwin
+ } else if key == KeyBrowserBack {
+ input.wVk = vkBrowserBack
+ } else if key == KeyBrowserForward {
+ input.wVk = vkBrowserForward
+ } else if key == KeyVolumeMute {
input.wVk = vkVolumeMute
} else if key == KeyVolumeDown {
input.wVk = vkVolumeDown
diff --git a/icon_font/U+1FA9F Window.svg b/icon_font/U+1FA9F Window.svg
new file mode 100644
index 0000000..e6c41e9
--- /dev/null
+++ b/icon_font/U+1FA9F Window.svg
@@ -0,0 +1,121 @@
+
+
diff --git a/icon_font/U+2B60 Leftwards Triangle-Headed Arrow.svg b/icon_font/U+2B60 Leftwards Triangle-Headed Arrow.svg
new file mode 100644
index 0000000..6364869
--- /dev/null
+++ b/icon_font/U+2B60 Leftwards Triangle-Headed Arrow.svg
@@ -0,0 +1,122 @@
+
+
diff --git a/icon_font/U+2B62 Rightwards Triangle-Headed Arrow.svg b/icon_font/U+2B62 Rightwards Triangle-Headed Arrow.svg
new file mode 100644
index 0000000..f13e555
--- /dev/null
+++ b/icon_font/U+2B62 Rightwards Triangle-Headed Arrow.svg
@@ -0,0 +1,123 @@
+
+
diff --git a/icon_font/icon.sfd b/icon_font/icon.sfd
index f2a4eb8..5e06aea 100644
--- a/icon_font/icon.sfd
+++ b/icon_font/icon.sfd
@@ -1,4 +1,4 @@
-SplineFontDB: 3.0
+SplineFontDB: 3.2
FontName: Icon
FullName: Icon
FamilyName: Icon
@@ -21,7 +21,7 @@ OS2Version: 0
OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 1
CreationTime: 1535548659
-ModificationTime: 1538075883
+ModificationTime: 1597866573
PfmFamily: 17
TTFWeight: 400
TTFWidth: 5
@@ -51,11 +51,11 @@ NameList: AGL For New Fonts
DisplaySize: -48
AntiAlias: 1
FitToEm: 0
-WinInfo: 0 38 14
+WinInfo: 0 35 14
BeginPrivate: 0
EndPrivate
TeXData: 1 0 0 346030 173015 115343 0 1048576 115343 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144
-BeginChars: 1114112 11
+BeginChars: 1114112 14
StartChar: uni2328
Encoding: 9000 9000 0
@@ -637,7 +637,106 @@ SplineSet
819.797851562 633.625 l 2
828.08203125 633.624023438 834.796875 626.909179688 834.797851562 618.625 c 2
EndSplineSet
-Validated: 524289
+Validated: 1
+EndChar
+
+StartChar: uni2B60
+Encoding: 11104 11104 11
+Width: 1000
+HStem: 219.932 160.131<434.739 979.995>
+LayerCount: 2
+Fore
+SplineSet
+420.047851562 634.794921875 m 0
+ 428.2109375 634.625 434.740234375 627.958984375 434.739257812 619.794921875 c 2
+ 434.739257812 395.0625 l 2
+ 434.740234375 386.778320312 441.455078125 380.063476562 449.739257812 380.0625 c 2
+ 964.995117188 380.0625 l 2
+ 973.279296875 380.061523438 979.994140625 373.346679688 979.995117188 365.0625 c 2
+ 979.995117188 234.931640625 l 2
+ 979.994140625 226.647460938 973.279296875 219.932617188 964.995117188 219.931640625 c 2
+ 449.739257812 219.931640625 l 2
+ 441.455078125 219.930664062 434.740234375 213.215820312 434.739257812 204.931640625 c 2
+ 434.739257812 -19.80078125 l 2
+ 434.731445312 -32.408203125 420.120117188 -39.3857421875 410.311523438 -31.46484375 c 2
+ 25.4970703125 288.333984375 l 2
+ 18.068359375 294.337890625 18.068359375 305.6640625 25.4970703125 311.66796875 c 2
+ 410.311523438 631.466796875 l 2
+ 413.063476562 633.689453125 416.51171875 634.868164062 420.047851562 634.794921875 c 0
+EndSplineSet
+EndChar
+
+StartChar: uni2B62
+Encoding: 11106 11106 12
+Width: 1000
+HStem: 219.932 160.131<19.9258 565.182>
+LayerCount: 2
+Fore
+SplineSet
+579.873046875 634.794921875 m 0
+ 583.409179688 634.868164062 586.857421875 633.689453125 589.609375 631.466796875 c 2
+ 974.423828125 311.66796875 l 2
+ 981.852539062 305.6640625 981.852539062 294.337890625 974.423828125 288.333984375 c 2
+ 589.609375 -31.46484375 l 2
+ 579.80078125 -39.3857421875 565.189453125 -32.408203125 565.181640625 -19.80078125 c 2
+ 565.181640625 204.931640625 l 2
+ 565.180664062 213.215820312 558.465820312 219.930664062 550.181640625 219.931640625 c 2
+ 34.92578125 219.931640625 l 2
+ 26.6416015625 219.932617188 19.9267578125 226.647460938 19.92578125 234.931640625 c 2
+ 19.92578125 365.0625 l 2
+ 19.9267578125 373.346679688 26.6416015625 380.061523438 34.92578125 380.0625 c 2
+ 550.181640625 380.0625 l 2
+ 558.465820312 380.063476562 565.180664062 386.778320312 565.181640625 395.0625 c 2
+ 565.181640625 619.794921875 l 2
+ 565.180664062 627.958984375 571.7109375 634.625 579.873046875 634.794921875 c 0
+EndSplineSet
+EndChar
+
+StartChar: u1FA9F
+Encoding: 129695 129695 13
+Width: 1000
+HStem: -180.002 439.97<20.001 459.968 540.034 980.001> 340.034 439.97<20.001 459.968 540.034 980.001>
+VStem: 20.001 439.967<-180.002 259.968 340.034 780.004> 540.034 439.967<-180.002 259.968 340.034 780.004>
+LayerCount: 2
+Fore
+SplineSet
+546.908203125 259.967773438 m 2
+ 973.126953125 259.967773438 l 2
+ 976.934570312 259.967773438 980.000976562 256.90234375 980.000976562 253.09375 c 2
+ 980.000976562 -173.127929688 l 2
+ 980.000976562 -176.935546875 976.934570312 -180.001953125 973.126953125 -180.001953125 c 2
+ 546.908203125 -180.001953125 l 2
+ 543.099609375 -180.001953125 540.034179688 -176.935546875 540.034179688 -173.127929688 c 2
+ 540.034179688 253.09375 l 2
+ 540.034179688 256.90234375 543.099609375 259.967773438 546.908203125 259.967773438 c 2
+26.8759765625 259.967773438 m 2
+ 453.09375 259.967773438 l 2
+ 456.901367188 259.967773438 459.967773438 256.90234375 459.967773438 253.09375 c 2
+ 459.967773438 -173.127929688 l 2
+ 459.967773438 -176.935546875 456.901367188 -180.001953125 453.09375 -180.001953125 c 2
+ 26.8759765625 -180.001953125 l 2
+ 23.0673828125 -180.001953125 20.0009765625 -176.935546875 20.0009765625 -173.127929688 c 2
+ 20.0009765625 253.09375 l 2
+ 20.0009765625 256.90234375 23.0673828125 259.967773438 26.8759765625 259.967773438 c 2
+546.908203125 780.00390625 m 2
+ 973.126953125 780.00390625 l 2
+ 976.934570312 780.00390625 980.000976562 776.9375 980.000976562 773.12890625 c 2
+ 980.000976562 346.909179688 l 2
+ 980.000976562 343.100585938 976.934570312 340.034179688 973.126953125 340.034179688 c 2
+ 546.908203125 340.034179688 l 2
+ 543.099609375 340.034179688 540.034179688 343.100585938 540.034179688 346.909179688 c 2
+ 540.034179688 773.12890625 l 2
+ 540.034179688 776.9375 543.099609375 780.00390625 546.908203125 780.00390625 c 2
+26.8759765625 780.00390625 m 2
+ 453.09375 780.00390625 l 2
+ 456.901367188 780.00390625 459.967773438 776.9375 459.967773438 773.12890625 c 2
+ 459.967773438 346.909179688 l 2
+ 459.967773438 343.100585938 456.901367188 340.034179688 453.09375 340.034179688 c 2
+ 26.8759765625 340.034179688 l 2
+ 23.0673828125 340.034179688 20.0009765625 343.100585938 20.0009765625 346.909179688 c 2
+ 20.0009765625 773.12890625 l 2
+ 20.0009765625 776.9375 23.0673828125 780.00390625 26.8759765625 780.00390625 c 2
+EndSplineSet
EndChar
EndChars
EndSplineFont
diff --git a/keysyms.go b/keysyms.go
index dbafa70..497cf02 100644
--- a/keysyms.go
+++ b/keysyms.go
@@ -26,6 +26,8 @@ import "errors"
type Keysym int32
const (
+ // X11/keysymdef.h
+ xkSuperL Keysym = 0xffeb
// X11/XF86keysym.h
xf86xkAudioLowerVolume Keysym = 0x1008ff11
xf86xkAudioMute Keysym = 0x1008ff12
@@ -33,6 +35,8 @@ const (
xf86xkAudioPlay Keysym = 0x1008ff14
xf86xkAudioPrev Keysym = 0x1008ff16
xf86xkAudioNext Keysym = 0x1008ff17
+ xf86xkBack Keysym = 0x1008ff26
+ xf86xkForward Keysym = 0x1008ff27
)
func RuneToKeysym(runeValue rune) (Keysym, error) {
@@ -51,6 +55,9 @@ func RuneToKeysym(runeValue rune) (Keysym, error) {
}
func KeyToKeysym(key Key) (Keysym, error) {
+ if key == KeySuper {
+ return xkSuperL, nil
+ }
if key == KeyVolumeMute {
return xf86xkAudioMute, nil
}
@@ -69,5 +76,11 @@ func KeyToKeysym(key Key) (Keysym, error) {
if key == KeyMediaNextTrack {
return xf86xkAudioNext, nil
}
+ if key == KeyBrowserBack {
+ return xf86xkBack, nil
+ }
+ if key == KeyBrowserForward {
+ return xf86xkForward, nil
+ }
return 0, errors.New("key not mapped to keysym")
}
diff --git a/webdata/fn.js b/webdata/fn.js
index f9f5394..4a60604 100644
--- a/webdata/fn.js
+++ b/webdata/fn.js
@@ -39,6 +39,9 @@ const KEY_VOLUME_UP = 2;
const KEY_MEDIA_PLAY_PAUSE = 3;
const KEY_MEDIA_PREV_TRACK = 4;
const KEY_MEDIA_NEXT_TRACK = 5;
+const KEY_BROWSER_BACK = 6;
+const KEY_BROWSER_FORWARD = 7;
+const KEY_SUPER = 8;
let ws;
let pad;
@@ -381,7 +384,10 @@ window.addEventListener("load", function() {
requestFullscreen(document.documentElement, {navigationUI: "hide"});
}
});
- [{id: "prevtrackbutton", key: KEY_MEDIA_PREV_TRACK},
+ [{id: "browserbackbutton", key: KEY_BROWSER_BACK},
+ {id: "superbutton", key: KEY_SUPER},
+ {id: "browserforwardbutton", key: KEY_BROWSER_FORWARD},
+ {id: "prevtrackbutton", key: KEY_MEDIA_PREV_TRACK},
{id: "playpausebutton", key: KEY_MEDIA_PLAY_PAUSE},
{id: "nexttrackbutton", key: KEY_MEDIA_NEXT_TRACK},
{id: "volumedownbutton", key: KEY_VOLUME_DOWN},
diff --git a/webdata/icon.woff b/webdata/icon.woff
index c485e05..0a6cd81 100644
Binary files a/webdata/icon.woff and b/webdata/icon.woff differ