Skip to content

Commit 55a0d34

Browse files
authored
Merge pull request #2606 from pythonarcade/macos/patch_pyglet_eventloop
patch pyglet event loop until it is fixed for macOS
2 parents 78061b9 + ec33677 commit 55a0d34

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

arcade/window_commands.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import gc
1010
import os
11+
import sys
1112
import time
1213
from typing import TYPE_CHECKING, Callable
1314

@@ -143,6 +144,40 @@ def run(view: View | None = None) -> None:
143144

144145
now = time.perf_counter()
145146
delta_time, last_time = now - last_time, now
147+
elif sys.platform == "darwin":
148+
# On macOS we have to patch the eventloop until a new pyglet version is released
149+
eventloop = pyglet.app.event_loop
150+
151+
def patched_run(interval=1 / 60): # type: ignore
152+
if interval is None:
153+
pass
154+
elif not interval:
155+
eventloop.clock.schedule(eventloop._redraw_windows)
156+
else:
157+
eventloop.clock.schedule_interval(eventloop._redraw_windows, interval)
158+
159+
eventloop.has_exit = False
160+
161+
from pyglet.window import Window
162+
163+
Window._enable_event_queue = False
164+
165+
# Dispatch pending events
166+
for window in pyglet.app.windows:
167+
window.switch_to()
168+
window.dispatch_pending_events()
169+
170+
eventloop.platform_event_loop = pyglet.app.platform_event_loop # type: ignore
171+
172+
eventloop.dispatch_event("on_enter")
173+
eventloop.is_running = True
174+
175+
eventloop.platform_event_loop.nsapp_start(interval or 0) # type: ignore
176+
177+
eventloop.run = patched_run # type: ignore
178+
179+
pyglet.app.run(None)
180+
146181
else:
147182
# Start the standard event loop (blocking)
148183
# Note that we pass None as the interval here because we register

0 commit comments

Comments
 (0)