WebBrowser/WebBrowserView.py

changeset 6122
e7d98249f393
parent 6081
7ea61bd1aa23
child 6126
6c4509eceea2
diff -r d3d64f3128b3 -r e7d98249f393 WebBrowser/WebBrowserView.py
--- a/WebBrowser/WebBrowserView.py	Wed Feb 07 20:14:09 2018 +0100
+++ b/WebBrowser/WebBrowserView.py	Thu Feb 08 18:57:11 2018 +0100
@@ -556,10 +556,10 @@
                 boldFont.setBold(True)
                 
                 for suggestion in contextMenuData.spellCheckerSuggestions():
-                    act = menu.addAction(
-                        suggestion,
-                        self.__replaceMisspelledWord)
+                    act = menu.addAction(suggestion)
                     act.setFont(boldFont)
+                    act.triggered.connect(
+                        lambda: self.__replaceMisspelledWord)(act)
                 
                 if not bool(menu.actions()):
                     menu.addAction(self.tr("No suggestions")).setEnabled(False)
@@ -614,41 +614,55 @@
         if not menu.isEmpty():
             menu.addSeparator()
         
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("openNewTab.png"),
-            self.tr("Open Link in New Tab\tCtrl+LMB"),
-            self.__openLinkInNewTab).setData(hitTest.linkUrl())
-        menu.addAction(
+            self.tr("Open Link in New Tab\tCtrl+LMB"))
+        act.setData(hitTest.linkUrl())
+        act.triggered.connect(
+            lambda: self.__openLinkInNewTab(act))
+        act = menu.addAction(
             UI.PixmapCache.getIcon("newWindow.png"),
-            self.tr("Open Link in New Window"),
-            self.__openLinkInNewWindow).setData(hitTest.linkUrl())
-        menu.addAction(
+            self.tr("Open Link in New Window"))
+        act.setData(hitTest.linkUrl())
+        act.triggered.connect(
+            lambda: self.__openLinkInNewWindow(act))
+        act = menu.addAction(
             UI.PixmapCache.getIcon("privateMode.png"),
-            self.tr("Open Link in New Private Window"),
-            self.__openLinkInNewPrivateWindow).setData(hitTest.linkUrl())
+            self.tr("Open Link in New Private Window"))
+        act.setData(hitTest.linkUrl())
+        act.triggered.connect(
+            lambda: self.__openLinkInNewPrivateWindow(act))
         menu.addSeparator()
         menu.addAction(
             UI.PixmapCache.getIcon("download.png"),
             self.tr("Save Lin&k"), self.__downloadLink)
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("bookmark22.png"),
-            self.tr("Bookmark this Link"), self.__bookmarkLink)\
-            .setData(hitTest.linkUrl())
+            self.tr("Bookmark this Link"))
+        act.setData(hitTest.linkUrl())
+        act.triggered.connect(
+            lambda: self.__bookmarkLink(act))
         menu.addSeparator()
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("editCopy.png"),
-            self.tr("Copy Link to Clipboard"), self.__copyLink)\
-            .setData(hitTest.linkUrl())
-        menu.addAction(
+            self.tr("Copy Link to Clipboard"))
+        act.setData(hitTest.linkUrl())
+        act.triggered.connect(
+            lambda: self.__copyLink(act))
+        act = menu.addAction(
             UI.PixmapCache.getIcon("mailSend.png"),
-            self.tr("Send Link"),
-            self.__sendLink).setData(hitTest.linkUrl())
+            self.tr("Send Link"))
+        act.setData(hitTest.linkUrl())
+        act.triggered.connect(
+            lambda: self.__sendLink(act))
         if Preferences.getWebBrowser("VirusTotalEnabled") and \
            Preferences.getWebBrowser("VirusTotalServiceKey") != "":
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("virustotal.png"),
-                self.tr("Scan Link with VirusTotal"),
-                self.__virusTotal).setData(hitTest.linkUrl())
+                self.tr("Scan Link with VirusTotal"))
+            act.setData(hitTest.linkUrl())
+            act.triggered.connect(
+                lambda: self.__virusTotal(act))
         
     def __createImageContextMenu(self, menu, hitTest):
         """
@@ -662,57 +676,69 @@
         if not menu.isEmpty():
             menu.addSeparator()
         
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("openNewTab.png"),
-            self.tr("Open Image in New Tab"),
-            self.__openLinkInNewTab).setData(hitTest.imageUrl())
+            self.tr("Open Image in New Tab"))
+        act.setData(hitTest.imageUrl())
+        act.triggered.connect(
+            lambda: self.__openLinkInNewTab(act))
         menu.addSeparator()
         menu.addAction(
             UI.PixmapCache.getIcon("download.png"),
             self.tr("Save Image"), self.__downloadImage)
         menu.addAction(
             self.tr("Copy Image to Clipboard"), self.__copyImage)
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("editCopy.png"),
-            self.tr("Copy Image Location to Clipboard"),
-            self.__copyLink).setData(hitTest.imageUrl())
-        menu.addAction(
+            self.tr("Copy Image Location to Clipboard"))
+        act.setData(hitTest.imageUrl())
+        act.triggered.connect(
+            lambda: self.__copyLink(act))
+        act = menu.addAction(
             UI.PixmapCache.getIcon("mailSend.png"),
-            self.tr("Send Image Link"),
-            self.__sendLink).setData(hitTest.imageUrl())
+            self.tr("Send Image Link"))
+        act.setData(hitTest.imageUrl())
+        act.triggered.connect(
+            lambda: self.__sendLink(act))
         
         if hitTest.imageUrl().scheme() in ["http", "https"]:
             menu.addSeparator()
             engine = WebBrowserWindow.imageSearchEngine()
             searchEngineName = engine.searchEngine()
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("{0}.png".format(
                     searchEngineName.lower())),
-                self.tr("Search image in {0}").format(searchEngineName),
-                self.__searchImage).setData(
-                    engine.getSearchQuery(hitTest.imageUrl()))
+                self.tr("Search image in {0}").format(searchEngineName))
+            act.setData(engine.getSearchQuery(hitTest.imageUrl()))
+            act.triggered.connect(
+                lambda: self.__searchImage(act))
             self.__imageSearchMenu = menu.addMenu(
                 self.tr("Search image with..."))
             for searchEngineName in engine.searchEngineNames():
-                self.__imageSearchMenu.addAction(
+                act = self.__imageSearchMenu.addAction(
                     UI.PixmapCache.getIcon("{0}.png".format(
                         searchEngineName.lower())),
-                    self.tr("Search image in {0}").format(searchEngineName),
-                    self.__searchImage).setData(
-                        engine.getSearchQuery(
-                            hitTest.imageUrl(), searchEngineName))
+                    self.tr("Search image in {0}").format(searchEngineName))
+                act.setData(engine.getSearchQuery(
+                    hitTest.imageUrl(), searchEngineName))
+                act.triggered.connect(
+                    lambda: self.__searchImage(act))
         
         menu.addSeparator()
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("adBlockPlus.png"),
-            self.tr("Block Image"), self.__blockImage)\
-            .setData(hitTest.imageUrl().toString())
+            self.tr("Block Image"))
+        act.setData(hitTest.imageUrl().toString())
+        act.triggered.connect(
+            lambda: self.__blockImage(act))
         if Preferences.getWebBrowser("VirusTotalEnabled") and \
            Preferences.getWebBrowser("VirusTotalServiceKey") != "":
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("virustotal.png"),
-                self.tr("Scan Image with VirusTotal"),
-                self.__virusTotal).setData(hitTest.imageUrl())
+                self.tr("Scan Image with VirusTotal"))
+            act.setData(hitTest.imageUrl())
+            act.triggered.connect(
+                lambda: self.__virusTotal(act))
     
     def __createMediaContextMenu(self, menu, hitTest):
         """
