(QtCore, qt_support_mode="auto")
| 137 | |
| 138 | |
| 139 | def _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 |
no outgoing calls
no test coverage detected