diff -r 3dfcbe478fd3 -r c0882a599e18 WebBrowser/WebBrowserWindow.py --- a/WebBrowser/WebBrowserWindow.py Sun Dec 09 15:24:39 2018 +0100 +++ b/WebBrowser/WebBrowserWindow.py Sun Dec 09 16:39:35 2018 +0100 @@ -59,6 +59,8 @@ from .ZoomManager import ZoomManager +from .WebBrowserSingleApplication import WebBrowserSingleApplicationServer + from eric6config import getConfig @@ -117,7 +119,7 @@ def __init__(self, home, path, parent, name, fromEric=False, initShortcutsOnly=False, searchWord=None, private=False, qthelp=False, settingsDir="", - restoreSession=False): + restoreSession=False, single=False): """ Constructor @@ -145,6 +147,8 @@ @type str @keyparam restoreSession flag indicating a restore session action @type bool + @param single flag indicating to start in single application mode + @type bool """ self.__hideNavigationTimer = None @@ -357,7 +361,8 @@ syncMgr.syncError.connect(self.statusBar().showMessage) restoreSessionData = {} - if WebBrowserWindow._performingStartup and not home: + if WebBrowserWindow._performingStartup and not home and \ + not WebBrowserWindow.isPrivate(): startupBehavior = Preferences.getWebBrowser("StartupBehavior") if not private and startupBehavior in [3, 4]: if startupBehavior == 3: @@ -383,7 +388,7 @@ home = "eric:speeddial" if not restoreSession: - self.__tabWidget.newBrowser(home) + self.__tabWidget.newBrowser(QUrl.fromUserInput(home)) self.__tabWidget.currentBrowser().setFocus() WebBrowserWindow._performingStartup = False @@ -465,6 +470,13 @@ self.__toolbarStates = self.saveState() + if single: + self.SAServer = WebBrowserSingleApplicationServer() + self.SAServer.loadUrl.connect(self.__saLoadUrl) + self.SAServer.search.connect(self.__saSearchWord) + else: + self.SAServer = None + self.__hideNavigationTimer = QTimer(self) self.__hideNavigationTimer.setInterval(1000) self.__hideNavigationTimer.setSingleShot(True) @@ -472,11 +484,12 @@ self.__forcedClose = False - if restoreSessionData: + if restoreSessionData and not WebBrowserWindow.isPrivate(): self.sessionManager().restoreSessionFromData( self, restoreSessionData) - self.sessionManager().activateTimer() + if not WebBrowserWindow.isPrivate(): + self.sessionManager().activateTimer() QTimer.singleShot(0, syncMgr.loadSettings) @@ -2839,7 +2852,8 @@ if not self.__fromEric: if not WebBrowserWindow._performingShutdown and \ - len(WebBrowserWindow.BrowserWindows) == 1: + len(WebBrowserWindow.BrowserWindows) == 1 and \ + not WebBrowserWindow.isPrivate(): # shut down the session manager in case the last window is # about to be closed self.sessionManager().shutdown() @@ -2953,7 +2967,8 @@ WebBrowserWindow._performingShutdown = True - self.sessionManager().shutdown() + if not WebBrowserWindow.isPrivate(): + self.sessionManager().shutdown() if WebBrowserWindow._downloadManager is not None: self.downloadManager().shutdown() @@ -3305,7 +3320,8 @@ self.__javaScriptIcon.preferencesChanged() - self.sessionManager().preferencesChanged() + if not WebBrowserWindow.isPrivate(): + self.sessionManager().preferencesChanged() def masterPasswordChanged(self, oldPassword, newPassword, local=False): """ @@ -4992,3 +5008,31 @@ Private slot to show the safe browsing management dialog. """ self.safeBrowsingManager().showSafeBrowsingDialog() + + ############################################################### + ## Methods below implement single application related functions + ############################################################### + + @pyqtSlot(str) + def __saLoadUrl(self, urlStr): + """ + Private slot to load an URL received via the single application + protocol. + + @param urlStr URL to be loaded + @type str + """ + url = QUrl.fromUserInput(urlStr) + self.__linkActivated(url) + + @pyqtSlot(str) + def __saSearchWord(self, word): + """ + Private slot to search for the given word. + + @param word word to be searched for + @type str + """ + if WebBrowserWindow._useQtHelp: + self.__searchWord = word + self.__searchForWord()