aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/graphics/opengl/opengl-graphics.cpp8
-rw-r--r--backends/graphics/opengl/opengl-graphics.h2
-rw-r--r--backends/graphics/sdl/sdl-graphics.cpp8
-rw-r--r--backends/graphics/sdl/sdl-graphics.h2
-rw-r--r--backends/platform/sdl/sdl.cpp49
5 files changed, 47 insertions, 22 deletions
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index 187a7aec26..8682c54921 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -62,9 +62,6 @@ OpenGLGraphicsManager::OpenGLGraphicsManager()
_gamePalette = (byte *)calloc(sizeof(byte) * 4, 256);
_cursorPalette = (byte *)calloc(sizeof(byte) * 4, 256);
-
- // Register the graphics manager as a event observer
- g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 2, false);
}
OpenGLGraphicsManager::~OpenGLGraphicsManager() {
@@ -83,6 +80,11 @@ OpenGLGraphicsManager::~OpenGLGraphicsManager() {
delete _cursorTexture;
}
+void OpenGLGraphicsManager::initEventObserver() {
+ // Register the graphics manager as a event observer
+ g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
+}
+
//
// Feature
//
diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h
index 460b3806e8..9b3340aef2 100644
--- a/backends/graphics/opengl/opengl-graphics.h
+++ b/backends/graphics/opengl/opengl-graphics.h
@@ -57,6 +57,8 @@ public:
OpenGLGraphicsManager();
virtual ~OpenGLGraphicsManager();
+ virtual void initEventObserver();
+
virtual bool hasFeature(OSystem::Feature f);
virtual void setFeatureState(OSystem::Feature f, bool enable);
virtual bool getFeatureState(OSystem::Feature f);
diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp
index 2952ad810b..9540f6dcfc 100644
--- a/backends/graphics/sdl/sdl-graphics.cpp
+++ b/backends/graphics/sdl/sdl-graphics.cpp
@@ -184,9 +184,6 @@ SdlGraphicsManager::SdlGraphicsManager()
#else
_videoMode.fullscreen = true;
#endif
-
- // Register the graphics manager as a event observer
- g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 2, false);
}
SdlGraphicsManager::~SdlGraphicsManager() {
@@ -202,6 +199,11 @@ SdlGraphicsManager::~SdlGraphicsManager() {
free(_mouseData);
}
+void SdlGraphicsManager::initEventObserver() {
+ // Register the graphics manager as a event observer
+ g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
+}
+
bool SdlGraphicsManager::hasFeature(OSystem::Feature f) {
return
(f == OSystem::kFeatureFullscreenMode) ||
diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h
index 01ae44222a..7c6f95f134 100644
--- a/backends/graphics/sdl/sdl-graphics.h
+++ b/backends/graphics/sdl/sdl-graphics.h
@@ -78,6 +78,8 @@ public:
SdlGraphicsManager();
virtual ~SdlGraphicsManager();
+ virtual void initEventObserver();
+
virtual bool hasFeature(OSystem::Feature f);
virtual void setFeatureState(OSystem::Feature f, bool enable);
virtual bool getFeatureState(OSystem::Feature f);
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 37c29a34f1..3808a50780 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -81,20 +81,7 @@ void OSystem_SDL::initBackend() {
// Check if backend has not been initialized
assert(!_inited);
- // Creates the backend managers, if they don't exist yet (we check
- // for this to allow subclasses to provide their own).
- if (_eventManager == 0)
- _eventManager = new SdlEventManager(this);
-
- if (_savefileManager == 0)
- _savefileManager = new DefaultSaveFileManager();
-
- if (_mixerManager == 0) {
- _mixerManager = new SdlMixerManager();
-
- // Setup and start mixer
- _mixerManager->init();
- }
+ int graphicsManagerType = 0;
if (_graphicsManager == 0) {
#ifdef USE_OPENGL
@@ -110,12 +97,42 @@ void OSystem_SDL::initBackend() {
}
// If the gfx_mode is from OpenGL, create the OpenGL graphics manager
- if (use_opengl)
+ if (use_opengl) {
_graphicsManager = new OpenGLSdlGraphicsManager();
+ graphicsManagerType = 1;
+ }
}
#endif
- if (_graphicsManager == 0)
+ if (_graphicsManager == 0) {
_graphicsManager = new SdlGraphicsManager();
+ graphicsManagerType = 0;
+ }
+ }
+
+ // Creates the backend managers, if they don't exist yet (we check
+ // for this to allow subclasses to provide their own).
+ if (_eventManager == 0)
+ _eventManager = new SdlEventManager(this);
+
+ // We have to initialize the graphics manager before the event manager
+ // so the virtual keyboard can be initialized, but we have to add the
+ // graphics manager as an event observer after initializing the event
+ // manager.
+ if (graphicsManagerType == 0)
+ ((SdlGraphicsManager *)_graphicsManager)->initEventObserver();
+#ifdef USE_OPENGL
+ else if (graphicsManagerType == 1)
+ ((OpenGLSdlGraphicsManager *)_graphicsManager)->initEventObserver();
+#endif
+
+ if (_savefileManager == 0)
+ _savefileManager = new DefaultSaveFileManager();
+
+ if (_mixerManager == 0) {
+ _mixerManager = new SdlMixerManager();
+
+ // Setup and start mixer
+ _mixerManager->init();
}
if (_audiocdManager == 0)