atomize-parent-hooks #4
@ -76,27 +76,40 @@ func (backend *Backend) NewWindow (
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (window *Window) Adopt (child tomo.Element) {
|
func (window *Window) Adopt (child tomo.Element) {
|
||||||
|
// disown previous child
|
||||||
if window.child != nil {
|
if window.child != nil {
|
||||||
window.child.SetParentHooks (tomo.ParentHooks { })
|
window.child.OnDamage(nil)
|
||||||
|
window.child.OnMinimumSizeChange(nil)
|
||||||
|
}
|
||||||
|
if previousChild, ok := window.child.(tomo.Flexible); ok {
|
||||||
|
previousChild.OnFlexibleHeightChange(nil)
|
||||||
|
}
|
||||||
if previousChild, ok := window.child.(tomo.Selectable); ok {
|
if previousChild, ok := window.child.(tomo.Selectable); ok {
|
||||||
|
previousChild.OnSelectionRequest(nil)
|
||||||
|
previousChild.OnSelectionMotionRequest(nil)
|
||||||
if previousChild.Selected() {
|
if previousChild.Selected() {
|
||||||
previousChild.HandleDeselection()
|
previousChild.HandleDeselection()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
window.child = child
|
|
||||||
if child != nil {
|
|
||||||
child.SetParentHooks (tomo.ParentHooks {
|
|
||||||
Draw: window.childDrawCallback,
|
|
||||||
MinimumSizeChange: window.childMinimumSizeChangeCallback,
|
|
||||||
FlexibleHeightChange: window.resizeChildToFit,
|
|
||||||
SelectionRequest: window.childSelectionRequestCallback,
|
|
||||||
})
|
|
||||||
|
|
||||||
window.resizeChildToFit()
|
// adopt new child
|
||||||
|
window.child = child
|
||||||
|
if newChild, ok := child.(tomo.Flexible); ok {
|
||||||
|
newChild.OnFlexibleHeightChange(window.resizeChildToFit)
|
||||||
}
|
}
|
||||||
|
if newChild, ok := child.(tomo.Selectable); ok {
|
||||||
|
newChild.OnSelectionRequest(window.childSelectionRequestCallback)
|
||||||
|
}
|
||||||
|
if child != nil {
|
||||||
|
child.OnDamage(window.childDrawCallback)
|
||||||
|
child.OnMinimumSizeChange (func () {
|
||||||
|
window.childMinimumSizeChangeCallback (
|
||||||
|
child.MinimumSize())
|
||||||
|
})
|
||||||
|
window.resizeChildToFit()
|
||||||
window.childMinimumSizeChangeCallback(child.MinimumSize())
|
window.childMinimumSizeChangeCallback(child.MinimumSize())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (window *Window) Child () (child tomo.Element) {
|
func (window *Window) Child () (child tomo.Element) {
|
||||||
child = window.child
|
child = window.child
|
||||||
@ -204,7 +217,7 @@ func (window *Window) redrawChildEntirely () {
|
|||||||
func (window *Window) resizeChildToFit () {
|
func (window *Window) resizeChildToFit () {
|
||||||
window.skipChildDrawCallback = true
|
window.skipChildDrawCallback = true
|
||||||
if child, ok := window.child.(tomo.Flexible); ok {
|
if child, ok := window.child.(tomo.Flexible); ok {
|
||||||
minimumHeight := child.MinimumHeightFor(window.metrics.width)
|
minimumHeight := child.FlexibleHeightFor(window.metrics.width)
|
||||||
minimumWidth, _ := child.MinimumSize()
|
minimumWidth, _ := child.MinimumSize()
|
||||||
|
|
||||||
icccm.WmNormalHintsSet (
|
icccm.WmNormalHintsSet (
|
||||||
|
Reference in New Issue
Block a user