rnd-20001206-1-src
authorHolger Schemel <info@artsoft.org>
Wed, 6 Dec 2000 00:48:28 +0000 (01:48 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:35:33 +0000 (10:35 +0200)
src/events.c
src/init.c
src/libgame/sdl.c
src/libgame/system.c

index 1e2ca16841661450886d719a2f701e0c8eea49be..f4e690f82c2ddbe6b6d3f3aba10df575f4bc9025 100644 (file)
@@ -45,6 +45,23 @@ int FilterMouseMotionEvents(const Event *event)
     return 1;
 }
 
+/* this is only really needed for non-SDL targets to filter unwanted events;
+   when using SDL with properly installed event filter, this function can be
+   replaced with a simple "NextEvent()" call, but it doesn't hurt either */
+
+static boolean NextValidEvent(Event *event)
+{
+  while (PendingEvent())
+  {
+    NextEvent(event);
+
+    if (FilterMouseMotionEvents(event))
+      return TRUE;
+  }
+
+  return FALSE;
+}
+
 void EventLoop(void)
 {
   while(1)
@@ -53,9 +70,7 @@ void EventLoop(void)
     {
       Event event;
 
-      NextEvent(&event);
-
-      if (FilterMouseMotionEvents(&event))
+      if (NextValidEvent(&event))
       {
        switch(event.type)
        {
index 3b6072741385769f6a1af70943a85d1e2f046a27..304b1037e0fe73fd5ee6d287a653c50fe3c538fd 100644 (file)
@@ -62,12 +62,12 @@ void OpenAll(void)
   InitJoysticks();
   InitRND(NEW_RANDOMIZE);
 
-  InitEventFilter(FilterMouseMotionEvents);
-
   InitVideoDisplay();
   InitVideoBuffer(&backbuffer, &window, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH,
                  setup.fullscreen);
 
+  InitEventFilter(FilterMouseMotionEvents);
+
   InitGfx();
   InitElementProperties();     /* initializes IS_CHAR() for el2gfx() */
 
index 7c38aa940d26fa1c45f5fc9639a9ca1fd7b17306..a4fbf7dee3d12997c9cc817a21b40507b755d1b9 100644 (file)
@@ -24,8 +24,8 @@
 inline void SDLInitVideoDisplay(void)
 {
   /* initialize SDL video */
-  if (SDL_Init(SDL_INIT_VIDEO) < 0)
-    Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
+  if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
+    Error(ERR_EXIT, "SDL_InitSubSystem() failed: %s", SDL_GetError());
 
   /* set default SDL depth */
   video.default_depth = SDL_GetVideoInfo()->vfmt->BitsPerPixel;
@@ -707,9 +707,9 @@ Bitmap *SDLLoadImage(char *filename)
 
 inline boolean SDLOpenAudio(void)
 {
-  if (SDL_Init(SDL_INIT_AUDIO) < 0)
+  if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0)
   {
-    Error(ERR_WARN, "SDL_Init() failed: %s", SDL_GetError());
+    Error(ERR_WARN, "SDL_InitSubSystem() failed: %s", SDL_GetError());
     return FALSE;
   }
 
index 07d4de7986f2d164aef559a12e4bda7c2893f68a..341da455c5f8f7487613279510d42362bf7e30e9 100644 (file)
@@ -89,6 +89,11 @@ void InitPlatformDependantStuff(void)
 #if !defined(PLATFORM_UNIX)
   initErrorFile();
 #endif
+
+#if defined(TARGET_SDL)
+  if (SDL_Init(SDL_INIT_EVENTTHREAD | SDL_INIT_NOPARACHUTE) < 0)
+    Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
+#endif
 }
 
 void ClosePlatformDependantStuff(void)