Window attempts to advance child's selection on alt-tab

This commit is contained in:
Sasha Koshka 2023-01-11 18:32:02 -05:00
parent 507217a9da
commit 80c0a6be71
2 changed files with 34 additions and 10 deletions

View File

@ -66,11 +66,34 @@ func (window *Window) handleKeyPress (
NumberPad: numberPad,
}
window.child.Handle (tomo.EventKeyDown {
keyDownEvent := tomo.EventKeyDown {
Key: key,
Modifiers: modifiers,
Repeated: false, // FIXME: return correct value here
})
}
if keyDownEvent.Key == tomo.KeyTab && keyDownEvent.Modifiers.Alt {
if window.child.Selectable() {
direction := 1
if keyDownEvent.Modifiers.Shift {
direction = -1
}
window.advanceSelectionInChild(direction)
}
} else {
window.child.Handle(event)
}
}
func (window *Window) advanceSelectionInChild (direction int) {
if window.child.Selected() {
if !window.child.AdvanceSelection(direction) {
window.child.Handle(tomo.EventDeselect { })
}
} else {
window.child.Handle(tomo.EventSelect { })
}
}
func (window *Window) handleKeyRelease (

17
tomo.go
View File

@ -92,17 +92,18 @@ type Element interface {
// element contains other selectable elements, it must return true.
Selectable () (selectable bool)
// Selected returns wehther this element is currently selected. This
// will always return false if it is not selectable.
// Selected returns whether or not this element is currently selected.
// This will always return false if it is not selectable.
Selected () (selected bool)
// If this element contains other elements, and one is selected, this
// method will advance the selection in the specified direction. If no
// children are selected, or there are no more children to be selected
// in the specified direction, the element will unselect all of its
// children and return false. If the selection could be advanced, it
// will return true. If the element contains no child elements, it will
// always return false.
// method will advance the selection in the specified direction. If
// the element contains selectable elements but none of them are
// selected, it will select the first selectable element. If there are
// no more children to be selected in the specified direction, the
// element will return false. If the selection could be advanced, it
// will return true. If the element contains no selectable child
// elements, it will always return false.
AdvanceSelection (direction int) (ok bool)
// SetParentHooks gives the element callbacks that let it send