summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-02-06 11:57:25 +0000
committerrubidium <rubidium@openttd.org>2009-02-06 11:57:25 +0000
commit3758ba890a97140af1843ebdd47cda05254f92da (patch)
treef47923f4caf0b391f0c02c488f406260666e7897
parent1a5a673ec9a6639f3afcbf17d1d3e55e2cd071d1 (diff)
downloadopenttd-3758ba890a97140af1843ebdd47cda05254f92da.tar.xz
(svn r15370) -Codechange: add a callback to tell the parent of an OSK that the string has changed instead of only marking the text box dirty.
-rw-r--r--src/osk_gui.cpp27
-rw-r--r--src/querystring_gui.h1
2 files changed, 17 insertions, 11 deletions
diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp
index 99c25a041..a3fa2f95a 100644
--- a/src/osk_gui.cpp
+++ b/src/osk_gui.cpp
@@ -120,7 +120,7 @@ struct OskWindow : public Window {
if (!IsValidChar(c, this->qs->afilter)) return;
- if (InsertTextBufferChar(&this->qs->text, c)) this->InvalidateWidget(OSK_WIDGET_TEXT);
+ if (InsertTextBufferChar(&this->qs->text, c)) this->InvalidateParent();
if (HasBit(_keystate, KEYS_SHIFT)) {
ToggleBit(_keystate, KEYS_SHIFT);
@@ -130,11 +130,9 @@ struct OskWindow : public Window {
return;
}
- bool delete_this = false;
-
switch (widget) {
case OSK_WIDGET_BACKSPACE:
- if (DeleteTextBufferChar(&this->qs->text, WKC_BACKSPACE)) this->InvalidateWidget(OSK_WIDGET_TEXT);
+ if (DeleteTextBufferChar(&this->qs->text, WKC_BACKSPACE)) this->InvalidateParent();
break;
case OSK_WIDGET_SPECIAL:
@@ -156,15 +154,15 @@ struct OskWindow : public Window {
break;
case OSK_WIDGET_SPACE:
- if (InsertTextBufferChar(&this->qs->text, ' ')) this->InvalidateWidget(OSK_WIDGET_TEXT);
+ if (InsertTextBufferChar(&this->qs->text, ' ')) this->InvalidateParent();
break;
case OSK_WIDGET_LEFT:
- if (MoveTextBufferPos(&this->qs->text, WKC_LEFT)) this->InvalidateWidget(OSK_WIDGET_TEXT);
+ if (MoveTextBufferPos(&this->qs->text, WKC_LEFT)) this->InvalidateParent();
break;
case OSK_WIDGET_RIGHT:
- if (MoveTextBufferPos(&this->qs->text, WKC_RIGHT)) this->InvalidateWidget(OSK_WIDGET_TEXT);
+ if (MoveTextBufferPos(&this->qs->text, WKC_RIGHT)) this->InvalidateParent();
break;
case OSK_WIDGET_OK:
@@ -176,7 +174,7 @@ struct OskWindow : public Window {
return;
}
}
- delete_this = true;
+ delete this;
break;
case OSK_WIDGET_CANCEL:
@@ -188,13 +186,20 @@ struct OskWindow : public Window {
strcpy(qs->text.buf, this->orig_str_buf);
UpdateTextBufferSize(&qs->text);
MoveTextBufferPos(&qs->text, WKC_END);
- delete_this = true;
+ this->InvalidateParent();
+ delete this;
}
break;
}
- /* make sure that the parent window's textbox also gets updated */
+ }
+
+ void InvalidateParent()
+ {
+ QueryStringBaseWindow *w = dynamic_cast<QueryStringBaseWindow*>(this->parent);
+ if (w != NULL) w->OnOSKInput(this->text_btn);
+
+ this->InvalidateWidget(OSK_WIDGET_TEXT);
if (this->parent != NULL) this->parent->InvalidateWidget(this->text_btn);
- if (delete_this) delete this;
}
virtual void OnMouseLoop()
diff --git a/src/querystring_gui.h b/src/querystring_gui.h
index 2e7bf1736..52bcc24df 100644
--- a/src/querystring_gui.h
+++ b/src/querystring_gui.h
@@ -68,6 +68,7 @@ struct QueryStringBaseWindow : public Window, public QueryString {
void HandleEditBox(int wid);
HandleEditBoxResult HandleEditBoxKey(int wid, uint16 key, uint16 keycode, EventState &state);
virtual void OnOpenOSKWindow(int wid);
+ virtual void OnOSKInput(int wid) {}
};
void ShowOnScreenKeyboard(QueryStringBaseWindow *parent, int button, int cancel, int ok);