@@ -743,14 +769,18 @@
                 UI.PixmapCache.getIcon("audioVolumeMuted.png"),
                 self.tr("Mute"), self.__muteMedia)
         menu.addSeparator()
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("editCopy.png"),
-            self.tr("Copy Media Address to Clipboard"),
-            self.__copyLink).setData(hitTest.mediaUrl())
-        menu.addAction(
+            self.tr("Copy Media Address to Clipboard"))
+        act.setData(hitTest.mediaUrl())
+        act.triggered.connect(
+            lambda: self.__copyLink(act))
+        act = menu.addAction(
             UI.PixmapCache.getIcon("mailSend.png"),
-            self.tr("Send Media Address"), self.__sendLink)\
-            .setData(hitTest.mediaUrl())
+            self.tr("Send Media Address"))
+        act.setData(hitTest.mediaUrl())
+        act.triggered.connect(
+            lambda: self.__sendLink(act))
         menu.addAction(
             UI.PixmapCache.getIcon("download.png"),
             self.tr("Save Media"), self.__downloadMedia)
@@ -769,10 +799,12 @@
         
         menu.addAction(self.__mw.copyAct)
         menu.addSeparator()
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("mailSend.png"),
-            self.tr("Send Text"),
-            self.__sendLink).setData(self.selectedText())
+            self.tr("Send Text"))
+        act.setData(self.selectedText())
+        act.triggered.connect(
+            lambda: self.__sendLink(act))
         
         engineName = self.__mw.openSearchManager().currentEngineName()
         if engineName:
