Wed, 03 Oct 2012 19:15:04 +0200
Implemented guards against double activation of list entries.
--- a/Helpviewer/HelpWindow.py Wed Oct 03 17:55:56 2012 +0200 +++ b/Helpviewer/HelpWindow.py Wed Oct 03 19:15:04 2012 +0200 @@ -230,6 +230,7 @@ QDesktopServices.setUrlHandler("https", self.__linkActivated) # setup connections + self.__activating = False # TOC window self.__tocWindow.linkActivated.connect(self.__linkActivated) self.__tocWindow.escapePressed.connect(self.__activateCurrentBrowser) @@ -2291,10 +2292,13 @@ @param url URL to be shown (QUrl) """ - req = QNetworkRequest(url) - req.setRawHeader("X-Eric5-UserLoadAction", b"1") - self.currentBrowser().setSource( - None, (req, QNetworkAccessManager.GetOperation, b"")) + if not self.__activating: + self.__activating = True + req = QNetworkRequest(url) + req.setRawHeader("X-Eric5-UserLoadAction", b"1") + self.currentBrowser().setSource( + None, (req, QNetworkAccessManager.GetOperation, b"")) + self.__activating = False def __linksActivated(self, links, keyword): """ @@ -2304,9 +2308,12 @@ URL as value (QUrl) @param keyword keyword for the link set (string) """ - dlg = HelpTopicDialog(self, keyword, links) - if dlg.exec_() == QDialog.Accepted: - self.currentBrowser().setSource(dlg.link()) + if not self.__activating: + self.__activating = True + dlg = HelpTopicDialog(self, keyword, links) + if dlg.exec_() == QDialog.Accepted: + self.currentBrowser().setSource(dlg.link()) + self.__activating = False def __activateCurrentBrowser(self): """
--- a/MultiProject/MultiProjectBrowser.py Wed Oct 03 17:55:56 2012 +0200 +++ b/MultiProject/MultiProjectBrowser.py Wed Oct 03 19:15:04 2012 +0200 @@ -34,6 +34,8 @@ self.setWindowIcon(UI.PixmapCache.getIcon("eric.png")) self.setAlternatingRowColors(True) + self.__openingProject = False + self.multiProject.newMultiProject.connect(self.__newMultiProject) self.multiProject.multiProjectOpened.connect(self.__multiProjectOpened) self.multiProject.multiProjectClosed.connect(self.__multiProjectClosed) @@ -141,9 +143,12 @@ if itm is None: return - filename = itm.data(Qt.UserRole) - if filename: - self.multiProject.openProject(filename) + if not self.__openingProject: + filename = itm.data(Qt.UserRole) + if filename: + self.__openingProject = True + self.multiProject.openProject(filename) + self.__openingProject = False ############################################################################ ## Private methods below
--- a/Project/ProjectBaseBrowser.py Wed Oct 03 17:55:56 2012 +0200 +++ b/Project/ProjectBaseBrowser.py Wed Oct 03 19:15:04 2012 +0200 @@ -61,6 +61,8 @@ self.DeselectFlags = QItemSelectionModel.SelectionFlags( QItemSelectionModel.Deselect | QItemSelectionModel.Rows) + self._activating = False + self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self._contextMenuRequested) self.activated.connect(self._openItem)
--- a/SqlBrowser/SqlConnectionWidget.py Wed Oct 03 17:55:56 2012 +0200 +++ b/SqlBrowser/SqlConnectionWidget.py Wed Oct 03 19:15:04 2012 +0200 @@ -55,6 +55,8 @@ layout.addWidget(self.__connectionTree) + self.__activating = False + self.__connectionTree.itemActivated.connect(self.__itemActivated) self.__connectionTree.currentItemChanged.connect(self.__currentItemChanged) @@ -107,11 +109,14 @@ if itm is None: return - if itm.parent() is None: - self.__setActive(itm) - else: - self.__setActive(itm.parent()) - self.tableActivated.emit(itm.text(0)) + if not self.__activating: + self.__activating = True + if itm.parent() is None: + self.__setActive(itm) + else: + self.__setActive(itm.parent()) + self.tableActivated.emit(itm.text(0)) + self.__activating = False def __currentItemChanged(self, current, previous): """
--- a/Tasks/TaskViewer.py Wed Oct 03 17:55:56 2012 +0200 +++ b/Tasks/TaskViewer.py Wed Oct 03 19:15:04 2012 +0200 @@ -137,6 +137,8 @@ self.__backMenu.addSeparator() self.__backMenu.addAction(self.trUtf8("Configure..."), self.__configure) + self.__activating = False + self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.__showContextMenu) self.itemActivated.connect(self.__taskItemActivated) @@ -180,11 +182,14 @@ @param itm reference to the activated item (QTreeWidgetItem) @param col column the item was activated in (integer) """ - fn = itm.getFilename() - if fn: - self.displayFile.emit(fn, itm.getLineno()) - else: - self.__editTaskProperties() + if not self.__activating: + self.__activating = True + fn = itm.getFilename() + if fn: + self.displayFile.emit(fn, itm.getLineno()) + else: + self.__editTaskProperties() + self.__activating = False def __showContextMenu(self, coord): """
--- a/Templates/TemplateViewer.py Wed Oct 03 17:55:56 2012 +0200 +++ b/Templates/TemplateViewer.py Wed Oct 03 19:15:04 2012 +0200 @@ -416,6 +416,8 @@ self.__backMenu.addSeparator() self.__backMenu.addAction(self.trUtf8("Configure..."), self.__configure) + self.__activating = False + self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.__showContextMenu) self.itemActivated.connect(self.__templateItemActivated) @@ -435,9 +437,12 @@ @param itm reference to the activated item (QTreeWidgetItem) @param col column the item was activated in (integer) """ - itm = self.currentItem() - if isinstance(itm, TemplateEntry): - self.applyTemplate(itm) + if not self.__activating: + self.__activating = True + itm = self.currentItem() + if isinstance(itm, TemplateEntry): + self.applyTemplate(itm) + self.__activating = False def __showContextMenu(self, coord): """
--- a/UI/Browser.py Wed Oct 03 17:55:56 2012 +0200 +++ b/UI/Browser.py Wed Oct 03 19:15:04 2012 +0200 @@ -78,6 +78,8 @@ self.selectedItemsFilter = [BrowserFileItem] + self._activating = False + self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self._contextMenuRequested) self.activated.connect(self._openItem) @@ -367,50 +369,53 @@ [BrowserFileItem, BrowserClassItem, BrowserMethodItem, BrowserClassAttributeItem]) - for itm in itmList: - if isinstance(itm, BrowserFileItem): - if itm.isPython2File(): - self.sourceFile[str].emit(itm.fileName()) - elif itm.isPython3File(): - self.sourceFile[str].emit(itm.fileName()) - elif itm.isRubyFile(): - self.sourceFile[str, int, str].emit(itm.fileName(), -1, "Ruby") - elif itm.isDFile(): - self.sourceFile[str, int, str].emit(itm.fileName(), -1, "D") - elif itm.isDesignerFile(): - self.designerFile.emit(itm.fileName()) - elif itm.isLinguistFile(): - if itm.fileExt() == '.ts': - self.linguistFile.emit(itm.fileName()) + if not self._activating: + self._activating = True + for itm in itmList: + if isinstance(itm, BrowserFileItem): + if itm.isPython2File(): + self.sourceFile[str].emit(itm.fileName()) + elif itm.isPython3File(): + self.sourceFile[str].emit(itm.fileName()) + elif itm.isRubyFile(): + self.sourceFile[str, int, str].emit(itm.fileName(), -1, "Ruby") + elif itm.isDFile(): + self.sourceFile[str, int, str].emit(itm.fileName(), -1, "D") + elif itm.isDesignerFile(): + self.designerFile.emit(itm.fileName()) + elif itm.isLinguistFile(): + if itm.fileExt() == '.ts': + self.linguistFile.emit(itm.fileName()) + else: + self.trpreview.emit([itm.fileName()]) + elif itm.isProjectFile(): + self.projectFile.emit(itm.fileName()) + elif itm.isMultiProjectFile(): + self.multiProjectFile.emit(itm.fileName()) + elif itm.isIdlFile(): + self.sourceFile[str].emit(itm.fileName()) + elif itm.isResourcesFile(): + self.sourceFile[str].emit(itm.fileName()) + elif itm.isPixmapFile(): + self.pixmapFile.emit(itm.fileName()) + elif itm.isSvgFile(): + self.svgFile.emit(itm.fileName()) else: - self.trpreview.emit([itm.fileName()]) - elif itm.isProjectFile(): - self.projectFile.emit(itm.fileName()) - elif itm.isMultiProjectFile(): - self.multiProjectFile.emit(itm.fileName()) - elif itm.isIdlFile(): - self.sourceFile[str].emit(itm.fileName()) - elif itm.isResourcesFile(): - self.sourceFile[str].emit(itm.fileName()) - elif itm.isPixmapFile(): - self.pixmapFile.emit(itm.fileName()) - elif itm.isSvgFile(): - self.svgFile.emit(itm.fileName()) - else: - type_ = mimetypes.guess_type(itm.fileName())[0] - if type_ is None or type_.split("/")[0] == "text": - self.sourceFile[str].emit(itm.fileName()) - else: - QDesktopServices.openUrl(QUrl(itm.fileName())) - elif isinstance(itm, BrowserClassItem): - self.sourceFile[str, int].emit(itm.fileName(), - itm.classObject().lineno) - elif isinstance(itm, BrowserMethodItem): - self.sourceFile[str, int].emit(itm.fileName(), - itm.functionObject().lineno) - elif isinstance(itm, BrowserClassAttributeItem): - self.sourceFile[str, int].emit(itm.fileName(), - itm.attributeObject().lineno) + type_ = mimetypes.guess_type(itm.fileName())[0] + if type_ is None or type_.split("/")[0] == "text": + self.sourceFile[str].emit(itm.fileName()) + else: + QDesktopServices.openUrl(QUrl(itm.fileName())) + elif isinstance(itm, BrowserClassItem): + self.sourceFile[str, int].emit(itm.fileName(), + itm.classObject().lineno) + elif isinstance(itm, BrowserMethodItem): + self.sourceFile[str, int].emit(itm.fileName(), + itm.functionObject().lineno) + elif isinstance(itm, BrowserClassAttributeItem): + self.sourceFile[str, int].emit(itm.fileName(), + itm.attributeObject().lineno) + self._activating = False def _editPixmap(self): """