diff --git a/entry.go b/entry.go index 00c7dd7..45414a5 100644 --- a/entry.go +++ b/entry.go @@ -19,6 +19,7 @@ type Entry struct { ControlBase e *C.uiEntry onChanged func(*Entry) + onKeyEvent func(*Entry, *AreaKeyEvent) (handled bool) } func finishNewEntry(ee *C.uiEntry) *Entry { @@ -27,6 +28,7 @@ func finishNewEntry(ee *C.uiEntry) *Entry { e.e = ee C.pkguiEntryOnChanged(e.e) + C.pkguiEntryOnKeyEvent(e.e) e.ControlBase = NewControlBase(e, uintptr(unsafe.Pointer(e.e))) return e @@ -79,6 +81,28 @@ func pkguiDoEntryOnChanged(ee *C.uiEntry, data unsafe.Pointer) { } } +// OnKeyEvent registers f to be run when the user makes a change to +// the Entry. Only one function can be registered at a time. +func (e *Entry) OnKeyEvent(f func(*Entry, *AreaKeyEvent) (handled bool) ) { + e.onKeyEvent = f +} + +//export pkguiDoEntryOnKeyEvent +func pkguiDoEntryOnKeyEvent(ee *C.uiEntry, uke *C.uiAreaKeyEvent) C.int { + ke := &AreaKeyEvent{ + Key: rune(uke.Key), + ExtKey: ExtKey(uke.ExtKey), + Modifier: Modifiers(uke.Modifier), + Modifiers: Modifiers(uke.Modifiers), + Up: tobool(uke.Up), + } + e := ControlFromLibui(uintptr(unsafe.Pointer(ee))).(*Entry) + if e.onKeyEvent != nil { + return frombool(e.onKeyEvent(e, ke)) + } + return frombool(false) +} + // ReadOnly returns whether the Entry can be changed. func (e *Entry) ReadOnly() bool { return tobool(C.uiEntryReadOnly(e.e)) diff --git a/libui_darwin_amd64.a b/libui_darwin_amd64.a index f870d45..b5b9ce1 100644 Binary files a/libui_darwin_amd64.a and b/libui_darwin_amd64.a differ diff --git a/libui_linux_amd64.a b/libui_linux_amd64.a index 1de36d0..3e5eb5c 100644 Binary files a/libui_linux_amd64.a and b/libui_linux_amd64.a differ diff --git a/libui_windows_386.a b/libui_windows_386.a index a8ada95..dc0ebcb 100755 Binary files a/libui_windows_386.a and b/libui_windows_386.a differ diff --git a/libui_windows_amd64.a b/libui_windows_amd64.a index 8533199..8716858 100755 Binary files a/libui_windows_amd64.a and b/libui_windows_amd64.a differ diff --git a/pkgui.c b/pkgui.c index 35cd442..94de443 100644 --- a/pkgui.c +++ b/pkgui.c @@ -88,6 +88,11 @@ void pkguiEntryOnChanged(uiEntry *e) uiEntryOnChanged(e, pkguiDoEntryOnChanged, NULL); } +void pkguiEntryOnKeyEvent(uiEntry *e) +{ + uiEntryOnKeyEvent(e, pkguiDoEntryOnKeyEvent); +} + void pkguiFontButtonOnChanged(uiFontButton *b) { uiFontButtonOnChanged(b, pkguiDoFontButtonOnChanged, NULL); diff --git a/pkgui.h b/pkgui.h index 2583760..3e2f747 100644 --- a/pkgui.h +++ b/pkgui.h @@ -47,6 +47,7 @@ extern void pkguiEditableComboboxOnChanged(uiEditableCombobox *c); // entry.go extern void pkguiEntryOnChanged(uiEntry *e); +extern void pkguiEntryOnKeyEvent(uiEntry *e); // fontbutton.go extern void pkguiFontButtonOnChanged(uiFontButton *b); diff --git a/ui.h b/ui.h index 40aea94..e73e35b 100644 --- a/ui.h +++ b/ui.h @@ -45,6 +45,12 @@ _UI_ENUM(uiForEach) { uiForEachStop, }; +typedef struct uiArea uiArea; +typedef struct uiAreaHandler uiAreaHandler; +typedef struct uiAreaDrawParams uiAreaDrawParams; +typedef struct uiAreaMouseEvent uiAreaMouseEvent; +typedef struct uiAreaKeyEvent uiAreaKeyEvent; + typedef struct uiInitOptions uiInitOptions; struct uiInitOptions { @@ -162,6 +168,7 @@ typedef struct uiEntry uiEntry; _UI_EXTERN char *uiEntryText(uiEntry *e); _UI_EXTERN void uiEntrySetText(uiEntry *e, const char *text); _UI_EXTERN void uiEntryOnChanged(uiEntry *e, void (*f)(uiEntry *e, void *data), void *data); +_UI_EXTERN void uiEntryOnKeyEvent(uiEntry *e, int (*f)(uiEntry *e, uiAreaKeyEvent *event)); _UI_EXTERN int uiEntryReadOnly(uiEntry *e); _UI_EXTERN void uiEntrySetReadOnly(uiEntry *e, int readonly); _UI_EXTERN uiEntry *uiNewEntry(void); @@ -297,11 +304,6 @@ _UI_EXTERN char *uiSaveFile(uiWindow *parent); _UI_EXTERN void uiMsgBox(uiWindow *parent, const char *title, const char *description); _UI_EXTERN void uiMsgBoxError(uiWindow *parent, const char *title, const char *description); -typedef struct uiArea uiArea; -typedef struct uiAreaHandler uiAreaHandler; -typedef struct uiAreaDrawParams uiAreaDrawParams; -typedef struct uiAreaMouseEvent uiAreaMouseEvent; -typedef struct uiAreaKeyEvent uiAreaKeyEvent; typedef struct uiDrawContext uiDrawContext;