forked from aaronjanse/3mux
-
Notifications
You must be signed in to change notification settings - Fork 0
/
selection-cycle.go
66 lines (59 loc) · 1.37 KB
/
selection-cycle.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package wm
func (u *Universe) CycleSelection(forwards bool) {
u.wmOpMutex.Lock()
defer u.wmOpMutex.Unlock()
u.workspaces[u.selectionIdx].contents.cycleSelection(forwards)
}
func (s *split) cycleSelection(forwards bool) (bubble bool) {
if len(s.elements) == 0 {
return
}
switch child := s.elements[s.selectionIdx].contents.(type) {
case Container:
bubble := child.cycleSelection(forwards)
if bubble {
if forwards {
s.selectionIdx = (s.selectionIdx + 1) % len(s.elements)
switch newChild := s.elements[s.selectionIdx].contents.(type) {
case Container:
newChild.selectMin()
}
} else {
s.selectionIdx = (s.selectionIdx - 1 + len(s.elements)) % len(s.elements)
switch newChild := s.elements[s.selectionIdx].contents.(type) {
case Container:
newChild.selectMax()
}
}
}
case Node:
if forwards {
if s.selectionIdx == len(s.elements)-1 {
return true
} else {
s.selectionIdx++
}
} else {
if s.selectionIdx == 0 {
return true
} else {
s.selectionIdx--
}
}
}
return false
}
func (s *split) selectMin() {
s.selectionIdx = 0
switch child := s.elements[s.selectionIdx].contents.(type) {
case Container:
child.selectMin()
}
}
func (s *split) selectMax() {
s.selectionIdx = len(s.elements) - 1
switch child := s.elements[s.selectionIdx].contents.(type) {
case Container:
child.selectMax()
}
}