Helpviewer/HelpWindow.py

changeset 6630
bddd12f27a4c
parent 6625
a67fee7bc09c
child 6645
ad476851d7e0
diff -r 643ec3a53d17 -r bddd12f27a4c Helpviewer/HelpWindow.py
--- a/Helpviewer/HelpWindow.py	Fri Dec 14 19:52:38 2018 +0100
+++ b/Helpviewer/HelpWindow.py	Sat Dec 15 16:21:38 2018 +0100
@@ -16,7 +16,7 @@
 import os
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, \
-    QUrl, QThread, QTextCodec
+    QUrl, QThread, QTextCodec, QFileInfo
 from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics, \
     QIcon
 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \
@@ -56,6 +56,8 @@
 import UI.Config
 from UI.Info import Version
 
+from .HelpSingleApplication import HelpSingleApplicationServer
+
 
 class HelpWindow(E5MainWindow):
     """
@@ -72,7 +74,6 @@
     
     helpwindows = []
 
-    _fromEric = False
     _useQtHelp = QTHELP_AVAILABLE
     
     _networkAccessManager = None
@@ -94,218 +95,231 @@
     _flashCookieManager = None
     _zoomManager = None
     
-    def __init__(self, home, path, parent, name, fromEric=False,
-                 initShortcutsOnly=False, searchWord=None):
+    def __init__(self, home, path, parent, name,
+                 searchWord=None, qthelp=False, single=False, saname=""):
         """
         Constructor
         
