Fix related to #36319: restore SDL_VIDEODRIVER=dummy environment variable, it

seems that somehow not having this is causing keyboard events to be caught by
SDL. This was removed because it broke addons that could use SDL, now set the
environment variable only temporary during SDL initialization.

This may have been causing issues with keyboard events getting missed in the
game engine, but I couldn't confirm the issue here.
This commit is contained in:
2013-09-23 14:48:28 +00:00
parent 97cb65df52
commit eaf354e222
3 changed files with 45 additions and 12 deletions

View File

@@ -39,6 +39,8 @@
#include "SCA_Joystick.h"
#include "SCA_JoystickPrivate.h"
#include "BLI_path_util.h"
SCA_Joystick::SCA_Joystick(short int index)
:
m_joyindex(index),
@@ -88,14 +90,26 @@ SCA_Joystick *SCA_Joystick::GetInstance( short int joyindex )
if (m_refCount == 0)
{
int i;
/* The video subsystem is required for joystick input to work. However,
* when GHOST is running under SDL, video is initialized elsewhere.
* Do this once only. */
* when GHOST is running under SDL, video is initialized elsewhere. We
* also need to set the videodriver to dummy, and do it here to avoid
* interfering with addons that may use SDL too.
*
* We also init SDL once only. */
# ifdef WITH_GHOST_SDL
if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1 ) {
int success = (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != -1 );
# else
if (SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO) == -1 ) {
/* set and restore environment variable */
char *videodriver = getenv("SDL_VIDEODRIVER");
BLI_setenv("SDL_VIDEODRIVER", "dummy");
int success = (SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO) != -1 );
BLI_setenv("SDL_VIDEODRIVER", videodriver);
# endif
if (!success) {
JOYSTICK_ECHO("Error-Initializing-SDL: " << SDL_GetError());
return NULL;
}