mirror of https://github.com/OpenTTD/OpenTTD
(svn r25678) -Codechange: Notify the video driver when an edit box lost (global) focus so it can abort any current input composition.
parent
b96ef5c758
commit
13873d2534
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -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. */
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue