go/ui
1
0

Bugfix: Window focus linked list

It used to be possible to confuse the window manager in the
CloseActiveWindow() function and the linked list got all broken. Seems
more reliable now! Added function PrintWindows() to inspect the linked
lists.
Dieser Commit ist enthalten in:
Noah 2022-02-19 20:14:52 -08:00
Ursprung 49b5cfd037
Commit 76ddda352d
2 geänderte Dateien mit 36 neuen und 8 gelöschten Zeilen

Datei anzeigen

@ -87,7 +87,6 @@ type Supervisor struct {
// List of window focus history for Window Manager.
winFocus *FocusedWindow
winTop *FocusedWindow // pointer to top-most window
winBottom *FocusedWindow // pointer to bottom-most window
}

Datei anzeigen

@ -66,7 +66,6 @@ func (s *Supervisor) addWindow(win *Window) {
s.winFocus = &FocusedWindow{
window: win,
}
s.winTop = s.winFocus
s.winBottom = s.winFocus
win.SetFocus(true)
} else {
@ -138,7 +137,6 @@ func (s *Supervisor) FocusWindow(win *Window) error {
s.winFocus = target
// Fix the top and bottom pointers.
s.winTop = s.winFocus
if newBottom != nil {
s.winBottom = newBottom
}
@ -184,13 +182,44 @@ func (s *Supervisor) CloseAllWindows() int {
func (s *Supervisor) CloseActiveWindow() bool {
var node = s.winFocus
if node != nil {
node.window.Destroy()
node.window.Hide()
s.winFocus = node.next
s.winFocus.window.SetFocus(true)
return true
}
return false
// Find the next visible window to focus.
for node != nil {
if !node.window.Hidden() {
s.FocusWindow(node.window)
break
}
node = node.next
}
return true
}
// PrintWindows is a debug function that walks the window tree and prints them to your console.
func (s *Supervisor) PrintWindows() {
var (
node = s.winBottom
i int
)
fmt.Println("From the bottom:")
for node != nil {
i++
fmt.Printf("%d. %s focused=%+v hidden=%+v\n", i, node.window, node.window.Focused(), node.window.Hidden())
node = node.prev
}
node = s.winFocus
i = 0
fmt.Println("Focus order:")
for node != nil {
i++
fmt.Printf("%d. %s focused=%+v hidden=%+v\n", i, node.window, node.window.Focused(), node.window.Hidden())
node = node.next
}
}
// presentWindows draws the windows from bottom to top.