}
}
- if (game_status==PLAYING)
+ if (game_status == PLAYING)
XAutoRepeatOff(display);
}
{
motion_status = FALSE;
- if (event->type==ButtonPress)
+ if (event->type == ButtonPress)
button_status = event->button;
else
button_status = MB_RELEASED;
void HandleMotionEvent(XMotionEvent *event)
{
+ Window root, child;
+ int root_x, root_y;
+ int win_x, win_y;
+ unsigned int mask;
+
+ if (!XQueryPointer(display, window, &root, &child, &root_x, &root_y,
+ &win_x, &win_y, &mask))
+ return;
+
+ if (!button_status && game_status != LEVELED)
+ return;
+
motion_status = TRUE;
- HandleButton(event->x, event->y, button_status);
+ HandleButton(win_x, win_y, button_status);
}
void HandleKeyEvent(XKeyEvent *event)
if (event->type == FocusOut)
{
+ int i;
+
XAutoRepeatOn(display);
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/50 second before
+ processing the 'FocusIn' event.
+ */
+
+ Delay(20);
if (game_status == PLAYING)
XAutoRepeatOff(display);
if (old_joystick_status != -1)
{
old_mx = mx;
old_my = my;
-
- HandleVideoButtons(mx,my, button);
- HandleSoundButtons(mx,my, button);
- HandleGameButtons(mx,my, button);
}
HandleGadgets(mx, my, button);
break;
case LEVELED:
- LevelEd(mx,my, button);
break;
case HELPSCREEN:
case LEVELED:
HandleLevelEditorKeyInput(key);
- LevelNameTyping(key);
break;
case PLAYING:
break;
#endif
-#if 1
+#if 0
case XK_m:
if (MoveSpeed == 8)
{