Mercurial > hg > openttd
changeset 20703:0cc7d9dfe800 draft
-Codechange: Notify the video driver when an edit box lost (global) focus so it can abort any current input composition.
author | Michael Lutz <michi@icosahedron.de> |
---|---|
date | Sat, 09 Mar 2013 16:35:17 +0100 |
parents | b098d8af7ec8 |
children | 7d274a089d08 |
files | src/console_gui.cpp src/osk_gui.cpp src/video/video_driver.hpp src/window.cpp src/window_gui.h |
diffstat | 5 files changed, 30 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -21,6 +21,7 @@ #include "settings_type.h" #include "console_func.h" #include "rev.h" +#include "video/video_driver.hpp" #include "widgets/console_widget.h" @@ -311,6 +312,11 @@ { this->Scroll(-wheel); } + + virtual void OnFocusLost() + { + _video_driver->EditBoxLostFocus(); + } }; int IConsoleWindow::scroll = 0;
--- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -16,6 +16,7 @@ #include "window_func.h" #include "gfx_func.h" #include "querystring_gui.h" +#include "video/video_driver.hpp" #include "widgets/osk_widget.h" @@ -205,6 +206,7 @@ virtual void OnFocusLost() { + _video_driver->EditBoxLostFocus(); delete this; } };
--- a/src/video/video_driver.hpp +++ b/src/video/video_driver.hpp @@ -73,6 +73,11 @@ { return true; } + + /** + * An edit box lost the input focus. Abort character compositing if necessary. + */ + virtual void EditBoxLostFocus() {} }; /** Base of the factory for the video drivers. */
--- a/src/window.cpp +++ b/src/window.cpp @@ -35,6 +35,7 @@ #include "statusbar_gui.h" #include "error.h" #include "game/game.hpp" +#include "video/video_driver.hpp" /** Values for _settings_client.gui.auto_scrolling */ enum ViewportAutoscrolling { @@ -366,6 +367,8 @@ void Window::UnfocusFocusedWidget() { if (this->nested_focus != NULL) { + if (this->nested_focus->type == WWT_EDITBOX) _video_driver->EditBoxLostFocus(); + /* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */ this->nested_focus->SetDirty(this); this->nested_focus = NULL; @@ -388,12 +391,21 @@ /* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */ this->nested_focus->SetDirty(this); + if (this->nested_focus->type == WWT_EDITBOX) _video_driver->EditBoxLostFocus(); } this->nested_focus = this->GetWidget<NWidgetCore>(widget_index); return true; } /** + * Called when window looses focus + */ +void Window::OnFocusLost() +{ + if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) _video_driver->EditBoxLostFocus(); +} + +/** * Sets the enabled/disabled status of a list of widgets. * By default, widgets are enabled. * On certain conditions, they have to be disabled. @@ -953,7 +965,10 @@ if (_last_scroll_window == this) _last_scroll_window = NULL; /* Make sure we don't try to access this window as the focused window when it doesn't exist anymore. */ - if (_focused_window == this) _focused_window = NULL; + if (_focused_window == this) { + this->OnFocusLost(); + _focused_window = NULL; + } this->DeleteChildWindows();