Thu, 08 Feb 2018 18:57:11 +0100
Completed coding in order to remove the use of QObject.sender().
--- a/Helpviewer/HelpBrowserWV.py Wed Feb 07 20:14:09 2018 +0100 +++ b/Helpviewer/HelpBrowserWV.py Thu Feb 08 18:57:11 2018 +0100 @@ -779,8 +779,9 @@ self.__featurePermissionRequested) self.page().downloadRequested.connect(self.__downloadRequested) - self.page().frameCreated.connect(self.__addExternalBinding) - self.__addExternalBinding(self.page().mainFrame()) + self.page().frameCreated.connect( + lambda frame: self.__addExternalBinding(frame, False)) + self.__addExternalBinding(self.page().mainFrame(), False) self.page().databaseQuotaExceeded.connect(self.__databaseQuotaExceeded) @@ -808,20 +809,22 @@ self.grabGesture(Qt.PinchGesture) - def __addExternalBinding(self, frame=None): + def __addExternalBinding(self, frame, frameCleared): """ Private slot to add javascript bindings for adding search providers. - @param frame reference to the web frame (QWebFrame) + @param frame reference to the web frame + @type QWebFrame + @param frameCleared flag indicate, that the frame was cleared + @type bool """ self.page().settings().setAttribute(QWebSettings.JavascriptEnabled, True) if self.__javaScriptBinding is None: self.__javaScriptBinding = JavaScriptExternalObject(self.mw, self) - if frame is None: + if frameCleared: # called from QWebFrame.javaScriptWindowObjectCleared - frame = self.sender() if isinstance(frame, HelpWebPage): frame = frame.mainFrame() if frame.url().scheme() == "eric" and frame.url().path() == "home": @@ -838,7 +841,7 @@ else: # called from QWebPage.frameCreated frame.javaScriptWindowObjectCleared.connect( - self.__addExternalBinding) + lambda: self.__addExternalBinding(frame, True)) frame.addToJavaScriptWindowObject("external", self.__javaScriptBinding) def linkedResources(self, relation=""): @@ -1210,65 +1213,83 @@ frameAtPos = self.page().frameAt(evt.pos()) hit = self.page().mainFrame().hitTestContent(evt.pos()) if not hit.linkUrl().isEmpty(): - menu.addAction( + act = menu.addAction( UI.PixmapCache.getIcon("openNewTab.png"), - self.tr("Open Link in New Tab\tCtrl+LMB"), - self.__openLinkInNewTab).setData(hit.linkUrl()) + self.tr("Open Link in New Tab\tCtrl+LMB")) + act.setData(hit.linkUrl()) + act.triggered.connect( + lambda: self.__openLinkInNewTab(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(hit.linkUrl()) + self.tr("Bookmark this Link")) + act.setData(hit.linkUrl()) + act.triggered.connect( + lambda: self.__bookmarkLink(act)) menu.addSeparator() menu.addAction( UI.PixmapCache.getIcon("editCopy.png"), self.tr("Copy Link to Clipboard"), self.__copyLink) - menu.addAction( + act = menu.addAction( UI.PixmapCache.getIcon("mailSend.png"), - self.tr("Send Link"), - self.__sendLink).setData(hit.linkUrl()) + self.tr("Send Link")) + act.setData(hit.linkUrl()) + act.triggered.connect( + lambda: self.__sendLink(act)) if Preferences.getHelp("VirusTotalEnabled") and \ Preferences.getHelp("VirusTotalServiceKey") != "": - menu.addAction( + act = menu.addAction( UI.PixmapCache.getIcon("virustotal.png"), - self.tr("Scan Link with VirusTotal"), - self.__virusTotal).setData(hit.linkUrl()) + self.tr("Scan Link with VirusTotal")) + act.setData(hit.linkUrl()) + act.triggered.connect( + lambda: self.__virusTotal(act)) if not hit.imageUrl().isEmpty(): 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(hit.imageUrl()) + self.tr("Open Image in New Tab")) + act.setData(hit.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.__copyLocation).setData(hit.imageUrl().toString()) - menu.addAction( + self.tr("Copy Image Location to Clipboard")) + act.setData(hit.imageUrl().toString()) + act.triggered.connect( + lambda: self.__copyLocation(act)) + act = menu.addAction( UI.PixmapCache.getIcon("mailSend.png"), - self.tr("Send Image Link"), - self.__sendLink).setData(hit.imageUrl()) + self.tr("Send Image Link")) + act.setData(hit.imageUrl()) + act.triggered.connect( + lambda: self.__sendLink(act)) menu.addSeparator() - menu.addAction( + act = menu.addAction( UI.PixmapCache.getIcon("adBlockPlus.png"), - self.tr("Block Image"), self.__blockImage)\ - .setData(hit.imageUrl().toString()) + self.tr("Block Image")) + act.setData(hit.imageUrl().toString()) + act.triggered.connect( + lambda: self.__blockImage(act)) if Preferences.getHelp("VirusTotalEnabled") and \ Preferences.getHelp("VirusTotalServiceKey") != "": - menu.addAction( + act = menu.addAction( UI.PixmapCache.getIcon("virustotal.png"), - self.tr("Scan Image with VirusTotal"), - self.__virusTotal).setData(hit.imageUrl()) + self.tr("Scan Image with VirusTotal")) + act.setData(hit.imageUrl()) + act.triggered.connect( + lambda: self.__virusTotal(act)) element = hit.element() if not element.isNull(): @@ -1299,18 +1320,24 @@ 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.__copyLocation).setData(videoUrl.toString()) - menu.addAction( + self.tr("Copy Media Address to Clipboard")) + act.setData(videoUrl.toString()) + act.triggered.connect( + lambda: self.__copyLocation(act)) + act = menu.addAction( UI.PixmapCache.getIcon("mailSend.png"), - self.tr("Send Media Address"), self.__sendLink)\ - .setData(videoUrl) - menu.addAction( + self.tr("Send Media Address")) + act.setData(videoUrl) + act.triggered.connect( + lambda: self.__sendLink(act)) + act = menu.addAction( UI.PixmapCache.getIcon("download.png"), - self.tr("Save Media"), self.__downloadMedia)\ - .setData(videoUrl) + self.tr("Save Media")) + act.setData(videoUrl) + act.triggered.connect( + lambda: self.__downloadMedia(act)) if element.tagName().lower() in ["input", "textarea"]: if menu.isEmpty(): @@ -1356,10 +1383,12 @@ fmenu.addAction( self.tr("Show &only this frame"), self.__loadClickedFrame) - fmenu.addAction( + act = fmenu.addAction( UI.PixmapCache.getIcon("openNewTab.png"), - self.tr("Show in new &tab"), - self.__openLinkInNewTab).setData(self.__clickedFrame.url()) + self.tr("Show in new &tab")) + act.setData(self.__clickedFrame.url()) + act.triggered.connect( + lambda: self.__openLinkInNewTab(act)) fmenu.addSeparator() fmenu.addAction( UI.PixmapCache.getIcon("print.png"), @@ -1391,9 +1420,12 @@ menu.addAction( UI.PixmapCache.getIcon("bookmark22.png"), self.tr("Bookmark this Page"), self.addBookmark) - menu.addAction( + 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() self.__userAgentMenu = UserAgentMenu(self.tr("User Agent"), url=self.url()) @@ -1409,10 +1441,12 @@ menu.addSeparator() if self.selectedText(): menu.addAction(self.mw.copyAct) - 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)) menu.addAction(self.mw.findAct) menu.addSeparator() if self.selectedText(): @@ -1441,32 +1475,40 @@ 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)) menu.addSeparator() element = hit.element() if not element.isNull() and \ element.tagName().lower() == "input" and \ element.attribute("type", "text") == "text": - menu.addAction(self.tr("Add to web search toolbar"), - self.__addSearchEngine).setData(element) + act = menu.addAction( + self.tr("Add to web search toolbar")) + act.setData(element) + act.triggered.connect( + lambda: self.__addSearchEngine(act)) menu.addSeparator() menu.addAction( @@ -1487,12 +1529,14 @@ bool(url.scheme()) and \ "." in url.host() - def __openLinkInNewTab(self): + def __openLinkInNewTab(self, act): """ Private method 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 @@ -1501,11 +1545,13 @@ self.setSource(url) self.ctrlPressed = False - 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 @@ -1515,11 +1561,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 @@ -1552,29 +1600,35 @@ """ self.pageAction(QWebPage.CopyImageToClipboard).trigger() - def __copyLocation(self): + def __copyLocation(self, act): """ Private slot to copy an image or media location to the clipboard. + + @param act reference to the action that triggered + @type QAction """ - act = self.sender() url = act.data() QApplication.clipboard().setText(url) - 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 """ import Helpviewer.HelpWindow - act = self.sender() url = act.data() dlg = Helpviewer.HelpWindow.HelpWindow.adBlockManager().showDialog() dlg.addCustomRule(url) - def __downloadMedia(self): + def __downloadMedia(self, act): """ Private slot to download a media and save it to disk. + + @param act reference to the action that triggered + @type QAction """ - act = self.sender() url = act.data() self.mw.downloadManager().download(url, True, mainWindow=self.mw) @@ -1600,11 +1654,13 @@ else: self.__clickedMediaElement.evaluateJavaScript("this.muted = true") - 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) @@ -1624,14 +1680,13 @@ engine = self.mw.openSearchManager().engine(engineName) self.search.emit(engine.searchUrl(searchText)) - def __addSearchEngine(self): + def __addSearchEngine(self, act): """ Private slot to add a new search engine. + + @param act reference to the action that triggered + @type QAction """ - act = self.sender() - if act is None: - return - element = act.data() elementName = element.attribute("name") formElement = QWebElement(element) @@ -1653,8 +1708,6 @@ searchUrl = QUrl(self.page().mainFrame().baseUrl().resolved( QUrl(formElement.attribute("action")))) -## if searchUrl.scheme() != "http": -## return if qVersionTuple() >= (5, 0, 0): from PyQt5.QtCore import QUrlQuery
--- a/Helpviewer/HelpTabWidget.py Wed Feb 07 20:14:09 2018 +0100 +++ b/Helpviewer/HelpTabWidget.py Thu Feb 08 18:57:11 2018 +0100 @@ -203,9 +203,11 @@ self.__tabBackContextMenu.addSeparator() self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction( UI.PixmapCache.getIcon("trash.png"), - self.tr('Restore Closed Tab'), self.restoreClosedTab) + self.tr('Restore Closed Tab')) self.__restoreClosedTabAct.setEnabled(False) self.__restoreClosedTabAct.setData(0) + self.__restoreClosedTabAct.triggered.connect( + lambda: self.restoreClosedTab(self.__restoreClosedTabAct)) def __showContextMenu(self, coord, index): """ @@ -328,7 +330,8 @@ self.__historyCompletionModel, self) self.__historyCompleter.activated[str].connect(self.__pathSelected) urlbar.setCompleter(self.__historyCompleter) - urlbar.returnPressed.connect(self.__lineEditReturnPressed) + urlbar.returnPressed.connect( + lambda: self.__lineEditReturnPressed(urlbar)) if position == -1: self.__stackedUrlBar.addWidget(urlbar) else: @@ -337,18 +340,23 @@ browser = HelpBrowser(self.__mainWindow, self) urlbar.setBrowser(browser) - browser.sourceChanged.connect(self.__sourceChanged) - browser.titleChanged.connect(self.__titleChanged) + browser.sourceChanged.connect( + lambda url: self.__sourceChanged(url, browser)) + browser.titleChanged.connect( + lambda title: self.__titleChanged(title, browser)) browser.highlighted.connect(self.showMessage) browser.backwardAvailable.connect( self.__mainWindow.setBackwardAvailable) browser.forwardAvailable.connect(self.__mainWindow.setForwardAvailable) - browser.loadStarted.connect(self.__loadStarted) - browser.loadFinished.connect(self.__loadFinished) - browser.iconChanged.connect(self.__iconChanged) + browser.loadStarted.connect( + lambda: self.__loadStarted(browser)) + browser.loadFinished.connect( + lambda ok: self.__loadFinished(ok, browser)) + browser.faviconChanged.connect( + lambda: self.__iconChanged(browser)) browser.search.connect(self.newBrowser) browser.page().windowCloseRequested.connect( - self.__windowCloseRequested) + lambda: self.__windowCloseRequested(browser.page())) browser.page().printRequested.connect(self.__printRequested) browser.zoomValueChanged.connect(self.browserZoomValueChanged) @@ -417,14 +425,13 @@ if index is not None: self.setCurrentIndex(index) - def __windowCloseRequested(self): + def __windowCloseRequested(self, page): """ Private slot to handle the windowCloseRequested signal of a browser. + + @param page reference to the web page + @type HelpWebPage """ - page = self.sender() - if page is None: - return - browser = page.view() if browser is None: return @@ -672,34 +679,34 @@ """Please upgrade.</p>""")) return - def __sourceChanged(self, url): + def __sourceChanged(self, url, browser): """ Private slot to handle a change of a browsers source. - @param url URL of the new site (QUrl) + @param url URL of the new site + @type QUrl + @param browser reference to the web browser + @type HelpBrowser """ - browser = self.sender() - - if browser is not None: - self.sourceChanged.emit(browser, url) + self.sourceChanged.emit(browser, url) - def __titleChanged(self, title): + def __titleChanged(self, title, browser): """ Private slot to handle a change of a browsers title. - @param title new title (string) + @param title new title + @type str + @param browser reference to the web browser + @type HelpBrowser """ - browser = self.sender() + index = self.indexOf(browser) + if title == "": + title = browser.url().toString() - if browser is not None and isinstance(browser, QWidget): - index = self.indexOf(browser) - if title == "": - title = browser.url().toString() - - self.setTabText(index, self.__elide(title.replace("&", "&&"))) - self.setTabToolTip(index, title) - - self.titleChanged.emit(browser, title) + self.setTabText(index, self.__elide(title.replace("&", "&&"))) + self.setTabToolTip(index, title) + + self.titleChanged.emit(browser, title) def __elide(self, txt, mode=Qt.ElideRight, length=40): """ @@ -746,65 +753,63 @@ self.tabCloseRequested.connect(self.closeBrowserAt) self.__closeButton.hide() - def __loadStarted(self): + def __loadStarted(self, browser): """ Private method to handle the loadStarted signal. - """ - browser = self.sender() - if browser is not None: - index = self.indexOf(browser) - anim = self.animationLabel( - index, os.path.join(getConfig("ericPixDir"), "loading.gif"), - 100) - if not anim: - loading = QIcon(os.path.join(getConfig("ericPixDir"), - "loading.gif")) - self.setTabIcon(index, loading) - else: - self.setTabIcon(index, QIcon()) - self.setTabText(index, self.tr("Loading...")) - self.setTabToolTip(index, self.tr("Loading...")) - self.showMessage.emit(self.tr("Loading...")) - - self.__mainWindow.setLoadingActions(True) + @param browser reference to the web browser + @type HelpBrowser + """ + index = self.indexOf(browser) + anim = self.animationLabel( + index, os.path.join(getConfig("ericPixDir"), "loading.gif"), + 100) + if not anim: + loading = QIcon(os.path.join(getConfig("ericPixDir"), + "loading.gif")) + self.setTabIcon(index, loading) + else: + self.setTabIcon(index, QIcon()) + self.setTabText(index, self.tr("Loading...")) + self.setTabToolTip(index, self.tr("Loading...")) + self.showMessage.emit(self.tr("Loading...")) + + self.__mainWindow.setLoadingActions(True) - def __loadFinished(self, ok): + def __loadFinished(self, ok, browser): """ Private method to handle the loadFinished signal. - @param ok flag indicating the result (boolean) + @param ok flag indicating the result + @type bool + @param browser reference to the web browser + @type HelpBrowser """ - browser = self.sender() - if not isinstance(browser, HelpBrowser): - return + import Helpviewer.HelpWindow + index = self.indexOf(browser) + self.resetAnimation(index) + self.setTabIcon( + index, Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) + if ok: + self.showMessage.emit(self.tr("Finished loading")) + else: + self.showMessage.emit(self.tr("Failed to load")) - if browser is not None: - import Helpviewer.HelpWindow - index = self.indexOf(browser) - self.resetAnimation(index) - self.setTabIcon( - index, Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) - if ok: - self.showMessage.emit(self.tr("Finished loading")) - else: - self.showMessage.emit(self.tr("Failed to load")) - - self.__mainWindow.setLoadingActions(False) + self.__mainWindow.setLoadingActions(False) - def __iconChanged(self): + def __iconChanged(self, browser): """ Private slot to handle the icon change. + + @param browser reference to the web browser + @type HelpBrowser """ - browser = self.sender() - - if browser is not None and isinstance(browser, QWidget): - import Helpviewer.HelpWindow - self.setTabIcon( - self.indexOf(browser), - Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) - Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\ - .iconChanged(browser.url()) + import Helpviewer.HelpWindow + self.setTabIcon( + self.indexOf(browser), + Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) + Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\ + .iconChanged(browser.url()) def getSourceFileList(self): """ @@ -873,11 +878,13 @@ """ return self.__stackedUrlBar.currentWidget() - def __lineEditReturnPressed(self): + def __lineEditReturnPressed(self, edit): """ Private slot to handle the entering of an URL. + + @param edit reference to the line edit + @type UrlBar """ - edit = self.sender() url = self.__guessUrlFromPath(edit.text()) request = QNetworkRequest(url) request.setRawHeader(b"X-Eric6-UserLoadAction", b"1") @@ -947,14 +954,16 @@ elif browser.url() != "": browser.setFocus() - def restoreClosedTab(self): + def restoreClosedTab(self, act): """ Public slot to restore the most recently closed tab. + + @param act reference to the action that triggered + @type QAction """ if not self.canRestoreClosedTab(): return - act = self.sender() tab = self.__closedTabsManager.getClosedTabAt(act.data()) self.newBrowser(tab.url.toString(), position=tab.position) @@ -995,9 +1004,10 @@ index = 0 for tab in self.__closedTabsManager.allClosedTabs(): title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) - self.__closedTabsMenu.addAction( - self.__mainWindow.icon(tab.url), title, - self.restoreClosedTab).setData(index) + act = self.__closedTabsMenu.addAction( + self.__mainWindow.icon(tab.url), title) + act.setData(index) + act.triggered.connect(lambda: self.restoreClosedTab(act)) index += 1 self.__closedTabsMenu.addSeparator() self.__closedTabsMenu.addAction(
--- a/Helpviewer/History/HistoryMenu.py Wed Feb 07 20:14:09 2018 +0100 +++ b/Helpviewer/History/HistoryMenu.py Thu Feb 08 18:57:11 2018 +0100 @@ -404,9 +404,11 @@ index = 0 for tab in self.__tabWidget.closedTabsManager().allClosedTabs(): title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) - self.__closedTabsMenu.addAction( - Helpviewer.HelpWindow.HelpWindow.icon(tab.url), title, - self.__tabWidget.restoreClosedTab).setData(index) + act = self.__closedTabsMenu.addAction( + Helpviewer.HelpWindow.HelpWindow.icon(tab.url), title) + act.setData(index) + act.triggered.connect( + lambda: self.__tabWidget.restoreClosedTab(act)) index += 1 self.__closedTabsMenu.addSeparator() self.__closedTabsMenu.addAction(
--- a/WebBrowser/History/HistoryMenu.py Wed Feb 07 20:14:09 2018 +0100 +++ b/WebBrowser/History/HistoryMenu.py Thu Feb 08 18:57:11 2018 +0100 @@ -424,10 +424,12 @@ index = 0 for tab in self.__tabWidget.closedTabsManager().allClosedTabs(): title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) - self.__closedTabsMenu.addAction( + act = self.__closedTabsMenu.addAction( WebBrowser.WebBrowserWindow.WebBrowserWindow.icon(tab.url), - title, - self.__tabWidget.restoreClosedTab).setData(index) + title) + act.setData(index) + act.triggered.connect( + lambda: self.__tabWidget.restoreClosedTab(act)) index += 1 self.__closedTabsMenu.addSeparator() self.__closedTabsMenu.addAction(
--- a/WebBrowser/WebBrowserTabWidget.py Wed Feb 07 20:14:09 2018 +0100 +++ b/WebBrowser/WebBrowserTabWidget.py Thu Feb 08 18:57:11 2018 +0100 @@ -226,9 +226,11 @@ self.__tabBackContextMenu.addSeparator() self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction( UI.PixmapCache.getIcon("trash.png"), - self.tr('Restore Closed Tab'), self.restoreClosedTab) + self.tr('Restore Closed Tab')) self.__restoreClosedTabAct.setEnabled(False) self.__restoreClosedTabAct.setData(0) + self.__restoreClosedTabAct.triggered.connect( + lambda: self.restoreClosedTab(self.__restoreClosedTabAct)) def __showContextMenu(self, coord, index): """ @@ -332,17 +334,15 @@ page.setAudioMuted(not muted) @pyqtSlot(bool) - def __recentlyAudibleChanged(self, recentlyAudible): + def __recentlyAudibleChanged(self, recentlyAudible, page): """ Private slot to react on the audible state of a page. @param recentlyAudible flag indicating the new audible state @type bool + @param page reference to the web page + @type WebBrowserPage """ - page = self.sender() - if page is None: - return - browser = page.view() if browser is None: return @@ -412,7 +412,8 @@ self.__historyCompletionModel, self) self.__historyCompleter.activated[str].connect(self.__pathSelected) urlbar.setCompleter(self.__historyCompleter) - urlbar.returnPressed.connect(self.__lineEditReturnPressed) + urlbar.returnPressed.connect( + lambda: self.__lineEditReturnPressed(urlbar)) if position == -1: self.__stackedUrlBar.addWidget(urlbar) else: @@ -421,22 +422,28 @@ browser = WebBrowserView(self.__mainWindow, self) urlbar.setBrowser(browser) - browser.sourceChanged.connect(self.__sourceChanged) - browser.titleChanged.connect(self.__titleChanged) + browser.sourceChanged.connect( + lambda url: self.__sourceChanged(url, browser)) + browser.titleChanged.connect( + lambda title: self.__titleChanged(title, browser)) browser.highlighted.connect(self.showMessage) browser.backwardAvailable.connect( self.__mainWindow.setBackwardAvailable) browser.forwardAvailable.connect(self.__mainWindow.setForwardAvailable) - browser.loadStarted.connect(self.__loadStarted) - browser.loadFinished.connect(self.__loadFinished) - browser.faviconChanged.connect(self.__iconChanged) + browser.loadStarted.connect( + lambda: self.__loadStarted(browser)) + browser.loadFinished.connect( + lambda ok: self.__loadFinished(ok, browser)) + browser.faviconChanged.connect( + lambda: self.__iconChanged(browser)) browser.search.connect(self.newBrowser) browser.page().windowCloseRequested.connect( - self.__windowCloseRequested) + lambda: self.__windowCloseRequested(browser.page())) browser.zoomValueChanged.connect(self.browserZoomValueChanged) if hasattr(WebBrowserPage, "recentlyAudibleChanged"): browser.page().recentlyAudibleChanged.connect( - self.__recentlyAudibleChanged) + lambda audible: self.__recentlyAudibleChanged( + audible, browser.page())) if position == -1: index = self.addTab(browser, self.tr("...")) @@ -514,14 +521,13 @@ if index is not None: self.setCurrentIndex(index) - def __windowCloseRequested(self): + def __windowCloseRequested(self, page): """ Private slot to handle the windowCloseRequested signal of a browser. + + @param page reference to the web page + @type WebBrowserPage """ - page = self.sender() - if page is None: - return - browser = page.view() if browser is None: return @@ -844,37 +850,37 @@ browser.page().execPrintPage(printer, 10 * 1000) QApplication.restoreOverrideCursor() - def __sourceChanged(self, url): + def __sourceChanged(self, url, browser): """ Private slot to handle a change of a browsers source. - @param url URL of the new site (QUrl) + @param url URL of the new site + @type QUrl + @param browser reference to the web browser + @type WebBrowserView """ - browser = self.sender() + self.sourceChanged.emit(browser, url) - if browser is not None: - self.sourceChanged.emit(browser, url) - - if browser == self.currentBrowser(): - self.currentUrlChanged.emit(url) + if browser == self.currentBrowser(): + self.currentUrlChanged.emit(url) - def __titleChanged(self, title): + def __titleChanged(self, title, browser): """ Private slot to handle a change of a browsers title. - @param title new title (string) + @param title new title + @type str + @param browser reference to the web browser + @type WebBrowserView """ - browser = self.sender() + index = self.indexOf(browser) + if title == "": + title = browser.url().toString() - if browser is not None and isinstance(browser, QWidget): - index = self.indexOf(browser) - if title == "": - title = browser.url().toString() - - self.setTabText(index, self.__elide(title.replace("&", "&&"))) - self.setTabToolTip(index, title) - - self.titleChanged.emit(browser, title) + self.setTabText(index, self.__elide(title.replace("&", "&&"))) + self.setTabToolTip(index, title) + + self.titleChanged.emit(browser, title) def __elide(self, txt, mode=Qt.ElideRight, length=40): """ @@ -919,64 +925,62 @@ self.tabCloseRequested.connect(self.closeBrowserAt) self.__closeButton.hide() - def __loadStarted(self): + def __loadStarted(self, browser): """ Private method to handle the loadStarted signal. - """ - browser = self.sender() - if browser is not None: - index = self.indexOf(browser) - anim = self.animationLabel( - index, os.path.join(getConfig("ericPixDir"), "loading.gif"), - 100) - if not anim: - loading = QIcon(os.path.join(getConfig("ericPixDir"), - "loading.gif")) - self.setTabIcon(index, loading) - else: - self.setTabIcon(index, QIcon()) - self.setTabText(index, self.tr("Loading...")) - self.setTabToolTip(index, self.tr("Loading...")) - self.showMessage.emit(self.tr("Loading...")) - - self.__mainWindow.setLoadingActions(True) + @param browser reference to the web browser + @type WebBrowserView + """ + index = self.indexOf(browser) + anim = self.animationLabel( + index, os.path.join(getConfig("ericPixDir"), "loading.gif"), + 100) + if not anim: + loading = QIcon(os.path.join(getConfig("ericPixDir"), + "loading.gif")) + self.setTabIcon(index, loading) + else: + self.setTabIcon(index, QIcon()) + self.setTabText(index, self.tr("Loading...")) + self.setTabToolTip(index, self.tr("Loading...")) + self.showMessage.emit(self.tr("Loading...")) + + self.__mainWindow.setLoadingActions(True) - def __loadFinished(self, ok): + def __loadFinished(self, ok, browser): """ Private method to handle the loadFinished signal. - @param ok flag indicating the result (boolean) + @param ok flag indicating the result + @type bool + @param browser reference to the web browser + @type WebBrowserView """ - browser = self.sender() - if not isinstance(browser, WebBrowserView): - return + import WebBrowser.WebBrowserWindow + index = self.indexOf(browser) + self.resetAnimation(index) + self.setTabIcon( + index, WebBrowser.WebBrowserWindow.WebBrowserWindow.icon( + browser.url())) + if ok: + self.showMessage.emit(self.tr("Finished loading")) + else: + self.showMessage.emit(self.tr("Failed to load")) - if browser is not None: - import WebBrowser.WebBrowserWindow - index = self.indexOf(browser) - self.resetAnimation(index) - self.setTabIcon( - index, WebBrowser.WebBrowserWindow.WebBrowserWindow.icon( - browser.url())) - if ok: - self.showMessage.emit(self.tr("Finished loading")) - else: - self.showMessage.emit(self.tr("Failed to load")) - - self.__mainWindow.setLoadingActions(False) + self.__mainWindow.setLoadingActions(False) - def __iconChanged(self): + def __iconChanged(self, browser): """ Private slot to handle a change of the web site icon. + + @param browser reference to the web browser + @type WebBrowserView """ - browser = self.sender() - - if browser is not None and isinstance(browser, QWidget): - self.setTabIcon( - self.indexOf(browser), - browser.icon()) - self.__mainWindow.bookmarksManager().faviconChanged(browser.url()) + self.setTabIcon( + self.indexOf(browser), + browser.icon()) + self.__mainWindow.bookmarksManager().faviconChanged(browser.url()) def getSourceFileList(self): """ @@ -1046,11 +1050,13 @@ """ return self.__stackedUrlBar.currentWidget() - def __lineEditReturnPressed(self): + def __lineEditReturnPressed(self, edit): """ Private slot to handle the entering of an URL. + + @param edit reference to the line edit + @type UrlBar """ - edit = self.sender() url = self.__guessUrlFromPath(edit.text()) if e5App().keyboardModifiers() == Qt.AltModifier: self.newBrowser(url) @@ -1116,14 +1122,16 @@ elif browser.url() != "": browser.setFocus() - def restoreClosedTab(self): + def restoreClosedTab(self, act): """ Public slot to restore the most recently closed tab. + + @param act reference to the action that triggered + @type QAction """ if not self.canRestoreClosedTab(): return - act = self.sender() tab = self.__closedTabsManager.getClosedTabAt(act.data()) self.newBrowser(tab.url.toString(), position=tab.position) @@ -1164,9 +1172,10 @@ index = 0 for tab in self.__closedTabsManager.allClosedTabs(): title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) - self.__closedTabsMenu.addAction( - self.__mainWindow.icon(tab.url), title, - self.restoreClosedTab).setData(index) + act = self.__closedTabsMenu.addAction( + self.__mainWindow.icon(tab.url), title) + act.setData(index) + act.triggered.connect(lambda: self.restoreClosedTab(act)) index += 1 self.__closedTabsMenu.addSeparator() self.__closedTabsMenu.addAction(
--- 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)