From 8fae202d75fed89bad21da4ffc425c744575460b Mon Sep 17 00:00:00 2001 From: Alexei Anoshenko <2277098+anoshenko@users.noreply.github.com> Date: Wed, 23 Jul 2025 18:52:00 +0300 Subject: [PATCH] Bug fixing --- view.go | 19 ++++++++++++++++++- viewStyle.go | 4 ++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/view.go b/view.go index 6a6d730..99f6ede 100644 --- a/view.go +++ b/view.go @@ -311,7 +311,7 @@ func (view *viewData) getFunc(tag PropertyName) any { case FocusEvent, LostFocusEvent: if listeners := getNoArgEventRawListeners[View](view, nil, tag); len(listeners) > 0 { - + return listeners } case KeyDownEvent, KeyUpEvent: @@ -354,6 +354,15 @@ func (view *viewData) getFunc(tag PropertyName) any { return listeners } + case changeListeners: + if len(view.changeListener) > 0 { + result := map[PropertyName]any{} + for tag, listener := range view.changeListener { + result[tag] = listener.rawListener() + } + return result + } + default: return viewStyleGet(view, tag) } @@ -1328,6 +1337,11 @@ func (view *viewData) handleCommand(self View, command PropertyName, data DataOb func (view *viewData) SetChangeListener(tag PropertyName, listener any) bool { if listener == nil { delete(view.changeListener, tag) + if len(view.changeListener) > 0 { + view.setRaw(changeListeners, view.changeListener) + } else { + view.setRaw(changeListeners, nil) + } } else { switch listener := listener.(type) { case func(): @@ -1343,6 +1357,9 @@ func (view *viewData) SetChangeListener(tag PropertyName, listener any) bool { view.changeListener[tag] = newOneArgListenerVE(listener) case string: + if listener == "" { + return view.SetChangeListener(tag, nil) + } view.changeListener[tag] = newOneArgListenerBinding[View, PropertyName](listener) default: diff --git a/viewStyle.go b/viewStyle.go index 3010dd3..15f36fb 100644 --- a/viewStyle.go +++ b/viewStyle.go @@ -935,7 +935,7 @@ func propertyValueToString(tag PropertyName, value any, indent string) string { case []popupListener: return getPopupListenerBinding(value) - case map[PropertyName]oneArgListener[View, PropertyName]: + case map[PropertyName]any: if len(value) == 0 { return "" } @@ -946,7 +946,7 @@ func propertyValueToString(tag PropertyName, value any, indent string) string { indent2 := indent + "\t" buffer.WriteString("_{\n") for key, listener := range value { - if text, ok := listener.rawListener().(string); ok && text != "" { + if text, ok := listener.(string); ok && text != "" { buffer.WriteString(indent2) writeString(buffer, string(key)) buffer.WriteString(" = ")