diff -r 56bd09c4c297 -r c7bc0e516cd6 UI/CodeDocumentationViewer.py --- a/UI/CodeDocumentationViewer.py Sat Apr 21 18:02:04 2018 +0200 +++ b/UI/CodeDocumentationViewer.py Sun Apr 22 14:01:39 2018 +0200 @@ -14,7 +14,7 @@ except NameError: basestring = str -from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl +from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QTimer from PyQt5.QtGui import QCursor from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, \ QComboBox, QSizePolicy, QLineEdit, QTextEdit, QToolTip, QToolButton, \ @@ -210,6 +210,12 @@ self.__lastDocumentation = None self.__requestingEditor = None + + self.__unregisterTimer = QTimer(self) + self.__unregisterTimer.setInterval(30000) # 30 seconds + self.__unregisterTimer.setSingleShot(True) + self.__unregisterTimer.timeout.connect(self.__unregisterTimerTimeout) + self.__mostRecentlyUnregisteredProvider = None def __setupUi(self): """ @@ -342,6 +348,13 @@ self.providerComboBox.addItem(providerDisplay, providerName) self.providerAdded.emit() + + if self.__unregisterTimer.isActive(): + if providerName == self.__mostRecentlyUnregisteredProvider: + # this is assumed to be a plug-in reload + self.__unregisterTimer.stop() + self.__mostRecentlyUnregisteredProvider = None + self.__selectProvider(providerName) def unregisterProvider(self, providerName): """ @@ -353,6 +366,11 @@ if providerName in self.__providers: if providerName == self.__selectedProvider: self.providerComboBox.setCurrentIndex(0) + + # in case this is just a temporary unregistration (< 30s) + # e.g. when the plug-in is re-installed or updated + self.__mostRecentlyUnregisteredProvider = providerName + self.__unregisterTimer.start() del self.__providers[providerName] index = self.providerComboBox.findData(providerName) @@ -360,6 +378,13 @@ self.providerRemoved.emit() + @pyqtSlot() + def __unregisterTimerTimeout(self): + """ + Private slot handling the timeout signal of the unregister timer. + """ + self.__mostRecentlyUnregisteredProvider = None + def isSupportedLanguage(self, language): """ Public method to check, if the given language is supported by the @@ -581,6 +606,15 @@ self.__showTextViewer(showMarkdown) provider = Preferences.getDocuViewer("Provider") + self.__selectProvider(provider) + + def __selectProvider(self, provider): + """ + Private method to select a provider programmatically. + + @param provider name of the provider to be selected + @type str + """ if provider != self.__selectedProvider: index = self.providerComboBox.findData(provider) if index < 0: