diff --git a/src/GameEngine.cpp b/src/GameEngine.cpp index e807143..8ded69b 100644 --- a/src/GameEngine.cpp +++ b/src/GameEngine.cpp @@ -229,7 +229,8 @@ void GameEngine::processEvent(const sf::Event& event) std::string name = currentScene()->action(actionCode); currentScene()->doAction(name, actionType); } - else if (currentScene()->key_callable) + else if (currentScene()->key_callable && + (event.type == sf::Event::KeyPressed || event.type == sf::Event::KeyReleased)) { currentScene()->key_callable->call(ActionCode::key_str(event.key.code), actionType); } diff --git a/tests/issue78_middle_click_fix_test.py b/tests/issue78_middle_click_fix_test.py new file mode 100644 index 0000000..fac4f18 --- /dev/null +++ b/tests/issue78_middle_click_fix_test.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +"""Test that Issue #78 is fixed - Middle Mouse Click should NOT send 'C' keyboard event""" +import mcrfpy +from mcrfpy import automation +import sys + +# Track events +keyboard_events = [] +click_events = [] + +def keyboard_handler(key): + """Track keyboard events""" + keyboard_events.append(key) + print(f"Keyboard event received: '{key}'") + +def click_handler(x, y, button): + """Track click events""" + click_events.append((x, y, button)) + print(f"Click event received: ({x}, {y}, button={button})") + +def test_middle_click_fix(runtime): + """Test that middle click no longer sends 'C' key event""" + print(f"\n=== Testing Issue #78 Fix (runtime: {runtime}) ===") + + # Simulate middle click + print("\nSimulating middle click at (200, 200)...") + automation.middleClick(200, 200) + + # Also test other clicks for comparison + print("Simulating left click at (100, 100)...") + automation.click(100, 100) + + print("Simulating right click at (300, 300)...") + automation.rightClick(300, 300) + + # Wait a moment for events to process + mcrfpy.setTimer("check_results", check_results, 500) + +def check_results(runtime): + """Check if the bug is fixed""" + print(f"\n=== Results ===") + print(f"Keyboard events received: {len(keyboard_events)}") + print(f"Click events received: {len(click_events)}") + + # Check if 'C' was incorrectly triggered + if 'C' in keyboard_events or 'c' in keyboard_events: + print("\n✗ FAIL - Issue #78 still exists: Middle click triggered 'C' keyboard event!") + print(f"Keyboard events: {keyboard_events}") + else: + print("\n✓ PASS - Issue #78 is FIXED: No spurious 'C' keyboard event from middle click!") + + # Take screenshot + filename = f"issue78_fixed_{int(runtime)}.png" + automation.screenshot(filename) + print(f"\nScreenshot saved: {filename}") + + # Cleanup and exit + mcrfpy.delTimer("check_results") + sys.exit(0) + +# Set up test scene +print("Setting up test scene...") +mcrfpy.createScene("issue78_test") +mcrfpy.setScene("issue78_test") +ui = mcrfpy.sceneUI("issue78_test") + +# Register keyboard handler +mcrfpy.keypressScene(keyboard_handler) + +# Create a clickable frame +frame = mcrfpy.Frame(50, 50, 400, 400, + fill_color=mcrfpy.Color(100, 150, 200), + outline_color=mcrfpy.Color(255, 255, 255), + outline=3.0) +frame.click = click_handler +ui.append(frame) + +# Add label +caption = mcrfpy.Caption(mcrfpy.Vector(100, 100), + text="Issue #78 Test - Middle Click", + fill_color=mcrfpy.Color(255, 255, 255)) +caption.size = 24 +ui.append(caption) + +# Schedule test +print("Scheduling test to run after render loop starts...") +mcrfpy.setTimer("test", test_middle_click_fix, 1000) \ No newline at end of file