-        @param home the URL to be shown (string)
-        @param path the path of the working dir (usually '.') (string)
-        @param parent parent widget of this window (QWidget)
-        @param name name of this window (string)
-        @param fromEric flag indicating whether it was called from within
-            eric6 (boolean)
-        @keyparam initShortcutsOnly flag indicating to just initialize the
-            keyboard shortcuts (boolean)
-        @keyparam searchWord word to search for (string)
+        @param home the URL to be shown
+        @type str
+        @param path the path of the working dir (usually '.')
+        @type str
+        @param parent parent widget of this window
+        @type QWidget
+        @param name name of this window
+        @type str
+        @param searchWord word to search for
+        @type str
+        @param qthelp flag indicating to enable the QtHelp support
+        @type bool
+        @param single flag indicating to start in single application mode
+        @type bool
+        @param saname name to be used for the single application server
+        @type str
         """
         super(HelpWindow, self).__init__(parent)
         self.setObjectName(name)
         self.setWindowTitle(self.tr("eric6 Web Browser"))
         
-        self.fromEric = fromEric
-        self.__class__._fromEric = fromEric
-        self.initShortcutsOnly = initShortcutsOnly
         self.setWindowIcon(UI.PixmapCache.getIcon("ericWeb.png"))
 
         self.mHistory = []
         self.__lastConfigurationPageName = ""
         self.__lastActiveWindow = None
         
+        self.__shortcutsDialog = None
+        
         self.__eventMouseButtons = Qt.NoButton
         self.__eventKeyboardModifiers = Qt.NoModifier
         
-        if self.initShortcutsOnly:
-            self.__initActions()
-        else:
-            from .SearchWidget import SearchWidget
-            from .HelpTocWidget import HelpTocWidget
-            from .HelpIndexWidget import HelpIndexWidget
-            from .HelpSearchWidget import HelpSearchWidget
-            from .HelpBrowserWV import HelpBrowser
-            from .HelpTabWidget import HelpTabWidget
-            from .AdBlock.AdBlockIcon import AdBlockIcon
-            from .VirusTotal.VirusTotalApi import VirusTotalAPI
-            
-            HelpWindow.setUseQtHelp(self.fromEric)
-            
-            if not self.fromEric:
-                self.setStyle(Preferences.getUI("Style"),
-                              Preferences.getUI("StyleSheet"))
-                
-                # initialize some SSL stuff
-                from E5Network.E5SslUtilities import initSSL
-                initSSL()
-            
-            if HelpWindow._useQtHelp:
-                self.__helpEngine = QHelpEngine(
-                    HelpWindow.getQtHelpCollectionFileName(),
-                    self)
-                self.__removeOldDocumentation()
-                self.__helpEngine.warning.connect(self.__warning)
-            else:
-                self.__helpEngine = None
-            self.__helpInstaller = None
-            
-            self.__zoomWidget = E5ZoomWidget(
-                UI.PixmapCache.getPixmap("zoomOut.png"),
-                UI.PixmapCache.getPixmap("zoomIn.png"),
-                UI.PixmapCache.getPixmap("zoomReset.png"), self)
-            self.statusBar().addPermanentWidget(self.__zoomWidget)
-            self.__zoomWidget.setMapping(
-                HelpBrowser.ZoomLevels, HelpBrowser.ZoomLevelDefault)
-            self.__zoomWidget.valueChanged.connect(self.__zoomValueChanged)
+        HelpWindow.setUseQtHelp(qthelp or bool(searchWord))
             
-            self.tabWidget = HelpTabWidget(self)
-            self.tabWidget.currentChanged[int].connect(self.__currentChanged)
-            self.tabWidget.titleChanged.connect(self.__titleChanged)
-            self.tabWidget.showMessage.connect(self.statusBar().showMessage)
-            self.tabWidget.browserZoomValueChanged.connect(
-                self.__zoomWidget.setValue)
-            
-            self.findDlg = SearchWidget(self, self)
-            centralWidget = QWidget()
-            layout = QVBoxLayout()
-            layout.setContentsMargins(1, 1, 1, 1)
-            layout.addWidget(self.tabWidget)
-            layout.addWidget(self.findDlg)
-            self.tabWidget.setSizePolicy(
-                QSizePolicy.Preferred, QSizePolicy.Expanding)
-            centralWidget.setLayout(layout)
-            self.setCentralWidget(centralWidget)
-            self.findDlg.hide()
+        from .SearchWidget import SearchWidget
+        from .HelpTocWidget import HelpTocWidget
+        from .HelpIndexWidget import HelpIndexWidget
+        from .HelpSearchWidget import HelpSearchWidget
+        from .HelpBrowserWV import HelpBrowser
+        from .HelpTabWidget import HelpTabWidget
+        from .AdBlock.AdBlockIcon import AdBlockIcon
+        from .VirusTotal.VirusTotalApi import VirusTotalAPI
+    
+        self.setStyle(Preferences.getUI("Style"),
+                      Preferences.getUI("StyleSheet"))
+        
+        # initialize some SSL stuff
+        from E5Network.E5SslUtilities import initSSL
+        initSSL()
+        
+        if HelpWindow._useQtHelp:
+            self.__helpEngine = QHelpEngine(
+                HelpWindow.getQtHelpCollectionFileName(),
+                self)
+            self.__removeOldDocumentation()
+            self.__helpEngine.warning.connect(self.__warning)
+        else:
+            self.__helpEngine = None
+        self.__helpInstaller = None
+        
+        self.__zoomWidget = E5ZoomWidget(
+            UI.PixmapCache.getPixmap("zoomOut.png"),
+            UI.PixmapCache.getPixmap("zoomIn.png"),
+            UI.PixmapCache.getPixmap("zoomReset.png"), self)
+        self.statusBar().addPermanentWidget(self.__zoomWidget)
+        self.__zoomWidget.setMapping(
+            HelpBrowser.ZoomLevels, HelpBrowser.ZoomLevelDefault)
+        self.__zoomWidget.valueChanged.connect(self.__zoomValueChanged)
+        
+        self.tabWidget = HelpTabWidget(self)
+        self.tabWidget.currentChanged[int].connect(self.__currentChanged)
+        self.tabWidget.titleChanged.connect(self.__titleChanged)
+        self.tabWidget.showMessage.connect(self.statusBar().showMessage)
+        self.tabWidget.browserZoomValueChanged.connect(
+            self.__zoomWidget.setValue)
+        
+        self.findDlg = SearchWidget(self, self)
+        centralWidget = QWidget()
+        layout = QVBoxLayout()
+        layout.setContentsMargins(1, 1, 1, 1)
+        layout.addWidget(self.tabWidget)
+        layout.addWidget(self.findDlg)
+        self.tabWidget.setSizePolicy(
+            QSizePolicy.Preferred, QSizePolicy.Expanding)
+        centralWidget.setLayout(layout)
+        self.setCentralWidget(centralWidget)
+        self.findDlg.hide()
+        
+        if HelpWindow._useQtHelp:
+            # setup the TOC widget
+            self.__tocWindow = HelpTocWidget(self.__helpEngine, self)
+            self.__tocDock = QDockWidget(self.tr("Contents"), self)
+            self.__tocDock.setObjectName("TocWindow")
+            self.__tocDock.setWidget(self.__tocWindow)
+            self.addDockWidget(Qt.LeftDockWidgetArea, self.__tocDock)
             
-            if HelpWindow._useQtHelp:
-                # setup the TOC widget
-                self.__tocWindow = HelpTocWidget(self.__helpEngine, self)
-                self.__tocDock = QDockWidget(self.tr("Contents"), self)
-                self.__tocDock.setObjectName("TocWindow")
-                self.__tocDock.setWidget(self.__tocWindow)
-                self.addDockWidget(Qt.LeftDockWidgetArea, self.__tocDock)
-                
-                # setup the index widget
-                self.__indexWindow = HelpIndexWidget(self.__helpEngine, self)
-                self.__indexDock = QDockWidget(self.tr("Index"), self)
-                self.__indexDock.setObjectName("IndexWindow")
-                self.__indexDock.setWidget(self.__indexWindow)
-                self.addDockWidget(Qt.LeftDockWidgetArea, self.__indexDock)
-                
-                # setup the search widget
-                self.__searchWord = searchWord
-                self.__indexing = False
-                self.__indexingProgress = None
-                self.__searchEngine = self.__helpEngine.searchEngine()
-                self.__searchEngine.indexingStarted.connect(
-                    self.__indexingStarted)
-                self.__searchEngine.indexingFinished.connect(
-                    self.__indexingFinished)
-                self.__searchWindow = HelpSearchWidget(
-                    self.__searchEngine, self)
-                self.__searchDock = QDockWidget(self.tr("Search"), self)
-                self.__searchDock.setObjectName("SearchWindow")
-                self.__searchDock.setWidget(self.__searchWindow)
-                self.addDockWidget(Qt.LeftDockWidgetArea, self.__searchDock)
+            # setup the index widget
+            self.__indexWindow = HelpIndexWidget(self.__helpEngine, self)
+            self.__indexDock = QDockWidget(self.tr("Index"), self)
+            self.__indexDock.setObjectName("IndexWindow")
+            self.__indexDock.setWidget(self.__indexWindow)
+            self.addDockWidget(Qt.LeftDockWidgetArea, self.__indexDock)
             
-            if Preferences.getHelp("SaveGeometry"):
-                g = Preferences.getGeometry("HelpViewerGeometry")
-            else:
-                g = QByteArray()
-            if g.isEmpty():
-                s = QSize(800, 800)
-                self.resize(s)
-            else:
-                self.restoreGeometry(g)
-            
-            self.__setIconDatabasePath()
-            self.__initWebSettings()
-            
-            self.__initActions()
-            self.__initMenus()
-            self.__initToolbars()
-            
-            self.historyManager()
-            
-            syncMgr = self.syncManager()
-            syncMgr.syncMessage.connect(self.statusBar().showMessage)
-            syncMgr.syncError.connect(self.statusBar().showMessage)
-            
-            self.tabWidget.newBrowser(home)
-            self.tabWidget.currentBrowser().setFocus()
-            
-            self.__class__.helpwindows.append(self)
-            
-            self.__adBlockIcon = AdBlockIcon(self)
-            self.statusBar().addPermanentWidget(self.__adBlockIcon)
-            self.__adBlockIcon.setEnabled(
-                Preferences.getHelp("AdBlockEnabled"))
-            self.tabWidget.currentChanged[int].connect(
-                self.__adBlockIcon.currentChanged)
-            self.tabWidget.sourceChanged.connect(
-                self.__adBlockIcon.sourceChanged)
-            
-            self.networkIcon = E5NetworkIcon(self)
-            self.statusBar().addPermanentWidget(self.networkIcon)
+            # setup the search widget
+            self.__searchWord = searchWord
+            self.__indexing = False
+            self.__indexingProgress = None
+            self.__searchEngine = self.__helpEngine.searchEngine()
+            self.__searchEngine.indexingStarted.connect(
+                self.__indexingStarted)
+            self.__searchEngine.indexingFinished.connect(
+                self.__indexingFinished)
+            self.__searchWindow = HelpSearchWidget(
+                self.__searchEngine, self)
+            self.__searchDock = QDockWidget(self.tr("Search"), self)
+            self.__searchDock.setObjectName("SearchWindow")
+            self.__searchDock.setWidget(self.__searchWindow)
+            self.addDockWidget(Qt.LeftDockWidgetArea, self.__searchDock)
+        
+        if Preferences.getHelp("SaveGeometry"):
+            g = Preferences.getGeometry("HelpViewerGeometry")
+        else:
+            g = QByteArray()
+        if g.isEmpty():
+            s = QSize(800, 800)
+            self.resize(s)
+        else:
+            self.restoreGeometry(g)
+        
+        self.__setIconDatabasePath()
+        self.__initWebSettings()
+        
+        self.__initActions()
+        self.__initMenus()
+        self.__initToolbars()
+        
+        self.historyManager()
+        
+        syncMgr = self.syncManager()
+        syncMgr.syncMessage.connect(self.statusBar().showMessage)
+        syncMgr.syncError.connect(self.statusBar().showMessage)
+        
+        self.tabWidget.newBrowser(home)
+        self.tabWidget.currentBrowser().setFocus()
+        
+        self.__class__.helpwindows.append(self)
+        
+        self.__adBlockIcon = AdBlockIcon(self)
+        self.statusBar().addPermanentWidget(self.__adBlockIcon)
+        self.__adBlockIcon.setEnabled(
+            Preferences.getHelp("AdBlockEnabled"))
+        self.tabWidget.currentChanged[int].connect(
+            self.__adBlockIcon.currentChanged)
+        self.tabWidget.sourceChanged.connect(
+            self.__adBlockIcon.sourceChanged)
+        
+        self.networkIcon = E5NetworkIcon(self)
+        self.statusBar().addPermanentWidget(self.networkIcon)
+        
+        if len(HelpWindow.helpwindows):
+            QDesktopServices.setUrlHandler(
+                "http", HelpWindow.helpwindows[0].urlHandler)
+            QDesktopServices.setUrlHandler(
+                "https", HelpWindow.helpwindows[0].urlHandler)
+        
+        # setup connections
+        self.__activating = False
+        if HelpWindow._useQtHelp:
+            # TOC window
+            self.__tocWindow.linkActivated.connect(self.__linkActivated)
+            self.__tocWindow.escapePressed.connect(
+                self.__activateCurrentBrowser)
             
-            if not self.fromEric and len(HelpWindow.helpwindows):
-                QDesktopServices.setUrlHandler(
-                    "http", HelpWindow.helpwindows[0].urlHandler)
-                QDesktopServices.setUrlHandler(
-                    "https", HelpWindow.helpwindows[0].urlHandler)
-            
-            # setup connections
-            self.__activating = False
-            if HelpWindow._useQtHelp:
-                # TOC window
-                self.__tocWindow.linkActivated.connect(self.__linkActivated)
-                self.__tocWindow.escapePressed.connect(
-                    self.__activateCurrentBrowser)
-                # index window
-                self.__indexWindow.linkActivated.connect(self.__linkActivated)
-                self.__indexWindow.linksActivated.connect(
-                    self.__linksActivated)
-                self.__indexWindow.escapePressed.connect(
-                    self.__activateCurrentBrowser)
-                # search window
-                self.__searchWindow.linkActivated.connect(
-                    self.__linkActivated)
-                self.__searchWindow.escapePressed.connect(
-                    self.__activateCurrentBrowser)
+            # index window
+            self.__indexWindow.linkActivated.connect(self.__linkActivated)
+            self.__indexWindow.linksActivated.connect(
+                self.__linksActivated)
+            self.__indexWindow.escapePressed.connect(
+                self.__activateCurrentBrowser)
             
-            state = Preferences.getHelp("HelpViewerState")
-            self.restoreState(state)
-            
-            self.__initHelpDb()
-            
-            self.__virusTotal = VirusTotalAPI(self)
-            self.__virusTotal.submitUrlError.connect(
-                self.__virusTotalSubmitUrlError)
-            self.__virusTotal.urlScanReport.connect(
-                self.__virusTotalUrlScanReport)
-            self.__virusTotal.fileScanReport.connect(
-                self.__virusTotalFileScanReport)
-            
-            self.__shutdownCalled = False
-            
-            self.flashCookieManager()
-            
-            if HelpWindow._useQtHelp:
-                QTimer.singleShot(0, self.__lookForNewDocumentation)
-                if self.__searchWord is not None:
-                    QTimer.singleShot(0, self.__searchForWord)
-            
-            e5App().focusChanged.connect(self.__appFocusChanged)
-            
-            QTimer.singleShot(0, syncMgr.loadSettings)
+            # search window
+            self.__searchWindow.linkActivated.connect(
+                self.__linkActivated)
+            self.__searchWindow.escapePressed.connect(
+                self.__activateCurrentBrowser)
+        
+        state = Preferences.getHelp("HelpViewerState")
+        self.restoreState(state)
+        
+        self.__initHelpDb()
+        
+        self.__virusTotal = VirusTotalAPI(self)
+        self.__virusTotal.submitUrlError.connect(
+            self.__virusTotalSubmitUrlError)
+        self.__virusTotal.urlScanReport.connect(
+            self.__virusTotalUrlScanReport)
+        self.__virusTotal.fileScanReport.connect(
+            self.__virusTotalFileScanReport)
+        
+        self.__shutdownCalled = False
+        
+        self.flashCookieManager()
+        
+        if single:
+            self.SAServer = HelpSingleApplicationServer(saname)
+            self.SAServer.loadUrl.connect(self.__saLoadUrl)
+            self.SAServer.newTab.connect(self.__saNewTab)
+            self.SAServer.search.connect(self.__saSearchWord)
+            self.SAServer.shutdown.connect(self.shutdown)
+        else:
+            self.SAServer = None
+        
+        if HelpWindow._useQtHelp:
+            QTimer.singleShot(50, self.__lookForNewDocumentation)
+            if self.__searchWord is not None:
+                QTimer.singleShot(0, self.__searchForWord)
+        
+        e5App().focusChanged.connect(self.__appFocusChanged)
+        
+        QTimer.singleShot(0, syncMgr.loadSettings)
     
     def __del__(self):
         """
