1
0
Fork 0

(svn r25678) -Codechange: Notify the video driver when an edit box lost (global) focus so it can abort any current input composition.

release/1.4
michi_cc 2013-08-05 20:37:02 +00:00
parent b96ef5c758
commit 13873d2534
5 changed files with 30 additions and 5 deletions

View File

@ -21,6 +21,7 @@
#include "settings_type.h" #include "settings_type.h"
#include "console_func.h" #include "console_func.h"
#include "rev.h" #include "rev.h"
#include "video/video_driver.hpp"
#include "widgets/console_widget.h" #include "widgets/console_widget.h"
@ -311,6 +312,11 @@ struct IConsoleWindow : Window
{ {
this->Scroll(-wheel); this->Scroll(-wheel);
} }
virtual void OnFocusLost()
{
_video_driver->EditBoxLostFocus();
}
}; };
int IConsoleWindow::scroll = 0; int IConsoleWindow::scroll = 0;

View File

@ -16,6 +16,7 @@
#include "window_func.h" #include "window_func.h"
#include "gfx_func.h" #include "gfx_func.h"
#include "querystring_gui.h" #include "querystring_gui.h"
#include "video/video_driver.hpp"
#include "widgets/osk_widget.h" #include "widgets/osk_widget.h"
@ -205,6 +206,7 @@ struct OskWindow : public Window {
virtual void OnFocusLost() virtual void OnFocusLost()
{ {
_video_driver->EditBoxLostFocus();
delete this; delete this;
} }
}; };

View File

@ -73,6 +73,11 @@ public:
{ {
return true; 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. */ /** Base of the factory for the video drivers. */

View File

@ -35,6 +35,7 @@
#include "statusbar_gui.h" #include "statusbar_gui.h"
#include "error.h" #include "error.h"
#include "game/game.hpp" #include "game/game.hpp"
#include "video/video_driver.hpp"
/** Values for _settings_client.gui.auto_scrolling */ /** Values for _settings_client.gui.auto_scrolling */
enum ViewportAutoscrolling { enum ViewportAutoscrolling {
@ -366,6 +367,8 @@ bool EditBoxInGlobalFocus()
void Window::UnfocusFocusedWidget() void Window::UnfocusFocusedWidget()
{ {
if (this->nested_focus != NULL) { 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. */ /* 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->SetDirty(this);
this->nested_focus = NULL; this->nested_focus = NULL;
@ -388,11 +391,20 @@ bool Window::SetFocusedWidget(int widget_index)
/* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */ /* 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->SetDirty(this);
if (this->nested_focus->type == WWT_EDITBOX) _video_driver->EditBoxLostFocus();
} }
this->nested_focus = this->GetWidget<NWidgetCore>(widget_index); this->nested_focus = this->GetWidget<NWidgetCore>(widget_index);
return true; 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. * Sets the enabled/disabled status of a list of widgets.
* By default, widgets are enabled. * By default, widgets are enabled.
@ -953,7 +965,10 @@ Window::~Window()
if (_last_scroll_window == this) _last_scroll_window = NULL; 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. */ /* 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(); this->DeleteChildWindows();

View File

@ -582,10 +582,7 @@ public:
*/ */
virtual void OnFocus() {} virtual void OnFocus() {}
/** virtual void OnFocusLost();
* Called when window looses focus
*/
virtual void OnFocusLost() {}
/** /**
* A key has been pressed. * A key has been pressed.