@@ -804,24 +836,29 @@
             googleTranslatorUrl = QUrl(
                 "http://translate.google.com/#auto/{0}/{1}".format(
                     langCode, self.selectedText()))
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("translate.png"),
-                self.tr("Google Translate"), self.__openLinkInNewTab)\
-                .setData(googleTranslatorUrl)
+                self.tr("Google Translate"))
+            act.setData(googleTranslatorUrl)
+            act.triggered.connect(
+                lambda: self.__openLinkInNewTab(act))
             wiktionaryUrl = QUrl(
                 "http://{0}.wiktionary.org/wiki/Special:Search?search={1}"
                 .format(langCode, self.selectedText()))
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("wikipedia.png"),
-                self.tr("Dictionary"), self.__openLinkInNewTab)\
-                .setData(wiktionaryUrl)
+                self.tr("Dictionary"))
+            act.setData(wiktionaryUrl)
+            act.triggered.connect(
+                lambda: self.__openLinkInNewTab(act))
             menu.addSeparator()
         
         guessedUrl = QUrl.fromUserInput(self.selectedText().strip())
         if self.__isUrlValid(guessedUrl):
-            menu.addAction(
-                self.tr("Go to web address"),
-                self.__openLinkInNewTab).setData(guessedUrl)
+            act = menu.addAction(self.tr("Go to web address"))
+            act.setData(guessedUrl)
+            act.triggered.connect(
+                lambda: self.__openLinkInNewTab(act))
     
     def __createPageContextMenu(self, menu):
         """
@@ -860,12 +897,18 @@
         menu.addAction(
             UI.PixmapCache.getIcon("bookmark22.png"),
             self.tr("Bookmark this Page"), self.addBookmark)
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("editCopy.png"),
-            self.tr("Copy Page Link"), self.__copyLink).setData(self.url())
-        menu.addAction(
+            self.tr("Copy Page Link"))
+        act.setData(self.url())
+        act.triggered.connect(
+            lambda: self.__copyLink(act))
+        act = menu.addAction(
             UI.PixmapCache.getIcon("mailSend.png"),
-            self.tr("Send Page Link"), self.__sendLink).setData(self.url())
+            self.tr("Send Page Link"))
+        act.setData(self.url())
+        act.triggered.connect(
+            lambda: self.__sendLink(act))
         menu.addSeparator()
         
         from .UserAgent.UserAgentMenu import UserAgentMenu
@@ -896,10 +939,12 @@
             w3url = QUrl.fromEncoded(
                 b"http://validator.w3.org/check?uri=" +
                 QUrl.toPercentEncoding(bytes(self.url().toEncoded()).decode()))
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("w3.png"),
-                self.tr("Validate Page"), self.__openLinkInNewTab)\
-                .setData(w3url)
+                self.tr("Validate Page"))
+            act.setData(w3url)
+            act.triggered.connect(
+                lambda: self.__openLinkInNewTab(act))
             
             from .WebBrowserLanguagesDialog import WebBrowserLanguagesDialog
             languages = Preferences.toList(
@@ -915,11 +960,13 @@
                     b"&u=" +
                     QUrl.toPercentEncoding(
                         bytes(self.url().toEncoded()).decode()))
-                menu.addAction(
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("translate.png"),
-                    self.tr("Google Translate"), self.__openLinkInNewTab)\
-                    .setData(googleTranslatorUrl)
-        
+                    self.tr("Google Translate"))
+                act.setData(googleTranslatorUrl)
+            act.triggered.connect(
+                lambda: self.__openLinkInNewTab(act))
+    
     def __checkForForm(self, act, pos):
         """
         Private method to check the given position for an open search form.
