From: Holger Schemel Date: Sat, 9 Dec 2023 16:26:19 +0000 (+0100) Subject: fixed creating additional click events from global animation events X-Git-Tag: 4.3.8.0~6 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=0fa16ae6e75fc44a990a57ced9f9397eefb439e4;p=rocksndiamonds.git fixed creating additional click events from global animation events When handling global animation events that trigger user events handled as either key, gadget or screen events, prevent creating additional key or button events to be handled by global animations again, as this can confuse further button event processing, which may cause buttons or menu items to be selected by accident. --- diff --git a/src/events.c b/src/events.c index 87eaa2b9..2e3c7ca9 100644 --- a/src/events.c +++ b/src/events.c @@ -40,6 +40,7 @@ static DelayCounter special_cursor_delay = { 1000 }; static boolean special_cursor_enabled = FALSE; static boolean stop_processing_events = FALSE; +static boolean is_global_anim_event = FALSE; // forward declarations for internal use @@ -2214,7 +2215,8 @@ void HandleKey(Key key, int key_status) ignore_repeated_key = FALSE; // send key release event to global animation event handling - HandleGlobalAnimClicks(-1, -1, KEY_RELEASED, FALSE); + if (!is_global_anim_event) + HandleGlobalAnimClicks(-1, -1, KEY_RELEASED, FALSE); return; } @@ -2271,9 +2273,9 @@ void HandleKey(Key key, int key_status) } // some key events are handled like clicks for global animations - boolean click = (key == KSYM_space || - key == KSYM_Return || - key == KSYM_Escape); + boolean click = (!is_global_anim_event && (key == KSYM_space || + key == KSYM_Return || + key == KSYM_Escape)); if (click && HandleGlobalAnimClicks(-1, -1, MB_LEFTBUTTON, TRUE)) { @@ -2833,9 +2835,13 @@ boolean DoKeysymAction(int keysym) { Key key = (Key)(-keysym); + is_global_anim_event = TRUE; + HandleKey(key, KEY_PRESSED); HandleKey(key, KEY_RELEASED); + is_global_anim_event = FALSE; + return TRUE; }