Fix duplicate event dispatch in Cocoa event pump

Prevent mouse and keyboard events from being processed twice by
skipping [super sendEvent:] for events SDL has already handled via
Cocoa_DispatchEvent. Other event types still go through AppKit's
normal handling.

(cherry picked from commit dd52dd8995)
This commit is contained in:
Qiu Qiang
2026-01-11 21:31:14 -05:00
committed by Sam Lantinga
parent 75ff70b489
commit 3cd5a407b8

View File

@@ -97,6 +97,14 @@ static void Cocoa_DispatchEvent(NSEvent *theEvent)
{
if (s_bShouldHandleEventsInSDLApplication) {
Cocoa_DispatchEvent(theEvent);
// Avoid double-dispatching mouse and keyboard events. They are already handled in Cocoa_DispatchEvent.
// Other event types should still go through AppKit's normal handling.
NSEventType type = [theEvent type];
if ((type >= NSEventTypeLeftMouseDown && type <= NSEventTypeMouseExited) ||
(type >= NSEventTypeKeyDown && type <= NSEventTypeFlagsChanged)) {
return;
}
}
[super sendEvent:theEvent];