summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/basicctrls_windows.c20
-rw-r--r--redo/textfield_unix.go1
-rw-r--r--redo/textfield_windows.go6
-rw-r--r--redo/winapi_windows.h2
4 files changed, 28 insertions, 1 deletions
diff --git a/redo/basicctrls_windows.c b/redo/basicctrls_windows.c
index 1676776..c82c5d6 100644
--- a/redo/basicctrls_windows.c
+++ b/redo/basicctrls_windows.c
@@ -104,3 +104,23 @@ void setTextFieldSubclass(HWND hwnd, void *data)
if ((*fv_SetWindowSubclass)(hwnd, textfieldSubProc, 0, (DWORD_PTR) data) == FALSE)
xpanic("error subclassing TextField to give it its own event handler", GetLastError());
}
+
+void textfieldSetAndShowInvalidBalloonTip(HWND hwnd, WCHAR *text)
+{
+ EDITBALLOONTIP ti;
+
+ ZeroMemory(&ti, sizeof (EDITBALLOONTIP));
+ ti.cbStruct = sizeof (EDITBALLOONTIP);
+ ti.pszTitle = L"Invalid Input"; // TODO verify
+ ti.pszText = text;
+ ti.ttiIcon = TTI_ERROR;
+ if (SendMessageW(hwnd, EM_SHOWBALLOONTIP, 0, (LPARAM) (&ti)) == FALSE)
+ xpanic("error showing TextField.Invalid() balloon tip", GetLastError());
+ MessageBeep(0xFFFFFFFF); // TODO can this return an error?
+}
+
+void textfieldHideInvalidBalloonTip(HWND hwnd)
+{
+ if (SendMessageW(hwnd, EM_HIDEBALLOONTIP, 0, 0) == FALSE)
+ xpanic("error hiding TextField.Invalid() balloon tip", GetLastError());
+}
diff --git a/redo/textfield_unix.go b/redo/textfield_unix.go
index e9624ee..cef2765 100644
--- a/redo/textfield_unix.go
+++ b/redo/textfield_unix.go
@@ -71,6 +71,7 @@ func (t *textfield) Invalid(reason string) {
creason := togstr(reason)
defer freegstr(creason)
C.gtk_entry_set_icon_tooltip_text(t.entry, C.GTK_ENTRY_ICON_SECONDARY, creason)
+ // TODO beep
}
//export textfieldChanged
diff --git a/redo/textfield_windows.go b/redo/textfield_windows.go
index 7345205..5f89691 100644
--- a/redo/textfield_windows.go
+++ b/redo/textfield_windows.go
@@ -51,7 +51,11 @@ func (t *textfield) OnChanged(f func()) {
}
func (t *textfield) Invalid(reason string) {
- // TODO
+ if reason == "" {
+ C.textfieldHideInvalidBalloonTip(t._hwnd)
+ return
+ }
+ C.textfieldSetAndShowInvalidBalloonTip(t._hwnd, toUTF16(reason))
}
//export textfieldChanged
diff --git a/redo/winapi_windows.h b/redo/winapi_windows.h
index ea9fe17..5787331 100644
--- a/redo/winapi_windows.h
+++ b/redo/winapi_windows.h
@@ -64,6 +64,8 @@ extern void setCheckboxSubclass(HWND, void *);
extern BOOL checkboxChecked(HWND);
extern void checkboxSetChecked(HWND, BOOL);
extern void setTextFieldSubclass(HWND, void *);
+extern void textfieldSetAndShowInvalidBalloonTip(HWND, WCHAR *);
+extern void textfieldHideInvalidBalloonTip(HWND);
// init_windows.c
extern HINSTANCE hInstance;