@@ -970,55 +1017,65 @@
             bool(url.scheme()) and \
             "." in url.host()
     
-    def __replaceMisspelledWord(self):
+    def __replaceMisspelledWord(self, act):
         """
         Private slot to replace a misspelled word under the context menu.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         suggestion = act.text()
         self.page().replaceMisspelledWord(suggestion)
     
-    def __openLinkInNewTab(self):
+    def __openLinkInNewTab(self, act):
         """
         Private method called by the context menu to open a link in a new
         tab.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         if url.isEmpty():
             return
         
         self.setSource(url, newTab=True)
     
-    def __openLinkInNewWindow(self):
+    def __openLinkInNewWindow(self, act):
         """
         Private slot called by the context menu to open a link in a new
         window.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         if url.isEmpty():
             return
         
         self.__mw.newWindow(url)
     
-    def __openLinkInNewPrivateWindow(self):
+    def __openLinkInNewPrivateWindow(self, act):
         """
         Private slot called by the context menu to open a link in a new
         private window.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         if url.isEmpty():
             return
         
         self.__mw.newPrivateWindow(url)
     
-    def __bookmarkLink(self):
+    def __bookmarkLink(self, act):
         """
         Private slot to bookmark a link via the context menu.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         if url.isEmpty():
             return
@@ -1028,11 +1085,13 @@
         dlg.setUrl(bytes(url.toEncoded()).decode())
         dlg.exec_()
     
-    def __sendLink(self):
+    def __sendLink(self, act):
         """
         Private slot to send a link via email.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         data = act.data()
         if isinstance(data, QUrl) and data.isEmpty():
             return
@@ -1041,11 +1100,13 @@
             data = data.toString()
         QDesktopServices.openUrl(QUrl("mailto:?body=" + data))
     
-    def __copyLink(self):
+    def __copyLink(self, act):
         """
         Private slot to copy a link to the clipboard.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         data = act.data()
         if isinstance(data, QUrl) and data.isEmpty():
             return
@@ -1072,20 +1133,24 @@
         """
         self.triggerPageAction(QWebEnginePage.CopyImageToClipboard)
     
-    def __blockImage(self):
+    def __blockImage(self, act):
         """
         Private slot to add a block rule for an image URL.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         dlg = WebBrowserWindow.adBlockManager().showDialog()
         dlg.addCustomRule(url)
     
-    def __searchImage(self):
+    def __searchImage(self, act):
         """
         Private slot to search for an image URL.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         self.setSource(url, newTab=True)
     
@@ -1107,11 +1172,13 @@
         """
         self.triggerPageAction(QWebEnginePage.ToggleMediaMute)
     
-    def __virusTotal(self):
+    def __virusTotal(self, act):
         """
         Private slot to scan the selected URL with VirusTotal.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         self.__mw.requestVirusTotalScan(url)
     

eric ide

mercurial