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) void GameView::OnTick(float dt)
{ {
if(selectMode==PlaceSave && !placeSaveThumb) if(selectMode==PlaceSave && !placeSaveThumb)

View File

@ -148,6 +148,9 @@ public:
virtual void OnMouseWheel(int x, int y, int d); virtual void OnMouseWheel(int x, int y, int d);
virtual void OnKeyPress(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 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 //Top-level handers, for Lua interface
virtual void DoDraw(); virtual void DoDraw();
@ -158,10 +161,6 @@ public:
virtual void DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt); 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 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 MenuAction;
class ToolAction; class ToolAction;
}; };

View File

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

View File

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

View File

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