/* event filter especially needed for SDL event filtering due to
- delay problems with lots of mouse motion events when mouse
- button not pressed */
+ delay problems with lots of mouse motion events when mouse button
+ not pressed (X11 can handle this with 'PointerMotionHintMask') */
int FilterMouseMotionEvents(const Event *event)
{
+ /* non-motion events are directly passed to event handler functions */
if (event->type != EVENT_MOTIONNOTIFY)
return 1;
- /* get mouse motion events without pressed button only in level editor */
+ /* when playing, display a different mouse pointer inside the playfield */
+ if (game_status == PLAYING)
+ {
+ static boolean inside_field = FALSE;
+ MotionEvent *motion = (MotionEvent *)event;
+
+ if ((motion->x >= SX && motion->x < SX + SXSIZE &&
+ motion->y >= SY && motion->y < SY + SYSIZE) != inside_field)
+ {
+ inside_field = !inside_field;
+
+ SetMouseCursor(inside_field ? CURSOR_PLAYFIELD : CURSOR_DEFAULT);
+ }
+ }
+
+ /* skip mouse motion events without pressed button outside level editor */
if (button_status == MB_RELEASED && game_status != LEVELED)
return 0;
else
case EVENT_UNMAPNOTIFY:
#if 0
+ /* This causes the game to stop not only when iconified, but also
+ when on another virtual desktop, which might be not desired. */
SleepWhileUnmapped();
#endif
break;
TapeTogglePause(TAPE_TOGGLE_MANUAL);
}
-
+#if 0
#ifndef DEBUG
if (game_status == PLAYING && (tape.playing || tape.pausing))
return;
#endif
-
+#endif
HandleGadgetsKeyInput(key);