on Linux, tracklist selection is always in Ctrl+click mode; GLFW workaround
This commit is contained in:
+17
-3
@@ -1,6 +1,7 @@
|
|||||||
package widgets
|
package widgets
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"supersonic/ui/layouts"
|
"supersonic/ui/layouts"
|
||||||
"supersonic/ui/os"
|
"supersonic/ui/os"
|
||||||
@@ -146,11 +147,24 @@ func (t *Tracklist) onPlayTrackAt(idx int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tracklist) onSelectTrack(idx int) {
|
// Workaround for https://github.com/dweymouth/supersonic/issues/45
|
||||||
|
// On Linux, tracklist selection will always operate in ctrl+click mode
|
||||||
|
// as this allows multi-select without getting 'stuck' in shift mode
|
||||||
|
func (t *Tracklist) modifiers() (fyne.KeyModifier, bool) {
|
||||||
|
if runtime.GOOS == "linux" {
|
||||||
|
return os.ControlModifier, true
|
||||||
|
}
|
||||||
if d, ok := fyne.CurrentApp().Driver().(desktop.Driver); ok {
|
if d, ok := fyne.CurrentApp().Driver().(desktop.Driver); ok {
|
||||||
if d.ActiveKeyModifiers()&os.ControlModifier != 0 {
|
return d.ActiveKeyModifiers(), true
|
||||||
|
}
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tracklist) onSelectTrack(idx int) {
|
||||||
|
if mod, ok := t.modifiers(); ok {
|
||||||
|
if mod&os.ControlModifier != 0 {
|
||||||
t.selectionMgr.SelectAddOrRemove(idx)
|
t.selectionMgr.SelectAddOrRemove(idx)
|
||||||
} else if (d.ActiveKeyModifiers() & fyne.KeyModifierShift) != 0 {
|
} else if mod&fyne.KeyModifierShift != 0 {
|
||||||
t.selectionMgr.SelectRange(idx)
|
t.selectionMgr.SelectRange(idx)
|
||||||
} else {
|
} else {
|
||||||
t.selectionMgr.Select(idx)
|
t.selectionMgr.Select(idx)
|
||||||
|
|||||||
Reference in New Issue
Block a user