Fix #264: Crash before calling SDL_SetTextInputRect with no window focused
This commit is contained in:
@@ -50,6 +50,7 @@ static std::string _editing_text;
|
|||||||
|
|
||||||
static void SetTextInputRect();
|
static void SetTextInputRect();
|
||||||
|
|
||||||
|
bool IsWindowFocused();
|
||||||
Point GetFocusedWindowCaret();
|
Point GetFocusedWindowCaret();
|
||||||
Point GetFocusedWindowTopLeft();
|
Point GetFocusedWindowTopLeft();
|
||||||
bool FocusedWindowIsConsole();
|
bool FocusedWindowIsConsole();
|
||||||
@@ -432,6 +433,8 @@ bool VideoDriver_SDL_Base::ClaimMousePointer()
|
|||||||
|
|
||||||
static void SetTextInputRect()
|
static void SetTextInputRect()
|
||||||
{
|
{
|
||||||
|
if (!IsWindowFocused()) return;
|
||||||
|
|
||||||
SDL_Rect winrect;
|
SDL_Rect winrect;
|
||||||
Point caret = GetFocusedWindowCaret();
|
Point caret = GetFocusedWindowCaret();
|
||||||
Point win = GetFocusedWindowTopLeft();
|
Point win = GetFocusedWindowTopLeft();
|
||||||
|
@@ -452,6 +452,11 @@ void SetFocusedWindow(Window *w)
|
|||||||
if (_focused_window != nullptr) _focused_window->OnFocus(old_focused);
|
if (_focused_window != nullptr) _focused_window->OnFocus(old_focused);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsWindowFocused()
|
||||||
|
{
|
||||||
|
return _focused_window != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
Point GetFocusedWindowCaret()
|
Point GetFocusedWindowCaret()
|
||||||
{
|
{
|
||||||
return _focused_window->GetCaretPosition();
|
return _focused_window->GetCaretPosition();
|
||||||
@@ -519,7 +524,7 @@ bool Window::SetFocusedWidget(int widget_index)
|
|||||||
if (this->nested_focus->type == WWT_EDITBOX) VideoDriver::GetInstance()->EditBoxLostFocus();
|
if (this->nested_focus->type == WWT_EDITBOX) VideoDriver::GetInstance()->EditBoxLostFocus();
|
||||||
}
|
}
|
||||||
this->nested_focus = this->GetWidget<NWidgetCore>(widget_index);
|
this->nested_focus = this->GetWidget<NWidgetCore>(widget_index);
|
||||||
if (this->nested_focus->type == WWT_EDITBOX) VideoDriver::GetInstance()->EditBoxGainedFocus();
|
if (_focused_window == this && this->nested_focus->type == WWT_EDITBOX) VideoDriver::GetInstance()->EditBoxGainedFocus();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user