mirror of
https://github.com/minetest/irrlicht.git
synced 2025-07-04 17:20:25 +02:00
[SDL] Avoid unnecessarily "restarting" text input
This commit is contained in:
@ -219,17 +219,29 @@ void CIrrDeviceSDL::resetReceiveTextInputEvents() {
|
||||
gui::IGUIElement *elem = GUIEnvironment->getFocus();
|
||||
if (elem && elem->acceptsIME())
|
||||
{
|
||||
core::rect<s32> pos = elem->getAbsolutePosition();
|
||||
SDL_Rect rect;
|
||||
rect.x = pos.UpperLeftCorner.X;
|
||||
rect.y = pos.UpperLeftCorner.Y;
|
||||
rect.w = pos.getWidth();
|
||||
rect.h = pos.getHeight();
|
||||
SDL_SetTextInputRect(&rect);
|
||||
SDL_StartTextInput();
|
||||
core::rect<s32> *pos = new core::rect<s32>(elem->getAbsolutePosition());
|
||||
if (lastElemPos == NULL || *lastElemPos != *pos)
|
||||
{
|
||||
if (lastElemPos != NULL)
|
||||
delete lastElemPos;
|
||||
lastElemPos = pos;
|
||||
SDL_Rect rect;
|
||||
rect.x = pos->UpperLeftCorner.X;
|
||||
rect.y = pos->UpperLeftCorner.Y;
|
||||
rect.w = pos->getWidth();
|
||||
rect.h = pos->getHeight();
|
||||
SDL_SetTextInputRect(&rect);
|
||||
SDL_StartTextInput();
|
||||
}
|
||||
else
|
||||
{
|
||||
delete pos;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
delete lastElemPos;
|
||||
lastElemPos = NULL;
|
||||
SDL_StopTextInput();
|
||||
}
|
||||
}
|
||||
@ -310,6 +322,8 @@ CIrrDeviceSDL::CIrrDeviceSDL(const SIrrlichtCreationParameters& param)
|
||||
createGUIAndScene();
|
||||
VideoDriver->OnResize(core::dimension2d<u32>(Width, Height));
|
||||
}
|
||||
|
||||
lastElemPos = NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -323,6 +337,9 @@ CIrrDeviceSDL::~CIrrDeviceSDL()
|
||||
for (u32 i=0; i<numJoysticks; ++i)
|
||||
SDL_JoystickClose(Joysticks[i]);
|
||||
#endif
|
||||
if (lastElemPos != NULL) {
|
||||
delete lastElemPos;
|
||||
}
|
||||
if (Window)
|
||||
{
|
||||
SDL_GL_MakeCurrent(Window, NULL);
|
||||
|
Reference in New Issue
Block a user