##// END OF EJS Templates
ENH: Experimental input hook for wxpython phoenix
Paul McCarthy -
Show More
@@ -137,11 +137,66 b' def inputhook_wx3(context):'
137 pass
137 pass
138 return 0
138 return 0
139
139
140
141 def inputhook_wxphoenix(context):
142 """Run the wx event loop by processing pending events only.
143
144 This is equivalent to inputhook_wx3, but has been updated to work with
145 wxPython Phoenix.
146 """
147
148 # See inputhook_wx3 for in-line comments.
149 try:
150 app = wx.GetApp()
151 if app is not None:
152 assert wx.IsMainThread()
153
154 if not callable(signal.getsignal(signal.SIGINT)):
155 signal.signal(signal.SIGINT, signal.default_int_handler)
156
157 evtloop = wx.GUIEventLoop()
158 ea = wx.EventLoopActivator(evtloop)
159 t = clock()
160 while not context.input_is_ready():
161 while evtloop.Pending():
162 t = clock()
163 evtloop.Dispatch()
164
165 # Not all events will be procesed by Dispatch -
166 # we have to call ProcessPendingEvents as well
167 # to ensure that all events get processed.
168 app.ProcessPendingEvents()
169 evtloop.ProcessIdle()
170
171 used_time = clock() - t
172
173 if used_time > 10.0:
174 time.sleep(1.0)
175 elif used_time > 0.1:
176 time.sleep(0.05)
177 else:
178 time.sleep(0.001)
179 del ea
180 except KeyboardInterrupt:
181 pass
182 return 0
183
184
140 if sys.platform == 'darwin':
185 if sys.platform == 'darwin':
141 # On OSX, evtloop.Pending() always returns True, regardless of there being
186 # On OSX, evtloop.Pending() always returns True, regardless of there being
142 # any events pending. As such we can't use implementations 1 or 3 of the
187 # any events pending. As such we can't use implementations 1 or 3 of the
143 # inputhook as those depend on a pending/dispatch loop.
188 # inputhook as those depend on a pending/dispatch loop.
144 inputhook = inputhook_wx2
189 inputhook = inputhook_wx2
145 else:
190 else:
146 # This is our default implementation
191
147 inputhook = inputhook_wx3
192 # Get the major wx version number
193 if hasattr(wx, '__version__'):
194 major_version = wx.__version__[0]
195 else:
196 major_version = '3'
197
198 # Use the phoenix hook for wxpython >= 4
199 if int(major_version) >= 4:
200 inputhook = inputhook_wxphoenix
201 else:
202 inputhook = inputhook_wx3
General Comments 0
You need to be logged in to leave comments. Login now