rnd-19990822-1-src
[rocksndiamonds.git] / src / events.c
index b0022c351eb70247a9683d6d4ca48080ad513b9b..0e8122853385e642df43e2dae3711a2b12b0d318 100644 (file)
@@ -68,7 +68,8 @@ void EventLoop(void)
     if (game_status != PLAYING)
     {
       XSync(display, FALSE);
-      Delay(10);
+      if (!XPending(display))  /* delay only if no pending events */
+       Delay(10);
     }
 
     /* refresh window contents from drawing buffer, if needed */
@@ -476,7 +477,8 @@ void HandleKey(KeySym key, int key_status)
   if (key_status == KEY_RELEASED)
     return;
 
-  if (key == XK_Return && game_status == PLAYING && AllPlayersGone)
+  if ((key == XK_Return || key == XK_space) &&
+      game_status == PLAYING && AllPlayersGone)
   {
     CloseDoor(DOOR_CLOSE_1);
     game_status = MAINMENU;
@@ -487,16 +489,6 @@ void HandleKey(KeySym key, int key_status)
   /* allow quick escape to the main menu with the Escape key */
   if (key == XK_Escape && game_status != MAINMENU)
   {
-    if (game_status == LEVELED)
-    {
-      /* draw smaller door */
-      XCopyArea(display, pix[PIX_DOOR], drawto, gc,
-               DOOR_GFX_PAGEX7, 64,
-               108, 64,
-               EX - 4, EY - 12);
-      redraw_mask |= REDRAW_ALL;
-    }
-
     CloseDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY);
     game_status = MAINMENU;
     DrawMainMenu();
@@ -529,6 +521,7 @@ void HandleKey(KeySym key, int key_status)
       switch(key)
       {
        case XK_Return:
+       case XK_space:
          if (game_status == MAINMENU)
            HandleMainMenu(0,0, 0,0, MB_MENU_CHOICE);
           else if (game_status == CHOOSELEVEL)
@@ -539,6 +532,16 @@ void HandleKey(KeySym key, int key_status)
            HandleSetupInputScreen(0,0, 0,0, MB_MENU_CHOICE);
          break;
 
+        case XK_Page_Up:
+          if (game_status == CHOOSELEVEL)
+            HandleChooseLevel(0,0, 0,-SCR_FIELDY, MB_MENU_MARK);
+         break;
+
+        case XK_Page_Down:
+          if (game_status == CHOOSELEVEL)
+            HandleChooseLevel(0,0, 0,SCR_FIELDY, MB_MENU_MARK);
+         break;
+
        default:
          break;
       }
@@ -552,6 +555,7 @@ void HandleKey(KeySym key, int key_status)
       switch(key)
       {
        case XK_Return:
+       case XK_space:
          game_status = MAINMENU;
          DrawMainMenu();
          BackToFront();