From a3151fe525651f0535586f7b84239d269b831014 Mon Sep 17 00:00:00 2001
From: scrawl <scrawl@baseoftrash.de>
Date: Thu, 5 Apr 2012 21:16:51 +0200
Subject: [PATCH] fixed input handling priority in the main loop

---
 apps/openmw/engine.cpp               |  3 +++
 apps/openmw/mwinput/inputmanager.cpp | 13 +++++++------
 apps/openmw/mwinput/inputmanager.hpp |  2 ++
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp
index 3d88fd1415..a88588b9c0 100644
--- a/apps/openmw/engine.cpp
+++ b/apps/openmw/engine.cpp
@@ -124,6 +124,9 @@ bool OMW::Engine::frameRenderingQueued (const Ogre::FrameEvent& evt)
     {
         mEnvironment.mFrameDuration = evt.timeSinceLastFrame;
 
+        // update input
+        mEnvironment.mInputManager->update();
+
         // sound
         if (mUseSound)
             mEnvironment.mSoundManager->update (evt.timeSinceLastFrame);
diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp
index 88534dddae..a86e80e5b7 100644
--- a/apps/openmw/mwinput/inputmanager.cpp
+++ b/apps/openmw/mwinput/inputmanager.cpp
@@ -200,8 +200,6 @@ namespace MWInput
 
       // Add the exit listener
       ogre.getRoot()->addFrameListener(&exit);
-      // Add ourselves as a frame listener to catch movement keys
-      ogre.getRoot()->addFrameListener(this);
 
       // Set up the mouse handler and tell it about the player camera
       mouse = MouseLookEventPtr(new MouseLookEvent(player.getRenderer()->getCamera()));
@@ -262,7 +260,7 @@ namespace MWInput
     }
 
     //NOTE: Used to check for movement keys
-    bool frameRenderingQueued (const Ogre::FrameEvent &evt)
+    void update ()
     {
         // Tell OIS to handle all input events
         input.capture();
@@ -276,7 +274,7 @@ namespace MWInput
         windows.update();
 
         // Disable movement in Gui mode
-        if (windows.isGuiMode()) return true;
+        if (windows.isGuiMode()) return;
 
         // Configure player movement according to keyboard input. Actual movement will
         // be done in the physics system.
@@ -305,8 +303,6 @@ namespace MWInput
         }
         else
             player.setForwardBackward (0);
-
-        return true;
     }
 
     // Switch between gui modes. Besides controlling the Gui windows
@@ -358,4 +354,9 @@ namespace MWInput
   {
       impl->setGuiMode(mode);
   }
+
+  void MWInputManager::update()
+  {
+      impl->update();
+  }
 }
diff --git a/apps/openmw/mwinput/inputmanager.hpp b/apps/openmw/mwinput/inputmanager.hpp
index 6b8034c8b4..721c77d9fd 100644
--- a/apps/openmw/mwinput/inputmanager.hpp
+++ b/apps/openmw/mwinput/inputmanager.hpp
@@ -48,6 +48,8 @@ namespace MWInput
                    OMW::Engine& engine);
     ~MWInputManager();
 
+    void update();
+
     void setGuiMode(MWGui::GuiMode mode);
   };
 }