--- 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(