X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=60a6ceb3080efa7866519fd7c0de30d1efe2e6c9;hb=0c27626bae90cb1eeea4939de0130a49b9aac507;hp=b5d3c18c4473bfdee23c1b4bbf70b19512eafa42;hpb=20c6b8920ccb37a41b9f7467135ecd6550816f59;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index b5d3c18c..60a6ceb3 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); } @@ -274,15 +274,40 @@ 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/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; } @@ -311,12 +336,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); @@ -468,16 +487,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(); @@ -587,7 +596,7 @@ void HandleKey(KeySym key, int key_status) break; #endif -#if 1 +#if 0 case XK_m: if (MoveSpeed == 8) {