X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=8a03effdde53b42af0d2afe7b9f58f201859fd04;hb=72b2940bea34cebf61175bc62a474cb78dcec467;hp=15106c87bfe2a8b4963048e09f51f3b60572b79a;hpb=403fa67c24301d440ae0871c2e31e1e395133a41;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 15106c87..8a03effd 100644 --- a/src/events.c +++ b/src/events.c @@ -169,7 +169,7 @@ void SleepWhileUnmapped() } } - if (game_status==PLAYING) + if (game_status == PLAYING) XAutoRepeatOff(display); } @@ -216,7 +216,7 @@ void HandleButtonEvent(XButtonEvent *event) { motion_status = FALSE; - if (event->type==ButtonPress) + if (event->type == ButtonPress) button_status = event->button; else button_status = MB_RELEASED; @@ -274,13 +274,36 @@ void HandleFocusEvent(XFocusChangeEvent *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; itype == 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) @@ -311,10 +334,6 @@ void HandleButton(int mx, int my, int button) { old_mx = mx; old_my = my; - - HandleVideoButtons(mx,my, button); - HandleSoundButtons(mx,my, button); - HandleGameButtons(mx,my, button); } HandleGadgets(mx, my, button); @@ -338,7 +357,6 @@ void HandleButton(int mx, int my, int button) break; case LEVELED: - LevelEd(mx,my, button); break; case HELPSCREEN: @@ -544,7 +562,6 @@ void HandleKey(KeySym key, int key_status) case LEVELED: HandleLevelEditorKeyInput(key); - LevelNameTyping(key); break; case PLAYING: @@ -587,7 +604,7 @@ void HandleKey(KeySym key, int key_status) break; #endif -#if 1 +#if 0 case XK_m: if (MoveSpeed == 8) {