Ensure CTRL, SHIFT and ALT states are reset when Window falls into background

This commit is contained in:
Simon Robertshaw 2012-07-30 11:51:42 +01:00
parent 6d5388b221
commit 303b546ceb
5 changed files with 32 additions and 4 deletions

View File

@ -1035,6 +1035,13 @@ void GameView::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bo
}
}
void GameView::OnBlur()
{
disableAltBehaviour();
disableCtrlBehaviour();
disableShiftBehaviour();
}
void GameView::OnTick(float dt)
{
if(selectMode==PlaceSave && !placeSaveThumb)

View File

@ -148,6 +148,9 @@ public:
virtual void OnMouseWheel(int x, int y, int d);
virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt);
virtual void OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt);
virtual void OnTick(float dt);
virtual void OnDraw();
virtual void OnBlur();
//Top-level handers, for Lua interface
virtual void DoDraw();
@ -158,10 +161,6 @@ public:
virtual void DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt);
virtual void DoKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt);
//virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) {}
//virtual void OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bool alt) {}
virtual void OnTick(float dt);
virtual void OnDraw();
class MenuAction;
class ToolAction;
};

View File

@ -82,6 +82,9 @@ void Engine::ShowWindow(Window * window)
windows.push(state_);
}
if(state_)
state_->DoBlur();
state_ = window;
}
@ -102,6 +105,9 @@ void Engine::CloseWindow()
}
state_ = windows.top();
windows.pop();
if(state_)
state_->DoFocus();
}
else
{

View File

@ -107,6 +107,18 @@ void Window::DoInitialized()
OnInitialized();
}
void Window::DoBlur()
{
OnBlur();
}
void Window::DoFocus()
{
OnFocus();
}
void Window::DoDraw()
{
OnDraw();

View File

@ -52,6 +52,8 @@ enum ChromeStyle
virtual void DoExit();
virtual void DoTick(float dt);
virtual void DoDraw();
virtual void DoFocus();
virtual void DoBlur();
virtual void DoMouseMove(int x, int y, int dx, int dy);
virtual void DoMouseDown(int x, int y, unsigned button);
@ -73,6 +75,8 @@ enum ChromeStyle
virtual void OnExit() {}
virtual void OnTick(float dt) {}
virtual void OnDraw() {}
virtual void OnFocus() {}
virtual void OnBlur() {}
virtual void OnMouseMove(int x, int y, int dx, int dy) {}
virtual void OnMouseDown(int x, int y, unsigned button) {}