@@ -467,8 +481,7 @@
             """<b>New Tab</b>"""
             """<p>This opens a new help window tab.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.newTabAct.triggered.connect(self.newTab)
+        self.newTabAct.triggered.connect(self.newTab)
         self.__actions.append(self.newTabAct)
         
         self.newAct = E5Action(
@@ -482,8 +495,7 @@
             """<b>New Window</b>"""
             """<p>This opens a new help browser window.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.newAct.triggered.connect(self.newWindow)
+        self.newAct.triggered.connect(self.newWindow)
         self.__actions.append(self.newAct)
         
         self.openAct = E5Action(
@@ -498,8 +510,7 @@
             """<p>This opens a new help file for display."""
             """ It pops up a file selection dialog.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.openAct.triggered.connect(self.__openFile)
+        self.openAct.triggered.connect(self.__openFile)
         self.__actions.append(self.openAct)
         
         self.openTabAct = E5Action(
@@ -515,8 +526,7 @@
             """<p>This opens a new help file for display in a new tab."""
             """ It pops up a file selection dialog.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.openTabAct.triggered.connect(self.__openFileNewTab)
+        self.openTabAct.triggered.connect(self.__openFileNewTab)
         self.__actions.append(self.openTabAct)
         
         self.saveAsAct = E5Action(
@@ -531,8 +541,7 @@
             """<b>Save As...</b>"""
             """<p>Saves the current page to disk.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.saveAsAct.triggered.connect(self.__savePageAs)
+        self.saveAsAct.triggered.connect(self.__savePageAs)
         self.__actions.append(self.saveAsAct)
         
         self.savePageScreenAct = E5Action(
@@ -546,8 +555,7 @@
             """<b>Save Page Screen...</b>"""
             """<p>Saves the current page as a screen shot.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.savePageScreenAct.triggered.connect(self.__savePageScreen)
+        self.savePageScreenAct.triggered.connect(self.__savePageScreen)
         self.__actions.append(self.savePageScreenAct)
         
         self.saveVisiblePageScreenAct = E5Action(
@@ -563,9 +571,8 @@
             """<p>Saves the visible part of the current page as a"""
             """ screen shot.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.saveVisiblePageScreenAct.triggered.connect(
-                self.__saveVisiblePageScreen)
+        self.saveVisiblePageScreenAct.triggered.connect(
+            self.__saveVisiblePageScreen)
         self.__actions.append(self.saveVisiblePageScreenAct)
         
         bookmarksManager = self.bookmarksManager()
@@ -579,9 +586,8 @@
             """<b>Import Bookmarks</b>"""
             """<p>Import bookmarks from other browsers.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.importBookmarksAct.triggered.connect(
-                bookmarksManager.importBookmarks)
+        self.importBookmarksAct.triggered.connect(
+            bookmarksManager.importBookmarks)
         self.__actions.append(self.importBookmarksAct)
         
         self.exportBookmarksAct = E5Action(
@@ -594,9 +600,8 @@
             """<b>Export Bookmarks</b>"""
             """<p>Export the bookmarks into a file.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.exportBookmarksAct.triggered.connect(
-                bookmarksManager.exportBookmarks)
+        self.exportBookmarksAct.triggered.connect(
+            bookmarksManager.exportBookmarks)
         self.__actions.append(self.exportBookmarksAct)
         
         self.printAct = E5Action(
@@ -610,8 +615,7 @@
             """<b>Print</b>"""
             """<p>Print the displayed help text.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.printAct.triggered.connect(self.tabWidget.printBrowser)
+        self.printAct.triggered.connect(self.tabWidget.printBrowser)
         self.__actions.append(self.printAct)
         
         if Globals.isLinuxPlatform():
@@ -626,9 +630,8 @@
                 """<b>Print as PDF</b>"""
                 """<p>Print the displayed help text as a PDF file.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.printPdfAct.triggered.connect(
-                    self.tabWidget.printBrowserPdf)
+            self.printPdfAct.triggered.connect(
+                self.tabWidget.printBrowserPdf)
             self.__actions.append(self.printPdfAct)
         else:
             self.printPdfAct = None
@@ -644,9 +647,8 @@
             """<b>Print Preview</b>"""
             """<p>Print preview of the displayed help text.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.printPreviewAct.triggered.connect(
-                self.tabWidget.printPreviewBrowser)
+        self.printPreviewAct.triggered.connect(
+            self.tabWidget.printPreviewBrowser)
         self.__actions.append(self.printPreviewAct)
         
         self.closeAct = E5Action(
@@ -661,8 +663,7 @@
             """<b>Close</b>"""
             """<p>Closes the current help window.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.closeAct.triggered.connect(self.tabWidget.closeBrowser)
+        self.closeAct.triggered.connect(self.tabWidget.closeBrowser)
         self.__actions.append(self.closeAct)
         
         self.closeAllAct = E5Action(
@@ -674,9 +675,8 @@
             """<b>Close All</b>"""
             """<p>Closes all help windows except the first one.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.closeAllAct.triggered.connect(
-                self.tabWidget.closeAllBrowsers)
+        self.closeAllAct.triggered.connect(
+            self.tabWidget.closeAllBrowsers)
         self.__actions.append(self.closeAllAct)
         
         self.privateBrowsingAct = E5Action(
@@ -690,9 +690,8 @@
             """<p>Enables private browsing. In this mode no history is"""
             """ recorded anymore.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.privateBrowsingAct.triggered.connect(
-                self.__privateBrowsing)
+        self.privateBrowsingAct.triggered.connect(
+            self.__privateBrowsing)
         self.privateBrowsingAct.setCheckable(True)
         self.__actions.append(self.privateBrowsingAct)
         
@@ -707,11 +706,7 @@
             """<b>Quit</b>"""
             """<p>Quit the eric6 Web Browser.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            if self.fromEric:
-                self.exitAct.triggered.connect(self.close)
-            else:
-                self.exitAct.triggered.connect(self.__closeAllWindows)
+        self.exitAct.triggered.connect(self.__closeAllWindows)
         self.__actions.append(self.exitAct)
         
         self.backAct = E5Action(
@@ -727,8 +722,7 @@
             """<p>Moves one help screen backward. If none is"""
             """ available, this action is disabled.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.backAct.triggered.connect(self.__backward)
+        self.backAct.triggered.connect(self.__backward)
         self.__actions.append(self.backAct)
         
         self.forwardAct = E5Action(
@@ -745,8 +739,7 @@
             """<p>Moves one help screen forward. If none is"""
             """ available, this action is disabled.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.forwardAct.triggered.connect(self.__forward)
+        self.forwardAct.triggered.connect(self.__forward)
         self.__actions.append(self.forwardAct)
         
         self.homeAct = E5Action(
@@ -761,8 +754,7 @@
             """<b>Home</b>"""
             """<p>Moves to the initial help screen.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.homeAct.triggered.connect(self.__home)
+        self.homeAct.triggered.connect(self.__home)
         self.__actions.append(self.homeAct)
         
         self.reloadAct = E5Action(
@@ -778,8 +770,7 @@
             """<b>Reload</b>"""
             """<p>Reloads the current help screen.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.reloadAct.triggered.connect(self.__reload)
+        self.reloadAct.triggered.connect(self.__reload)
         self.__actions.append(self.reloadAct)
         
         self.stopAct = E5Action(
@@ -794,8 +785,7 @@
             """<b>Stop</b>"""
             """<p>Stops loading of the current tab.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.stopAct.triggered.connect(self.__stopLoading)
+        self.stopAct.triggered.connect(self.__stopLoading)
         self.__actions.append(self.stopAct)
         
         self.copyAct = E5Action(
@@ -809,8 +799,7 @@
             """<b>Copy</b>"""
             """<p>Copy the selected text to the clipboard.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.copyAct.triggered.connect(self.__copy)
+        self.copyAct.triggered.connect(self.__copy)
         self.__actions.append(self.copyAct)
         
         self.findAct = E5Action(
@@ -824,8 +813,7 @@
             """<b>Find</b>"""
             """<p>Find text in the current page.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.findAct.triggered.connect(self.__find)
+        self.findAct.triggered.connect(self.__find)
         self.__actions.append(self.findAct)
         
         self.findNextAct = E5Action(
@@ -840,8 +828,7 @@
             """<b>Find next</b>"""
             """<p>Find the next occurrence of text in the current page.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.findNextAct.triggered.connect(self.findDlg.findNext)
+        self.findNextAct.triggered.connect(self.findDlg.findNext)
         self.__actions.append(self.findNextAct)
         
         self.findPrevAct = E5Action(
@@ -857,8 +844,7 @@
             """<p>Find the previous occurrence of text in the current"""
             """ page.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.findPrevAct.triggered.connect(self.findDlg.findPrevious)
+        self.findPrevAct.triggered.connect(self.findDlg.findPrevious)
         self.__actions.append(self.findPrevAct)
         
         self.bookmarksManageAct = E5Action(
@@ -872,9 +858,8 @@
             """<b>Manage Bookmarks...</b>"""
             """<p>Open a dialog to manage the bookmarks.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.bookmarksManageAct.triggered.connect(
-                self.__showBookmarksDialog)
+        self.bookmarksManageAct.triggered.connect(
+            self.__showBookmarksDialog)
         self.__actions.append(self.bookmarksManageAct)
         
         self.bookmarksAddAct = E5Action(
@@ -890,8 +875,7 @@
             """<b>Add Bookmark</b>"""
             """<p>Open a dialog to add the current URL as a bookmark.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.bookmarksAddAct.triggered.connect(self.__addBookmark)
+        self.bookmarksAddAct.triggered.connect(self.__addBookmark)
         self.__actions.append(self.bookmarksAddAct)
         
         self.bookmarksAddFolderAct = E5Action(
@@ -904,9 +888,8 @@
             """<b>Add Folder...</b>"""
             """<p>Open a dialog to add a new bookmarks folder.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.bookmarksAddFolderAct.triggered.connect(
-                self.__addBookmarkFolder)
+        self.bookmarksAddFolderAct.triggered.connect(
+            self.__addBookmarkFolder)
         self.__actions.append(self.bookmarksAddFolderAct)
         
         self.bookmarksAllTabsAct = E5Action(
@@ -920,8 +903,7 @@
             """<p>Open a dialog to add a new bookmarks folder for"""
             """ all open tabs.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.bookmarksAllTabsAct.triggered.connect(self.bookmarkAll)
+        self.bookmarksAllTabsAct.triggered.connect(self.bookmarkAll)
         self.__actions.append(self.bookmarksAllTabsAct)
         
         self.whatsThisAct = E5Action(
@@ -939,8 +921,7 @@
             """ to use them. In dialogs, this feature can be accessed using"""
             """ the context help button in the titlebar.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.whatsThisAct.triggered.connect(self.__whatsThis)
+        self.whatsThisAct.triggered.connect(self.__whatsThis)
         self.__actions.append(self.whatsThisAct)
         
         self.aboutAct = E5Action(
@@ -953,8 +934,7 @@
             """<b>About</b>"""
             """<p>Display some information about this software.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.aboutAct.triggered.connect(self.__about)
+        self.aboutAct.triggered.connect(self.__about)
         self.__actions.append(self.aboutAct)
         
         self.aboutQtAct = E5Action(
@@ -967,8 +947,7 @@
             """<b>About Qt</b>"""
             """<p>Display some information about the Qt toolkit.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.aboutQtAct.triggered.connect(self.__aboutQt)
+        self.aboutQtAct.triggered.connect(self.__aboutQt)
         self.__actions.append(self.aboutQtAct)
         
         self.zoomInAct = E5Action(
@@ -983,8 +962,7 @@
             """<b>Zoom in</b>"""
             """<p>Zoom in on the text. This makes the text bigger.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.zoomInAct.triggered.connect(self.__zoomIn)
+        self.zoomInAct.triggered.connect(self.__zoomIn)
         self.__actions.append(self.zoomInAct)
         
         self.zoomOutAct = E5Action(
@@ -999,8 +977,7 @@
             """<b>Zoom out</b>"""
             """<p>Zoom out on the text. This makes the text smaller.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.zoomOutAct.triggered.connect(self.__zoomOut)
+        self.zoomOutAct.triggered.connect(self.__zoomOut)
         self.__actions.append(self.zoomOutAct)
         
         self.zoomResetAct = E5Action(
@@ -1016,8 +993,7 @@
             """<p>Reset the zoom of the text. """
             """This sets the zoom factor to 100%.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.zoomResetAct.triggered.connect(self.__zoomReset)
+        self.zoomResetAct.triggered.connect(self.__zoomReset)
         self.__actions.append(self.zoomResetAct)
         
         if hasattr(QWebSettings, 'ZoomTextOnly'):
@@ -1032,9 +1008,8 @@
                 """<b>Zoom text only</b>"""
                 """<p>Zoom text only; pictures remain constant.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.zoomTextOnlyAct.triggered[bool].connect(
-                    self.__zoomTextOnly)
+            self.zoomTextOnlyAct.triggered[bool].connect(
+                self.__zoomTextOnly)
             self.__actions.append(self.zoomTextOnlyAct)
         else:
             self.zoomTextOnlyAct = None
@@ -1050,8 +1025,7 @@
             """<b>Show page source</b>"""
             """<p>Show the page source in an editor.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.pageSourceAct.triggered.connect(self.__showPageSource)
+        self.pageSourceAct.triggered.connect(self.__showPageSource)
         self.__actions.append(self.pageSourceAct)
         self.addAction(self.pageSourceAct)
         
@@ -1061,8 +1035,7 @@
             self.tr('&Full Screen'),
             QKeySequence(self.tr('F11')), 0,
             self, 'help_view_full_scree')
-        if not self.initShortcutsOnly:
-            self.fullScreenAct.triggered.connect(self.__viewFullScreen)
+        self.fullScreenAct.triggered.connect(self.__viewFullScreen)
         self.__actions.append(self.fullScreenAct)
         self.addAction(self.fullScreenAct)
         
@@ -1071,8 +1044,7 @@
             self.tr('Show next tab'),
             QKeySequence(self.tr('Ctrl+Alt+Tab')), 0,
             self, 'help_view_next_tab')
-        if not self.initShortcutsOnly:
-            self.nextTabAct.triggered.connect(self.__nextTab)
+        self.nextTabAct.triggered.connect(self.__nextTab)
         self.__actions.append(self.nextTabAct)
         self.addAction(self.nextTabAct)
         
@@ -1081,8 +1053,7 @@
             self.tr('Show previous tab'),
             QKeySequence(self.tr('Shift+Ctrl+Alt+Tab')), 0,
             self, 'help_view_previous_tab')
-        if not self.initShortcutsOnly:
-            self.prevTabAct.triggered.connect(self.__prevTab)
+        self.prevTabAct.triggered.connect(self.__prevTab)
         self.__actions.append(self.prevTabAct)
         self.addAction(self.prevTabAct)
         
@@ -1091,8 +1062,7 @@
             self.tr('Switch between tabs'),
             QKeySequence(self.tr('Ctrl+1')), 0,
             self, 'help_switch_tabs')
-        if not self.initShortcutsOnly:
-            self.switchTabAct.triggered.connect(self.__switchTab)
+        self.switchTabAct.triggered.connect(self.__switchTab)
         self.__actions.append(self.switchTabAct)
         self.addAction(self.switchTabAct)
         
@@ -1107,8 +1077,7 @@
             """<p>Set the configuration items of the application"""
             """ with your prefered values.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.prefAct.triggered.connect(self.__showPreferences)
+        self.prefAct.triggered.connect(self.__showPreferences)
         self.__actions.append(self.prefAct)
 
         self.acceptedLanguagesAct = E5Action(
@@ -1122,9 +1091,8 @@
             """<b>Languages</b>"""
             """<p>Configure the accepted languages for web pages.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.acceptedLanguagesAct.triggered.connect(
-                self.__showAcceptedLanguages)
+        self.acceptedLanguagesAct.triggered.connect(
+            self.__showAcceptedLanguages)
         self.__actions.append(self.acceptedLanguagesAct)
         
         self.cookiesAct = E5Action(
@@ -1137,9 +1105,8 @@
             """<b>Cookies</b>"""
             """<p>Configure cookies handling.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.cookiesAct.triggered.connect(
-                self.__showCookiesConfiguration)
+        self.cookiesAct.triggered.connect(
+            self.__showCookiesConfiguration)
         self.__actions.append(self.cookiesAct)
         
         self.flashCookiesAct = E5Action(
@@ -1152,9 +1119,8 @@
             """<b>Flash Cookies</b>"""
             """<p>Show a dialog to manage the flash cookies.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.flashCookiesAct.triggered.connect(
-                self.__showFlashCookiesManagement)
+        self.flashCookiesAct.triggered.connect(
+            self.__showFlashCookiesManagement)
         self.__actions.append(self.flashCookiesAct)
         
         self.offlineStorageAct = E5Action(
@@ -1168,9 +1134,8 @@
             """<b>Offline Storage</b>"""
             """<p>Opens a dialog to configure offline storage.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.offlineStorageAct.triggered.connect(
-                self.__showOfflineStorageConfiguration)
+        self.offlineStorageAct.triggered.connect(
+            self.__showOfflineStorageConfiguration)
         self.__actions.append(self.offlineStorageAct)
         
         self.personalDataAct = E5Action(
@@ -1186,9 +1151,8 @@
             """<p>Opens a dialog to configure the personal information"""
             """ used for completing form fields.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.personalDataAct.triggered.connect(
-                self.__showPersonalInformationDialog)
+        self.personalDataAct.triggered.connect(
+            self.__showPersonalInformationDialog)
         self.__actions.append(self.personalDataAct)
         
         self.greaseMonkeyAct = E5Action(
@@ -1204,9 +1168,8 @@
             """<p>Opens a dialog to configure the available GreaseMonkey"""
             """ Scripts.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.greaseMonkeyAct.triggered.connect(
-                self.__showGreaseMonkeyConfigDialog)
+        self.greaseMonkeyAct.triggered.connect(
+            self.__showGreaseMonkeyConfigDialog)
         self.__actions.append(self.greaseMonkeyAct)
         
         self.editMessageFilterAct = E5Action(
@@ -1222,9 +1185,8 @@
             """ suppress unwanted messages been shown in an error"""
             """ window.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.editMessageFilterAct.triggered.connect(
-                E5ErrorMessage.editMessageFilters)
+        self.editMessageFilterAct.triggered.connect(
+            E5ErrorMessage.editMessageFilters)
         self.__actions.append(self.editMessageFilterAct)
 
         self.featurePermissionAct = E5Action(
@@ -1239,12 +1201,11 @@
             """<p>Opens a dialog to edit the remembered HTML5"""
             """ feature permissions.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.featurePermissionAct.triggered.connect(
-                self.__showFeaturePermissionDialog)
+        self.featurePermissionAct.triggered.connect(
+            self.__showFeaturePermissionDialog)
         self.__actions.append(self.featurePermissionAct)
 
-        if HelpWindow._useQtHelp or self.initShortcutsOnly:
+        if HelpWindow._useQtHelp:
             self.syncTocAct = E5Action(
                 self.tr('Sync with Table of Contents'),
                 UI.PixmapCache.getIcon("syncToc.png"),
@@ -1257,8 +1218,7 @@
                 """<p>Synchronizes the table of contents with current"""
                 """ page.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.syncTocAct.triggered.connect(self.__syncTOC)
+            self.syncTocAct.triggered.connect(self.__syncTOC)
             self.__actions.append(self.syncTocAct)
             
             self.showTocAct = E5Action(
@@ -1271,8 +1231,7 @@
                 """<b>Table of Contents</b>"""
                 """<p>Shows the table of contents window.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.showTocAct.triggered.connect(self.__showTocWindow)
+            self.showTocAct.triggered.connect(self.__showTocWindow)
             self.__actions.append(self.showTocAct)
             
             self.showIndexAct = E5Action(
@@ -1285,8 +1244,7 @@
                 """<b>Index</b>"""
                 """<p>Shows the index window.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.showIndexAct.triggered.connect(self.__showIndexWindow)
+            self.showIndexAct.triggered.connect(self.__showIndexWindow)
             self.__actions.append(self.showIndexAct)
             
             self.showSearchAct = E5Action(
@@ -1299,9 +1257,8 @@
                 """<b>Search</b>"""
                 """<p>Shows the search window.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.showSearchAct.triggered.connect(
-                    self.__showSearchWindow)
+            self.showSearchAct.triggered.connect(
+                self.__showSearchWindow)
             self.__actions.append(self.showSearchAct)
             
             self.manageQtHelpDocsAct = E5Action(
@@ -1315,9 +1272,8 @@
                 """<p>Shows a dialog to manage the QtHelp documentation"""
                 """ set.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.manageQtHelpDocsAct.triggered.connect(
-                    self.__manageQtHelpDocumentation)
+            self.manageQtHelpDocsAct.triggered.connect(
+                self.__manageQtHelpDocumentation)
             self.__actions.append(self.manageQtHelpDocsAct)
             
             self.manageQtHelpFiltersAct = E5Action(
@@ -1330,9 +1286,8 @@
                 """<b>Manage QtHelp Filters</b>"""
                 """<p>Shows a dialog to manage the QtHelp filters.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.manageQtHelpFiltersAct.triggered.connect(
-                    self.__manageQtHelpFilters)
+            self.manageQtHelpFiltersAct.triggered.connect(
+                self.__manageQtHelpFilters)
             self.__actions.append(self.manageQtHelpFiltersAct)
             
             self.reindexDocumentationAct = E5Action(
@@ -1345,9 +1300,8 @@
                 """<b>Reindex Documentation</b>"""
                 """<p>Reindexes the documentation set.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.reindexDocumentationAct.triggered.connect(
-                    self.__searchEngine.reindexDocumentation)
+            self.reindexDocumentationAct.triggered.connect(
+                self.__searchEngine.reindexDocumentation)
             self.__actions.append(self.reindexDocumentationAct)
         
         self.clearPrivateDataAct = E5Action(
@@ -1363,9 +1317,8 @@
             """<p>Clears the private data like browsing history, search"""
             """ history or the favicons database.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.clearPrivateDataAct.triggered.connect(
-                self.__clearPrivateData)
+        self.clearPrivateDataAct.triggered.connect(
+            self.__clearPrivateData)
         self.__actions.append(self.clearPrivateDataAct)
         
         self.clearIconsAct = E5Action(
@@ -1380,8 +1333,7 @@
             """<p>Clears the database of favicons of previously visited"""
             """ URLs.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.clearIconsAct.triggered.connect(self.__clearIconsDatabase)
+        self.clearIconsAct.triggered.connect(self.__clearIconsDatabase)
         self.__actions.append(self.clearIconsAct)
         
         self.searchEnginesAct = E5Action(
@@ -1396,9 +1348,8 @@
             """<p>Opens a dialog to configure the available search"""
             """ engines.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.searchEnginesAct.triggered.connect(
-                self.__showEnginesConfigurationDialog)
+        self.searchEnginesAct.triggered.connect(
+            self.__showEnginesConfigurationDialog)
         self.__actions.append(self.searchEnginesAct)
         
         self.passwordsAct = E5Action(
@@ -1413,8 +1364,7 @@
             """<b>Manage Saved Passwords...</b>"""
             """<p>Opens a dialog to manage the saved passwords.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.passwordsAct.triggered.connect(self.__showPasswordsDialog)
+        self.passwordsAct.triggered.connect(self.__showPasswordsDialog)
         self.__actions.append(self.passwordsAct)
         
         self.adblockAct = E5Action(
@@ -1430,8 +1380,7 @@
             """<p>Opens a dialog to configure AdBlock subscriptions and"""
             """ rules.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.adblockAct.triggered.connect(self.__showAdBlockDialog)
+        self.adblockAct.triggered.connect(self.__showAdBlockDialog)
         self.__actions.append(self.adblockAct)
         
         self.flashblockAct = E5Action(
@@ -1447,9 +1396,8 @@
             """<p>Opens a dialog to configure the ClickToFlash"""
             """ whitelist.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.flashblockAct.triggered.connect(
-                self.__showClickToFlashDialog)
+        self.flashblockAct.triggered.connect(
+            self.__showClickToFlashDialog)
         self.__actions.append(self.flashblockAct)
         
         if SSL_AVAILABLE:
@@ -1466,9 +1414,8 @@
                 """<p>Opens a dialog to manage the saved SSL"""
                 """ certificates.</p>"""
             ))
-            if not self.initShortcutsOnly:
-                self.certificatesAct.triggered.connect(
-                    self.__showCertificatesDialog)
+            self.certificatesAct.triggered.connect(
+                self.__showCertificatesDialog)
             self.__actions.append(self.certificatesAct)
         
         self.toolsMonitorAct = E5Action(
@@ -1482,9 +1429,8 @@
             """<b>Network Monitor...</b>"""
             """<p>Shows the network monitor dialog.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.toolsMonitorAct.triggered.connect(
-                self.__showNetworkMonitor)
+        self.toolsMonitorAct.triggered.connect(
+            self.__showNetworkMonitor)
         self.__actions.append(self.toolsMonitorAct)
         
         self.showDownloadManagerAct = E5Action(
@@ -1497,9 +1443,8 @@
             """<b>Downloads</b>"""
             """<p>Shows the downloads window.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.showDownloadManagerAct.triggered.connect(
-                self.__showDownloadsWindow)
+        self.showDownloadManagerAct.triggered.connect(
+            self.__showDownloadsWindow)
         self.__actions.append(self.showDownloadManagerAct)
         
         self.feedsManagerAct = E5Action(
@@ -1516,8 +1461,7 @@
             """ It can be used to mange the feeds and to show their"""
             """ contents.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.feedsManagerAct.triggered.connect(self.__showFeedsManager)
+        self.feedsManagerAct.triggered.connect(self.__showFeedsManager)
         self.__actions.append(self.feedsManagerAct)
         
         self.siteInfoAct = E5Action(
@@ -1533,8 +1477,7 @@
             """<p>Opens a dialog showing some information about the current"""
             """ site.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.siteInfoAct.triggered.connect(self.__showSiteinfoDialog)
+        self.siteInfoAct.triggered.connect(self.__showSiteinfoDialog)
         self.__actions.append(self.siteInfoAct)
         
         self.userAgentManagerAct = E5Action(
@@ -1547,9 +1490,8 @@
             """<b>Manage User Agent Settings</b>"""
             """<p>Shows a dialog to manage the User Agent settings.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.userAgentManagerAct.triggered.connect(
-                self.__showUserAgentsDialog)
+        self.userAgentManagerAct.triggered.connect(
+            self.__showUserAgentsDialog)
         self.__actions.append(self.userAgentManagerAct)
         
         self.synchronizationAct = E5Action(
@@ -1564,9 +1506,8 @@
             """<p>This shows a dialog to synchronize data via the"""
             """ network.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.synchronizationAct.triggered.connect(
-                self.__showSyncDialog)
+        self.synchronizationAct.triggered.connect(
+            self.__showSyncDialog)
         self.__actions.append(self.synchronizationAct)
         
         self.zoomValuesAct = E5Action(
@@ -1581,9 +1522,52 @@
             """<b>Manage Saved Zoom Values...</b>"""
             """<p>Opens a dialog to manage the saved zoom values.</p>"""
         ))
-        if not self.initShortcutsOnly:
-            self.zoomValuesAct.triggered.connect(self.__showZoomValuesDialog)
+        self.zoomValuesAct.triggered.connect(self.__showZoomValuesDialog)
         self.__actions.append(self.zoomValuesAct)
+
+        self.shortcutsAct = E5Action(
+            self.tr('Keyboard Shortcuts'),
+            UI.PixmapCache.getIcon("configureShortcuts.png"),
+            self.tr('Keyboard &Shortcuts...'),
+            0, 0,
+            self, 'webbrowser_keyboard_shortcuts')
+        self.shortcutsAct.setStatusTip(self.tr(
+            'Set the keyboard shortcuts'))
+        self.shortcutsAct.setWhatsThis(self.tr(
+            """<b>Keyboard Shortcuts</b>"""
+            """<p>Set the keyboard shortcuts of the application"""
+            """ with your prefered values.</p>"""
+        ))
+        self.shortcutsAct.triggered.connect(self.__configShortcuts)
+        self.__actions.append(self.shortcutsAct)
+
+        self.exportShortcutsAct = E5Action(
+            self.tr('Export Keyboard Shortcuts'),
+            UI.PixmapCache.getIcon("exportShortcuts.png"),
+            self.tr('&Export Keyboard Shortcuts...'),
+            0, 0, self, 'export_keyboard_shortcuts')
+        self.exportShortcutsAct.setStatusTip(self.tr(
+            'Export the keyboard shortcuts'))
+        self.exportShortcutsAct.setWhatsThis(self.tr(
+            """<b>Export Keyboard Shortcuts</b>"""
+            """<p>Export the keyboard shortcuts of the application.</p>"""
+        ))
+        self.exportShortcutsAct.triggered.connect(self.__exportShortcuts)
+        self.__actions.append(self.exportShortcutsAct)
+
+        self.importShortcutsAct = E5Action(
+            self.tr('Import Keyboard Shortcuts'),
+            UI.PixmapCache.getIcon("importShortcuts.png"),
+            self.tr('&Import Keyboard Shortcuts...'),
+            0, 0, self, 'import_keyboard_shortcuts')
+        self.importShortcutsAct.setStatusTip(self.tr(
+            'Import the keyboard shortcuts'))
+        self.importShortcutsAct.setWhatsThis(self.tr(
+            """<b>Import Keyboard Shortcuts</b>"""
+            """<p>Import the keyboard shortcuts of the application.</p>"""
+        ))
+        self.importShortcutsAct.triggered.connect(self.__importShortcuts)
+        self.__actions.append(self.importShortcutsAct)
         
         self.backAct.setEnabled(False)
         self.forwardAct.setEnabled(False)
@@ -1703,6 +1687,11 @@
         menu = mb.addMenu(self.tr('&Settings'))
         menu.setTearOffEnabled(True)
         menu.addAction(self.prefAct)
+        menu.addSeparator()
+        menu.addAction(self.shortcutsAct)
+        menu.addAction(self.exportShortcutsAct)
+        menu.addAction(self.importShortcutsAct)
+        menu.addSeparator()
         menu.addAction(self.acceptedLanguagesAct)
         menu.addAction(self.cookiesAct)
         menu.addAction(self.flashCookiesAct)
@@ -1837,6 +1826,7 @@
         settingstb.setObjectName("SettingsToolBar")
         settingstb.setIconSize(UI.Config.ToolBarIconSize)
         settingstb.addAction(self.prefAct)
+        settingstb.addAction(self.shortcutsAct)
         settingstb.addAction(self.acceptedLanguagesAct)
         settingstb.addAction(self.cookiesAct)
         settingstb.addAction(self.flashCookiesAct)
@@ -2011,7 +2001,7 @@
             linkName = link.toString()
         else:
             linkName = link
-        h = HelpWindow(linkName, ".", self.parent(), "qbrowser", self.fromEric)
+        h = HelpWindow(linkName, ".", self.parent(), "qbrowser")
         h.show()
     
     def __openFile(self):
@@ -2298,7 +2288,7 @@
         
         try:
             browserIndex = HelpWindow.helpwindows.index(self)
-            if not self.fromEric and len(HelpWindow.helpwindows):
+            if len(HelpWindow.helpwindows):
                 if browserIndex == 0:
                     if len(HelpWindow.helpwindows) > 1:
                         # first window will be deleted
@@ -2311,13 +2301,12 @@
                     else:
                         QDesktopServices.unsetUrlHandler("http")
                         QDesktopServices.unsetUrlHandler("https")
-            if self.fromEric or len(HelpWindow.helpwindows) > 0:
+            if len(HelpWindow.helpwindows) > 0:
                 del HelpWindow.helpwindows[browserIndex]
         except ValueError:
             pass
         
-        if not self.fromEric:
-            Preferences.syncPreferences()
+        Preferences.syncPreferences()
         
         self.__shutdownCalled = True
         return True
@@ -2510,7 +2499,7 @@
         """
         from Preferences.ConfigurationDialog import ConfigurationDialog
         dlg = ConfigurationDialog(
-            self, 'Configuration', True, fromEric=self.fromEric,
+            self, 'Configuration', True, fromEric=False,
             displayMode=ConfigurationDialog.HelpBrowserMode)
         dlg.preferencesChanged.connect(self.preferencesChanged)
         dlg.masterPasswordChanged.connect(
@@ -2532,9 +2521,8 @@
         """
         Public slot to handle a change of preferences.
         """
-        if not self.fromEric:
-            self.setStyle(Preferences.getUI("Style"),
-                          Preferences.getUI("StyleSheet"))
+        self.setStyle(Preferences.getUI("Style"),
+                      Preferences.getUI("StyleSheet"))
         
         self.__initWebSettings()
         
@@ -2570,7 +2558,7 @@
         @type bool
         """
         self.passwordManager().masterPasswordChanged(oldPassword, newPassword)
-        if self.fromEric and local:
+        if local:
             # we were called from our local configuration dialog
             Preferences.convertPasswords(oldPassword, newPassword)
             Utilities.crypto.changeRememberedMaster(newPassword)
@@ -2919,10 +2907,11 @@
         """
         Private slot to remove non-existing documentation from the help engine.
         """
-        for namespace in self.__helpEngine.registeredDocumentations():
-            docFile = self.__helpEngine.documentationFileName(namespace)
-            if not os.path.exists(docFile):
-                self.__helpEngine.unregisterDocumentation(namespace)
+        if HelpWindow._useQtHelp:
+            for namespace in self.__helpEngine.registeredDocumentations():
+                docFile = self.__helpEngine.documentationFileName(namespace)
+                if not os.path.exists(docFile):
+                    self.__helpEngine.unregisterDocumentation(namespace)
         
     def __lookForNewDocumentation(self):
         """
@@ -3918,22 +3907,18 @@
         @param heading heading of the notification (string)
         @param text text of the notification (string)
         """
-        if cls._fromEric:
-            e5App().getObject("UserInterface").showNotification(
-                icon, heading, text)
-        else:
-            if Preferences.getUI("NotificationsEnabled"):
-                if cls._notification is None:
-                    from UI.NotificationWidget import NotificationWidget
-                    cls._notification = NotificationWidget()
-                cls._notification.setPixmap(icon)
-                cls._notification.setHeading(heading)
-                cls._notification.setText(text)
-                cls._notification.setTimeout(
-                    Preferences.getUI("NotificationTimeout"))
-                cls._notification.move(
-                    Preferences.getUI("NotificationPosition"))
-                cls._notification.show()
+        if Preferences.getUI("NotificationsEnabled"):
+            if cls._notification is None:
+                from UI.NotificationWidget import NotificationWidget
+                cls._notification = NotificationWidget()
+            cls._notification.setPixmap(icon)
+            cls._notification.setHeading(heading)
+            cls._notification.setText(text)
+            cls._notification.setTimeout(
+                Preferences.getUI("NotificationTimeout"))
+            cls._notification.move(
+                Preferences.getUI("NotificationPosition"))
+            cls._notification.show()
     
     @classmethod
     def notificationsEnabled(cls):
@@ -3942,7 +3927,96 @@
         
         @return flag indicating, if notifications are enabled (boolean)
         """
-        if cls._fromEric:
-            return e5App().getObject("UserInterface").notificationsEnabled()
-        else:
-            return Preferences.getUI("NotificationsEnabled")
+        return Preferences.getUI("NotificationsEnabled")
+    
+    ###############################################################
+    ## 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 __saNewTab(self, urlStr):
+        """
+        Private slot to load an URL received via the single application
+        protocol in a new tab.
+        
+        @param urlStr URL to be loaded
+        @type str
+        """
+        url = QUrl.fromUserInput(urlStr)
+        self.newTab(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 HelpWindow._useQtHelp:
+            self.__searchWord = word
+            self.__searchForWord()
+    
+    ######################################################
+    ## Methods below implement shortcuts related functions
+    ######################################################
+    
+    def __configShortcuts(self):
+        """
+        Private slot to configure the keyboard shortcuts.
+        """
+        if self.__shortcutsDialog is None:
+            from Preferences.ShortcutsDialog import ShortcutsDialog
+            self.__shortcutsDialog = ShortcutsDialog(self)
+        self.__shortcutsDialog.populate(helpViewer=self)
+        self.__shortcutsDialog.show()
+    
+    def __exportShortcuts(self):
+        """
+        Private slot to export the keyboard shortcuts.
+        """
+        fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+            None,
+            self.tr("Export Keyboard Shortcuts"),
+            "",
+            self.tr("Keyboard shortcut file (*.e4k)"),
+            "",
+            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+        
+        if not fn:
+            return
+        
+        ext = QFileInfo(fn).suffix()
+        if not ext:
+            ex = selectedFilter.split("(*")[1].split(")")[0]
+            if ex:
+                fn += ex
+        
+        from Preferences import Shortcuts
+        Shortcuts.exportShortcuts(fn, helpViewer=self)
+
+    def __importShortcuts(self):
+        """
+        Private slot to import the keyboard shortcuts.
+        """
+        fn = E5FileDialog.getOpenFileName(
+            None,
+            self.tr("Import Keyboard Shortcuts"),
+            "",
+            self.tr("Keyboard shortcut file (*.e4k)"))
+        
+        if fn:
+            from Preferences import Shortcuts
+            Shortcuts.importShortcuts(fn, helpViewer=self)

eric ide

mercurial