+ old_joystick_status = joystick_status;
+ joystick_status = JOYSTICK_OFF;
+
+ /* simulate key release events for still pressed keys */
+ key_joystick_mapping = 0;
+ for (i=0; i<MAX_PLAYERS; i++)
+ stored_player[i].action = 0;
+ }
+ else if (event->type == FocusIn)
+ {
+ /* When there are two Rocks'n'Diamonds windows which overlap and
+ the player moves the pointer from one game window to the other,
+ a 'FocusOut' event is generated for the window the pointer is
+ leaving and a 'FocusIn' event is generated for the window the
+ pointer is entering. In some cases, it can happen that the
+ 'FocusIn' event is handled by the one game process before the
+ 'FocusOut' event by the other game process. In this case the
+ X11 environment would end up with activated keyboard auto repeat,
+ because unfortunately this is a global setting and not (which
+ would be far better) set for each X11 window individually.
+ The effect would be keyboard auto repeat while playing the game
+ (game_status == PLAYING), which is not desired.
+ To avoid this special case, we just wait 1/10 second before
+ processing the 'FocusIn' event.
+ */
+
+ if (game_status == PLAYING)
+ {
+ Delay(100);
+ XAutoRepeatOff(display);
+ }
+ if (old_joystick_status != -1)
+ joystick_status = old_joystick_status;
+ }
+}
+
+void HandleClientMessageEvent(XClientMessageEvent *event)
+{
+#ifndef MSDOS
+ if ((event->window == window) &&
+ (event->data.l[0] == XInternAtom(display, "WM_DELETE_WINDOW", FALSE)))
+ CloseAllAndExit(0);
+#endif