From 3758ba890a97140af1843ebdd47cda05254f92da Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 6 Feb 2009 11:57:25 +0000 Subject: (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. --- src/osk_gui.cpp | 27 ++++++++++++++++----------- src/querystring_gui.h | 1 + 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(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); -- cgit v1.2.3-70-g09d2