MCPcopy Create free account
hub / github.com/fabioz/PyDev.Debugger / _internal_patch_qt

Function _internal_patch_qt

_pydev_bundle/pydev_monkey_qt.py:139–220  ·  view source on GitHub ↗
(QtCore, qt_support_mode="auto")

Source from the content-addressed store, hash-verified

137
138
139def _internal_patch_qt(QtCore, qt_support_mode="auto"):
140 pydev_log.debug("Patching Qt: %s", QtCore)
141
142 _original_thread_init = QtCore.QThread.__init__
143 _original_runnable_init = QtCore.QRunnable.__init__
144 _original_QThread = QtCore.QThread
145
146 class FuncWrapper:
147 def __init__(self, original):
148 self._original = original
149
150 def __call__(self, *args, **kwargs):
151 set_trace_in_qt()
152 return self._original(*args, **kwargs)
153
154 class StartedSignalWrapper(QtCore.QObject): # Wrapper for the QThread.started signal
155 try:
156 _signal = QtCore.Signal() # @UndefinedVariable
157 except:
158 _signal = QtCore.pyqtSignal() # @UndefinedVariable
159
160 def __init__(self, thread, original_started):
161 QtCore.QObject.__init__(self)
162 self.thread = thread
163 self.original_started = original_started
164 if qt_support_mode in ("pyside", "pyside2"):
165 self._signal = original_started
166 else:
167 self._signal.connect(self._on_call)
168 self.original_started.connect(self._signal)
169
170 def connect(self, func, *args, **kwargs):
171 if qt_support_mode in ("pyside", "pyside2"):
172 return self._signal.connect(FuncWrapper(func), *args, **kwargs)
173 else:
174 return self._signal.connect(func, *args, **kwargs)
175
176 def disconnect(self, *args, **kwargs):
177 return self._signal.disconnect(*args, **kwargs)
178
179 def emit(self, *args, **kwargs):
180 return self._signal.emit(*args, **kwargs)
181
182 def _on_call(self, *args, **kwargs):
183 set_trace_in_qt()
184
185 class ThreadWrapper(QtCore.QThread): # Wrapper for QThread
186 def __init__(self, *args, **kwargs):
187 _original_thread_init(self, *args, **kwargs)
188
189 # In PyQt5 the program hangs when we try to call original run method of QThread class.
190 # So we need to distinguish instances of QThread class and instances of QThread inheritors.
191 if self.__class__.run == _original_QThread.run:
192 self.run = self._exec_run
193 else:
194 self._original_run = self.run
195 self.run = self._new_run
196 self._original_started = self.started

Callers 2

patch_qtFunction · 0.85
patched_importFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected