Implemented guards against double activation of list entries.

Wed, 03 Oct 2012 19:15:04 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 03 Oct 2012 19:15:04 +0200
changeset 2099
afde0e9110f7
parent 2097
c5809ca16182
child 2100
fb16f4650860

Implemented guards against double activation of list entries.

Helpviewer/HelpWindow.py file | annotate | diff | comparison | revisions
MultiProject/MultiProjectBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectBaseBrowser.py file | annotate | diff | comparison | revisions
SqlBrowser/SqlConnectionWidget.py file | annotate | diff | comparison | revisions
Tasks/TaskViewer.py file | annotate | diff | comparison | revisions
Templates/TemplateViewer.py file | annotate | diff | comparison | revisions
UI/Browser.py file | annotate | diff | comparison | revisions
--- 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):
         """

eric ide

mercurial