Show More
@@ -7,6 +7,7 b' Calls NSApp / CoreFoundation APIs via ctypes.' | |||
|
7 | 7 | |
|
8 | 8 | import ctypes |
|
9 | 9 | import ctypes.util |
|
10 | from threading import Event | |
|
10 | 11 | |
|
11 | 12 | objc = ctypes.cdll.LoadLibrary(ctypes.util.find_library('objc')) |
|
12 | 13 | |
@@ -97,8 +98,11 b' def _wake(NSApp):' | |||
|
97 | 98 | msg(NSApp, n('postEvent:atStart:'), void_p(event), True) |
|
98 | 99 | |
|
99 | 100 | |
|
101 | _triggered = Event() | |
|
102 | ||
|
100 | 103 | def _input_callback(fdref, flags, info): |
|
101 | 104 | """Callback to fire when there's input to be read""" |
|
105 | _triggered.set() | |
|
102 | 106 | CFFileDescriptorInvalidate(fdref) |
|
103 | 107 | CFRelease(fdref) |
|
104 | 108 | NSApp = _NSApp() |
@@ -111,6 +115,7 b' _c_input_callback = _c_callback_func_type(_input_callback)' | |||
|
111 | 115 | |
|
112 | 116 | def _stop_on_read(fd): |
|
113 | 117 | """Register callback to stop eventloop when there's data on fd""" |
|
118 | _triggered.clear() | |
|
114 | 119 | fdref = CFFileDescriptorCreate(None, fd, False, _c_input_callback, None) |
|
115 | 120 | CFFileDescriptorEnableCallBacks(fdref, kCFFileDescriptorReadCallBack) |
|
116 | 121 | source = CFFileDescriptorCreateRunLoopSource(None, fdref, 0) |
@@ -130,4 +135,9 b' def inputhook(context):' | |||
|
130 | 135 | return |
|
131 | 136 | _stop_on_read(context.fileno()) |
|
132 | 137 | msg(NSApp, n('run')) |
|
133 | ||
|
138 | if not _triggered.is_set(): | |
|
139 | # app closed without firing callback, | |
|
140 | # probably due to last window being closed. | |
|
141 | # Run the loop manually in this case, | |
|
142 | # since there may be events still to process (#9734) | |
|
143 | CoreFoundation.CFRunLoopRun() |
General Comments 0
You need to be logged in to leave comments.
Login now