Merged with default branch. maintenance

Fri, 03 Mar 2017 18:34:21 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 03 Mar 2017 18:34:21 +0100
branch
maintenance
changeset 5576
c866ec38662d
parent 5566
e6c917c0cb97 (current diff)
parent 5575
835f789ded71 (diff)
child 5577
106581f40cc2

Merged with default branch.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
WebBrowser/Download/DownloadItem.py file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Sun Feb 26 15:54:49 2017 +0100
+++ b/APIs/Python3/eric6.api	Fri Mar 03 18:34:21 2017 +0100
@@ -182,7 +182,7 @@
 eric6.DebugClients.Python.DebugBase.DebugBase.pathsToSkip?7
 eric6.DebugClients.Python.DebugBase.DebugBase.profile?4(frame, event, arg)
 eric6.DebugClients.Python.DebugBase.DebugBase.profileWithRecursion?4(frame, event, arg)
-eric6.DebugClients.Python.DebugBase.DebugBase.run?4(cmd, globals=None, locals=None)
+eric6.DebugClients.Python.DebugBase.DebugBase.run?4(cmd, globals=None, locals=None, debug=True)
 eric6.DebugClients.Python.DebugBase.DebugBase.setRecursionDepth?4(frame)
 eric6.DebugClients.Python.DebugBase.DebugBase.set_continue?4(special)
 eric6.DebugClients.Python.DebugBase.DebugBase.set_next?4(frame)
@@ -196,7 +196,7 @@
 eric6.DebugClients.Python.DebugBase.DebugBase.storeFrameLocals?4(frmnr=0)
 eric6.DebugClients.Python.DebugBase.DebugBase.tracePythonLibs?4(enable)
 eric6.DebugClients.Python.DebugBase.DebugBase.trace_dispatch?4(frame, event, arg)
-eric6.DebugClients.Python.DebugBase.DebugBase.user_exception?4(frame, excinfo, unhandled=False)
+eric6.DebugClients.Python.DebugBase.DebugBase.user_exception?4(excinfo, unhandled=False)
 eric6.DebugClients.Python.DebugBase.DebugBase.user_line?4(frame)
 eric6.DebugClients.Python.DebugBase.DebugBase?1(dbgClient)
 eric6.DebugClients.Python.DebugBase.gRecursionLimit?7
@@ -300,6 +300,8 @@
 eric6.DebugClients.Python.PyProfile.PyProfile.trace_dispatch_call?4(frame, t)
 eric6.DebugClients.Python.PyProfile.PyProfile?1(basename, timer=None, bias=None)
 eric6.DebugClients.Python.ThreadExtension.QThreadWrapper?1(*args, **kwargs)
+eric6.DebugClients.Python.ThreadExtension.ThreadExtension._bootstrap?5(run)
+eric6.DebugClients.Python.ThreadExtension.ThreadExtension._bootstrapQThread?5(run)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.attachThread?4(target=None, args=None, kwargs={}, mainThread=False)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.dumpThreadList?4()
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.find_module?4(fullname, path=None)
@@ -311,6 +313,8 @@
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.unlockClient?4()
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.updateThreadList?4()
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension?1()
+eric6.DebugClients.Python.ThreadExtension.ThreadWrapper?1(*args, **kwargs)
+eric6.DebugClients.Python.ThreadExtension._qtThreadNumber?8
 eric6.DebugClients.Python.eric6dbgstub.debugger?7
 eric6.DebugClients.Python.eric6dbgstub.ericpath?7
 eric6.DebugClients.Python.eric6dbgstub.initDebugger?4(kind="standard")
@@ -3832,6 +3836,7 @@
 eric6.PluginManager.PluginManager.PluginManager.allPlugginsActivated?7
 eric6.PluginManager.PluginManager.PluginManager.checkPluginEntry?4(name, short, description, url, author, version, filename, status)
 eric6.PluginManager.PluginManager.PluginManager.checkPluginUpdatesAvailable?4()
+eric6.PluginManager.PluginManager.PluginManager.clearPluginsPrivateData?4(type_)
 eric6.PluginManager.PluginManager.PluginManager.deactivatePlugin?4(name, onDemand=False)
 eric6.PluginManager.PluginManager.PluginManager.deactivateVcsPlugins?4()
 eric6.PluginManager.PluginManager.PluginManager.doShutdown?4()
@@ -4049,6 +4054,7 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DEFAULT_EXCLUDE?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DEFAULT_IGNORE?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DOCSTRING_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DUNDER_REGEX?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DiffReport.error?4(line_number, offset, text, check)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DiffReport?1(options)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.ERRORCODE_REGEX?7
@@ -4070,6 +4076,9 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SINGLETONS?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SKIP_COMMENTS?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SKIP_TOKENS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.STARTSWITH_DEF_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.STARTSWITH_INDENT_STATEMENT_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.STARTSWITH_TOP_LEVEL_REGEX?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.error?4(line_number, offset, text, check)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.error_args?4(line_number, offset, code, check, *args)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.get_file_results?4()
@@ -4364,6 +4373,7 @@
 eric6.Plugins.PluginTabnanny.python2Compatible?7
 eric6.Plugins.PluginTabnanny.shortDescription?7
 eric6.Plugins.PluginTabnanny.version?7
+eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.MercurialDefaults?7
 eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.activate?4()
 eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.deactivate?4()
 eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.getConfigPath?4()
@@ -4378,6 +4388,7 @@
 eric6.Plugins.PluginVcsMercurial.author?7
 eric6.Plugins.PluginVcsMercurial.autoactivate?7
 eric6.Plugins.PluginVcsMercurial.className?7
+eric6.Plugins.PluginVcsMercurial.clearPrivateData?4()
 eric6.Plugins.PluginVcsMercurial.createConfigurationPage?4(configDlg)
 eric6.Plugins.PluginVcsMercurial.deactivateable?7
 eric6.Plugins.PluginVcsMercurial.displayString?4()
@@ -4633,18 +4644,18 @@
 eric6.Plugins.PluginWizardQRegularExpression.python2Compatible?7
 eric6.Plugins.PluginWizardQRegularExpression.shortDescription?7
 eric6.Plugins.PluginWizardQRegularExpression.version?7
-eric6.Plugins.VcsPlugins.vcsMercurial.Config.ConfigHgProtocols?7
+eric6.Plugins.VcsPlugins.vcsMercurial.Config.ConfigHgSchemes?7
 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.on_configButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.save?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage?1(plugin)
 eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.on_recentComboBox_activated?4(txt)
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog?1(parent=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.initActions?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch.hgFetch?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch.hgFetch?4(name, revisions=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.HgGpgSignDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.HgGpgSignDialog.on_bookmarkButton_toggled?4(checked)
@@ -4672,7 +4683,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSign?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSign?4(path, revisions=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSignatures?4(path)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgVerifySignatures?4(path, rev=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.shutdown?4()
@@ -4881,11 +4892,10 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.keyPressEvent?4(evt)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_branchCombo_activated?4(txt)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_buttonBox_clicked?4(button)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffP1Button_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffP2Button_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffRevisionsButton_clicked?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffSelectLabel_linkActivated?4(link)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_downButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_fieldCombo_activated?4(txt)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_filesTree_currentItemChanged?4(current, previous)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_findNextButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_findPrevButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_fromDate_dateChanged?4(date)
@@ -4898,6 +4908,8 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_refreshButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_rxEdit_returnPressed?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_rxEdit_textChanged?4(txt)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_saveLabel_linkActivated?4(link)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_sbsSelectLabel_linkActivated?4(link)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_sendButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_stopCheckBox_clicked?4(checked)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_toDate_dateChanged?4(date)
@@ -4916,8 +4928,8 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.on_tagCombo_editTextChanged?4(txt)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog?1(tagsList, branchesList, bookmarksList=None, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.getData?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_protocolCombo_activated?4(protocol)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged?4(txt)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged?4(txt)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgOptionsDialog.HgOptionsDialog.getData?4()
@@ -4967,20 +4979,12 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgServeDialog.HgServeDialog?1(vcs, path, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.keyPressEvent?4(evt)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_addButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_buttonBox_clicked?4(button)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_commitButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_diffButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_forgetButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_input_returnPressed?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_passwordCheckBox_toggled?4(isOn)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_refreshButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_restoreButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_revertButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_sbsDiffButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_sendButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusFilterCombo_activated?4(txt)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusList_itemChanged?4(item, column)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusList_itemSelectionChanged?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.show?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.start?4(fn)
@@ -5324,7 +5328,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkPush?4(name, current=False, bookmark=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkRename?4(name, renameInfo=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBranch?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBundle?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBundle?4(name, bundleData=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCancelMerge?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgConflicts?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCopy?4(name, project)
@@ -5351,7 +5355,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgOutgoing?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPhase?4(name, data=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPreviewBundle?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPull?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPull?4(name, revisions=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPush?4(name, force=False, newBranch=False, rev=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgReMerge?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRecover?4(name)
@@ -5365,7 +5369,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowConfig?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowPaths?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgSummary?4(mq=False, largefiles=False)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgUnbundle?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgUnbundle?4(name, files=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgVerify?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.iniFileChanged?7
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.initCommand?4(command)
@@ -5388,7 +5392,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsInit?4(vcsDir, noDialog=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsInitConfig?4(project)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsLogBrowser?4(name, isFile=False)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMerge?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMerge?4(name, rev="")
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMove?4(name, project, target=None, noDialog=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsName?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsNewProjectOptionsDialog?4(parent=None)
@@ -6511,6 +6515,10 @@
 eric6.Preferences.ConfigurationPages.WebBrowserPage.WebBrowserPage.save?4()
 eric6.Preferences.ConfigurationPages.WebBrowserPage.WebBrowserPage?1(configDialog)
 eric6.Preferences.ConfigurationPages.WebBrowserPage.create?4(dlg)
+eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked?4()
+eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage.save?4()
+eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage?1()
+eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.create?4(dlg)
 eric6.Preferences.MouseClickDialog.MouseClickDialog.eventFilter?4(watched, event)
 eric6.Preferences.MouseClickDialog.MouseClickDialog.getClick?4()
 eric6.Preferences.MouseClickDialog.MouseClickDialog.on_clearButton_clicked?4()
@@ -6756,7 +6764,9 @@
 eric6.Project.CreateDialogCodeDialog.pythonSignatureRole?7
 eric6.Project.CreateDialogCodeDialog.returnTypeRole?7
 eric6.Project.CreateDialogCodeDialog.rubySignatureRole?7
+eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked?4()
 eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog?4()
+eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked?4()
 eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.storeData?4()
 eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog?1(project, parent=None, name=None)
 eric6.Project.FiletypeAssociationDialog.FiletypeAssociationDialog.on_addAssociationButton_clicked?4()
@@ -6800,6 +6810,7 @@
 eric6.Project.Project.Project.checkDirty?4()
 eric6.Project.Project.Project.checkLanguageFiles?4()
 eric6.Project.Project.Project.checkVCSStatus?4()
+eric6.Project.Project.Project.clearHistories?4()
 eric6.Project.Project.Project.clearRecent?4()
 eric6.Project.Project.Project.clearStatusMonitorCachedState?4(name)
 eric6.Project.Project.Project.closeProject?4(reopen=False, noSave=False)
@@ -10679,6 +10690,7 @@
 eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.mediaUrl?4()
 eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.pos?4()
 eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.tagName?4()
+eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.updateWithContextMenuData?4(data)
 eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.viewportPos?4()
 eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult?1(page, pos)
 eric6.WebBrowser.Tools.WebIconDialog.WebIconDialog.getUrls?4()
@@ -10810,11 +10822,13 @@
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.acceptNavigationRequest?4(url, type_, isMainFrame)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.certificateError?4(error)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.execJavaScript?4(script, worldId=QWebEngineScript.MainWorld, timeout=500)
+eric6.WebBrowser.WebBrowserPage.WebBrowserPage.execPrintPage?4(printer, timeout=1000)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.hitTestContent?4(pos)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.icon?4()
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.isJavaScriptEnabled?4()
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.javaScriptConsoleMessage?4(level, message, lineNumber, sourceId)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.mapToViewport?4(pos)
+eric6.WebBrowser.WebBrowserPage.WebBrowserPage.printCallback?4(resDict=resultDict)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.resultCallback?4(resDict=resultDict)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.runJavaScript?4(script, worldId=-1, callback=None)
 eric6.WebBrowser.WebBrowserPage.WebBrowserPage.scroll?4(x, y)
--- a/APIs/Python3/eric6.bas	Sun Feb 26 15:54:49 2017 +0100
+++ b/APIs/Python3/eric6.bas	Fri Mar 03 18:34:21 2017 +0100
@@ -802,6 +802,7 @@
 TemplatesReader XMLStreamReaderBase
 TemplatesWriter XMLStreamWriterBase
 TextVisitor ast.NodeVisitor
+ThreadWrapper module.Thread
 Token str
 ToolConfigurationDialog QDialog Ui_ToolConfigurationDialog
 ToolGroupConfigurationDialog QDialog Ui_ToolGroupConfigurationDialog
@@ -865,6 +866,7 @@
 WebBrowserJavaScriptConsole QTextEdit
 WebBrowserLanguagesDialog QDialog Ui_WebBrowserLanguagesDialog
 WebBrowserPage QWebEnginePage
+WebBrowserSpellCheckingPage ConfigurationPageBase Ui_WebBrowserSpellCheckingPage
 WebBrowserTabBar E5WheelTabBar
 WebBrowserTabWidget E5TabWidget
 WebBrowserView QWebEngineView
--- a/DataViews/CodeMetricsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/DataViews/CodeMetricsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -171,7 +171,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/DataViews/PyCoverageDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/DataViews/PyCoverageDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -205,7 +205,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>excludeCombo</tabstop>
--- a/DataViews/PyProfileDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/DataViews/PyProfileDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -154,7 +154,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>resultList</tabstop>
--- a/DebugClients/Python/BreakpointWatch.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/DebugClients/Python/BreakpointWatch.py	Fri Mar 03 18:34:21 2017 +0100
@@ -50,21 +50,21 @@
         self.enabled = True
         self.ignore = 0
         self.hits = 0
-        self.breaks[filename, lineno] = self
-        lines = self.breakInFile.setdefault(filename, [])
+        Breakpoint.breaks[(filename, lineno)] = self
+        lines = Breakpoint.breakInFile.setdefault(filename, [])
         if lineno not in lines:
             lines.append(lineno)
-        self.breakInFrameCache.clear()
+        Breakpoint.breakInFrameCache.clear()
 
     def deleteMe(self):
         """
         Public method to clear this breakpoint.
         """
         try:
-            del self.breaks[(self.file, self.line)]
-            self.breakInFile[self.file].remove(self.line)
-            if not self.breakInFile[self.file]:
-                del self.breakInFile[self.file]
+            del Breakpoint.breaks[(self.file, self.line)]
+            Breakpoint.breakInFile[self.file].remove(self.line)
+            if not Breakpoint.breakInFile[self.file]:
+                del Breakpoint.breakInFile[self.file]
         except KeyError:
             pass
 
@@ -100,8 +100,8 @@
         """
         Public method to clear all breakpoints.
         """
-        for bp in Breakpoint.breaks.copy():
-            bp.deleteMe()
+        Breakpoint.breaks.clear()
+        Breakpoint.breakInFile.clear()
         Breakpoint.breakInFrameCache.clear()
 
     @staticmethod
@@ -222,14 +222,14 @@
             self.changed = True
         
         self.values = {}
-        self.watches.append(self)
+        Watch.watches.append(self)
 
     def deleteMe(self):
         """
         Public method to clear this watch expression.
         """
         try:
-            del self.watches[self]
+            del Watch.watches[self]
         except ValueError:
             pass
 
--- a/DebugClients/Python/DebugBase.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/DebugClients/Python/DebugBase.py	Fri Mar 03 18:34:21 2017 +0100
@@ -92,7 +92,6 @@
         self.currentFrame = None
         
         # frames, where we want to stop or release debugger
-        self.botframe = None
         self.stopframe = None
         self.returnframe = None
         self.stop_everywhere = False
@@ -308,39 +307,28 @@
         
         if event == 'line':
             if self.stop_here(frame) or self.break_here(frame):
-                self.user_line(frame)
+                if (self.stop_everywhere and
+                        frame.f_back.f_code.co_name == "prepareJsonCommand"):
+                    # Just stepped into print statement, so skip these frames
+                    self._set_stopinfo(None, frame.f_back)
+                else:
+                    self.user_line(frame)
             return self.trace_dispatch
         
         if event == 'call':
-            if self.botframe is None and frame.f_lineno >= 1:
-                self.botframe = frame
-                frame.f_trace = self.trace_dispatch
-                
-                self.user_line(frame)
-                return self.trace_dispatch
-            
-            if not (self.stop_here(frame) or
+            if (self.stop_here(frame) or
                     self.__checkBreakInFrame(frame) or
                     Watch.watches != []):
+                return self.trace_dispatch
+            else:
                 # No need to trace this function
                 return
-            return self.trace_dispatch
         
         if event == 'return':
-            if self.stop_here(frame) or frame == self.botframe:
-                # Ignore return events in generator except when stepping.
-                if self.stopframe and frame.f_code.co_flags & CO_GENERATOR:
-                    return
-                # The program has finished if we have just left the first frame
-                if frame == self.botframe:
-                    if self.isMainThread:
-                        atexit._run_exitfuncs()
-                        self._dbgClient.progTerminated(arg)
-                    else:
-                        self._dbgClient.threadTerminated(self.id)
-                
-                if self.quitting and not self._dbgClient.passive:
-                    raise SystemExit
+            if frame == self.returnframe:
+                # Only true if we didn't stopped in this frame, because it's
+                # belonging to the eric debugger.
+                self._set_stopinfo(None, frame.f_back)
             return
         
         if event == 'exception':
@@ -351,7 +339,7 @@
                 # statement.
                 if not (frame.f_code.co_flags & CO_GENERATOR and
                         arg[0] is StopIteration and arg[2] is None):
-                    self.user_exception(frame, arg)
+                    self.user_exception(arg)
             # Stop at the StopIteration or GeneratorExit exception when the
             # user has set stopframe in a generator by issuing a return
             # command, or a next/until command at the last statement in the
@@ -359,7 +347,7 @@
             elif (self.stopframe and frame is not self.stopframe and
                     self.stopframe.f_code.co_flags & CO_GENERATOR and
                     arg[0] in (StopIteration, GeneratorExit)):
-                self.user_exception(frame, arg)
+                self.user_exception(arg)
             return
 
         if event == 'c_call':
@@ -398,7 +386,6 @@
             # stop at erics debugger frame or a threading bootstrap
             if (frame.f_back.f_code == stopOnHandleLine):
                 frame.f_trace = self.trace_dispatch
-                self.botframe = frame
                 break
             
             frame = frame.f_back
@@ -422,25 +409,19 @@
         @type dict
         """
         try:
-            frame = sys._getframe()
-            self.botframe = frame
-            # First time the dispach function is called, a "base debug"
-            # function has to be returned, which is called at every user code
-            # function call. Because of setting botframe manually, the
-            # specific branch returning the trace_dispatch itself is skipped.
-            # Because the next step is always in threading.py and we assume
-            # that there is no breakpoint in it, it's save to return
-            # trace_dispatch unconditionally.
-            sys.settrace(lambda frame, event, arg: self.trace_dispatch)
-            frame.f_trace = self.trace_dispatch
+            # Because in the initial run method the "base debug" function is
+            # set up, it's also valid for the threads afterwards.
+            sys.settrace(self.trace_dispatch)
             
             target(*args, **kwargs)
-        except SystemExit:
-            pass
+        except Exception:
+            excinfo = sys.exc_info()
+            self.user_exception(excinfo, True)
         finally:
+            sys.settrace(None)
             sys.setprofile(None)
     
-    def run(self, cmd, globals=None, locals=None):
+    def run(self, cmd, globals=None, locals=None, debug=True):
         """
         Public method to start a given command under debugger control.
         
@@ -448,8 +429,10 @@
         @type str or CodeType
         @keyparam globals dictionary of global variables for cmd
         @type dict
-        @keyparam locals  dictionary of local variables for cmd
+        @keyparam locals dictionary of local variables for cmd
         @type dict
+        @keyparam debug flag if command should run under debugger control
+        @type bool
         """
         if globals is None:
             import __main__
@@ -458,14 +441,28 @@
         if locals is None:
             locals = globals
         
-        sys.settrace(self.trace_dispatch)
         if not isinstance(cmd, types.CodeType):
             cmd = compile(cmd, "<string>", "exec")
         
+        if debug:
+            # First time the trace_dispatch function is called, a "base debug"
+            # function has to be returned, which is called at every user code
+            # function call. This is ensured by setting stop_everywhere.
+            self.stop_everywhere = True
+            sys.settrace(self.trace_dispatch)
+        
         try:
             exec(cmd, globals, locals)
+            atexit._run_exitfuncs()
+            self._dbgClient.progTerminated(0)
         except SystemExit:
-            pass
+            atexit._run_exitfuncs()
+            excinfo = sys.exc_info()
+            exitcode, message = self.__extractSystemExitMessage(excinfo)
+            self._dbgClient.progTerminated(exitcode, message)
+        except Exception:
+            excinfo = sys.exc_info()
+            self.user_exception(excinfo, True)
         finally:
             self.quitting = True
             sys.settrace(None)
@@ -481,6 +478,9 @@
         """
         self.stopframe = stopframe
         self.returnframe = returnframe
+        if returnframe is not None:
+            # Ensure to be able to stop on the return frame
+            returnframe.f_trace = self.trace_dispatch
         self.stop_everywhere = False
 
     def set_continue(self, special):
@@ -514,7 +514,6 @@
         @type frame object
         """
         self._set_stopinfo(frame, frame.f_back)
-        frame.f_back.f_trace = self.trace_dispatch
         frame.f_trace = self.trace_dispatch
 
     def set_return(self, frame):
@@ -767,12 +766,10 @@
         self.isBroken = False
         self._dbgClient.unlockClient()
         
-    def user_exception(self, frame, excinfo, unhandled=False):
+    def user_exception(self, excinfo, unhandled=False):
         """
         Public method reimplemented to report an exception to the debug server.
         
-        @param frame the frame object
-        @type frame object
         @param excinfo details about the exception
         @type tuple(Exception, excval object, traceback frame object)
         @keyparam unhandled flag indicating an uncaught exception
@@ -780,44 +777,10 @@
         """
         exctype, excval, exctb = excinfo
         
-        if exctype in [GeneratorExit, StopIteration]:
+        if exctype in [GeneratorExit, StopIteration, SystemExit]:
             # ignore these
             return
         
-        if exctype == SystemExit:
-            atexit._run_exitfuncs()
-            if excval is None:
-                exitcode = 0
-                message = ""
-            elif isinstance(excval, basestring):
-                exitcode = 1
-                message = excval
-            elif isinstance(excval, bytes):
-                exitcode = 1
-                message = excval.decode()
-            elif isinstance(excval, int):
-                exitcode = excval
-                message = ""
-            elif isinstance(excval, SystemExit):
-                code = excval.code
-                if isinstance(code, basestring):
-                    exitcode = 1
-                    message = code
-                elif isinstance(code, bytes):
-                    exitcode = 1
-                    message = code.decode()
-                elif isinstance(code, int):
-                    exitcode = code
-                    message = ""
-                else:
-                    exitcode = 1
-                    message = str(code)
-            else:
-                exitcode = 1
-                message = str(excval)
-            self._dbgClient.progTerminated(exitcode, message)
-            return
-        
         if exctype in [SyntaxError, IndentationError]:
             try:
                 # tuple could only occure on Python 2, but not always!
@@ -894,14 +857,24 @@
             
             stack = self.getStack(frlist[self.skipFrames:])
         
+        self.isBroken = True
+        self._dbgClient.lockClient()
+        self._dbgClient.currentThread = self
+        self._dbgClient.currentThreadExec = self
         self._dbgClient.sendException(exctypetxt, excvaltxt, stack)
+        self._dbgClient.dumpThreadList()
         
-        if exctb is None:
-            return
+        if exctb is not None:
+            # When polling kept enabled, it isn't possible to resume after an
+            # unhandled exception without further user interaction.
+            self._dbgClient.eventLoop(True)
         
-        self._dbgClient.eventLoop()
         self.skipFrames = 0
         
+        self.isBroken = False
+        self.eventPollFlag = False
+        self._dbgClient.unlockClient()
+    
     def __extractExceptionName(self, exctype):
         """
         Private method to extract the exception name given the exception
@@ -934,6 +907,48 @@
         tb = None
         return stack
 
+    def __extractSystemExitMessage(self, excinfo):
+        """
+        Private method to get the SystemExit code and message.
+        
+        @param excinfo details about the SystemExit exception
+        @type tuple(Exception, excval object, traceback frame object)
+        @return SystemExit code and message
+        @rtype int, str
+        """
+        exctype, excval, exctb = excinfo
+        if excval is None:
+            exitcode = 0
+            message = ""
+        elif isinstance(excval, basestring):
+            exitcode = 1
+            message = excval
+        elif isinstance(excval, bytes):
+            exitcode = 1
+            message = excval.decode()
+        elif isinstance(excval, int):
+            exitcode = excval
+            message = ""
+        elif isinstance(excval, SystemExit):
+            code = excval.code
+            if isinstance(code, basestring):
+                exitcode = 1
+                message = code
+            elif isinstance(code, bytes):
+                exitcode = 1
+                message = code.decode()
+            elif isinstance(code, int):
+                exitcode = code
+                message = ""
+            else:
+                exitcode = 1
+                message = str(code)
+        else:
+            exitcode = 1
+            message = str(excval)
+        
+        return exitcode, message
+
     def stop_here(self, frame):
         """
         Public method reimplemented to filter out debugger files.
--- a/DebugClients/Python/DebugClientBase.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/DebugClients/Python/DebugClientBase.py	Fri Mar 03 18:34:21 2017 +0100
@@ -494,8 +494,7 @@
             code = self.__compileFileSource(self.running)
             if code:
                 sys.setprofile(self.callTraceEnabled)
-                res = self.mainThread.run(code, self.debugMod.__dict__)
-                self.progTerminated(res)
+                self.mainThread.run(code, self.debugMod.__dict__, debug=True)
 
         elif method == "RequestRun":
             sys.argv = []
@@ -529,13 +528,7 @@
             res = 0
             code = self.__compileFileSource(self.running)
             if code:
-                try:
-                    exec(code, self.debugMod.__dict__)
-                except SystemExit as exc:
-                    res = exc.code
-                    atexit._run_exitfuncs()
-                self.writestream.flush()
-                self.progTerminated(res)
+                self.mainThread.run(code, self.debugMod.__dict__, debug=False)
 
         elif method == "RequestCoverage":
             from coverage import coverage
@@ -567,17 +560,10 @@
             code = self.__compileFileSource(sys.argv[0])
             if code:
                 self.running = sys.argv[0]
-                res = 0
                 self.cover.start()
-                try:
-                    exec(code, self.debugMod.__dict__)
-                except SystemExit as exc:
-                    res = exc.code
-                    atexit._run_exitfuncs()
+                self.mainThread.run(code, self.debugMod.__dict__, debug=False)
                 self.cover.stop()
                 self.cover.save()
-                self.writestream.flush()
-                self.progTerminated(res)
         
         elif method == "RequestProfile":
             sys.setprofile(None)
@@ -618,12 +604,15 @@
                 res = 0
                 try:
                     self.prof.run(script)
+                    atexit._run_exitfuncs()
                 except SystemExit as exc:
                     res = exc.code
-                    
-                atexit._run_exitfuncs()
+                    atexit._run_exitfuncs()
+                except Exception:
+                    excinfo = sys.exc_info()
+                    self.__unhandled_exception(*excinfo)
+                
                 self.prof.save()
-                self.writestream.flush()
                 self.progTerminated(res)
         
         elif method == "ExecuteStatement":
@@ -738,7 +727,7 @@
                 self.eventExit = True
         
         elif method == "RequestContinue":
-            self.currentThread.go(params["special"])
+            self.currentThreadExec.go(params["special"])
             self.eventExit = True
         
         elif method == "RawInput":
@@ -1189,7 +1178,7 @@
         @param excval data about the exception
         @param exctb traceback for the exception
         """
-        self.mainThread.user_exception(None, (exctype, excval, exctb), True)
+        self.mainThread.user_exception((exctype, excval, exctb), True)
     
     def __interceptSignals(self):
         """
--- a/DebugClients/Python/ThreadExtension.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/DebugClients/Python/ThreadExtension.py	Fri Mar 03 18:34:21 2017 +0100
@@ -20,6 +20,8 @@
 
 from DebugBase import DebugBase
 
+_qtThreadNumber = 1
+
 
 class ThreadExtension(object):
     """
@@ -35,7 +37,8 @@
         self.threadNumber = 1
         self.enableImportHooks = True
         self._original_start_new_thread = None
-        self._qtThread = None
+        self.threadingAttached = False
+        self.qtThreadAttached = False
         
         self.clientLock = threading.RLock()
         
@@ -229,7 +232,10 @@
             
             # adjust current frame
             if "__pypy__" not in sys.builtin_module_names:
-                self.threads[id].currentFrame = self.getExecutedFrame(frame)
+                # Don't update with None
+                currentFrame = self.getExecutedFrame(frame)
+                if currentFrame is not None:
+                    self.threads[id].currentFrame = currentFrame
         
         # Clean up obsolet because terminated threads
         self.threads = {id_: thrd for id_, thrd in self.threads.items()
@@ -250,7 +256,8 @@
             return None
         
         if fullname in [self.threadModName, 'PyQt4.QtCore', 'PyQt5.QtCore',
-                        'PySide.QtCore'] and self.enableImportHooks:
+                        'PySide.QtCore', 'PySide2.QtCore',
+                        'threading'] and self.enableImportHooks:
             # Disable hook to be able to import original module
             self.enableImportHooks = False
             return self
@@ -273,49 +280,99 @@
             # make thread hooks available to system
             self._original_start_new_thread = module.start_new_thread
             module.start_new_thread = self.attachThread
-        elif fullname in ['PyQt4.QtCore', 'PyQt5.QtCore',
-                          'PySide.QtCore'] and self._qtThread is None:
-            self._qtThread = module.QThread
+
+        # Add hook for threading.run()
+        elif (fullname == "threading" and self.threadingAttached is False):
+            self.threadingAttached = True
+            
             # _debugClient as a class attribute can't be accessed in following
             # class. Therefore we need a global variable.
             _debugClient = self
             
+            def _bootstrap(self, run):
+                """
+                Bootstrap for threading, which reports exceptions correctly.
+                
+                @param run the run method of threading.Thread
+                @type method pointer
+                """
+                newThread = _debugClient.threads[self.ident]
+                newThread.name = self.name
+                # see DebugBase.bootstrap
+                sys.settrace(newThread.trace_dispatch)
+                try:
+                    run()
+                except Exception:
+                    excinfo = sys.exc_info()
+                    newThread.user_exception(excinfo, True)
+            
+            class ThreadWrapper(module.Thread):
+                """ Wrapper class for threading.Thread. """
+                
+                def __init__(self, *args, **kwargs):
+                    # Overwrite the provided run method with our own, to
+                    # intercept the thread creation by threading.Thread
+                    self.run = lambda s=self, run=self.run: _bootstrap(s, run)
+                    
+                    super(ThreadWrapper, self).__init__(*args, **kwargs)
+            
+            module.Thread = ThreadWrapper
+        
+        # Add hook for *.QThread
+        elif (fullname in ['PyQt4.QtCore', 'PyQt5.QtCore',
+                           'PySide.QtCore', 'PySide2.QtCore'] and
+                self.qtThreadAttached is False):
+            self.qtThreadAttached = True
+            # _debugClient as a class attribute can't be accessed in following
+            # class. Therefore we need a global variable.
+            _debugClient = self
+
+            def _bootstrapQThread(self, run):
+                """
+                Bootstrap for QThread, which reports exceptions correctly.
+                
+                @param run the run method of *.QThread
+                @type method pointer
+                """
+                global _qtThreadNumber
+                
+                newThread = DebugBase(_debugClient)
+                ident = _thread.get_ident()
+                name = 'QtThread-{0}'.format(_qtThreadNumber)
+                
+                _qtThreadNumber += 1
+            
+                newThread.id = ident
+                newThread.name = name
+                
+                _debugClient.threads[ident] = newThread
+                
+                # see DebugBase.bootstrap
+                sys.settrace(newThread.trace_dispatch)
+                try:
+                    run()
+                except SystemExit:
+                    # *.QThreads doesn't like SystemExit
+                    pass
+                except Exception:
+                    excinfo = sys.exc_info()
+                    newThread.user_exception(excinfo, True)
+        
             class QThreadWrapper(module.QThread):
-                __qtThreadNumber = 1
+                """ Wrapper class for *.QThread. """
                 
                 def __init__(self, *args, **kwargs):
                     # Overwrite the provided run method with our own, to
                     # intercept the thread creation by Qt
-                    self._ApplicationRun = self.run
-                    self.run = self.__bootstrapQThread
+                    self.run = lambda s=self, run=self.run: (
+                        _bootstrapQThread(s, run))
                     
                     super(QThreadWrapper, self).__init__(*args, **kwargs)
-                
-                def __bootstrapQThread(self):
-                    newThread = DebugBase(_debugClient)
-                    ident = _thread.get_ident()
-                    name = 'QtThread-{0}'.format(self.__qtThreadNumber)
-                    self.__qtThreadNumber += 1
-                
-                    newThread.id = ident
-                    newThread.name = name
-                    
-                    _debugClient.threads[ident] = newThread
-                    
-                    frame = sys._getframe()
-                    newThread.botframe = frame
-                    frame.f_trace = newThread.trace_dispatch
-                    # see DebugBase.bootstrap
-                    sys.settrace(
-                        lambda frame, event, arg: newThread.trace_dispatch)
-                    
-                    return self._ApplicationRun()
             
             module.QThread = QThreadWrapper
         
         self.enableImportHooks = True
         return module
 
-
 #
 # eflag: noqa = M702
--- a/Debugger/EditBreakpointDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/EditBreakpointDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -167,7 +167,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Debugger/EditWatchpointDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/EditWatchpointDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -144,7 +144,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>conditionButton</tabstop>
--- a/Debugger/ExceptionsFilterDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/ExceptionsFilterDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -100,7 +100,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>exceptionList</tabstop>
--- a/Debugger/StartCoverageDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/StartCoverageDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -213,7 +213,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Debugger/StartDebugDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/StartDebugDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -265,7 +265,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Debugger/StartProfileDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/StartProfileDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -213,7 +213,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Debugger/StartRunDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/StartRunDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -236,7 +236,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Debugger/VariableDetailDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/VariableDetailDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -79,7 +79,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>eName</tabstop>
--- a/Debugger/VariablesFilterDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Debugger/VariablesFilterDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -104,7 +104,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>localsList</tabstop>
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Help/source.qhp	Fri Mar 03 18:34:21 2017 +0100
@@ -826,6 +826,7 @@
               <section title="eric6.Preferences.ConfigurationPages.ViewmanagerPage" ref="eric6.Preferences.ConfigurationPages.ViewmanagerPage.html" />
               <section title="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage" ref="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html" />
               <section title="eric6.Preferences.ConfigurationPages.WebBrowserPage" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html" />
+              <section title="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html" />
             </section>
             <section title="eric6.Preferences.ConfigurationDialog" ref="eric6.Preferences.ConfigurationDialog.html" />
             <section title="eric6.Preferences.MouseClickDialog" ref="eric6.Preferences.MouseClickDialog.html" />
@@ -3289,6 +3290,7 @@
       <keyword name="DebugBase.__do_clearWatch" id="DebugBase.__do_clearWatch" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__do_clearWatch" />
       <keyword name="DebugBase.__eventPollTimer" id="DebugBase.__eventPollTimer" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__eventPollTimer" />
       <keyword name="DebugBase.__extractExceptionName" id="DebugBase.__extractExceptionName" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__extractExceptionName" />
+      <keyword name="DebugBase.__extractSystemExitMessage" id="DebugBase.__extractSystemExitMessage" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__extractSystemExitMessage" />
       <keyword name="DebugBase.__extract_stack" id="DebugBase.__extract_stack" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__extract_stack" />
       <keyword name="DebugBase.__sendCallTrace" id="DebugBase.__sendCallTrace" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__sendCallTrace" />
       <keyword name="DebugBase.__skipFrame" id="DebugBase.__skipFrame" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__skipFrame" />
@@ -3729,7 +3731,11 @@
       <keyword name="DebuggerPropertiesDialog" id="DebuggerPropertiesDialog" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog" />
       <keyword name="DebuggerPropertiesDialog (Constructor)" id="DebuggerPropertiesDialog (Constructor)" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__init__" />
       <keyword name="DebuggerPropertiesDialog (Module)" id="DebuggerPropertiesDialog (Module)" ref="eric6.Project.DebuggerPropertiesDialog.html" />
+      <keyword name="DebuggerPropertiesDialog.__clearHistory" id="DebuggerPropertiesDialog.__clearHistory" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__clearHistory" />
+      <keyword name="DebuggerPropertiesDialog.__saveHistories" id="DebuggerPropertiesDialog.__saveHistories" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__saveHistories" />
+      <keyword name="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" id="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" />
       <keyword name="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" id="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" />
+      <keyword name="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" id="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" />
       <keyword name="DebuggerPropertiesDialog.storeData" id="DebuggerPropertiesDialog.storeData" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.storeData" />
       <keyword name="DebuggerPropertiesReader" id="DebuggerPropertiesReader" ref="eric6.E5XML.DebuggerPropertiesReader.html#DebuggerPropertiesReader" />
       <keyword name="DebuggerPropertiesReader (Constructor)" id="DebuggerPropertiesReader (Constructor)" ref="eric6.E5XML.DebuggerPropertiesReader.html#DebuggerPropertiesReader.__init__" />
@@ -3911,6 +3917,7 @@
       <keyword name="DownloadItem.__readyRead" id="DownloadItem.__readyRead" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__readyRead" />
       <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__saveFileName" />
       <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__saveFileName" />
+      <keyword name="DownloadItem.__setFileName" id="DownloadItem.__setFileName" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__setFileName" />
       <keyword name="DownloadItem.__updateInfoLabel" id="DownloadItem.__updateInfoLabel" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__updateInfoLabel" />
       <keyword name="DownloadItem.__updateInfoLabel" id="DownloadItem.__updateInfoLabel" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__updateInfoLabel" />
       <keyword name="DownloadItem.absoluteFilePath" id="DownloadItem.absoluteFilePath" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.absoluteFilePath" />
@@ -7065,7 +7072,6 @@
       <keyword name="Hg.__getInOutBookmarks" id="Hg.__getInOutBookmarks" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__getInOutBookmarks" />
       <keyword name="Hg.__getMostRecentCommitMessage" id="Hg.__getMostRecentCommitMessage" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__getMostRecentCommitMessage" />
       <keyword name="Hg.__hgGetFileForRevision" id="Hg.__hgGetFileForRevision" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgGetFileForRevision" />
-      <keyword name="Hg.__hgURL" id="Hg.__hgURL" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgURL" />
       <keyword name="Hg.__iniFileChanged" id="Hg.__iniFileChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__iniFileChanged" />
       <keyword name="Hg.__monitorRepoIniFile" id="Hg.__monitorRepoIniFile" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__monitorRepoIniFile" />
       <keyword name="Hg.__vcsCommit_Step2" id="Hg.__vcsCommit_Step2" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__vcsCommit_Step2" />
@@ -7552,29 +7558,35 @@
       <keyword name="HgLogBrowserDialog (Constructor)" id="HgLogBrowserDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__init__" />
       <keyword name="HgLogBrowserDialog (Module)" id="HgLogBrowserDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html" />
       <keyword name="HgLogBrowserDialog.__actionMode" id="HgLogBrowserDialog.__actionMode" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__actionMode" />
+      <keyword name="HgLogBrowserDialog.__actionsMenuHovered" id="HgLogBrowserDialog.__actionsMenuHovered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__actionsMenuHovered" />
       <keyword name="HgLogBrowserDialog.__addFinishCallback" id="HgLogBrowserDialog.__addFinishCallback" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__addFinishCallback" />
       <keyword name="HgLogBrowserDialog.__bookmarkActTriggered" id="HgLogBrowserDialog.__bookmarkActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bookmarkActTriggered" />
       <keyword name="HgLogBrowserDialog.__bookmarkMoveActTriggered" id="HgLogBrowserDialog.__bookmarkMoveActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bookmarkMoveActTriggered" />
       <keyword name="HgLogBrowserDialog.__branchColor" id="HgLogBrowserDialog.__branchColor" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__branchColor" />
-      <keyword name="HgLogBrowserDialog.__diffRevisions" id="HgLogBrowserDialog.__diffRevisions" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__diffRevisions" />
+      <keyword name="HgLogBrowserDialog.__bundleActTriggered" id="HgLogBrowserDialog.__bundleActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bundleActTriggered" />
       <keyword name="HgLogBrowserDialog.__fetchActTriggered" id="HgLogBrowserDialog.__fetchActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__fetchActTriggered" />
       <keyword name="HgLogBrowserDialog.__filterLogs" id="HgLogBrowserDialog.__filterLogs" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__filterLogs" />
       <keyword name="HgLogBrowserDialog.__findItem" id="HgLogBrowserDialog.__findItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__findItem" />
       <keyword name="HgLogBrowserDialog.__finish" id="HgLogBrowserDialog.__finish" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__finish" />
+      <keyword name="HgLogBrowserDialog.__generateDetailsTableText" id="HgLogBrowserDialog.__generateDetailsTableText" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateDetailsTableText" />
+      <keyword name="HgLogBrowserDialog.__generateDiffs" id="HgLogBrowserDialog.__generateDiffs" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateDiffs" />
       <keyword name="HgLogBrowserDialog.__generateEdges" id="HgLogBrowserDialog.__generateEdges" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateEdges" />
-      <keyword name="HgLogBrowserDialog.__generateFileItem" id="HgLogBrowserDialog.__generateFileItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateFileItem" />
       <keyword name="HgLogBrowserDialog.__generateIcon" id="HgLogBrowserDialog.__generateIcon" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateIcon" />
       <keyword name="HgLogBrowserDialog.__generateLogItem" id="HgLogBrowserDialog.__generateLogItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateLogItem" />
+      <keyword name="HgLogBrowserDialog.__generatorFinished" id="HgLogBrowserDialog.__generatorFinished" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generatorFinished" />
       <keyword name="HgLogBrowserDialog.__getClosedBranches" id="HgLogBrowserDialog.__getClosedBranches" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getClosedBranches" />
       <keyword name="HgLogBrowserDialog.__getColor" id="HgLogBrowserDialog.__getColor" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getColor" />
       <keyword name="HgLogBrowserDialog.__getLogEntries" id="HgLogBrowserDialog.__getLogEntries" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getLogEntries" />
       <keyword name="HgLogBrowserDialog.__getParents" id="HgLogBrowserDialog.__getParents" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getParents" />
       <keyword name="HgLogBrowserDialog.__getRevisionOfTag" id="HgLogBrowserDialog.__getRevisionOfTag" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getRevisionOfTag" />
+      <keyword name="HgLogBrowserDialog.__gpgSignActTriggered" id="HgLogBrowserDialog.__gpgSignActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__gpgSignActTriggered" />
+      <keyword name="HgLogBrowserDialog.__gpgVerifyActTriggered" id="HgLogBrowserDialog.__gpgVerifyActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__gpgVerifyActTriggered" />
       <keyword name="HgLogBrowserDialog.__graftActTriggered" id="HgLogBrowserDialog.__graftActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__graftActTriggered" />
       <keyword name="HgLogBrowserDialog.__identifyProject" id="HgLogBrowserDialog.__identifyProject" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__identifyProject" />
       <keyword name="HgLogBrowserDialog.__initActionsMenu" id="HgLogBrowserDialog.__initActionsMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__initActionsMenu" />
       <keyword name="HgLogBrowserDialog.__initData" id="HgLogBrowserDialog.__initData" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__initData" />
       <keyword name="HgLogBrowserDialog.__lfPullActTriggered" id="HgLogBrowserDialog.__lfPullActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__lfPullActTriggered" />
+      <keyword name="HgLogBrowserDialog.__mergeActTriggered" id="HgLogBrowserDialog.__mergeActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__mergeActTriggered" />
       <keyword name="HgLogBrowserDialog.__modifyForLargeFiles" id="HgLogBrowserDialog.__modifyForLargeFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__modifyForLargeFiles" />
       <keyword name="HgLogBrowserDialog.__phaseActTriggered" id="HgLogBrowserDialog.__phaseActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__phaseActTriggered" />
       <keyword name="HgLogBrowserDialog.__prepareFieldSearch" id="HgLogBrowserDialog.__prepareFieldSearch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__prepareFieldSearch" />
@@ -7585,28 +7597,32 @@
       <keyword name="HgLogBrowserDialog.__pushAllActTriggered" id="HgLogBrowserDialog.__pushAllActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__pushAllActTriggered" />
       <keyword name="HgLogBrowserDialog.__readStderr" id="HgLogBrowserDialog.__readStderr" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__readStderr" />
       <keyword name="HgLogBrowserDialog.__readStdout" id="HgLogBrowserDialog.__readStdout" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__readStdout" />
+      <keyword name="HgLogBrowserDialog.__reloadGeometry" id="HgLogBrowserDialog.__reloadGeometry" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__reloadGeometry" />
       <keyword name="HgLogBrowserDialog.__resetUI" id="HgLogBrowserDialog.__resetUI" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resetUI" />
       <keyword name="HgLogBrowserDialog.__resizeColumnsFiles" id="HgLogBrowserDialog.__resizeColumnsFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resizeColumnsFiles" />
       <keyword name="HgLogBrowserDialog.__resizeColumnsLog" id="HgLogBrowserDialog.__resizeColumnsLog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resizeColumnsLog" />
       <keyword name="HgLogBrowserDialog.__resortFiles" id="HgLogBrowserDialog.__resortFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resortFiles" />
+      <keyword name="HgLogBrowserDialog.__restoreSplitterStates" id="HgLogBrowserDialog.__restoreSplitterStates" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__restoreSplitterStates" />
       <keyword name="HgLogBrowserDialog.__revisionClicked" id="HgLogBrowserDialog.__revisionClicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__revisionClicked" />
+      <keyword name="HgLogBrowserDialog.__selectAllActTriggered" id="HgLogBrowserDialog.__selectAllActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__selectAllActTriggered" />
       <keyword name="HgLogBrowserDialog.__showError" id="HgLogBrowserDialog.__showError" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__showError" />
       <keyword name="HgLogBrowserDialog.__stripActTriggered" id="HgLogBrowserDialog.__stripActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__stripActTriggered" />
       <keyword name="HgLogBrowserDialog.__switchActTriggered" id="HgLogBrowserDialog.__switchActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__switchActTriggered" />
       <keyword name="HgLogBrowserDialog.__tagActTriggered" id="HgLogBrowserDialog.__tagActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__tagActTriggered" />
-      <keyword name="HgLogBrowserDialog.__updateDiffButtons" id="HgLogBrowserDialog.__updateDiffButtons" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateDiffButtons" />
-      <keyword name="HgLogBrowserDialog.__updateGui" id="HgLogBrowserDialog.__updateGui" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateGui" />
+      <keyword name="HgLogBrowserDialog.__unbundleActTriggered" id="HgLogBrowserDialog.__unbundleActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__unbundleActTriggered" />
+      <keyword name="HgLogBrowserDialog.__updateDetailsAndFiles" id="HgLogBrowserDialog.__updateDetailsAndFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateDetailsAndFiles" />
+      <keyword name="HgLogBrowserDialog.__updateFilesTree" id="HgLogBrowserDialog.__updateFilesTree" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateFilesTree" />
+      <keyword name="HgLogBrowserDialog.__updateSbsSelectLabel" id="HgLogBrowserDialog.__updateSbsSelectLabel" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateSbsSelectLabel" />
       <keyword name="HgLogBrowserDialog.__updateToolMenuActions" id="HgLogBrowserDialog.__updateToolMenuActions" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateToolMenuActions" />
       <keyword name="HgLogBrowserDialog.closeEvent" id="HgLogBrowserDialog.closeEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.closeEvent" />
       <keyword name="HgLogBrowserDialog.col2x" id="HgLogBrowserDialog.col2x" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.col2x" />
       <keyword name="HgLogBrowserDialog.keyPressEvent" id="HgLogBrowserDialog.keyPressEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.keyPressEvent" />
       <keyword name="HgLogBrowserDialog.on_branchCombo_activated" id="HgLogBrowserDialog.on_branchCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_branchCombo_activated" />
       <keyword name="HgLogBrowserDialog.on_buttonBox_clicked" id="HgLogBrowserDialog.on_buttonBox_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_buttonBox_clicked" />
-      <keyword name="HgLogBrowserDialog.on_diffP1Button_clicked" id="HgLogBrowserDialog.on_diffP1Button_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffP1Button_clicked" />
-      <keyword name="HgLogBrowserDialog.on_diffP2Button_clicked" id="HgLogBrowserDialog.on_diffP2Button_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffP2Button_clicked" />
-      <keyword name="HgLogBrowserDialog.on_diffRevisionsButton_clicked" id="HgLogBrowserDialog.on_diffRevisionsButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffRevisionsButton_clicked" />
+      <keyword name="HgLogBrowserDialog.on_diffSelectLabel_linkActivated" id="HgLogBrowserDialog.on_diffSelectLabel_linkActivated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffSelectLabel_linkActivated" />
       <keyword name="HgLogBrowserDialog.on_downButton_clicked" id="HgLogBrowserDialog.on_downButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_downButton_clicked" />
       <keyword name="HgLogBrowserDialog.on_fieldCombo_activated" id="HgLogBrowserDialog.on_fieldCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_fieldCombo_activated" />
+      <keyword name="HgLogBrowserDialog.on_filesTree_currentItemChanged" id="HgLogBrowserDialog.on_filesTree_currentItemChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_filesTree_currentItemChanged" />
       <keyword name="HgLogBrowserDialog.on_findNextButton_clicked" id="HgLogBrowserDialog.on_findNextButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_findNextButton_clicked" />
       <keyword name="HgLogBrowserDialog.on_findPrevButton_clicked" id="HgLogBrowserDialog.on_findPrevButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_findPrevButton_clicked" />
       <keyword name="HgLogBrowserDialog.on_fromDate_dateChanged" id="HgLogBrowserDialog.on_fromDate_dateChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_fromDate_dateChanged" />
@@ -7619,6 +7635,8 @@
       <keyword name="HgLogBrowserDialog.on_refreshButton_clicked" id="HgLogBrowserDialog.on_refreshButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_refreshButton_clicked" />
       <keyword name="HgLogBrowserDialog.on_rxEdit_returnPressed" id="HgLogBrowserDialog.on_rxEdit_returnPressed" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_rxEdit_returnPressed" />
       <keyword name="HgLogBrowserDialog.on_rxEdit_textChanged" id="HgLogBrowserDialog.on_rxEdit_textChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_rxEdit_textChanged" />
+      <keyword name="HgLogBrowserDialog.on_saveLabel_linkActivated" id="HgLogBrowserDialog.on_saveLabel_linkActivated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_saveLabel_linkActivated" />
+      <keyword name="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" id="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" />
       <keyword name="HgLogBrowserDialog.on_sendButton_clicked" id="HgLogBrowserDialog.on_sendButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_sendButton_clicked" />
       <keyword name="HgLogBrowserDialog.on_stopCheckBox_clicked" id="HgLogBrowserDialog.on_stopCheckBox_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_stopCheckBox_clicked" />
       <keyword name="HgLogBrowserDialog.on_toDate_dateChanged" id="HgLogBrowserDialog.on_toDate_dateChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_toDate_dateChanged" />
@@ -7641,9 +7659,10 @@
       <keyword name="HgNewProjectOptionsDialog" id="HgNewProjectOptionsDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog" />
       <keyword name="HgNewProjectOptionsDialog (Constructor)" id="HgNewProjectOptionsDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.__init__" />
       <keyword name="HgNewProjectOptionsDialog (Module)" id="HgNewProjectOptionsDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html" />
+      <keyword name="HgNewProjectOptionsDialog.__saveHistory" id="HgNewProjectOptionsDialog.__saveHistory" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.__saveHistory" />
       <keyword name="HgNewProjectOptionsDialog.getData" id="HgNewProjectOptionsDialog.getData" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.getData" />
-      <keyword name="HgNewProjectOptionsDialog.on_protocolCombo_activated" id="HgNewProjectOptionsDialog.on_protocolCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_protocolCombo_activated" />
       <keyword name="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" id="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" />
+      <keyword name="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" id="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" />
       <keyword name="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" id="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" />
       <keyword name="HgOptionsDialog" id="HgOptionsDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgOptionsDialog.html#HgOptionsDialog" />
       <keyword name="HgOptionsDialog (Constructor)" id="HgOptionsDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgOptionsDialog.html#HgOptionsDialog.__init__" />
@@ -7977,7 +7996,7 @@
       <keyword name="HgStatusDialog" id="HgStatusDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog" />
       <keyword name="HgStatusDialog (Constructor)" id="HgStatusDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__init__" />
       <keyword name="HgStatusDialog (Module)" id="HgStatusDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html" />
-      <keyword name="HgStatusDialog.__activeExtensionsChanged" id="HgStatusDialog.__activeExtensionsChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__activeExtensionsChanged" />
+      <keyword name="HgStatusDialog.__actionsMenuHovered" id="HgStatusDialog.__actionsMenuHovered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__actionsMenuHovered" />
       <keyword name="HgStatusDialog.__add" id="HgStatusDialog.__add" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__add" />
       <keyword name="HgStatusDialog.__commit" id="HgStatusDialog.__commit" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__commit" />
       <keyword name="HgStatusDialog.__commitDeselectAll" id="HgStatusDialog.__commitDeselectAll" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__commitDeselectAll" />
@@ -7991,9 +8010,11 @@
       <keyword name="HgStatusDialog.__generateItem" id="HgStatusDialog.__generateItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__generateItem" />
       <keyword name="HgStatusDialog.__generatorFinished" id="HgStatusDialog.__generatorFinished" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__generatorFinished" />
       <keyword name="HgStatusDialog.__getCommitableItems" id="HgStatusDialog.__getCommitableItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getCommitableItems" />
+      <keyword name="HgStatusDialog.__getCommitableUnselectedItems" id="HgStatusDialog.__getCommitableUnselectedItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getCommitableUnselectedItems" />
       <keyword name="HgStatusDialog.__getMissingItems" id="HgStatusDialog.__getMissingItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getMissingItems" />
       <keyword name="HgStatusDialog.__getModifiedItems" id="HgStatusDialog.__getModifiedItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getModifiedItems" />
       <keyword name="HgStatusDialog.__getUnversionedItems" id="HgStatusDialog.__getUnversionedItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getUnversionedItems" />
+      <keyword name="HgStatusDialog.__initActionsMenu" id="HgStatusDialog.__initActionsMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__initActionsMenu" />
       <keyword name="HgStatusDialog.__lfAdd" id="HgStatusDialog.__lfAdd" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__lfAdd" />
       <keyword name="HgStatusDialog.__procFinished" id="HgStatusDialog.__procFinished" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__procFinished" />
       <keyword name="HgStatusDialog.__processOutputLine" id="HgStatusDialog.__processOutputLine" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__processOutputLine" />
@@ -8005,27 +8026,16 @@
       <keyword name="HgStatusDialog.__restoreMissing" id="HgStatusDialog.__restoreMissing" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__restoreMissing" />
       <keyword name="HgStatusDialog.__revert" id="HgStatusDialog.__revert" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__revert" />
       <keyword name="HgStatusDialog.__sbsDiff" id="HgStatusDialog.__sbsDiff" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__sbsDiff" />
-      <keyword name="HgStatusDialog.__showAddMenu" id="HgStatusDialog.__showAddMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showAddMenu" />
-      <keyword name="HgStatusDialog.__showContextMenu" id="HgStatusDialog.__showContextMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showContextMenu" />
+      <keyword name="HgStatusDialog.__showActionsMenu" id="HgStatusDialog.__showActionsMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showActionsMenu" />
       <keyword name="HgStatusDialog.__showError" id="HgStatusDialog.__showError" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showError" />
-      <keyword name="HgStatusDialog.__updateButtons" id="HgStatusDialog.__updateButtons" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__updateButtons" />
-      <keyword name="HgStatusDialog.__updateCommitButton" id="HgStatusDialog.__updateCommitButton" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__updateCommitButton" />
       <keyword name="HgStatusDialog.closeEvent" id="HgStatusDialog.closeEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.closeEvent" />
       <keyword name="HgStatusDialog.keyPressEvent" id="HgStatusDialog.keyPressEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.keyPressEvent" />
-      <keyword name="HgStatusDialog.on_addButton_clicked" id="HgStatusDialog.on_addButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_addButton_clicked" />
       <keyword name="HgStatusDialog.on_buttonBox_clicked" id="HgStatusDialog.on_buttonBox_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_buttonBox_clicked" />
-      <keyword name="HgStatusDialog.on_commitButton_clicked" id="HgStatusDialog.on_commitButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_commitButton_clicked" />
-      <keyword name="HgStatusDialog.on_diffButton_clicked" id="HgStatusDialog.on_diffButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_diffButton_clicked" />
-      <keyword name="HgStatusDialog.on_forgetButton_clicked" id="HgStatusDialog.on_forgetButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_forgetButton_clicked" />
       <keyword name="HgStatusDialog.on_input_returnPressed" id="HgStatusDialog.on_input_returnPressed" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_input_returnPressed" />
       <keyword name="HgStatusDialog.on_passwordCheckBox_toggled" id="HgStatusDialog.on_passwordCheckBox_toggled" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_passwordCheckBox_toggled" />
       <keyword name="HgStatusDialog.on_refreshButton_clicked" id="HgStatusDialog.on_refreshButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_refreshButton_clicked" />
-      <keyword name="HgStatusDialog.on_restoreButton_clicked" id="HgStatusDialog.on_restoreButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_restoreButton_clicked" />
-      <keyword name="HgStatusDialog.on_revertButton_clicked" id="HgStatusDialog.on_revertButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_revertButton_clicked" />
-      <keyword name="HgStatusDialog.on_sbsDiffButton_clicked" id="HgStatusDialog.on_sbsDiffButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_sbsDiffButton_clicked" />
       <keyword name="HgStatusDialog.on_sendButton_clicked" id="HgStatusDialog.on_sendButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_sendButton_clicked" />
       <keyword name="HgStatusDialog.on_statusFilterCombo_activated" id="HgStatusDialog.on_statusFilterCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusFilterCombo_activated" />
-      <keyword name="HgStatusDialog.on_statusList_itemChanged" id="HgStatusDialog.on_statusList_itemChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusList_itemChanged" />
       <keyword name="HgStatusDialog.on_statusList_itemSelectionChanged" id="HgStatusDialog.on_statusList_itemSelectionChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusList_itemSelectionChanged" />
       <keyword name="HgStatusDialog.show" id="HgStatusDialog.show" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.show" />
       <keyword name="HgStatusDialog.start" id="HgStatusDialog.start" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.start" />
@@ -10711,6 +10721,7 @@
       <keyword name="PluginManager.activatePlugins" id="PluginManager.activatePlugins" ref="eric6.PluginManager.PluginManager.html#PluginManager.activatePlugins" />
       <keyword name="PluginManager.checkPluginEntry" id="PluginManager.checkPluginEntry" ref="eric6.PluginManager.PluginManager.html#PluginManager.checkPluginEntry" />
       <keyword name="PluginManager.checkPluginUpdatesAvailable" id="PluginManager.checkPluginUpdatesAvailable" ref="eric6.PluginManager.PluginManager.html#PluginManager.checkPluginUpdatesAvailable" />
+      <keyword name="PluginManager.clearPluginsPrivateData" id="PluginManager.clearPluginsPrivateData" ref="eric6.PluginManager.PluginManager.html#PluginManager.clearPluginsPrivateData" />
       <keyword name="PluginManager.deactivatePlugin" id="PluginManager.deactivatePlugin" ref="eric6.PluginManager.PluginManager.html#PluginManager.deactivatePlugin" />
       <keyword name="PluginManager.deactivateVcsPlugins" id="PluginManager.deactivateVcsPlugins" ref="eric6.PluginManager.PluginManager.html#PluginManager.deactivateVcsPlugins" />
       <keyword name="PluginManager.doShutdown" id="PluginManager.doShutdown" ref="eric6.PluginManager.PluginManager.html#PluginManager.doShutdown" />
@@ -11002,6 +11013,7 @@
       <keyword name="Project.checkDirty" id="Project.checkDirty" ref="eric6.Project.Project.html#Project.checkDirty" />
       <keyword name="Project.checkLanguageFiles" id="Project.checkLanguageFiles" ref="eric6.Project.Project.html#Project.checkLanguageFiles" />
       <keyword name="Project.checkVCSStatus" id="Project.checkVCSStatus" ref="eric6.Project.Project.html#Project.checkVCSStatus" />
+      <keyword name="Project.clearHistories" id="Project.clearHistories" ref="eric6.Project.Project.html#Project.clearHistories" />
       <keyword name="Project.clearRecent" id="Project.clearRecent" ref="eric6.Project.Project.html#Project.clearRecent" />
       <keyword name="Project.clearStatusMonitorCachedState" id="Project.clearStatusMonitorCachedState" ref="eric6.Project.Project.html#Project.clearStatusMonitorCachedState" />
       <keyword name="Project.closeProject" id="Project.closeProject" ref="eric6.Project.Project.html#Project.closeProject" />
@@ -11746,7 +11758,6 @@
       <keyword name="QScintilla (Package)" id="QScintilla (Package)" ref="index-eric6.QScintilla.html" />
       <keyword name="QThreadWrapper" id="QThreadWrapper" ref="eric6.DebugClients.Python.ThreadExtension.html#QThreadWrapper" />
       <keyword name="QThreadWrapper (Constructor)" id="QThreadWrapper (Constructor)" ref="eric6.DebugClients.Python.ThreadExtension.html#QThreadWrapper.__init__" />
-      <keyword name="QThreadWrapper.__bootstrapQThread" id="QThreadWrapper.__bootstrapQThread" ref="eric6.DebugClients.Python.ThreadExtension.html#QThreadWrapper.__bootstrapQThread" />
       <keyword name="QsciScintillaCompat" id="QsciScintillaCompat" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat" />
       <keyword name="QsciScintillaCompat (Constructor)" id="QsciScintillaCompat (Constructor)" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__init__" />
       <keyword name="QsciScintillaCompat (Module)" id="QsciScintillaCompat (Module)" ref="eric6.QScintilla.QsciScintillaCompat.html" />
@@ -14276,6 +14287,8 @@
       <keyword name="ThreadExtension" id="ThreadExtension" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension" />
       <keyword name="ThreadExtension (Constructor)" id="ThreadExtension (Constructor)" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.__init__" />
       <keyword name="ThreadExtension (Module)" id="ThreadExtension (Module)" ref="eric6.DebugClients.Python.ThreadExtension.html" />
+      <keyword name="ThreadExtension._bootstrap" id="ThreadExtension._bootstrap" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension._bootstrap" />
+      <keyword name="ThreadExtension._bootstrapQThread" id="ThreadExtension._bootstrapQThread" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension._bootstrapQThread" />
       <keyword name="ThreadExtension.attachThread" id="ThreadExtension.attachThread" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.attachThread" />
       <keyword name="ThreadExtension.dumpThreadList" id="ThreadExtension.dumpThreadList" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.dumpThreadList" />
       <keyword name="ThreadExtension.find_module" id="ThreadExtension.find_module" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.find_module" />
@@ -14286,6 +14299,8 @@
       <keyword name="ThreadExtension.threadTerminated" id="ThreadExtension.threadTerminated" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.threadTerminated" />
       <keyword name="ThreadExtension.unlockClient" id="ThreadExtension.unlockClient" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.unlockClient" />
       <keyword name="ThreadExtension.updateThreadList" id="ThreadExtension.updateThreadList" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.updateThreadList" />
+      <keyword name="ThreadWrapper" id="ThreadWrapper" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadWrapper" />
+      <keyword name="ThreadWrapper (Constructor)" id="ThreadWrapper (Constructor)" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadWrapper.__init__" />
       <keyword name="Token" id="Token" ref="eric6.DataViews.CodeMetrics.html#Token" />
       <keyword name="Token" id="Token" ref="eric6.E5Network.E5RFC6266.html#Token" />
       <keyword name="Token (Constructor)" id="Token (Constructor)" ref="eric6.DataViews.CodeMetrics.html#Token.__init__" />
@@ -15581,6 +15596,7 @@
       <keyword name="WebBrowserPage.acceptNavigationRequest" id="WebBrowserPage.acceptNavigationRequest" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.acceptNavigationRequest" />
       <keyword name="WebBrowserPage.certificateError" id="WebBrowserPage.certificateError" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.certificateError" />
       <keyword name="WebBrowserPage.execJavaScript" id="WebBrowserPage.execJavaScript" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.execJavaScript" />
+      <keyword name="WebBrowserPage.execPrintPage" id="WebBrowserPage.execPrintPage" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.execPrintPage" />
       <keyword name="WebBrowserPage.hitTestContent" id="WebBrowserPage.hitTestContent" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.hitTestContent" />
       <keyword name="WebBrowserPage.icon" id="WebBrowserPage.icon" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.icon" />
       <keyword name="WebBrowserPage.isJavaScriptEnabled" id="WebBrowserPage.isJavaScriptEnabled" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.isJavaScriptEnabled" />
@@ -15590,6 +15606,7 @@
       <keyword name="WebBrowserPage.on_refererWhitelistButton_clicked" id="WebBrowserPage.on_refererWhitelistButton_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.on_refererWhitelistButton_clicked" />
       <keyword name="WebBrowserPage.on_setCurrentPageButton_clicked" id="WebBrowserPage.on_setCurrentPageButton_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.on_setCurrentPageButton_clicked" />
       <keyword name="WebBrowserPage.on_startupCombo_currentIndexChanged" id="WebBrowserPage.on_startupCombo_currentIndexChanged" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.on_startupCombo_currentIndexChanged" />
+      <keyword name="WebBrowserPage.printCallback" id="WebBrowserPage.printCallback" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.printCallback" />
       <keyword name="WebBrowserPage.resultCallback" id="WebBrowserPage.resultCallback" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.resultCallback" />
       <keyword name="WebBrowserPage.runJavaScript" id="WebBrowserPage.runJavaScript" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.runJavaScript" />
       <keyword name="WebBrowserPage.save" id="WebBrowserPage.save" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.save" />
@@ -15599,6 +15616,12 @@
       <keyword name="WebBrowserPage.userAgent" id="WebBrowserPage.userAgent" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.userAgent" />
       <keyword name="WebBrowserPage.userAgentForUrl" id="WebBrowserPage.userAgentForUrl" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.userAgentForUrl" />
       <keyword name="WebBrowserSnap (Module)" id="WebBrowserSnap (Module)" ref="eric6.WebBrowser.WebBrowserSnap.html" />
+      <keyword name="WebBrowserSpellCheckingPage" id="WebBrowserSpellCheckingPage" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage" />
+      <keyword name="WebBrowserSpellCheckingPage (Constructor)" id="WebBrowserSpellCheckingPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.__init__" />
+      <keyword name="WebBrowserSpellCheckingPage (Module)" id="WebBrowserSpellCheckingPage (Module)" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html" />
+      <keyword name="WebBrowserSpellCheckingPage.__createLanguageString" id="WebBrowserSpellCheckingPage.__createLanguageString" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.__createLanguageString" />
+      <keyword name="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" id="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" />
+      <keyword name="WebBrowserSpellCheckingPage.save" id="WebBrowserSpellCheckingPage.save" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.save" />
       <keyword name="WebBrowserTabBar" id="WebBrowserTabBar" ref="eric6.WebBrowser.WebBrowserTabBar.html#WebBrowserTabBar" />
       <keyword name="WebBrowserTabBar (Constructor)" id="WebBrowserTabBar (Constructor)" ref="eric6.WebBrowser.WebBrowserTabBar.html#WebBrowserTabBar.__init__" />
       <keyword name="WebBrowserTabBar (Module)" id="WebBrowserTabBar (Module)" ref="eric6.WebBrowser.WebBrowserTabBar.html" />
@@ -15626,6 +15649,7 @@
       <keyword name="WebBrowserTabWidget.__pathSelected" id="WebBrowserTabWidget.__pathSelected" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__pathSelected" />
       <keyword name="WebBrowserTabWidget.__pdfGeneratedForPrinting" id="WebBrowserTabWidget.__pdfGeneratedForPrinting" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__pdfGeneratedForPrinting" />
       <keyword name="WebBrowserTabWidget.__pdfGeneratedForSave" id="WebBrowserTabWidget.__pdfGeneratedForSave" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__pdfGeneratedForSave" />
+      <keyword name="WebBrowserTabWidget.__printPreviewRequested" id="WebBrowserTabWidget.__printPreviewRequested" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__printPreviewRequested" />
       <keyword name="WebBrowserTabWidget.__recentlyAudibleChanged" id="WebBrowserTabWidget.__recentlyAudibleChanged" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__recentlyAudibleChanged" />
       <keyword name="WebBrowserTabWidget.__showContextMenu" id="WebBrowserTabWidget.__showContextMenu" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__showContextMenu" />
       <keyword name="WebBrowserTabWidget.__showNavigationMenu" id="WebBrowserTabWidget.__showNavigationMenu" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__showNavigationMenu" />
@@ -15688,6 +15712,7 @@
       <keyword name="WebBrowserView.__downloadImage" id="WebBrowserView.__downloadImage" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__downloadImage" />
       <keyword name="WebBrowserView.__downloadLink" id="WebBrowserView.__downloadLink" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__downloadLink" />
       <keyword name="WebBrowserView.__downloadMedia" id="WebBrowserView.__downloadMedia" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__downloadMedia" />
+      <keyword name="WebBrowserView.__getSavePageFileNameAndFormat" id="WebBrowserView.__getSavePageFileNameAndFormat" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__getSavePageFileNameAndFormat" />
       <keyword name="WebBrowserView.__iconLoaded" id="WebBrowserView.__iconLoaded" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__iconLoaded" />
       <keyword name="WebBrowserView.__iconUrlChanged" id="WebBrowserView.__iconUrlChanged" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__iconUrlChanged" />
       <keyword name="WebBrowserView.__isUrlValid" id="WebBrowserView.__isUrlValid" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__isUrlValid" />
@@ -15704,6 +15729,7 @@
       <keyword name="WebBrowserView.__reloadAllSpeedDials" id="WebBrowserView.__reloadAllSpeedDials" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__reloadAllSpeedDials" />
       <keyword name="WebBrowserView.__renderPreview" id="WebBrowserView.__renderPreview" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__renderPreview" />
       <keyword name="WebBrowserView.__renderProcessTerminated" id="WebBrowserView.__renderProcessTerminated" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__renderProcessTerminated" />
+      <keyword name="WebBrowserView.__replaceMisspelledWord" id="WebBrowserView.__replaceMisspelledWord" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__replaceMisspelledWord" />
       <keyword name="WebBrowserView.__resetSpeedDials" id="WebBrowserView.__resetSpeedDials" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__resetSpeedDials" />
       <keyword name="WebBrowserView.__searchDefaultRequested" id="WebBrowserView.__searchDefaultRequested" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__searchDefaultRequested" />
       <keyword name="WebBrowserView.__searchImage" id="WebBrowserView.__searchImage" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__searchImage" />
@@ -16000,6 +16026,7 @@
       <keyword name="WebHitTestResult.mediaUrl" id="WebHitTestResult.mediaUrl" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.mediaUrl" />
       <keyword name="WebHitTestResult.pos" id="WebHitTestResult.pos" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.pos" />
       <keyword name="WebHitTestResult.tagName" id="WebHitTestResult.tagName" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.tagName" />
+      <keyword name="WebHitTestResult.updateWithContextMenuData" id="WebHitTestResult.updateWithContextMenuData" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.updateWithContextMenuData" />
       <keyword name="WebHitTestResult.viewportPos" id="WebHitTestResult.viewportPos" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.viewportPos" />
       <keyword name="WebIconDialog" id="WebIconDialog" ref="eric6.WebBrowser.Tools.WebIconDialog.html#WebIconDialog" />
       <keyword name="WebIconDialog (Constructor)" id="WebIconDialog (Constructor)" ref="eric6.WebBrowser.Tools.WebIconDialog.html#WebIconDialog.__init__" />
@@ -16287,6 +16314,7 @@
       <keyword name="cleanupSource" id="cleanupSource" ref="eric6.install-debugclients.html#cleanupSource" />
       <keyword name="cleanupSource" id="cleanupSource" ref="eric6.install.html#cleanupSource" />
       <keyword name="cleanupSource (Module)" id="cleanupSource (Module)" ref="eric6.cleanupSource.html" />
+      <keyword name="clearPrivateData" id="clearPrivateData" ref="eric6.Plugins.PluginVcsMercurial.html#clearPrivateData" />
       <keyword name="codeStyleBatchCheck" id="codeStyleBatchCheck" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleBatchCheck" />
       <keyword name="codeStyleCheck" id="codeStyleCheck" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleCheck" />
       <keyword name="compactPath" id="compactPath" ref="eric6.Utilities.__init__.html#compactPath" />
@@ -16368,6 +16396,7 @@
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.ViewmanagerPage.html#create" />
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html#create" />
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#create" />
+      <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#create" />
       <keyword name="createActionGroup" id="createActionGroup" ref="eric6.E5Gui.E5Action.html#createActionGroup" />
       <keyword name="createConfig" id="createConfig" ref="eric6.install.html#createConfig" />
       <keyword name="createConfigurationPage" id="createConfigurationPage" ref="eric6.Plugins.PluginVcsMercurial.html#createConfigurationPage" />
@@ -17650,6 +17679,7 @@
       <file>eric6.Preferences.ConfigurationPages.ViewmanagerPage.html</file>
       <file>eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html</file>
       <file>eric6.Preferences.ConfigurationPages.WebBrowserPage.html</file>
+      <file>eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html</file>
       <file>eric6.Preferences.MouseClickDialog.html</file>
       <file>eric6.Preferences.PreferencesLexer.html</file>
       <file>eric6.Preferences.ProgramsDialog.html</file>
--- a/Documentation/Source/eric6.DebugClients.Python.DebugBase.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.DebugClients.Python.DebugBase.html	Fri Mar 03 18:34:21 2017 +0100
@@ -83,6 +83,9 @@
 <td><a href="#DebugBase.__extractExceptionName">__extractExceptionName</a></td>
 <td>Private method to extract the exception name given the exception type object.</td>
 </tr><tr>
+<td><a href="#DebugBase.__extractSystemExitMessage">__extractSystemExitMessage</a></td>
+<td>Private method to get the SystemExit code and message.</td>
+</tr><tr>
 <td><a href="#DebugBase.__extract_stack">__extract_stack</a></td>
 <td>Private member to return a list of stack frames.</td>
 </tr><tr>
@@ -250,6 +253,26 @@
 <dd>
 exception name (string)
 </dd>
+</dl><a NAME="DebugBase.__extractSystemExitMessage" ID="DebugBase.__extractSystemExitMessage"></a>
+<h4>DebugBase.__extractSystemExitMessage</h4>
+<b>__extractSystemExitMessage</b>(<i>excinfo</i>)
+<p>
+        Private method to get the SystemExit code and message.
+</p><dl>
+<dt><i>excinfo</i> (tuple(Exception, excval object, traceback frame object))</dt>
+<dd>
+details about the SystemExit exception
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+SystemExit code and message
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int, str
+</dd>
 </dl><a NAME="DebugBase.__extract_stack" ID="DebugBase.__extract_stack"></a>
 <h4>DebugBase.__extract_stack</h4>
 <b>__extract_stack</b>(<i>exctb</i>)
@@ -494,7 +517,7 @@
 </dd>
 </dl><a NAME="DebugBase.run" ID="DebugBase.run"></a>
 <h4>DebugBase.run</h4>
-<b>run</b>(<i>cmd, globals=None, locals=None</i>)
+<b>run</b>(<i>cmd, globals=None, locals=None, debug=True</i>)
 <p>
         Public method to start a given command under debugger control.
 </p><dl>
@@ -507,6 +530,9 @@
 </dd><dt><i>locals=</i> (dict)</dt>
 <dd>
 dictionary of local variables for cmd
+</dd><dt><i>debug=</i> (bool)</dt>
+<dd>
+flag if command should run under debugger control
 </dd>
 </dl><a NAME="DebugBase.setRecursionDepth" ID="DebugBase.setRecursionDepth"></a>
 <h4>DebugBase.setRecursionDepth</h4>
@@ -672,14 +698,11 @@
 </dd>
 </dl><a NAME="DebugBase.user_exception" ID="DebugBase.user_exception"></a>
 <h4>DebugBase.user_exception</h4>
-<b>user_exception</b>(<i>frame, excinfo, unhandled=False</i>)
+<b>user_exception</b>(<i>excinfo, unhandled=False</i>)
 <p>
         Public method reimplemented to report an exception to the debug server.
 </p><dl>
-<dt><i>frame</i> (frame object)</dt>
-<dd>
-the frame object
-</dd><dt><i>excinfo</i> (tuple(Exception, excval object, traceback frame object))</dt>
+<dt><i>excinfo</i> (tuple(Exception, excval object, traceback frame object))</dt>
 <dd>
 details about the exception
 </dd><dt><i>unhandled=</i> (bool)</dt>
--- a/Documentation/Source/eric6.DebugClients.Python.ThreadExtension.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.DebugClients.Python.ThreadExtension.html	Fri Mar 03 18:34:21 2017 +0100
@@ -25,16 +25,19 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>None</td></tr>
+<tr><td>_qtThreadNumber</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
 <tr>
 <td><a href="#QThreadWrapper">QThreadWrapper</a></td>
-<td></td>
+<td>Wrapper class for *.QThread.</td>
 </tr><tr>
 <td><a href="#ThreadExtension">ThreadExtension</a></td>
 <td>Class implementing the thread support for the debugger.</td>
+</tr><tr>
+<td><a href="#ThreadWrapper">ThreadWrapper</a></td>
+<td>Wrapper class for threading.Thread.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -44,12 +47,14 @@
 <hr /><hr />
 <a NAME="QThreadWrapper" ID="QThreadWrapper"></a>
 <h2>QThreadWrapper</h2>
-
+<p>
+ Wrapper class for *.QThread. 
+</p>
 <h3>Derived from</h3>
 module.QThread
 <h3>Class Attributes</h3>
 <table>
-<tr><td>__qtThreadNumber</td></tr>
+<tr><td>None</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
@@ -60,9 +65,6 @@
 <tr>
 <td><a href="#QThreadWrapper.__init__">QThreadWrapper</a></td>
 <td></td>
-</tr><tr>
-<td><a href="#QThreadWrapper.__bootstrapQThread">__bootstrapQThread</a></td>
-<td></td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -72,9 +74,6 @@
 <a NAME="QThreadWrapper.__init__" ID="QThreadWrapper.__init__"></a>
 <h4>QThreadWrapper (Constructor)</h4>
 <b>QThreadWrapper</b>(<i>*args, **kwargs</i>)
-<a NAME="QThreadWrapper.__bootstrapQThread" ID="QThreadWrapper.__bootstrapQThread"></a>
-<h4>QThreadWrapper.__bootstrapQThread</h4>
-<b>__bootstrapQThread</b>(<i></i>)
 
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
@@ -102,6 +101,12 @@
 <td><a href="#ThreadExtension.__init__">ThreadExtension</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#ThreadExtension._bootstrap">_bootstrap</a></td>
+<td>Bootstrap for threading, which reports exceptions correctly.</td>
+</tr><tr>
+<td><a href="#ThreadExtension._bootstrapQThread">_bootstrapQThread</a></td>
+<td>Bootstrap for QThread, which reports exceptions correctly.</td>
+</tr><tr>
 <td><a href="#ThreadExtension.attachThread">attachThread</a></td>
 <td>Public method to setup a standard thread for DebugClient to debug.</td>
 </tr><tr>
@@ -142,7 +147,27 @@
 <b>ThreadExtension</b>(<i></i>)
 <p>
         Constructor
-</p><a NAME="ThreadExtension.attachThread" ID="ThreadExtension.attachThread"></a>
+</p><a NAME="ThreadExtension._bootstrap" ID="ThreadExtension._bootstrap"></a>
+<h4>ThreadExtension._bootstrap</h4>
+<b>_bootstrap</b>(<i>run</i>)
+<p>
+                Bootstrap for threading, which reports exceptions correctly.
+</p><dl>
+<dt><i>run</i> (method pointer)</dt>
+<dd>
+the run method of threading.Thread
+</dd>
+</dl><a NAME="ThreadExtension._bootstrapQThread" ID="ThreadExtension._bootstrapQThread"></a>
+<h4>ThreadExtension._bootstrapQThread</h4>
+<b>_bootstrapQThread</b>(<i>run</i>)
+<p>
+                Bootstrap for QThread, which reports exceptions correctly.
+</p><dl>
+<dt><i>run</i> (method pointer)</dt>
+<dd>
+the run method of *.QThread
+</dd>
+</dl><a NAME="ThreadExtension.attachThread" ID="ThreadExtension.attachThread"></a>
 <h4>ThreadExtension.attachThread</h4>
 <b>attachThread</b>(<i>target=None, args=None, kwargs={}, mainThread=False</i>)
 <p>
@@ -291,5 +316,37 @@
         Public method to update the list of running threads.
 </p>
 <div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="ThreadWrapper" ID="ThreadWrapper"></a>
+<h2>ThreadWrapper</h2>
+<p>
+ Wrapper class for threading.Thread. 
+</p>
+<h3>Derived from</h3>
+module.Thread
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#ThreadWrapper.__init__">ThreadWrapper</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="ThreadWrapper.__init__" ID="ThreadWrapper.__init__"></a>
+<h4>ThreadWrapper (Constructor)</h4>
+<b>ThreadWrapper</b>(<i>*args, **kwargs</i>)
+
+<div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.PluginManager.PluginManager.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.PluginManager.PluginManager.html	Fri Mar 03 18:34:21 2017 +0100
@@ -131,6 +131,9 @@
 <td><a href="#PluginManager.checkPluginUpdatesAvailable">checkPluginUpdatesAvailable</a></td>
 <td>Public method to check the availability of updates of plug-ins.</td>
 </tr><tr>
+<td><a href="#PluginManager.clearPluginsPrivateData">clearPluginsPrivateData</a></td>
+<td>Public method to clear the private data of plug-ins of a specified type.</td>
+</tr><tr>
 <td><a href="#PluginManager.deactivatePlugin">deactivatePlugin</a></td>
 <td>Public method to deactivate a plugin.</td>
 </tr><tr>
@@ -437,7 +440,21 @@
 <b>checkPluginUpdatesAvailable</b>(<i></i>)
 <p>
         Public method to check the availability of updates of plug-ins.
-</p><a NAME="PluginManager.deactivatePlugin" ID="PluginManager.deactivatePlugin"></a>
+</p><a NAME="PluginManager.clearPluginsPrivateData" ID="PluginManager.clearPluginsPrivateData"></a>
+<h4>PluginManager.clearPluginsPrivateData</h4>
+<b>clearPluginsPrivateData</b>(<i>type_</i>)
+<p>
+        Public method to clear the private data of plug-ins of a specified
+        type.
+</p><p>
+        Plugins supporting this functionality must support the module function
+        clearPrivateData() and have the module level attribute pluginType.
+</p><dl>
+<dt><i>type_</i></dt>
+<dd>
+type of the plugin to be activated (string)
+</dd>
+</dl><a NAME="PluginManager.deactivatePlugin" ID="PluginManager.deactivatePlugin"></a>
 <h4>PluginManager.deactivatePlugin</h4>
 <b>deactivatePlugin</b>(<i>name, onDemand=False</i>)
 <p>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html	Fri Mar 03 18:34:21 2017 +0100
@@ -23,7 +23,7 @@
 
 <h3>Global Attributes</h3>
 <table>
-<tr><td>ARITHMETIC_OP</td></tr><tr><td>BENCHMARK_KEYS</td></tr><tr><td>COMMENT_WITH_NL</td></tr><tr><td>COMPARE_NEGATIVE_REGEX</td></tr><tr><td>COMPARE_SINGLETON_REGEX</td></tr><tr><td>COMPARE_TYPE_REGEX</td></tr><tr><td>DEFAULT_EXCLUDE</td></tr><tr><td>DEFAULT_IGNORE</td></tr><tr><td>DOCSTRING_REGEX</td></tr><tr><td>ERRORCODE_REGEX</td></tr><tr><td>EXTRANEOUS_WHITESPACE_REGEX</td></tr><tr><td>HUNK_REGEX</td></tr><tr><td>INDENT_REGEX</td></tr><tr><td>KEYWORDS</td></tr><tr><td>KEYWORD_REGEX</td></tr><tr><td>LAMBDA_REGEX</td></tr><tr><td>MAX_LINE_LENGTH</td></tr><tr><td>NEWLINE</td></tr><tr><td>OPERATOR_REGEX</td></tr><tr><td>PROJECT_CONFIG</td></tr><tr><td>PyCF_ONLY_AST</td></tr><tr><td>RAISE_COMMA_REGEX</td></tr><tr><td>REPORT_FORMAT</td></tr><tr><td>RERAISE_COMMA_REGEX</td></tr><tr><td>SINGLETONS</td></tr><tr><td>SKIP_COMMENTS</td></tr><tr><td>SKIP_TOKENS</td></tr><tr><td>TESTSUITE_PATH</td></tr><tr><td>UNARY_OPERATORS</td></tr><tr><td>WHITESPACE</td></tr><tr><td>WHITESPACE_AFTER_COMMA_REGEX</td></tr><tr><td>WS_NEEDED_OPERATORS</td></tr><tr><td>WS_OPTIONAL_OPERATORS</td></tr><tr><td>__version__</td></tr><tr><td>_checks</td></tr><tr><td>noqa</td></tr>
+<tr><td>ARITHMETIC_OP</td></tr><tr><td>BENCHMARK_KEYS</td></tr><tr><td>COMMENT_WITH_NL</td></tr><tr><td>COMPARE_NEGATIVE_REGEX</td></tr><tr><td>COMPARE_SINGLETON_REGEX</td></tr><tr><td>COMPARE_TYPE_REGEX</td></tr><tr><td>DEFAULT_EXCLUDE</td></tr><tr><td>DEFAULT_IGNORE</td></tr><tr><td>DOCSTRING_REGEX</td></tr><tr><td>DUNDER_REGEX</td></tr><tr><td>ERRORCODE_REGEX</td></tr><tr><td>EXTRANEOUS_WHITESPACE_REGEX</td></tr><tr><td>HUNK_REGEX</td></tr><tr><td>INDENT_REGEX</td></tr><tr><td>KEYWORDS</td></tr><tr><td>KEYWORD_REGEX</td></tr><tr><td>LAMBDA_REGEX</td></tr><tr><td>MAX_LINE_LENGTH</td></tr><tr><td>NEWLINE</td></tr><tr><td>OPERATOR_REGEX</td></tr><tr><td>PROJECT_CONFIG</td></tr><tr><td>PyCF_ONLY_AST</td></tr><tr><td>RAISE_COMMA_REGEX</td></tr><tr><td>REPORT_FORMAT</td></tr><tr><td>RERAISE_COMMA_REGEX</td></tr><tr><td>SINGLETONS</td></tr><tr><td>SKIP_COMMENTS</td></tr><tr><td>SKIP_TOKENS</td></tr><tr><td>STARTSWITH_DEF_REGEX</td></tr><tr><td>STARTSWITH_INDENT_STATEMENT_REGEX</td></tr><tr><td>STARTSWITH_TOP_LEVEL_REGEX</td></tr><tr><td>TESTSUITE_PATH</td></tr><tr><td>UNARY_OPERATORS</td></tr><tr><td>WHITESPACE</td></tr><tr><td>WHITESPACE_AFTER_COMMA_REGEX</td></tr><tr><td>WS_NEEDED_OPERATORS</td></tr><tr><td>WS_OPTIONAL_OPERATORS</td></tr><tr><td>__version__</td></tr><tr><td>_checks</td></tr><tr><td>noqa</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
@@ -801,6 +801,7 @@
     E303: def a():\n\n\n\n    pass
     E304: @decorator\n\ndef a():\n    pass
     E305: def a():\n    pass\na()
+    E306: def a():\n    def b():\n        pass\n    def c():\n        pass
 </p>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
@@ -916,7 +917,6 @@
     E702: do_one(); do_two(); do_three()
     E703: do_four();  # useless semicolon
     E704: def f(x): return 2*x
-    E705: async def f(x): return 2*x
     E731: f = lambda x: 2*x
 </p>
 <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.Plugins.PluginVcsMercurial.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.PluginVcsMercurial.html	Fri Mar 03 18:34:21 2017 +0100
@@ -37,6 +37,9 @@
 <h3>Functions</h3>
 <table>
 <tr>
+<td><a href="#clearPrivateData">clearPrivateData</a></td>
+<td>Module function to clear the private data of the plug-in.</td>
+</tr><tr>
 <td><a href="#createConfigurationPage">createConfigurationPage</a></td>
 <td>Module function to create the configuration page.</td>
 </tr><tr>
@@ -66,11 +69,17 @@
 QObject
 <h3>Class Attributes</h3>
 <table>
-<tr><td>None</td></tr>
+<tr><td>MercurialDefaults</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
-<tr><td>None</td></tr>
+<tr>
+<td><a href="#VcsMercurialPlugin.getPreferences">getPreferences</a></td>
+<td>Class method to retrieve the various settings.</td>
+</tr><tr>
+<td><a href="#VcsMercurialPlugin.setPreferences">setPreferences</a></td>
+<td>Class method to store the various settings.</td>
+</tr>
 </table>
 <h3>Methods</h3>
 <table>
@@ -90,9 +99,6 @@
 <td><a href="#VcsMercurialPlugin.getGlobalOptions">getGlobalOptions</a></td>
 <td>Public method to build a list of global options.</td>
 </tr><tr>
-<td><a href="#VcsMercurialPlugin.getPreferences">getPreferences</a></td>
-<td>Public method to retrieve the various settings.</td>
-</tr><tr>
 <td><a href="#VcsMercurialPlugin.getProjectHelper">getProjectHelper</a></td>
 <td>Public method to get a reference to the project helper object.</td>
 </tr><tr>
@@ -104,16 +110,41 @@
 </tr><tr>
 <td><a href="#VcsMercurialPlugin.prepareUnload">prepareUnload</a></td>
 <td>Public method to prepare for an unload.</td>
-</tr><tr>
-<td><a href="#VcsMercurialPlugin.setPreferences">setPreferences</a></td>
-<td>Public method to store the various settings.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
 <table>
 <tr><td>None</td></tr>
 </table>
-<a NAME="VcsMercurialPlugin.__init__" ID="VcsMercurialPlugin.__init__"></a>
+<a NAME="VcsMercurialPlugin.getPreferences" ID="VcsMercurialPlugin.getPreferences"></a>
+<h4>VcsMercurialPlugin.getPreferences (class method)</h4>
+<b>getPreferences</b>(<i>key</i>)
+<p>
+        Class method to retrieve the various settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the value to get
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+the requested setting
+</dd>
+</dl><a NAME="VcsMercurialPlugin.setPreferences" ID="VcsMercurialPlugin.setPreferences"></a>
+<h4>VcsMercurialPlugin.setPreferences (class method)</h4>
+<b>setPreferences</b>(<i>key, value</i>)
+<p>
+        Class method to store the various settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the setting to be set
+</dd><dt><i>value</i></dt>
+<dd>
+the value to be set
+</dd>
+</dl><a NAME="VcsMercurialPlugin.__init__" ID="VcsMercurialPlugin.__init__"></a>
 <h4>VcsMercurialPlugin (Constructor)</h4>
 <b>VcsMercurialPlugin</b>(<i>ui</i>)
 <p>
@@ -159,21 +190,6 @@
 <dd>
 list of global options (list of string)
 </dd>
-</dl><a NAME="VcsMercurialPlugin.getPreferences" ID="VcsMercurialPlugin.getPreferences"></a>
-<h4>VcsMercurialPlugin.getPreferences</h4>
-<b>getPreferences</b>(<i>key</i>)
-<p>
-        Public method to retrieve the various settings.
-</p><dl>
-<dt><i>key</i></dt>
-<dd>
-the key of the value to get
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-the requested setting
-</dd>
 </dl><a NAME="VcsMercurialPlugin.getProjectHelper" ID="VcsMercurialPlugin.getProjectHelper"></a>
 <h4>VcsMercurialPlugin.getProjectHelper</h4>
 <b>getProjectHelper</b>(<i></i>)
@@ -208,20 +224,15 @@
 <b>prepareUnload</b>(<i></i>)
 <p>
         Public method to prepare for an unload.
-</p><a NAME="VcsMercurialPlugin.setPreferences" ID="VcsMercurialPlugin.setPreferences"></a>
-<h4>VcsMercurialPlugin.setPreferences</h4>
-<b>setPreferences</b>(<i>key, value</i>)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="clearPrivateData" ID="clearPrivateData"></a>
+<h2>clearPrivateData</h2>
+<b>clearPrivateData</b>(<i></i>)
 <p>
-        Public method to store the various settings.
-</p><dl>
-<dt><i>key</i></dt>
-<dd>
-the key of the setting to be set
-</dd><dt><i>value</i></dt>
-<dd>
-the value to be set
-</dd>
-</dl>
+    Module function to clear the private data of the plug-in.
+</p>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
 <a NAME="createConfigurationPage" ID="createConfigurationPage"></a>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.Config.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.Config.html	Fri Mar 03 18:34:21 2017 +0100
@@ -25,7 +25,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>ConfigHgProtocols</td></tr>
+<tr><td>ConfigHgSchemes</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html	Fri Mar 03 18:34:21 2017 +0100
@@ -73,13 +73,16 @@
 </table>
 <a NAME="HgFetchDialog.__init__" ID="HgFetchDialog.__init__"></a>
 <h4>HgFetchDialog (Constructor)</h4>
-<b>HgFetchDialog</b>(<i>parent=None</i>)
+<b>HgFetchDialog</b>(<i>vcs, parent=None</i>)
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>vcs</i> (Hg)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the Mercurial vcs object
+</dd><dt><i>parent</i> (QWidget)</dt>
+<dd>
+reference to the parent widget
 </dd>
 </dl><a NAME="HgFetchDialog.getData" ID="HgFetchDialog.getData"></a>
 <h4>HgFetchDialog.getData</h4>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html	Fri Mar 03 18:34:21 2017 +0100
@@ -80,18 +80,27 @@
 </dd>
 </dl><a NAME="Fetch.hgFetch" ID="Fetch.hgFetch"></a>
 <h4>Fetch.hgFetch</h4>
-<b>hgFetch</b>(<i>name</i>)
+<b>hgFetch</b>(<i>name, revisions=None</i>)
 <p>
         Public method to fetch changes from a remote repository.
 </p><dl>
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-file/directory name (string)
+directory name of the project to be fetched to
+</dd><dt><i>revisions</i> (list of str)</dt>
+<dd>
+list of revisions to be pulled
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-flag indicating that the project should be reread (boolean)
+flag indicating, that the update contained an add
+            or delete
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.html	Fri Mar 03 18:34:21 2017 +0100
@@ -89,13 +89,16 @@
 </dd>
 </dl><a NAME="Gpg.hgGpgSign" ID="Gpg.hgGpgSign"></a>
 <h4>Gpg.hgGpgSign</h4>
-<b>hgGpgSign</b>(<i>path</i>)
+<b>hgGpgSign</b>(<i>path, revisions=None</i>)
 <p>
         Public method used to list the available bookmarks.
 </p><dl>
-<dt><i>path</i></dt>
+<dt><i>path</i> (str)</dt>
 <dd>
-directory name of the project (string)
+directory name of the project
+</dd><dt><i>revisions</i> (list of str)</dt>
+<dd>
+list containing the revisions to be signed
 </dd>
 </dl><a NAME="Gpg.hgGpgSignatures" ID="Gpg.hgGpgSignatures"></a>
 <h4>Gpg.hgGpgSignatures</h4>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Fri Mar 03 18:34:21 2017 +0100
@@ -63,6 +63,9 @@
 <td><a href="#HgLogBrowserDialog.__actionMode">__actionMode</a></td>
 <td>Private method to get the selected action mode.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__actionsMenuHovered">__actionsMenuHovered</a></td>
+<td>Private slot to show the tooltip for an action menu entry.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__addFinishCallback">__addFinishCallback</a></td>
 <td>Private method to add a method to be called once the process finished.</td>
 </tr><tr>
@@ -75,8 +78,8 @@
 <td><a href="#HgLogBrowserDialog.__branchColor">__branchColor</a></td>
 <td>Private method to calculate a color for a given branch name.</td>
 </tr><tr>
-<td><a href="#HgLogBrowserDialog.__diffRevisions">__diffRevisions</a></td>
-<td>Private method to do a diff of two revisions.</td>
+<td><a href="#HgLogBrowserDialog.__bundleActTriggered">__bundleActTriggered</a></td>
+<td>Private slot to create a changegroup file.</td>
 </tr><tr>
 <td><a href="#HgLogBrowserDialog.__fetchActTriggered">__fetchActTriggered</a></td>
 <td>Private slot to fetch changes from a remote repository.</td>
@@ -90,18 +93,24 @@
 <td><a href="#HgLogBrowserDialog.__finish">__finish</a></td>
 <td>Private slot called when the process finished or the user pressed the button.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__generateDetailsTableText">__generateDetailsTableText</a></td>
+<td>Private method to generate an HTML table with the details of the given changeset.</td>
+</tr><tr>
+<td><a href="#HgLogBrowserDialog.__generateDiffs">__generateDiffs</a></td>
+<td>Private slot to generate diff outputs for the selected item.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__generateEdges">__generateEdges</a></td>
 <td>Private method to generate edge info for the give data.</td>
 </tr><tr>
-<td><a href="#HgLogBrowserDialog.__generateFileItem">__generateFileItem</a></td>
-<td>Private method to generate a changed files tree entry.</td>
-</tr><tr>
 <td><a href="#HgLogBrowserDialog.__generateIcon">__generateIcon</a></td>
 <td>Private method to generate an icon containing the revision tree for the given data.</td>
 </tr><tr>
 <td><a href="#HgLogBrowserDialog.__generateLogItem">__generateLogItem</a></td>
 <td>Private method to generate a log tree entry.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__generatorFinished">__generatorFinished</a></td>
+<td>Private slot connected to the finished signal of the diff generator.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__getClosedBranches">__getClosedBranches</a></td>
 <td>Private method to get the list of closed branches.</td>
 </tr><tr>
@@ -117,6 +126,12 @@
 <td><a href="#HgLogBrowserDialog.__getRevisionOfTag">__getRevisionOfTag</a></td>
 <td>Private method to get the revision of a tag.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__gpgSignActTriggered">__gpgSignActTriggered</a></td>
+<td>Private slot to sign the selected revisions.</td>
+</tr><tr>
+<td><a href="#HgLogBrowserDialog.__gpgVerifyActTriggered">__gpgVerifyActTriggered</a></td>
+<td>Private slot to verify the signatures of a selected revisions.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__graftActTriggered">__graftActTriggered</a></td>
 <td>Private slot to handle the Copy Changesets action.</td>
 </tr><tr>
@@ -132,6 +147,9 @@
 <td><a href="#HgLogBrowserDialog.__lfPullActTriggered">__lfPullActTriggered</a></td>
 <td>Private slot to pull large files of selected revisions.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__mergeActTriggered">__mergeActTriggered</a></td>
+<td>Private slot to merge the working directory with the selected changeset.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__modifyForLargeFiles">__modifyForLargeFiles</a></td>
 <td>Private method to convert the displayed file name for a large file.</td>
 </tr><tr>
@@ -162,6 +180,9 @@
 <td><a href="#HgLogBrowserDialog.__readStdout">__readStdout</a></td>
 <td>Private slot to handle the readyReadStandardOutput signal.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__reloadGeometry">__reloadGeometry</a></td>
+<td>Private method to restore the geometry.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__resetUI">__resetUI</a></td>
 <td>Private method to reset the user interface.</td>
 </tr><tr>
@@ -174,9 +195,15 @@
 <td><a href="#HgLogBrowserDialog.__resortFiles">__resortFiles</a></td>
 <td>Private method to resort the changed files tree.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__restoreSplitterStates">__restoreSplitterStates</a></td>
+<td>Private method to restore the state of the various splitters.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__revisionClicked">__revisionClicked</a></td>
 <td>Private slot to handle the anchorClicked signal of the changeset details pane.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__selectAllActTriggered">__selectAllActTriggered</a></td>
+<td>Private method to select or unselect all log entries.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__showError">__showError</a></td>
 <td>Private slot to show some error.</td>
 </tr><tr>
@@ -189,11 +216,17 @@
 <td><a href="#HgLogBrowserDialog.__tagActTriggered">__tagActTriggered</a></td>
 <td>Private slot to tag the selected revision.</td>
 </tr><tr>
-<td><a href="#HgLogBrowserDialog.__updateDiffButtons">__updateDiffButtons</a></td>
-<td>Private slot to update the enabled status of the diff buttons.</td>
+<td><a href="#HgLogBrowserDialog.__unbundleActTriggered">__unbundleActTriggered</a></td>
+<td>Private slot to apply the currently previewed bundle file.</td>
+</tr><tr>
+<td><a href="#HgLogBrowserDialog.__updateDetailsAndFiles">__updateDetailsAndFiles</a></td>
+<td>Private slot to update the details and file changes panes.</td>
 </tr><tr>
-<td><a href="#HgLogBrowserDialog.__updateGui">__updateGui</a></td>
-<td>Private slot to update GUI elements except tool menu actions.</td>
+<td><a href="#HgLogBrowserDialog.__updateFilesTree">__updateFilesTree</a></td>
+<td>Private method to update the files tree with changes of the given item.</td>
+</tr><tr>
+<td><a href="#HgLogBrowserDialog.__updateSbsSelectLabel">__updateSbsSelectLabel</a></td>
+<td>Private slot to update the enabled status of the diff buttons.</td>
 </tr><tr>
 <td><a href="#HgLogBrowserDialog.__updateToolMenuActions">__updateToolMenuActions</a></td>
 <td>Private slot to update the status of the tool menu actions and the tool menu button.</td>
@@ -213,14 +246,8 @@
 <td><a href="#HgLogBrowserDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
 <td>Private slot called by a button of the button box clicked.</td>
 </tr><tr>
-<td><a href="#HgLogBrowserDialog.on_diffP1Button_clicked">on_diffP1Button_clicked</a></td>
-<td>Private slot to handle the Diff to Parent 1 button.</td>
-</tr><tr>
-<td><a href="#HgLogBrowserDialog.on_diffP2Button_clicked">on_diffP2Button_clicked</a></td>
-<td>Private slot to handle the Diff to Parent 2 button.</td>
-</tr><tr>
-<td><a href="#HgLogBrowserDialog.on_diffRevisionsButton_clicked">on_diffRevisionsButton_clicked</a></td>
-<td>Private slot to handle the Compare Revisions button.</td>
+<td><a href="#HgLogBrowserDialog.on_diffSelectLabel_linkActivated">on_diffSelectLabel_linkActivated</a></td>
+<td>Private slot to handle the selection of a diff target.</td>
 </tr><tr>
 <td><a href="#HgLogBrowserDialog.on_downButton_clicked">on_downButton_clicked</a></td>
 <td>Private slot to move the current item down one entry.</td>
@@ -228,6 +255,9 @@
 <td><a href="#HgLogBrowserDialog.on_fieldCombo_activated">on_fieldCombo_activated</a></td>
 <td>Private slot called, when a new filter field is selected.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.on_filesTree_currentItemChanged">on_filesTree_currentItemChanged</a></td>
+<td>Private slot called, when the current item of the files tree changes.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.on_findNextButton_clicked">on_findNextButton_clicked</a></td>
 <td>Private slot to find the next item matching the entered criteria.</td>
 </tr><tr>
@@ -264,6 +294,12 @@
 <td><a href="#HgLogBrowserDialog.on_rxEdit_textChanged">on_rxEdit_textChanged</a></td>
 <td>Private slot called, when a filter expression is entered.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.on_saveLabel_linkActivated">on_saveLabel_linkActivated</a></td>
+<td>Private slot to handle the selection of the save link.</td>
+</tr><tr>
+<td><a href="#HgLogBrowserDialog.on_sbsSelectLabel_linkActivated">on_sbsSelectLabel_linkActivated</a></td>
+<td>Private slot to handle selection of a side-by-side link.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.on_sendButton_clicked">on_sendButton_clicked</a></td>
 <td>Private slot to send the input to the mercurial process.</td>
 </tr><tr>
@@ -313,6 +349,16 @@
 <dd>
 selected action mode (string, one of filter or find)
 </dd>
+</dl><a NAME="HgLogBrowserDialog.__actionsMenuHovered" ID="HgLogBrowserDialog.__actionsMenuHovered"></a>
+<h4>HgLogBrowserDialog.__actionsMenuHovered</h4>
+<b>__actionsMenuHovered</b>(<i>action</i>)
+<p>
+        Private slot to show the tooltip for an action menu entry.
+</p><dl>
+<dt><i>action</i> (QAction)</dt>
+<dd>
+action to show tooltip for
+</dd>
 </dl><a NAME="HgLogBrowserDialog.__addFinishCallback" ID="HgLogBrowserDialog.__addFinishCallback"></a>
 <h4>HgLogBrowserDialog.__addFinishCallback</h4>
 <b>__addFinishCallback</b>(<i>callback</i>)
@@ -351,20 +397,12 @@
 <dd>
 name of the color to use (string)
 </dd>
-</dl><a NAME="HgLogBrowserDialog.__diffRevisions" ID="HgLogBrowserDialog.__diffRevisions"></a>
-<h4>HgLogBrowserDialog.__diffRevisions</h4>
-<b>__diffRevisions</b>(<i>rev1, rev2</i>)
+</dl><a NAME="HgLogBrowserDialog.__bundleActTriggered" ID="HgLogBrowserDialog.__bundleActTriggered"></a>
+<h4>HgLogBrowserDialog.__bundleActTriggered</h4>
+<b>__bundleActTriggered</b>(<i></i>)
 <p>
-        Private method to do a diff of two revisions.
-</p><dl>
-<dt><i>rev1</i></dt>
-<dd>
-first revision number (integer)
-</dd><dt><i>rev2</i></dt>
-<dd>
-second revision number (integer)
-</dd>
-</dl><a NAME="HgLogBrowserDialog.__fetchActTriggered" ID="HgLogBrowserDialog.__fetchActTriggered"></a>
+        Private slot to create a changegroup file.
+</p><a NAME="HgLogBrowserDialog.__fetchActTriggered" ID="HgLogBrowserDialog.__fetchActTriggered"></a>
 <h4>HgLogBrowserDialog.__fetchActTriggered</h4>
 <b>__fetchActTriggered</b>(<i></i>)
 <p>
@@ -393,7 +431,38 @@
 <p>
         Private slot called when the process finished or the user pressed
         the button.
-</p><a NAME="HgLogBrowserDialog.__generateEdges" ID="HgLogBrowserDialog.__generateEdges"></a>
+</p><a NAME="HgLogBrowserDialog.__generateDetailsTableText" ID="HgLogBrowserDialog.__generateDetailsTableText"></a>
+<h4>HgLogBrowserDialog.__generateDetailsTableText</h4>
+<b>__generateDetailsTableText</b>(<i>itm</i>)
+<p>
+        Private method to generate an HTML table with the details of the given
+        changeset.
+</p><dl>
+<dt><i>itm</i> (QTreeWidgetItem)</dt>
+<dd>
+reference to the item the table should be based on
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+HTML table containing details
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl><a NAME="HgLogBrowserDialog.__generateDiffs" ID="HgLogBrowserDialog.__generateDiffs"></a>
+<h4>HgLogBrowserDialog.__generateDiffs</h4>
+<b>__generateDiffs</b>(<i>parent=1</i>)
+<p>
+        Private slot to generate diff outputs for the selected item.
+</p><dl>
+<dt><i>parent</i> (int)</dt>
+<dd>
+number of parent to diff against
+</dd>
+</dl><a NAME="HgLogBrowserDialog.__generateEdges" ID="HgLogBrowserDialog.__generateEdges"></a>
 <h4>HgLogBrowserDialog.__generateEdges</h4>
 <b>__generateEdges</b>(<i>rev, parents</i>)
 <p>
@@ -414,27 +483,6 @@
             between the given node and its parents
             (integer, integer, [(integer, integer, integer), ...])
 </dd>
-</dl><a NAME="HgLogBrowserDialog.__generateFileItem" ID="HgLogBrowserDialog.__generateFileItem"></a>
-<h4>HgLogBrowserDialog.__generateFileItem</h4>
-<b>__generateFileItem</b>(<i>action, path, copyfrom</i>)
-<p>
-        Private method to generate a changed files tree entry.
-</p><dl>
-<dt><i>action</i></dt>
-<dd>
-indicator for the change action ("A", "D" or "M")
-</dd><dt><i>path</i></dt>
-<dd>
-path of the file in the repository (string)
-</dd><dt><i>copyfrom</i></dt>
-<dd>
-path the file was copied from (string)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-reference to the generated item (QTreeWidgetItem)
-</dd>
 </dl><a NAME="HgLogBrowserDialog.__generateIcon" ID="HgLogBrowserDialog.__generateIcon"></a>
 <h4>HgLogBrowserDialog.__generateIcon</h4>
 <b>__generateIcon</b>(<i>column, color, bottomedges, topedges, dotColor, currentRev, closed</i>)
@@ -520,7 +568,12 @@
 <dd>
 reference to the generated item (QTreeWidgetItem)
 </dd>
-</dl><a NAME="HgLogBrowserDialog.__getClosedBranches" ID="HgLogBrowserDialog.__getClosedBranches"></a>
+</dl><a NAME="HgLogBrowserDialog.__generatorFinished" ID="HgLogBrowserDialog.__generatorFinished"></a>
+<h4>HgLogBrowserDialog.__generatorFinished</h4>
+<b>__generatorFinished</b>(<i></i>)
+<p>
+        Private slot connected to the finished signal of the diff generator.
+</p><a NAME="HgLogBrowserDialog.__getClosedBranches" ID="HgLogBrowserDialog.__getClosedBranches"></a>
 <h4>HgLogBrowserDialog.__getClosedBranches</h4>
 <b>__getClosedBranches</b>(<i></i>)
 <p>
@@ -589,7 +642,17 @@
 <dd>
 tuple of (str, str)
 </dd>
-</dl><a NAME="HgLogBrowserDialog.__graftActTriggered" ID="HgLogBrowserDialog.__graftActTriggered"></a>
+</dl><a NAME="HgLogBrowserDialog.__gpgSignActTriggered" ID="HgLogBrowserDialog.__gpgSignActTriggered"></a>
+<h4>HgLogBrowserDialog.__gpgSignActTriggered</h4>
+<b>__gpgSignActTriggered</b>(<i></i>)
+<p>
+        Private slot to sign the selected revisions.
+</p><a NAME="HgLogBrowserDialog.__gpgVerifyActTriggered" ID="HgLogBrowserDialog.__gpgVerifyActTriggered"></a>
+<h4>HgLogBrowserDialog.__gpgVerifyActTriggered</h4>
+<b>__gpgVerifyActTriggered</b>(<i></i>)
+<p>
+        Private slot to verify the signatures of a selected revisions.
+</p><a NAME="HgLogBrowserDialog.__graftActTriggered" ID="HgLogBrowserDialog.__graftActTriggered"></a>
 <h4>HgLogBrowserDialog.__graftActTriggered</h4>
 <b>__graftActTriggered</b>(<i></i>)
 <p>
@@ -614,6 +677,12 @@
 <b>__lfPullActTriggered</b>(<i></i>)
 <p>
         Private slot to pull large files of selected revisions.
+</p><a NAME="HgLogBrowserDialog.__mergeActTriggered" ID="HgLogBrowserDialog.__mergeActTriggered"></a>
+<h4>HgLogBrowserDialog.__mergeActTriggered</h4>
+<b>__mergeActTriggered</b>(<i></i>)
+<p>
+        Private slot to merge the working directory with the selected
+        changeset.
 </p><a NAME="HgLogBrowserDialog.__modifyForLargeFiles" ID="HgLogBrowserDialog.__modifyForLargeFiles"></a>
 <h4>HgLogBrowserDialog.__modifyForLargeFiles</h4>
 <b>__modifyForLargeFiles</b>(<i>filename</i>)
@@ -694,6 +763,11 @@
         Private slot to handle the readyReadStandardOutput signal.
 </p><p>
         It reads the output of the process and inserts it into a buffer.
+</p><a NAME="HgLogBrowserDialog.__reloadGeometry" ID="HgLogBrowserDialog.__reloadGeometry"></a>
+<h4>HgLogBrowserDialog.__reloadGeometry</h4>
+<b>__reloadGeometry</b>(<i></i>)
+<p>
+        Private method to restore the geometry.
 </p><a NAME="HgLogBrowserDialog.__resetUI" ID="HgLogBrowserDialog.__resetUI"></a>
 <h4>HgLogBrowserDialog.__resetUI</h4>
 <b>__resetUI</b>(<i></i>)
@@ -714,6 +788,11 @@
 <b>__resortFiles</b>(<i></i>)
 <p>
         Private method to resort the changed files tree.
+</p><a NAME="HgLogBrowserDialog.__restoreSplitterStates" ID="HgLogBrowserDialog.__restoreSplitterStates"></a>
+<h4>HgLogBrowserDialog.__restoreSplitterStates</h4>
+<b>__restoreSplitterStates</b>(<i></i>)
+<p>
+        Private method to restore the state of the various splitters.
 </p><a NAME="HgLogBrowserDialog.__revisionClicked" ID="HgLogBrowserDialog.__revisionClicked"></a>
 <h4>HgLogBrowserDialog.__revisionClicked</h4>
 <b>__revisionClicked</b>(<i>url</i>)
@@ -725,6 +804,16 @@
 <dd>
 URL that was clicked
 </dd>
+</dl><a NAME="HgLogBrowserDialog.__selectAllActTriggered" ID="HgLogBrowserDialog.__selectAllActTriggered"></a>
+<h4>HgLogBrowserDialog.__selectAllActTriggered</h4>
+<b>__selectAllActTriggered</b>(<i>select=True</i>)
+<p>
+        Private method to select or unselect all log entries.
+</p><dl>
+<dt><i>select</i> (bool)</dt>
+<dd>
+flag indicating to select all entries
+</dd>
 </dl><a NAME="HgLogBrowserDialog.__showError" ID="HgLogBrowserDialog.__showError"></a>
 <h4>HgLogBrowserDialog.__showError</h4>
 <b>__showError</b>(<i>out</i>)
@@ -751,23 +840,35 @@
 <b>__tagActTriggered</b>(<i></i>)
 <p>
         Private slot to tag the selected revision.
-</p><a NAME="HgLogBrowserDialog.__updateDiffButtons" ID="HgLogBrowserDialog.__updateDiffButtons"></a>
-<h4>HgLogBrowserDialog.__updateDiffButtons</h4>
-<b>__updateDiffButtons</b>(<i></i>)
+</p><a NAME="HgLogBrowserDialog.__unbundleActTriggered" ID="HgLogBrowserDialog.__unbundleActTriggered"></a>
+<h4>HgLogBrowserDialog.__unbundleActTriggered</h4>
+<b>__unbundleActTriggered</b>(<i></i>)
+<p>
+        Private slot to apply the currently previewed bundle file.
+</p><a NAME="HgLogBrowserDialog.__updateDetailsAndFiles" ID="HgLogBrowserDialog.__updateDetailsAndFiles"></a>
+<h4>HgLogBrowserDialog.__updateDetailsAndFiles</h4>
+<b>__updateDetailsAndFiles</b>(<i></i>)
+<p>
+        Private slot to update the details and file changes panes.
+</p><a NAME="HgLogBrowserDialog.__updateFilesTree" ID="HgLogBrowserDialog.__updateFilesTree"></a>
+<h4>HgLogBrowserDialog.__updateFilesTree</h4>
+<b>__updateFilesTree</b>(<i>parent, itm</i>)
+<p>
+        Private method to update the files tree with changes of the given item.
+</p><dl>
+<dt><i>parent</i> (QTreeWidget or QTreeWidgetItem)</dt>
+<dd>
+parent for the items to be added
+</dd><dt><i>itm</i> (QTreeWidgetItem)</dt>
+<dd>
+reference to the item the update should be based on
+</dd>
+</dl><a NAME="HgLogBrowserDialog.__updateSbsSelectLabel" ID="HgLogBrowserDialog.__updateSbsSelectLabel"></a>
+<h4>HgLogBrowserDialog.__updateSbsSelectLabel</h4>
+<b>__updateSbsSelectLabel</b>(<i></i>)
 <p>
         Private slot to update the enabled status of the diff buttons.
-</p><a NAME="HgLogBrowserDialog.__updateGui" ID="HgLogBrowserDialog.__updateGui"></a>
-<h4>HgLogBrowserDialog.__updateGui</h4>
-<b>__updateGui</b>(<i>itm</i>)
-<p>
-        Private slot to update GUI elements except tool menu actions.
-</p><dl>
-<dt><i>itm</i></dt>
-<dd>
-reference to the item the update should be based on
-            (QTreeWidgetItem)
-</dd>
-</dl><a NAME="HgLogBrowserDialog.__updateToolMenuActions" ID="HgLogBrowserDialog.__updateToolMenuActions"></a>
+</p><a NAME="HgLogBrowserDialog.__updateToolMenuActions" ID="HgLogBrowserDialog.__updateToolMenuActions"></a>
 <h4>HgLogBrowserDialog.__updateToolMenuActions</h4>
 <b>__updateToolMenuActions</b>(<i></i>)
 <p>
@@ -826,22 +927,17 @@
 <dd>
 button that was clicked (QAbstractButton)
 </dd>
-</dl><a NAME="HgLogBrowserDialog.on_diffP1Button_clicked" ID="HgLogBrowserDialog.on_diffP1Button_clicked"></a>
-<h4>HgLogBrowserDialog.on_diffP1Button_clicked</h4>
-<b>on_diffP1Button_clicked</b>(<i></i>)
+</dl><a NAME="HgLogBrowserDialog.on_diffSelectLabel_linkActivated" ID="HgLogBrowserDialog.on_diffSelectLabel_linkActivated"></a>
+<h4>HgLogBrowserDialog.on_diffSelectLabel_linkActivated</h4>
+<b>on_diffSelectLabel_linkActivated</b>(<i>link</i>)
 <p>
-        Private slot to handle the Diff to Parent 1 button.
-</p><a NAME="HgLogBrowserDialog.on_diffP2Button_clicked" ID="HgLogBrowserDialog.on_diffP2Button_clicked"></a>
-<h4>HgLogBrowserDialog.on_diffP2Button_clicked</h4>
-<b>on_diffP2Button_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the Diff to Parent 2 button.
-</p><a NAME="HgLogBrowserDialog.on_diffRevisionsButton_clicked" ID="HgLogBrowserDialog.on_diffRevisionsButton_clicked"></a>
-<h4>HgLogBrowserDialog.on_diffRevisionsButton_clicked</h4>
-<b>on_diffRevisionsButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the Compare Revisions button.
-</p><a NAME="HgLogBrowserDialog.on_downButton_clicked" ID="HgLogBrowserDialog.on_downButton_clicked"></a>
+        Private slot to handle the selection of a diff target.
+</p><dl>
+<dt><i>link</i> (str)</dt>
+<dd>
+activated link
+</dd>
+</dl><a NAME="HgLogBrowserDialog.on_downButton_clicked" ID="HgLogBrowserDialog.on_downButton_clicked"></a>
 <h4>HgLogBrowserDialog.on_downButton_clicked</h4>
 <b>on_downButton_clicked</b>(<i></i>)
 <p>
@@ -856,6 +952,19 @@
 <dd>
 text of the selected field (string)
 </dd>
+</dl><a NAME="HgLogBrowserDialog.on_filesTree_currentItemChanged" ID="HgLogBrowserDialog.on_filesTree_currentItemChanged"></a>
+<h4>HgLogBrowserDialog.on_filesTree_currentItemChanged</h4>
+<b>on_filesTree_currentItemChanged</b>(<i>current, previous</i>)
+<p>
+        Private slot called, when the current item of the files tree changes.
+</p><dl>
+<dt><i>current</i></dt>
+<dd>
+reference to the new current item (QTreeWidgetItem)
+</dd><dt><i>previous</i></dt>
+<dd>
+reference to the old current item (QTreeWidgetItem)
+</dd>
 </dl><a NAME="HgLogBrowserDialog.on_findNextButton_clicked" ID="HgLogBrowserDialog.on_findNextButton_clicked"></a>
 <h4>HgLogBrowserDialog.on_findNextButton_clicked</h4>
 <b>on_findNextButton_clicked</b>(<i></i>)
@@ -944,6 +1053,26 @@
 <dd>
 filter expression (string)
 </dd>
+</dl><a NAME="HgLogBrowserDialog.on_saveLabel_linkActivated" ID="HgLogBrowserDialog.on_saveLabel_linkActivated"></a>
+<h4>HgLogBrowserDialog.on_saveLabel_linkActivated</h4>
+<b>on_saveLabel_linkActivated</b>(<i>link</i>)
+<p>
+        Private slot to handle the selection of the save link.
+</p><dl>
+<dt><i>link</i> (str)</dt>
+<dd>
+activated link
+</dd>
+</dl><a NAME="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" ID="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated"></a>
+<h4>HgLogBrowserDialog.on_sbsSelectLabel_linkActivated</h4>
+<b>on_sbsSelectLabel_linkActivated</b>(<i>link</i>)
+<p>
+        Private slot to handle selection of a side-by-side link.
+</p><dl>
+<dt><i>link</i> (str)</dt>
+<dd>
+text of the selected link
+</dd>
 </dl><a NAME="HgLogBrowserDialog.on_sendButton_clicked" ID="HgLogBrowserDialog.on_sendButton_clicked"></a>
 <h4>HgLogBrowserDialog.on_sendButton_clicked</h4>
 <b>on_sendButton_clicked</b>(<i></i>)
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html	Fri Mar 03 18:34:21 2017 +0100
@@ -62,15 +62,18 @@
 <td><a href="#HgNewProjectOptionsDialog.__init__">HgNewProjectOptionsDialog</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#HgNewProjectOptionsDialog.getData">getData</a></td>
-<td>Public slot to retrieve the data entered into the dialog.</td>
+<td><a href="#HgNewProjectOptionsDialog.__saveHistory">__saveHistory</a></td>
+<td>Private method to save the repository URL history.</td>
 </tr><tr>
-<td><a href="#HgNewProjectOptionsDialog.on_protocolCombo_activated">on_protocolCombo_activated</a></td>
-<td>Private slot to switch the status of the directory selection button.</td>
+<td><a href="#HgNewProjectOptionsDialog.getData">getData</a></td>
+<td>Public slot to retrieve the data entered into the dialog and to save the history of entered repository URLs.</td>
 </tr><tr>
 <td><a href="#HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged">on_vcsProjectDirPicker_textChanged</a></td>
 <td>Private slot to handle a change of the project directory.</td>
 </tr><tr>
+<td><a href="#HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked">on_vcsUrlClearHistoryButton_clicked</a></td>
+<td>Private slot to clear the history of entered repository URLs.</td>
+</tr><tr>
 <td><a href="#HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged">on_vcsUrlPicker_textChanged</a></td>
 <td>Private slot to handle changes of the URL.</td>
 </tr>
@@ -92,27 +95,23 @@
 <dd>
 parent widget (QWidget)
 </dd>
-</dl><a NAME="HgNewProjectOptionsDialog.getData" ID="HgNewProjectOptionsDialog.getData"></a>
+</dl><a NAME="HgNewProjectOptionsDialog.__saveHistory" ID="HgNewProjectOptionsDialog.__saveHistory"></a>
+<h4>HgNewProjectOptionsDialog.__saveHistory</h4>
+<b>__saveHistory</b>(<i></i>)
+<p>
+        Private method to save the repository URL history.
+</p><a NAME="HgNewProjectOptionsDialog.getData" ID="HgNewProjectOptionsDialog.getData"></a>
 <h4>HgNewProjectOptionsDialog.getData</h4>
 <b>getData</b>(<i></i>)
 <p>
-        Public slot to retrieve the data entered into the dialog.
+        Public slot to retrieve the data entered into the dialog and to
+        save the history of entered repository URLs.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
 a tuple of a string (project directory) and a dictionary
             containing the data entered.
 </dd>
-</dl><a NAME="HgNewProjectOptionsDialog.on_protocolCombo_activated" ID="HgNewProjectOptionsDialog.on_protocolCombo_activated"></a>
-<h4>HgNewProjectOptionsDialog.on_protocolCombo_activated</h4>
-<b>on_protocolCombo_activated</b>(<i>protocol</i>)
-<p>
-        Private slot to switch the status of the directory selection button.
-</p><dl>
-<dt><i>protocol</i></dt>
-<dd>
-name of the selected protocol (string)
-</dd>
 </dl><a NAME="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" ID="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged"></a>
 <h4>HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged</h4>
 <b>on_vcsProjectDirPicker_textChanged</b>(<i>txt</i>)
@@ -123,7 +122,12 @@
 <dd>
 name of the project directory (string)
 </dd>
-</dl><a NAME="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" ID="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged"></a>
+</dl><a NAME="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" ID="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked"></a>
+<h4>HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked</h4>
+<b>on_vcsUrlClearHistoryButton_clicked</b>(<i></i>)
+<p>
+        Private slot to clear the history of entered repository URLs.
+</p><a NAME="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" ID="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged"></a>
 <h4>HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged</h4>
 <b>on_vcsUrlPicker_textChanged</b>(<i>txt</i>)
 <p>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html	Fri Mar 03 18:34:21 2017 +0100
@@ -62,8 +62,8 @@
 <td><a href="#HgStatusDialog.__init__">HgStatusDialog</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#HgStatusDialog.__activeExtensionsChanged">__activeExtensionsChanged</a></td>
-<td>Private slot handling a change in the activated extensions.</td>
+<td><a href="#HgStatusDialog.__actionsMenuHovered">__actionsMenuHovered</a></td>
+<td>Private slot to show the tooltip for an action menu entry.</td>
 </tr><tr>
 <td><a href="#HgStatusDialog.__add">__add</a></td>
 <td>Private slot to handle the Add context menu entry.</td>
@@ -104,6 +104,9 @@
 <td><a href="#HgStatusDialog.__getCommitableItems">__getCommitableItems</a></td>
 <td>Private method to retrieve all entries the user wants to commit.</td>
 </tr><tr>
+<td><a href="#HgStatusDialog.__getCommitableUnselectedItems">__getCommitableUnselectedItems</a></td>
+<td>Private method to retrieve all entries the user may commit but hasn't selected.</td>
+</tr><tr>
 <td><a href="#HgStatusDialog.__getMissingItems">__getMissingItems</a></td>
 <td>Private method to retrieve all entries, that have a missing status.</td>
 </tr><tr>
@@ -113,6 +116,9 @@
 <td><a href="#HgStatusDialog.__getUnversionedItems">__getUnversionedItems</a></td>
 <td>Private method to retrieve all entries, that have an unversioned status.</td>
 </tr><tr>
+<td><a href="#HgStatusDialog.__initActionsMenu">__initActionsMenu</a></td>
+<td>Private method to initialize the actions menu.</td>
+</tr><tr>
 <td><a href="#HgStatusDialog.__lfAdd">__lfAdd</a></td>
 <td>Private slot to add a file to the repository.</td>
 </tr><tr>
@@ -146,42 +152,21 @@
 <td><a href="#HgStatusDialog.__sbsDiff">__sbsDiff</a></td>
 <td>Private slot to handle the Diff context menu entry.</td>
 </tr><tr>
-<td><a href="#HgStatusDialog.__showAddMenu">__showAddMenu</a></td>
-<td>Private slot to prepare the Add button menu before it is shown.</td>
-</tr><tr>
-<td><a href="#HgStatusDialog.__showContextMenu">__showContextMenu</a></td>
-<td>Private slot to show the context menu of the status list.</td>
+<td><a href="#HgStatusDialog.__showActionsMenu">__showActionsMenu</a></td>
+<td>Private slot to prepare the actions button menu before it is shown.</td>
 </tr><tr>
 <td><a href="#HgStatusDialog.__showError">__showError</a></td>
 <td>Private slot to show some error.</td>
 </tr><tr>
-<td><a href="#HgStatusDialog.__updateButtons">__updateButtons</a></td>
-<td>Private method to update the VCS buttons status.</td>
-</tr><tr>
-<td><a href="#HgStatusDialog.__updateCommitButton">__updateCommitButton</a></td>
-<td>Private method to update the Commit button status.</td>
-</tr><tr>
 <td><a href="#HgStatusDialog.closeEvent">closeEvent</a></td>
 <td>Protected slot implementing a close event handler.</td>
 </tr><tr>
 <td><a href="#HgStatusDialog.keyPressEvent">keyPressEvent</a></td>
 <td>Protected slot to handle a key press event.</td>
 </tr><tr>
-<td><a href="#HgStatusDialog.on_addButton_clicked">on_addButton_clicked</a></td>
-<td>Private slot to handle the press of the Add button.</td>
-</tr><tr>
 <td><a href="#HgStatusDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
 <td>Private slot called by a button of the button box clicked.</td>
 </tr><tr>
-<td><a href="#HgStatusDialog.on_commitButton_clicked">on_commitButton_clicked</a></td>
-<td>Private slot to handle the press of the Commit button.</td>
-</tr><tr>
-<td><a href="#HgStatusDialog.on_diffButton_clicked">on_diffButton_clicked</a></td>
-<td>Private slot to handle the press of the Differences button.</td>
-</tr><tr>
-<td><a href="#HgStatusDialog.on_forgetButton_clicked">on_forgetButton_clicked</a></td>
-<td>Private slot to handle the press of the Forget button.</td>
-</tr><tr>
 <td><a href="#HgStatusDialog.on_input_returnPressed">on_input_returnPressed</a></td>
 <td>Private slot to handle the press of the return key in the input field.</td>
 </tr><tr>
@@ -191,24 +176,12 @@
 <td><a href="#HgStatusDialog.on_refreshButton_clicked">on_refreshButton_clicked</a></td>
 <td>Private slot to refresh the status display.</td>
 </tr><tr>
-<td><a href="#HgStatusDialog.on_restoreButton_clicked">on_restoreButton_clicked</a></td>
-<td>Private slot to handle the press of the Restore button.</td>
-</tr><tr>
-<td><a href="#HgStatusDialog.on_revertButton_clicked">on_revertButton_clicked</a></td>
-<td>Private slot to handle the press of the Revert button.</td>
-</tr><tr>
-<td><a href="#HgStatusDialog.on_sbsDiffButton_clicked">on_sbsDiffButton_clicked</a></td>
-<td>Private slot to handle the press of the Side-by-Side Diff button.</td>
-</tr><tr>
 <td><a href="#HgStatusDialog.on_sendButton_clicked">on_sendButton_clicked</a></td>
 <td>Private slot to send the input to the subversion process.</td>
 </tr><tr>
 <td><a href="#HgStatusDialog.on_statusFilterCombo_activated">on_statusFilterCombo_activated</a></td>
 <td>Private slot to react to the selection of a status filter.</td>
 </tr><tr>
-<td><a href="#HgStatusDialog.on_statusList_itemChanged">on_statusList_itemChanged</a></td>
-<td>Private slot to act upon item changes.</td>
-</tr><tr>
 <td><a href="#HgStatusDialog.on_statusList_itemSelectionChanged">on_statusList_itemSelectionChanged</a></td>
 <td>Private slot to act upon changes of selected items.</td>
 </tr><tr>
@@ -239,12 +212,17 @@
 <dd>
 parent widget (QWidget)
 </dd>
-</dl><a NAME="HgStatusDialog.__activeExtensionsChanged" ID="HgStatusDialog.__activeExtensionsChanged"></a>
-<h4>HgStatusDialog.__activeExtensionsChanged</h4>
-<b>__activeExtensionsChanged</b>(<i></i>)
+</dl><a NAME="HgStatusDialog.__actionsMenuHovered" ID="HgStatusDialog.__actionsMenuHovered"></a>
+<h4>HgStatusDialog.__actionsMenuHovered</h4>
+<b>__actionsMenuHovered</b>(<i>action</i>)
 <p>
-        Private slot handling a change in the activated extensions.
-</p><a NAME="HgStatusDialog.__add" ID="HgStatusDialog.__add"></a>
+        Private slot to show the tooltip for an action menu entry.
+</p><dl>
+<dt><i>action</i> (QAction)</dt>
+<dd>
+action to show tooltip for
+</dd>
+</dl><a NAME="HgStatusDialog.__add" ID="HgStatusDialog.__add"></a>
 <h4>HgStatusDialog.__add</h4>
 <b>__add</b>(<i></i>)
 <p>
@@ -328,6 +306,17 @@
 <dd>
 list of all items, the user has checked
 </dd>
+</dl><a NAME="HgStatusDialog.__getCommitableUnselectedItems" ID="HgStatusDialog.__getCommitableUnselectedItems"></a>
+<h4>HgStatusDialog.__getCommitableUnselectedItems</h4>
+<b>__getCommitableUnselectedItems</b>(<i></i>)
+<p>
+        Private method to retrieve all entries the user may commit but hasn't
+        selected.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of all items, the user has checked
+</dd>
 </dl><a NAME="HgStatusDialog.__getMissingItems" ID="HgStatusDialog.__getMissingItems"></a>
 <h4>HgStatusDialog.__getMissingItems</h4>
 <b>__getMissingItems</b>(<i></i>)
@@ -359,7 +348,12 @@
 <dd>
 list of all items with an unversioned status
 </dd>
-</dl><a NAME="HgStatusDialog.__lfAdd" ID="HgStatusDialog.__lfAdd"></a>
+</dl><a NAME="HgStatusDialog.__initActionsMenu" ID="HgStatusDialog.__initActionsMenu"></a>
+<h4>HgStatusDialog.__initActionsMenu</h4>
+<b>__initActionsMenu</b>(<i></i>)
+<p>
+        Private method to initialize the actions menu.
+</p><a NAME="HgStatusDialog.__lfAdd" ID="HgStatusDialog.__lfAdd"></a>
 <h4>HgStatusDialog.__lfAdd</h4>
 <b>__lfAdd</b>(<i>mode</i>)
 <p>
@@ -438,22 +432,12 @@
 <b>__sbsDiff</b>(<i></i>)
 <p>
         Private slot to handle the Diff context menu entry.
-</p><a NAME="HgStatusDialog.__showAddMenu" ID="HgStatusDialog.__showAddMenu"></a>
-<h4>HgStatusDialog.__showAddMenu</h4>
-<b>__showAddMenu</b>(<i></i>)
+</p><a NAME="HgStatusDialog.__showActionsMenu" ID="HgStatusDialog.__showActionsMenu"></a>
+<h4>HgStatusDialog.__showActionsMenu</h4>
+<b>__showActionsMenu</b>(<i></i>)
 <p>
-        Private slot to prepare the Add button menu before it is shown.
-</p><a NAME="HgStatusDialog.__showContextMenu" ID="HgStatusDialog.__showContextMenu"></a>
-<h4>HgStatusDialog.__showContextMenu</h4>
-<b>__showContextMenu</b>(<i>coord</i>)
-<p>
-        Private slot to show the context menu of the status list.
-</p><dl>
-<dt><i>coord</i></dt>
-<dd>
-the position of the mouse pointer (QPoint)
-</dd>
-</dl><a NAME="HgStatusDialog.__showError" ID="HgStatusDialog.__showError"></a>
+        Private slot to prepare the actions button menu before it is shown.
+</p><a NAME="HgStatusDialog.__showError" ID="HgStatusDialog.__showError"></a>
 <h4>HgStatusDialog.__showError</h4>
 <b>__showError</b>(<i>out</i>)
 <p>
@@ -463,17 +447,7 @@
 <dd>
 error to be shown (string)
 </dd>
-</dl><a NAME="HgStatusDialog.__updateButtons" ID="HgStatusDialog.__updateButtons"></a>
-<h4>HgStatusDialog.__updateButtons</h4>
-<b>__updateButtons</b>(<i></i>)
-<p>
-        Private method to update the VCS buttons status.
-</p><a NAME="HgStatusDialog.__updateCommitButton" ID="HgStatusDialog.__updateCommitButton"></a>
-<h4>HgStatusDialog.__updateCommitButton</h4>
-<b>__updateCommitButton</b>(<i></i>)
-<p>
-        Private method to update the Commit button status.
-</p><a NAME="HgStatusDialog.closeEvent" ID="HgStatusDialog.closeEvent"></a>
+</dl><a NAME="HgStatusDialog.closeEvent" ID="HgStatusDialog.closeEvent"></a>
 <h4>HgStatusDialog.closeEvent</h4>
 <b>closeEvent</b>(<i>e</i>)
 <p>
@@ -493,12 +467,7 @@
 <dd>
 the key press event (QKeyEvent)
 </dd>
-</dl><a NAME="HgStatusDialog.on_addButton_clicked" ID="HgStatusDialog.on_addButton_clicked"></a>
-<h4>HgStatusDialog.on_addButton_clicked</h4>
-<b>on_addButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the press of the Add button.
-</p><a NAME="HgStatusDialog.on_buttonBox_clicked" ID="HgStatusDialog.on_buttonBox_clicked"></a>
+</dl><a NAME="HgStatusDialog.on_buttonBox_clicked" ID="HgStatusDialog.on_buttonBox_clicked"></a>
 <h4>HgStatusDialog.on_buttonBox_clicked</h4>
 <b>on_buttonBox_clicked</b>(<i>button</i>)
 <p>
@@ -508,22 +477,7 @@
 <dd>
 button that was clicked (QAbstractButton)
 </dd>
-</dl><a NAME="HgStatusDialog.on_commitButton_clicked" ID="HgStatusDialog.on_commitButton_clicked"></a>
-<h4>HgStatusDialog.on_commitButton_clicked</h4>
-<b>on_commitButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the press of the Commit button.
-</p><a NAME="HgStatusDialog.on_diffButton_clicked" ID="HgStatusDialog.on_diffButton_clicked"></a>
-<h4>HgStatusDialog.on_diffButton_clicked</h4>
-<b>on_diffButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the press of the Differences button.
-</p><a NAME="HgStatusDialog.on_forgetButton_clicked" ID="HgStatusDialog.on_forgetButton_clicked"></a>
-<h4>HgStatusDialog.on_forgetButton_clicked</h4>
-<b>on_forgetButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the press of the Forget button.
-</p><a NAME="HgStatusDialog.on_input_returnPressed" ID="HgStatusDialog.on_input_returnPressed"></a>
+</dl><a NAME="HgStatusDialog.on_input_returnPressed" ID="HgStatusDialog.on_input_returnPressed"></a>
 <h4>HgStatusDialog.on_input_returnPressed</h4>
 <b>on_input_returnPressed</b>(<i></i>)
 <p>
@@ -543,21 +497,6 @@
 <b>on_refreshButton_clicked</b>(<i></i>)
 <p>
         Private slot to refresh the status display.
-</p><a NAME="HgStatusDialog.on_restoreButton_clicked" ID="HgStatusDialog.on_restoreButton_clicked"></a>
-<h4>HgStatusDialog.on_restoreButton_clicked</h4>
-<b>on_restoreButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the press of the Restore button.
-</p><a NAME="HgStatusDialog.on_revertButton_clicked" ID="HgStatusDialog.on_revertButton_clicked"></a>
-<h4>HgStatusDialog.on_revertButton_clicked</h4>
-<b>on_revertButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the press of the Revert button.
-</p><a NAME="HgStatusDialog.on_sbsDiffButton_clicked" ID="HgStatusDialog.on_sbsDiffButton_clicked"></a>
-<h4>HgStatusDialog.on_sbsDiffButton_clicked</h4>
-<b>on_sbsDiffButton_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the press of the Side-by-Side Diff button.
 </p><a NAME="HgStatusDialog.on_sendButton_clicked" ID="HgStatusDialog.on_sendButton_clicked"></a>
 <h4>HgStatusDialog.on_sendButton_clicked</h4>
 <b>on_sendButton_clicked</b>(<i></i>)
@@ -573,19 +512,6 @@
 <dd>
 selected status filter (string)
 </dd>
-</dl><a NAME="HgStatusDialog.on_statusList_itemChanged" ID="HgStatusDialog.on_statusList_itemChanged"></a>
-<h4>HgStatusDialog.on_statusList_itemChanged</h4>
-<b>on_statusList_itemChanged</b>(<i>item, column</i>)
-<p>
-        Private slot to act upon item changes.
-</p><dl>
-<dt><i>item</i></dt>
-<dd>
-reference to the changed item (QTreeWidgetItem)
-</dd><dt><i>column</i></dt>
-<dd>
-index of column that changed (integer)
-</dd>
 </dl><a NAME="HgStatusDialog.on_statusList_itemSelectionChanged" ID="HgStatusDialog.on_statusList_itemSelectionChanged"></a>
 <h4>HgStatusDialog.on_statusList_itemSelectionChanged</h4>
 <b>on_statusList_itemSelectionChanged</b>(<i></i>)
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.hg.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.hg.html	Fri Mar 03 18:34:21 2017 +0100
@@ -89,9 +89,6 @@
 <td><a href="#Hg.__hgGetFileForRevision">__hgGetFileForRevision</a></td>
 <td>Private method to get a file for a specific revision from the repository.</td>
 </tr><tr>
-<td><a href="#Hg.__hgURL">__hgURL</a></td>
-<td>Private method to format a url for Mercurial.</td>
-</tr><tr>
 <td><a href="#Hg.__iniFileChanged">__iniFileChanged</a></td>
 <td>Private slot to handle a change of the Mercurial configuration file.</td>
 </tr><tr>
@@ -496,21 +493,6 @@
 <dd>
 contents of the file (string) and an error message (string)
 </dd>
-</dl><a NAME="Hg.__hgURL" ID="Hg.__hgURL"></a>
-<h4>Hg.__hgURL</h4>
-<b>__hgURL</b>(<i>url</i>)
-<p>
-        Private method to format a url for Mercurial.
-</p><dl>
-<dt><i>url</i></dt>
-<dd>
-unformatted url string (string)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-properly formated url for mercurial (string)
-</dd>
 </dl><a NAME="Hg.__iniFileChanged" ID="Hg.__iniFileChanged"></a>
 <h4>Hg.__iniFileChanged</h4>
 <b>__iniFileChanged</b>(<i>path</i>)
@@ -820,13 +802,16 @@
 </dd>
 </dl><a NAME="Hg.hgBundle" ID="Hg.hgBundle"></a>
 <h4>Hg.hgBundle</h4>
-<b>hgBundle</b>(<i>name</i>)
+<b>hgBundle</b>(<i>name, bundleData=None</i>)
 <p>
         Public method to create a changegroup file.
 </p><dl>
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-file/directory name (string)
+file/directory name
+</dd><dt><i>bundleData</i> (dict)</dt>
+<dd>
+dictionary containing the bundle creation information
 </dd>
 </dl><a NAME="Hg.hgCancelMerge" ID="Hg.hgCancelMerge"></a>
 <h4>Hg.hgCancelMerge</h4>
@@ -1201,19 +1186,27 @@
 </dd>
 </dl><a NAME="Hg.hgPull" ID="Hg.hgPull"></a>
 <h4>Hg.hgPull</h4>
-<b>hgPull</b>(<i>name</i>)
+<b>hgPull</b>(<i>name, revisions=None</i>)
 <p>
         Public method used to pull changes from a remote Mercurial repository.
 </p><dl>
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-directory name of the project to be pulled to (string)
+directory name of the project to be pulled to
+</dd><dt><i>revisions</i> (list of str)</dt>
+<dd>
+list of revisions to be pulled
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
 flag indicating, that the update contained an add
-            or delete (boolean)
+            or delete
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl><a NAME="Hg.hgPush" ID="Hg.hgPush"></a>
 <h4>Hg.hgPush</h4>
@@ -1378,19 +1371,27 @@
 </dd>
 </dl><a NAME="Hg.hgUnbundle" ID="Hg.hgUnbundle"></a>
 <h4>Hg.hgUnbundle</h4>
-<b>hgUnbundle</b>(<i>name</i>)
+<b>hgUnbundle</b>(<i>name, files=None</i>)
 <p>
         Public method to apply changegroup files.
 </p><dl>
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-directory name (string)
+directory name
+</dd><dt><i>files</i> (list of str)</dt>
+<dd>
+list of bundle files to be applied
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
 flag indicating, that the update contained an add
-            or delete (boolean)
+            or delete
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl><a NAME="Hg.hgVerify" ID="Hg.hgVerify"></a>
 <h4>Hg.hgVerify</h4>
@@ -1737,13 +1738,16 @@
 </dd>
 </dl><a NAME="Hg.vcsMerge" ID="Hg.vcsMerge"></a>
 <h4>Hg.vcsMerge</h4>
-<b>vcsMerge</b>(<i>name</i>)
+<b>vcsMerge</b>(<i>name, rev=""</i>)
 <p>
         Public method used to merge a URL/revision into the local project.
 </p><dl>
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-file/directory name to be merged (string)
+file/directory name to be merged
+</dd><dt><i>rev=</i> (str)</dt>
+<dd>
+revision to merge with
 </dd>
 </dl><a NAME="Hg.vcsMove" ID="Hg.vcsMove"></a>
 <h4>Hg.vcsMove</h4>
--- a/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html	Fri Mar 03 18:34:21 2017 +0100
@@ -21,7 +21,7 @@
 <body><a NAME="top" ID="top"></a>
 <h1>eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage</h1>
 <p>
-Module implementing the Web Browser configuration page.
+Module implementing the Web Browser Appearance configuration page.
 </p>
 <h3>Global Attributes</h3>
 <table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html	Fri Mar 03 18:34:21 2017 +0100
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage</h1>
+<p>
+Module implementing the Web Browser Spell Checking configuration page.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#WebBrowserSpellCheckingPage">WebBrowserSpellCheckingPage</a></td>
+<td>Class implementing the Web Browser Spell Checking page.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#create">create</a></td>
+<td>Module function to create the configuration page.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="WebBrowserSpellCheckingPage" ID="WebBrowserSpellCheckingPage"></a>
+<h2>WebBrowserSpellCheckingPage</h2>
+<p>
+    Class implementing the Web Browser Spell Checking page.
+</p>
+<h3>Derived from</h3>
+ConfigurationPageBase, Ui_WebBrowserSpellCheckingPage
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#WebBrowserSpellCheckingPage.__init__">WebBrowserSpellCheckingPage</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#WebBrowserSpellCheckingPage.__createLanguageString">__createLanguageString</a></td>
+<td>Private method to create a language string given a language identifier.</td>
+</tr><tr>
+<td><a href="#WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked">on_spellCheckEnabledCheckBox_clicked</a></td>
+<td>Private slot handling a change of the spell checking enabled state.</td>
+</tr><tr>
+<td><a href="#WebBrowserSpellCheckingPage.save">save</a></td>
+<td>Public slot to save the Help Viewers configuration.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="WebBrowserSpellCheckingPage.__init__" ID="WebBrowserSpellCheckingPage.__init__"></a>
+<h4>WebBrowserSpellCheckingPage (Constructor)</h4>
+<b>WebBrowserSpellCheckingPage</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="WebBrowserSpellCheckingPage.__createLanguageString" ID="WebBrowserSpellCheckingPage.__createLanguageString"></a>
+<h4>WebBrowserSpellCheckingPage.__createLanguageString</h4>
+<b>__createLanguageString</b>(<i>language</i>)
+<p>
+        Private method to create a language string given a language identifier.
+</p><dl>
+<dt><i>language</i> (str)</dt>
+<dd>
+language identifier
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+language string
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl><a NAME="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" ID="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked"></a>
+<h4>WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked</h4>
+<b>on_spellCheckEnabledCheckBox_clicked</b>(<i></i>)
+<p>
+        Private slot handling a change of the spell checking enabled state.
+</p><a NAME="WebBrowserSpellCheckingPage.save" ID="WebBrowserSpellCheckingPage.save"></a>
+<h4>WebBrowserSpellCheckingPage.save</h4>
+<b>save</b>(<i></i>)
+<p>
+        Public slot to save the Help Viewers configuration.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="create" ID="create"></a>
+<h2>create</h2>
+<b>create</b>(<i>dlg</i>)
+<p>
+    Module function to create the configuration page.
+</p><dl>
+<dt><i>dlg</i> (Configuration)</dt>
+<dd>
+reference to the configuration dialog
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the instantiated page
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+ConfigurationPageBase
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.Project.DebuggerPropertiesDialog.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Project.DebuggerPropertiesDialog.html	Fri Mar 03 18:34:21 2017 +0100
@@ -61,9 +61,21 @@
 <td><a href="#DebuggerPropertiesDialog.__init__">DebuggerPropertiesDialog</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#DebuggerPropertiesDialog.__clearHistory">__clearHistory</a></td>
+<td>Private method to clear a path picker history.</td>
+</tr><tr>
+<td><a href="#DebuggerPropertiesDialog.__saveHistories">__saveHistories</a></td>
+<td>Private method to save the path picker histories.</td>
+</tr><tr>
+<td><a href="#DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked">on_debugClientClearHistoryButton_clicked</a></td>
+<td>Private slot to clear the debug clients history.</td>
+</tr><tr>
 <td><a href="#DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog">on_debugClientPicker_aboutToShowPathPickerDialog</a></td>
 <td>Private slot to perform actions before the debug client selection dialog is shown.</td>
 </tr><tr>
+<td><a href="#DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked">on_interpreterClearHistoryButton_clicked</a></td>
+<td>Private slot to clear the interpreter history.</td>
+</tr><tr>
 <td><a href="#DebuggerPropertiesDialog.storeData">storeData</a></td>
 <td>Public method to store the entered/modified data.</td>
 </tr>
@@ -88,12 +100,37 @@
 <dd>
 name of this dialog (string)
 </dd>
-</dl><a NAME="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ID="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog"></a>
+</dl><a NAME="DebuggerPropertiesDialog.__clearHistory" ID="DebuggerPropertiesDialog.__clearHistory"></a>
+<h4>DebuggerPropertiesDialog.__clearHistory</h4>
+<b>__clearHistory</b>(<i>picker</i>)
+<p>
+        Private method to clear a path picker history.
+</p><dl>
+<dt><i>picker</i> (E5ComboPathPicker)</dt>
+<dd>
+reference to the path picker
+</dd>
+</dl><a NAME="DebuggerPropertiesDialog.__saveHistories" ID="DebuggerPropertiesDialog.__saveHistories"></a>
+<h4>DebuggerPropertiesDialog.__saveHistories</h4>
+<b>__saveHistories</b>(<i></i>)
+<p>
+        Private method to save the path picker histories.
+</p><a NAME="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" ID="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked"></a>
+<h4>DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked</h4>
+<b>on_debugClientClearHistoryButton_clicked</b>(<i></i>)
+<p>
+        Private slot to clear the debug clients history.
+</p><a NAME="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ID="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog"></a>
 <h4>DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog</h4>
 <b>on_debugClientPicker_aboutToShowPathPickerDialog</b>(<i></i>)
 <p>
         Private slot to perform actions before the debug client selection
         dialog is shown.
+</p><a NAME="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" ID="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked"></a>
+<h4>DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked</h4>
+<b>on_interpreterClearHistoryButton_clicked</b>(<i></i>)
+<p>
+        Private slot to clear the interpreter history.
 </p><a NAME="DebuggerPropertiesDialog.storeData" ID="DebuggerPropertiesDialog.storeData"></a>
 <h4>DebuggerPropertiesDialog.storeData</h4>
 <b>storeData</b>(<i></i>)
--- a/Documentation/Source/eric6.Project.Project.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.Project.Project.html	Fri Mar 03 18:34:21 2017 +0100
@@ -416,6 +416,9 @@
 <td><a href="#Project.checkVCSStatus">checkVCSStatus</a></td>
 <td>Public method to wake up the VCS status monitor thread.</td>
 </tr><tr>
+<td><a href="#Project.clearHistories">clearHistories</a></td>
+<td>Public method to clear the project related histories.</td>
+</tr><tr>
 <td><a href="#Project.clearRecent">clearRecent</a></td>
 <td>Public method to clear the recent projects menu.</td>
 </tr><tr>
@@ -1393,6 +1396,11 @@
 <b>checkVCSStatus</b>(<i></i>)
 <p>
         Public method to wake up the VCS status monitor thread.
+</p><a NAME="Project.clearHistories" ID="Project.clearHistories"></a>
+<h4>Project.clearHistories</h4>
+<b>clearHistories</b>(<i></i>)
+<p>
+        Public method to clear the project related histories.
 </p><a NAME="Project.clearRecent" ID="Project.clearRecent"></a>
 <h4>Project.clearRecent</h4>
 <b>clearRecent</b>(<i></i>)
--- a/Documentation/Source/eric6.UI.ClearPrivateDataDialog.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.UI.ClearPrivateDataDialog.html	Fri Mar 03 18:34:21 2017 +0100
@@ -88,7 +88,7 @@
 <dd>
 flags indicating which data to clear
             (recent files, recent projects, recent multi projects,
-             debug histories, shell histories)
+             debug histories, shell histories, VCS histories)
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
--- a/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html	Fri Mar 03 18:34:21 2017 +0100
@@ -90,6 +90,9 @@
 <td><a href="#DownloadItem.__saveFileName">__saveFileName</a></td>
 <td>Private method to calculate a name for the file to download.</td>
 </tr><tr>
+<td><a href="#DownloadItem.__setFileName">__setFileName</a></td>
+<td>Private method to set the file name to save the download into.</td>
+</tr><tr>
 <td><a href="#DownloadItem.__updateInfoLabel">__updateInfoLabel</a></td>
 <td>Private method to update the info label.</td>
 </tr><tr>
@@ -220,6 +223,16 @@
 <dd>
 proposed filename and original filename (string, string)
 </dd>
+</dl><a NAME="DownloadItem.__setFileName" ID="DownloadItem.__setFileName"></a>
+<h4>DownloadItem.__setFileName</h4>
+<b>__setFileName</b>(<i>fileName</i>)
+<p>
+        Private method to set the file name to save the download into.
+</p><dl>
+<dt><i>fileName</i> (str)</dt>
+<dd>
+name of the file to save into
+</dd>
 </dl><a NAME="DownloadItem.__updateInfoLabel" ID="DownloadItem.__updateInfoLabel"></a>
 <h4>DownloadItem.__updateInfoLabel</h4>
 <b>__updateInfoLabel</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.Tools.WebHitTestResult.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.WebBrowser.Tools.WebHitTestResult.html	Fri Mar 03 18:34:21 2017 +0100
@@ -105,6 +105,9 @@
 <td><a href="#WebHitTestResult.tagName">tagName</a></td>
 <td>Public method to get the name of the tested tag.</td>
 </tr><tr>
+<td><a href="#WebHitTestResult.updateWithContextMenuData">updateWithContextMenuData</a></td>
+<td>Public method to update the hit test data with data from the context menu event.</td>
+</tr><tr>
 <td><a href="#WebHitTestResult.viewportPos">viewportPos</a></td>
 <td>Public method to get the viewport position.</td>
 </tr>
@@ -349,6 +352,19 @@
 <dd>
 str
 </dd>
+</dl><a NAME="WebHitTestResult.updateWithContextMenuData" ID="WebHitTestResult.updateWithContextMenuData"></a>
+<h4>WebHitTestResult.updateWithContextMenuData</h4>
+<b>updateWithContextMenuData</b>(<i>data</i>)
+<p>
+        Public method to update the hit test data with data from the context
+        menu event.
+</p><p>
+        Note: This works for Qt >= 5.7.0.
+</p><dl>
+<dt><i>data</i> (QWebEngineContextMenuData)</dt>
+<dd>
+context menu data
+</dd>
 </dl><a NAME="WebHitTestResult.viewportPos" ID="WebHitTestResult.viewportPos"></a>
 <h4>WebHitTestResult.viewportPos</h4>
 <b>viewportPos</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserPage.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.WebBrowser.WebBrowserPage.html	Fri Mar 03 18:34:21 2017 +0100
@@ -90,6 +90,9 @@
 <td><a href="#WebBrowserPage.execJavaScript">execJavaScript</a></td>
 <td>Public method to execute a JavaScript function synchroneously.</td>
 </tr><tr>
+<td><a href="#WebBrowserPage.execPrintPage">execPrintPage</a></td>
+<td>Public method to execute a synchronous print.</td>
+</tr><tr>
 <td><a href="#WebBrowserPage.hitTestContent">hitTestContent</a></td>
 <td>Public method to test the content at a specified position.</td>
 </tr><tr>
@@ -105,6 +108,9 @@
 <td><a href="#WebBrowserPage.mapToViewport">mapToViewport</a></td>
 <td>Public method to map a position to the viewport.</td>
 </tr><tr>
+<td><a href="#WebBrowserPage.printCallback">printCallback</a></td>
+<td></td>
+</tr><tr>
 <td><a href="#WebBrowserPage.resultCallback">resultCallback</a></td>
 <td></td>
 </tr><tr>
@@ -284,6 +290,29 @@
 <dd>
 depending upon script result
 </dd>
+</dl><a NAME="WebBrowserPage.execPrintPage" ID="WebBrowserPage.execPrintPage"></a>
+<h4>WebBrowserPage.execPrintPage</h4>
+<b>execPrintPage</b>(<i>printer, timeout=1000</i>)
+<p>
+        Public method to execute a synchronous print.
+</p><dl>
+<dt><i>printer</i> (QPrinter)</dt>
+<dd>
+reference to the printer object
+</dd><dt><i>timeout</i> (int)</dt>
+<dd>
+timeout value in milliseconds
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a successful print job
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="WebBrowserPage.hitTestContent" ID="WebBrowserPage.hitTestContent"></a>
 <h4>WebBrowserPage.hitTestContent</h4>
 <b>hitTestContent</b>(<i>pos</i>)
@@ -373,7 +402,10 @@
 <dd>
 QPoint
 </dd>
-</dl><a NAME="WebBrowserPage.resultCallback" ID="WebBrowserPage.resultCallback"></a>
+</dl><a NAME="WebBrowserPage.printCallback" ID="WebBrowserPage.printCallback"></a>
+<h4>WebBrowserPage.printCallback</h4>
+<b>printCallback</b>(<i>resDict=resultDict</i>)
+<a NAME="WebBrowserPage.resultCallback" ID="WebBrowserPage.resultCallback"></a>
 <h4>WebBrowserPage.resultCallback</h4>
 <b>resultCallback</b>(<i>resDict=resultDict</i>)
 <a NAME="WebBrowserPage.runJavaScript" ID="WebBrowserPage.runJavaScript"></a>
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserTabWidget.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.WebBrowser.WebBrowserTabWidget.html	Fri Mar 03 18:34:21 2017 +0100
@@ -134,6 +134,9 @@
 <td><a href="#WebBrowserTabWidget.__pdfGeneratedForSave">__pdfGeneratedForSave</a></td>
 <td>Private slot to save the generated PDF data to a file.</td>
 </tr><tr>
+<td><a href="#WebBrowserTabWidget.__printPreviewRequested">__printPreviewRequested</a></td>
+<td>Private slot to generate the print preview.</td>
+</tr><tr>
 <td><a href="#WebBrowserTabWidget.__recentlyAudibleChanged">__recentlyAudibleChanged</a></td>
 <td>Private slot to react on the audible state of a page.</td>
 </tr><tr>
@@ -399,6 +402,19 @@
 <dd>
 generated PDF document
 </dd>
+</dl><a NAME="WebBrowserTabWidget.__printPreviewRequested" ID="WebBrowserTabWidget.__printPreviewRequested"></a>
+<h4>WebBrowserTabWidget.__printPreviewRequested</h4>
+<b>__printPreviewRequested</b>(<i>printer, browser</i>)
+<p>
+        Private slot to generate the print preview.
+</p><dl>
+<dt><i>printer</i> (QPrinter)</dt>
+<dd>
+reference to the printer object
+</dd><dt><i>browser</i> (WebBrowserView)</dt>
+<dd>
+reference to the browser to be printed
+</dd>
 </dl><a NAME="WebBrowserTabWidget.__recentlyAudibleChanged" ID="WebBrowserTabWidget.__recentlyAudibleChanged"></a>
 <h4>WebBrowserTabWidget.__recentlyAudibleChanged</h4>
 <b>__recentlyAudibleChanged</b>(<i>recentlyAudible</i>)
@@ -693,7 +709,7 @@
 </p><dl>
 <dt><i>browser</i></dt>
 <dd>
-reference to the browser to be printed (HelpBrowserWV)
+reference to the browser to be printed (WebBrowserView)
 </dd>
 </dl><a NAME="WebBrowserTabWidget.reloadAllBrowsers" ID="WebBrowserTabWidget.reloadAllBrowsers"></a>
 <h4>WebBrowserTabWidget.reloadAllBrowsers</h4>
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserView.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/eric6.WebBrowser.WebBrowserView.html	Fri Mar 03 18:34:21 2017 +0100
@@ -147,6 +147,9 @@
 <td><a href="#WebBrowserView.__downloadMedia">__downloadMedia</a></td>
 <td>Private slot to download a media and save it to disk.</td>
 </tr><tr>
+<td><a href="#WebBrowserView.__getSavePageFileNameAndFormat">__getSavePageFileNameAndFormat</a></td>
+<td>Private method to get the file name to save the page to.</td>
+</tr><tr>
 <td><a href="#WebBrowserView.__iconLoaded">__iconLoaded</a></td>
 <td>Private slot handling the loaded web site icon.</td>
 </tr><tr>
@@ -195,6 +198,9 @@
 <td><a href="#WebBrowserView.__renderProcessTerminated">__renderProcessTerminated</a></td>
 <td>Private slot handling a crash of the web page render process.</td>
 </tr><tr>
+<td><a href="#WebBrowserView.__replaceMisspelledWord">__replaceMisspelledWord</a></td>
+<td>Private slot to replace a misspelled word under the context menu.</td>
+</tr><tr>
 <td><a href="#WebBrowserView.__resetSpeedDials">__resetSpeedDials</a></td>
 <td>Private slot to reset all speed dials to the default pages.</td>
 </tr><tr>
@@ -594,7 +600,23 @@
 <b>__downloadMedia</b>(<i></i>)
 <p>
         Private slot to download a media and save it to disk.
-</p><a NAME="WebBrowserView.__iconLoaded" ID="WebBrowserView.__iconLoaded"></a>
+</p><a NAME="WebBrowserView.__getSavePageFileNameAndFormat" ID="WebBrowserView.__getSavePageFileNameAndFormat"></a>
+<h4>WebBrowserView.__getSavePageFileNameAndFormat</h4>
+<b>__getSavePageFileNameAndFormat</b>(<i></i>)
+<p>
+        Private method to get the file name to save the page to.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple containing the file name to save to and the
+            save page format
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, QWebEngineDownloadItem.SavePageFormat)
+</dd>
+</dl><a NAME="WebBrowserView.__iconLoaded" ID="WebBrowserView.__iconLoaded"></a>
 <h4>WebBrowserView.__iconLoaded</h4>
 <b>__iconLoaded</b>(<i>icon</i>)
 <p>
@@ -730,7 +752,12 @@
 <dd>
 exit code of the process
 </dd>
-</dl><a NAME="WebBrowserView.__resetSpeedDials" ID="WebBrowserView.__resetSpeedDials"></a>
+</dl><a NAME="WebBrowserView.__replaceMisspelledWord" ID="WebBrowserView.__replaceMisspelledWord"></a>
+<h4>WebBrowserView.__replaceMisspelledWord</h4>
+<b>__replaceMisspelledWord</b>(<i></i>)
+<p>
+        Private slot to replace a misspelled word under the context menu.
+</p><a NAME="WebBrowserView.__resetSpeedDials" ID="WebBrowserView.__resetSpeedDials"></a>
 <h4>WebBrowserView.__resetSpeedDials</h4>
 <b>__resetSpeedDials</b>(<i></i>)
 <p>
@@ -762,10 +789,15 @@
         Private slot to send a link via email.
 </p><a NAME="WebBrowserView.__showTabCrashPage" ID="WebBrowserView.__showTabCrashPage"></a>
 <h4>WebBrowserView.__showTabCrashPage</h4>
-<b>__showTabCrashPage</b>(<i></i>)
+<b>__showTabCrashPage</b>(<i>status</i>)
 <p>
         Private slot to show the tab crash page.
-</p><a NAME="WebBrowserView.__urlChanged" ID="WebBrowserView.__urlChanged"></a>
+</p><dl>
+<dt><i>status</i> (QWebEnginePage.RenderProcessTerminationStatus)</dt>
+<dd>
+termination status
+</dd>
+</dl><a NAME="WebBrowserView.__urlChanged" ID="WebBrowserView.__urlChanged"></a>
 <h4>WebBrowserView.__urlChanged</h4>
 <b>__urlChanged</b>(<i>url</i>)
 <p>
--- a/Documentation/Source/index-eric6.Preferences.ConfigurationPages.html	Sun Feb 26 15:54:49 2017 +0100
+++ b/Documentation/Source/index-eric6.Preferences.ConfigurationPages.html	Fri Mar 03 18:34:21 2017 +0100
@@ -203,10 +203,13 @@
 <td>Module implementing the Viewmanager configuration page.</td>
 </tr><tr>
 <td><a href="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html">WebBrowserAppearancePage</a></td>
-<td>Module implementing the Web Browser configuration page.</td>
+<td>Module implementing the Web Browser Appearance configuration page.</td>
 </tr><tr>
 <td><a href="eric6.Preferences.ConfigurationPages.WebBrowserPage.html">WebBrowserPage</a></td>
 <td>Module implementing the  Web Browser configuration page.</td>
+</tr><tr>
+<td><a href="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html">WebBrowserSpellCheckingPage</a></td>
+<td>Module implementing the Web Browser Spell Checking configuration page.</td>
 </tr>
 </table>
 </body></html>
\ No newline at end of file
--- a/E5Gui/E5PathPicker.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/E5Gui/E5PathPicker.py	Fri Mar 03 18:34:21 2017 +0100
@@ -215,6 +215,8 @@
             self._editor.setText(text)
         else:
             self._editor.setEditText(text)
+            if text and self._editor.findText(text) == -1:
+                self._editor.insertItem(0, text)
     
     def _editorText(self):
         """
--- a/Graphics/UMLSceneSizeDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Graphics/UMLSceneSizeDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -68,7 +68,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <resources/>
  <connections>
--- a/PluginManager/PluginManager.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/PluginManager/PluginManager.py	Fri Mar 03 18:34:21 2017 +0100
@@ -1034,7 +1034,7 @@
             pluginName in self.__onDemandActiveModules
     
     ###########################################################################
-    ## Specialized plugin module handling methods below
+    ## Specialized plug-in module handling methods below
     ###########################################################################
     
     ###########################################################################
@@ -1297,6 +1297,30 @@
         ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0]
         if ignored == E5SslErrorHandler.NotIgnored:
             self.__downloadCancelled = True
+    
+    ########################################################################
+    ## Methods to clear private data of plug-ins below
+    ########################################################################
+    
+    def clearPluginsPrivateData(self, type_):
+        """
+        Public method to clear the private data of plug-ins of a specified
+        type.
+        
+        Plugins supporting this functionality must support the module function
+        clearPrivateData() and have the module level attribute pluginType.
+        
+        @param type_ type of the plugin to be activated (string)
+        """
+        for name, module in \
+            list(self.__onDemandActiveModules.items()) + \
+            list(self.__onDemandInactiveModules.items()) + \
+            list(self.__activeModules.items()) + \
+                list(self.__inactiveModules.items()):
+            if getattr(module, "pluginType", "") == type_:
+                if hasattr(module, "clearPrivateData"):
+                    module.clearPrivateData()
+        # TODO: document this in the plug-ins paper
 
 #
 # eflag: noqa = M801
--- a/Plugins/AboutPlugin/AboutDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/AboutPlugin/AboutDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -139,7 +139,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <tabstops>
   <tabstop>aboutTabWidget</tabstop>
   <tabstop>aboutEdit</tabstop>
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -677,7 +677,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py	Fri Mar 03 18:34:21 2017 +0100
@@ -79,7 +79,7 @@
 except ImportError:
     from ConfigParser import RawConfigParser            # __IGNORE_WARNING__
 
-__version__ = '2.2.0-eric'
+__version__ = '2.3.1-eric'
 
 DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__,.tox'
 DEFAULT_IGNORE = 'E121,E123,E126,E226,E24,E704,W503'
@@ -134,6 +134,20 @@
 OPERATOR_REGEX = re.compile(r'(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+)(\s*)')
 LAMBDA_REGEX = re.compile(r'\blambda\b')
 HUNK_REGEX = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
+STARTSWITH_DEF_REGEX = re.compile(r'^(async\s+def|def)')
+STARTSWITH_TOP_LEVEL_REGEX = re.compile(r'^(async\s+def\s+|def\s+|class\s+|@)')
+STARTSWITH_INDENT_STATEMENT_REGEX = re.compile(
+    r'^\s*({0})'.format('|'.join(s.replace(' ', '\s+') for s in (
+        'def', 'async def',
+        'for', 'async for',
+        'if', 'elif', 'else',
+        'try', 'except', 'finally',
+        'with', 'async with',
+        'class',
+        'while',
+    )))
+)
+DUNDER_REGEX = re.compile(r'^__([^\s]+)__ = ')
 
 # Work around Python < 2.6 behaviour, which does not generate NL after
 # a comment which is on a line by itself.
@@ -278,6 +292,7 @@
     E303: def a():\n\n\n\n    pass
     E304: @decorator\n\ndef a():\n    pass
     E305: def a():\n    pass\na()
+    E306: def a():\n    def b():\n        pass\n    def c():\n        pass
     """
     if line_number < 3 and not previous_logical:
         return  # Don't expect blank lines before the first line
@@ -286,7 +301,7 @@
             yield 0, "E304 blank lines found after function decorator"
     elif blank_lines > 2 or (indent_level and blank_lines == 2):
         yield 0, "E303 too many blank lines (%d)", blank_lines
-    elif logical_line.startswith(('def ', 'async def ', 'class ', '@')):
+    elif STARTSWITH_TOP_LEVEL_REGEX.match(logical_line):
         if indent_level:
             if not (blank_before or previous_indent_level < indent_level or
                     DOCSTRING_REGEX.match(previous_logical)):
@@ -827,7 +842,7 @@
     no_space = False
     prev_end = None
     annotated_func_arg = False
-    in_def = logical_line.startswith(('def', 'async def'))
+    in_def = bool(STARTSWITH_DEF_REGEX.match(logical_line))
     message = "E251 unexpected spaces around keyword / parameter equals"
     for token_type, text, start, end, line in tokens:
         if token_type == tokenize.NL:
@@ -956,6 +971,8 @@
     if line.startswith('import ') or line.startswith('from '):
         if checker_state.get('seen_non_imports', False):
             yield 0, "E402 module level import not at top of file"
+    elif re.match(DUNDER_REGEX, line):
+        return
     elif any(line.startswith(kw) for kw in allowed_try_keywords):
         # Allow try, except, else, finally keywords intermixed with imports in
         # order to support conditional importing
@@ -996,7 +1013,6 @@
     E702: do_one(); do_two(); do_three()
     E703: do_four();  # useless semicolon
     E704: def f(x): return 2*x
-    E705: async def f(x): return 2*x
     E731: f = lambda x: 2*x
     """
     line = logical_line
@@ -1016,11 +1032,9 @@
                     yield 0, ("E731 do not assign a lambda expression, use a "
                               "def")
                 break
-            if line.startswith('def '):
+            if STARTSWITH_DEF_REGEX.match(line):
                 yield 0, "E704 multiple statements on one line (def)"
-            elif line.startswith('async def '):
-                yield 0, "E705 multiple statements on one line (async def)"
-            else:
+            elif STARTSWITH_INDENT_STATEMENT_REGEX.match(line):
                 yield found, "E701 multiple statements on one line (colon)"
         prev_found = found
         found = line.find(':', found + 1)
--- a/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Fri Mar 03 18:34:21 2017 +0100
@@ -219,9 +219,6 @@
     "E704": QCoreApplication.translate(
         "pycodestyle",
         "multiple statements on one line (def)"),
-    "E705": QCoreApplication.translate(
-        "pycodestyle",
-        "multiple statements on one line (async def)"),
     "E711": QCoreApplication.translate(
         "pycodestyle",
         "comparison to {0} should be {1}"),
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -143,7 +143,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/__init__.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/__init__.py	Fri Mar 03 18:34:21 2017 +0100
@@ -32,6 +32,19 @@
 """
 
 """ Changes
+1.5.0 (2017-01-09)
+  - Enable support for PEP 526 annotated assignments
+
+1.4.0 (2016-12-30):
+  - Change formatting of ImportStarMessage to be consistent with other errors
+  - Support PEP 498 "f-strings"
+
+1.3.0 (2016-09-01):
+  - Fix PyPy2 Windows IntegrationTests
+  - Check for duplicate dictionary keys
+  - Fix TestMain tests on Windows
+  - Fix "continue" and "break" checks ignoring py3.5's "async for" loop
+
 1.2.3 (2016-05-12):
   - Fix TypeError when processing relative imports
 
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py	Fri Mar 03 18:34:21 2017 +0100
@@ -311,7 +311,7 @@
 
 
 class StarImportation(Importation):
-    """A binding created by an 'from x import *' statement."""
+    """A binding created by a 'from x import *' statement."""
 
     def __init__(self, name, source):
         super(StarImportation, self).__init__('*', source)
@@ -806,7 +806,7 @@
             return
 
         if on_conditional_branch():
-            # We can not predict if this conditional branch is going to
+            # We cannot predict if this conditional branch is going to
             # be executed.
             return
 
@@ -944,7 +944,7 @@
         MATMULT = ignore
 
     # additional node types
-    COMPREHENSION = KEYWORD = FORMATTEDVALUE = handleChildren
+    COMPREHENSION = KEYWORD = FORMATTEDVALUE = JOINEDSTR = handleChildren
 
     def DICT(self, node):
         # Complain if there are duplicate keys with different values
@@ -1328,7 +1328,7 @@
         self.handleNodeStore(node)
         self.handleChildren(node)
         if not is_name_previously_defined:
-            # See discussion on https://github.com/pyflakes/pyflakes/pull/59.
+            # See discussion on https://github.com/PyCQA/pyflakes/pull/59
 
             # We're removing the local name since it's being unbound
             # after leaving the except: block and it's always unbound
@@ -1343,5 +1343,24 @@
             except KeyError:
                 pass
 
+    def ANNASSIGN(self, node):
+        """
+        Annotated assignments don't have annotations evaluated on function
+        scope, hence the custom implementation.
+
+        See: PEP 526.
+        """
+        if node.value:
+            # Only bind the *targets* if the assignment has a value.
+            # Otherwise it's not really ast.Store and shouldn't silence
+            # UndefinedLocal warnings.
+            self.handleNode(node.target, node)
+        if not isinstance(self.scope, FunctionScope):
+            self.handleNode(node.annotation, node)
+        if node.value:
+            # If the assignment has value, handle the *value* now.
+            self.handleNode(node.value, node)
+
+
 #
 # eflag: noqa = M702
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py	Fri Mar 03 18:34:21 2017 +0100
@@ -173,7 +173,7 @@
     Class defining the "Import Star Usage" message.
     """
     message_id = 'F17'
-    message = "%s may be undefined, or defined from star imports: %s"
+    message = "%r may be undefined, or defined from star imports: %s"
 
     def __init__(self, filename, loc, name, from_list):
         """
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/translations.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/translations.py	Fri Mar 03 18:34:21 2017 +0100
@@ -65,7 +65,7 @@
         "'from {0} import *' only allowed at module level"),
     'F17': QCoreApplication.translate(
         'pyFlakes',
-        "{0} may be undefined, or defined from star imports: {1}"),
+        "{0!r} may be undefined, or defined from star imports: {1}"),
     'F18': QCoreApplication.translate(
         'pyFlakes',
         "Dictionary key {0!r} repeated with different values"),
--- a/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -149,7 +149,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -236,7 +236,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -86,7 +86,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>contents</tabstop>
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -519,7 +519,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -86,7 +86,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>contents</tabstop>
--- a/Plugins/PluginVcsMercurial.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/PluginVcsMercurial.py	Fri Mar 03 18:34:21 2017 +0100
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import QObject, QCoreApplication
+from PyQt5.QtCore import QObject, QCoreApplication, QByteArray
 
 from E5Gui.E5Application import e5App
 
@@ -143,12 +143,49 @@
     if not e5App().getObject("PluginManager").isPluginLoaded(
             "PluginVcsMercurial"):
         Preferences.Prefs.settings.remove("Mercurial")
+
+
+def clearPrivateData():
+    """
+    Module function to clear the private data of the plug-in.
+    """
+    for key in ["RepositoryUrlHistory"]:
+        VcsMercurialPlugin.setPreferences(key, [])
     
 
 class VcsMercurialPlugin(QObject):
     """
     Class implementing the Mercurial version control plugin.
     """
+    MercurialDefaults = {
+        "StopLogOnCopy": True,  # used in log browser
+        "LogLimit": 20,
+        "CommitMessages": 20,
+        "Commits": [],
+        "CommitAuthorsLimit": 20,
+        "CommitAuthors": [],
+        "PullUpdate": False,
+        "PreferUnbundle": False,
+        "ServerPort": 8000,
+        "ServerStyle": "",
+        "CleanupPatterns": "*.orig *.rej *~",
+        "CreateBackup": False,
+        "InternalMerge": False,
+        "Encoding": "utf-8",
+        "EncodingMode": "strict",
+        "ConsiderHidden": False,
+        "LogMessageColumnWidth": 30,
+        "LogBrowserGeometry": QByteArray(),
+        "LogBrowserSplitterStates": [QByteArray(), QByteArray(),
+                                     QByteArray()],
+        # mainSplitter, detailsSplitter, diffSplitter
+        "StatusDialogGeometry": QByteArray(),
+        "StatusDialogSplitterState": QByteArray(),
+        "MqStatusDialogGeometry": QByteArray(),
+        "MqStatusDialogSplitterState": QByteArray(),
+        "RepositoryUrlHistory": [],
+    }
+    
     def __init__(self, ui):
         """
         Constructor
@@ -158,26 +195,6 @@
         super(VcsMercurialPlugin, self).__init__(ui)
         self.__ui = ui
         
-        self.__mercurialDefaults = {
-            "StopLogOnCopy": True,  # used in log browser
-            "LogLimit": 20,
-            "CommitMessages": 20,
-            "Commits": [],
-            "CommitAuthorsLimit": 20,
-            "CommitAuthors": [],
-            "PullUpdate": False,
-            "PreferUnbundle": False,
-            "ServerPort": 8000,
-            "ServerStyle": "",
-            "CleanupPatterns": "*.orig *.rej *~",
-            "CreateBackup": False,
-            "InternalMerge": False,
-            "Encoding": "utf-8",
-            "EncodingMode": "strict",
-            "ConsiderHidden": False,
-            "LogMessageColumnWidth": 30,
-        }
-        
         from VcsPlugins.vcsMercurial.ProjectHelper import HgProjectHelper
         self.__projectHelperObject = HgProjectHelper(None, None)
         try:
@@ -240,9 +257,10 @@
         tb.setVisible(True)
         tb.setEnabled(True)
     
-    def getPreferences(self, key):
+    @classmethod
+    def getPreferences(cls, key):
         """
-        Public method to retrieve the various settings.
+        Class method to retrieve the various settings.
         
         @param key the key of the value to get
         @return the requested setting
@@ -250,21 +268,38 @@
         if key in ["StopLogOnCopy", "PullUpdate", "PreferUnbundle",
                    "CreateBackup", "InternalMerge", "ConsiderHidden"]:
             return Preferences.toBool(Preferences.Prefs.settings.value(
-                "Mercurial/" + key, self.__mercurialDefaults[key]))
+                "Mercurial/" + key, cls.MercurialDefaults[key]))
         elif key in ["LogLimit", "CommitMessages", "CommitAuthorsLimit",
                      "ServerPort", "LogMessageColumnWidth"]:
             return int(Preferences.Prefs.settings.value(
-                "Mercurial/" + key, self.__mercurialDefaults[key]))
-        elif key in ["Commits", "CommitAuthors"]:
+                "Mercurial/" + key, cls.MercurialDefaults[key]))
+        elif key in ["Commits", "CommitAuthors", "RepositoryUrlHistory"]:
             return Preferences.toList(Preferences.Prefs.settings.value(
-                "Mercurial/" + key))
+                "Mercurial/" + key, cls.MercurialDefaults[key]))
+        elif key in ["LogBrowserGeometry", "StatusDialogGeometry",
+                     "StatusDialogSplitterState", "MqStatusDialogGeometry",
+                     "MqStatusDialogSplitterState"]:
+            # QByteArray values
+            v = Preferences.Prefs.settings.value("Mercurial/" + key)
+            if v is not None:
+                return v
+            else:
+                return cls.MercurialDefaults[key]
+        elif key in ["LogBrowserSplitterStates"]:
+            # list of QByteArray values
+            states = Preferences.Prefs.settings.value("Mercurial/" + key)
+            if states is not None:
+                return states
+            else:
+                return cls.MercurialDefaults[key]
         else:
             return Preferences.Prefs.settings.value(
-                "Mercurial/" + key, self.__mercurialDefaults[key])
+                "Mercurial/" + key, cls.MercurialDefaults[key])
     
-    def setPreferences(self, key, value):
+    @classmethod
+    def setPreferences(cls, key, value):
         """
-        Public method to store the various settings.
+        Class method to store the various settings.
         
         @param key the key of the setting to be set
         @param value the value to be set
@@ -279,11 +314,11 @@
         """
         args = []
         if self.getPreferences("Encoding") != \
-                self.__mercurialDefaults["Encoding"]:
+                self.MercurialDefaults["Encoding"]:
             args.append("--encoding")
             args.append(self.getPreferences("Encoding"))
         if self.getPreferences("EncodingMode") != \
-                self.__mercurialDefaults["EncodingMode"]:
+                self.MercurialDefaults["EncodingMode"]:
             args.append("--encodingmode")
             args.append(self.getPreferences("EncodingMode"))
         if self.getPreferences("ConsiderHidden"):
--- a/Plugins/VcsPlugins/vcsMercurial/Config.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/Config.py	Fri Mar 03 18:34:21 2017 +0100
@@ -10,9 +10,9 @@
 from __future__ import unicode_literals
 
 # Available protocols fpr the repository URL
-ConfigHgProtocols = [
-    'file://',
-    'http://',
-    'https://',
-    'ssh://',
-]
+ConfigHgSchemes = (
+    'file',
+    'http',
+    'https',
+    'ssh',
+)
--- a/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -14,27 +14,33 @@
 
 from .Ui_HgFetchDialog import Ui_HgFetchDialog
 
-import Preferences
-
 
 class HgFetchDialog(QDialog, Ui_HgFetchDialog):
     """
     Class implementing a dialog to enter data to be used for a fetch operation.
     """
-    def __init__(self, parent=None):
+    def __init__(self, vcs, parent=None):
         """
         Constructor
         
-        @param parent reference to the parent widget (QWidget)
+        @param vcs reference to the Mercurial vcs object
+        @type Hg
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super(HgFetchDialog, self).__init__(parent)
         self.setupUi(self)
         
-        self.recentCommitMessages = Preferences.toList(
-            Preferences.Prefs.settings.value('Mercurial/Commits'))
+        self.__vcs = vcs
+        
+        commitMessages = self.__vcs.getPlugin().getPreferences('Commits')
         self.recentComboBox.clear()
         self.recentComboBox.addItem("")
-        self.recentComboBox.addItems(self.recentCommitMessages)
+        for message in commitMessages:
+            abbrMsg = message[:60]
+            if len(message) > 60:
+                abbrMsg += "..."
+            self.recentComboBox.addItem(abbrMsg, message)
     
     @pyqtSlot(str)
     def on_recentComboBox_activated(self, txt):
@@ -44,7 +50,7 @@
         @param txt text of the selected entry (string)
         """
         if txt:
-            self.messageEdit.setPlainText(txt)
+            self.messageEdit.setPlainText(self.recentComboBox.currentData())
     
     def getData(self):
         """
@@ -55,14 +61,13 @@
         """
         msg = self.messageEdit.toPlainText()
         if msg:
-            if msg in self.recentCommitMessages:
-                self.recentCommitMessages.remove(msg)
-            self.recentCommitMessages.insert(0, msg)
-            no = int(Preferences.Prefs.settings.value(
-                'Mercurial/CommitMessages', 20))
-            del self.recentCommitMessages[no:]
-            Preferences.Prefs.settings.setValue(
-                'Mercurial/Commits',
-                self.recentCommitMessages)
+            commitMessages = self.__vcs.getPlugin().getPreferences('Commits')
+            if msg in commitMessages:
+                commitMessages.remove(msg)
+            commitMessages.insert(0, msg)
+            no = self.__vcs.getPlugin().getPreferences("CommitMessages")
+            del commitMessages[no:]
+            self.__vcs.getPlugin().setPreferences(
+                'Commits', commitMessages)
         
         return msg, self.switchCheckBox.isChecked()
--- a/Plugins/VcsPlugins/vcsMercurial/FetchExtension/fetch.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/FetchExtension/fetch.py	Fri Mar 03 18:34:21 2017 +0100
@@ -28,13 +28,20 @@
         @param vcs reference to the Mercurial vcs object
         """
         super(Fetch, self).__init__(vcs)
+        
+        self.__vcs = vcs
     
-    def hgFetch(self, name):
+    def hgFetch(self, name, revisions=None):
         """
         Public method to fetch changes from a remote repository.
         
-        @param name file/directory name (string)
-        @return flag indicating that the project should be reread (boolean)
+        @param name directory name of the project to be fetched to
+        @type str
+        @param revisions list of revisions to be pulled
+        @type list of str
+        @return flag indicating, that the update contained an add
+            or delete
+        @rtype bool
         """
         # find the root of the repo
         repodir = self.vcs.splitPath(name)[0]
@@ -45,7 +52,7 @@
         
         from .HgFetchDialog import HgFetchDialog
         res = False
-        dlg = HgFetchDialog()
+        dlg = HgFetchDialog(self.__vcs)
         if dlg.exec_() == QDialog.Accepted:
             message, switchParent = dlg.getData()
             
@@ -56,6 +63,10 @@
             if switchParent:
                 args.append("--switch-parent")
             args.append("-v")
+            if revisions:
+                for rev in revisions:
+                    args.append("--rev")
+                    args.append(rev)
             
             dia = HgDialog(
                 self.tr('Fetching from a remote Mercurial repository'),
--- a/Plugins/VcsPlugins/vcsMercurial/GpgExtension/gpg.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/GpgExtension/gpg.py	Fri Mar 03 18:34:21 2017 +0100
@@ -83,11 +83,14 @@
             if res:
                 dia.exec_()
     
-    def hgGpgSign(self, path):
+    def hgGpgSign(self, path, revisions=None):
         """
         Public method used to list the available bookmarks.
         
-        @param path directory name of the project (string)
+        @param path directory name of the project
+        @type str
+        @param revisions list containing the revisions to be signed
+        @type list of str
         """
         # find the root of the repo
         repodir = self.vcs.splitPath(path)[0]
@@ -96,30 +99,44 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        from .HgGpgSignDialog import HgGpgSignDialog
-        dlg = HgGpgSignDialog(self.vcs.hgGetTagsList(repodir),
-                              self.vcs.hgGetBranchesList(repodir),
-                              self.vcs.hgGetBookmarksList(repodir))
-        if dlg.exec_() == QDialog.Accepted:
-            revision, noCommit, message, keyId, local, force = dlg.getData()
-            
-            args = self.vcs.initCommand("sign")
-            if noCommit:
-                args.append("--no-commit")
-            if message:
-                args.append("--message")
-                args.append(message)
-            if keyId:
-                args.append("--key")
-                args.append(keyId)
-            if local:
-                args.append("--local")
-            if force:
-                args.append("--force")
-            if revision:
-                args.append(revision)
-            
-            dia = HgDialog(self.tr('Sign Revision'), self.vcs)
-            res = dia.startProcess(args, repodir)
-            if res:
-                dia.exec_()
+        if revisions is None:
+            from .HgGpgSignDialog import HgGpgSignDialog
+            dlg = HgGpgSignDialog(self.vcs.hgGetTagsList(repodir),
+                                  self.vcs.hgGetBranchesList(repodir),
+                                  self.vcs.hgGetBookmarksList(repodir))
+            if dlg.exec_() == QDialog.Accepted:
+                revision, noCommit, message, keyId, local, force = \
+                    dlg.getData()
+                if revision:
+                    revisions = [revision]
+                else:
+                    revisions = []
+            else:
+                return
+        else:
+            noCommit = False
+            message = ""
+            keyId = ""
+            local = False
+            force = False
+        
+        args = self.vcs.initCommand("sign")
+        if noCommit:
+            args.append("--no-commit")
+        if message:
+            args.append("--message")
+            args.append(message)
+        if keyId:
+            args.append("--key")
+            args.append(keyId)
+        if local:
+            args.append("--local")
+        if force:
+            args.append("--force")
+        for rev in revisions:
+            args.append(rev)
+        
+        dia = HgDialog(self.tr('Sign Revision'), self.vcs)
+        res = dia.startProcess(args, repodir)
+        if res:
+            dia.exec_()
--- a/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -148,7 +148,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -165,7 +165,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgCommandDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgCommandDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -94,7 +94,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>commandCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -68,6 +68,8 @@
         self.authorComboBox.addItems(commitAuthors)
         
         self.dateTimeEdit.setDateTime(QDateTime.currentDateTime())
+        
+        self.logEdit.setFocus(Qt.OtherFocusReason)
     
     def on_buttonBox_clicked(self, button):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -166,7 +166,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>logEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -87,7 +87,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsMercurial/HgDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -137,7 +137,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>resultbox</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -17,18 +17,24 @@
 import re
 import collections
 
-from PyQt5.QtCore import pyqtSlot, Qt, QDate, QProcess, QTimer, QRegExp, \
-    QSize, QPoint, QUrl
-from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, QIcon
+from PyQt5.QtCore import pyqtSlot, qVersion, Qt, QDate, QProcess, QTimer, \
+    QRegExp, QSize, QPoint, QFileInfo
+from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, \
+    QIcon, QTextCursor
 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QHeaderView, \
-    QTreeWidgetItem, QApplication, QLineEdit, QMenu, QInputDialog
+    QTreeWidgetItem, QApplication, QLineEdit, QMenu, QInputDialog, QToolTip
 
 from E5Gui.E5Application import e5App
-from E5Gui import E5MessageBox
+from E5Gui import E5MessageBox, E5FileDialog
 
 from .Ui_HgLogBrowserDialog import Ui_HgLogBrowserDialog
 
+from .HgDiffHighlighter import HgDiffHighlighter
+from .HgDiffGenerator import HgDiffGenerator
+
 import UI.PixmapCache
+import Preferences
+import Utilities
 
 COLORNAMES = ["blue", "darkgreen", "red", "green", "darkblue", "purple",
               "cyan", "olive", "magenta", "darkred", "darkmagenta",
@@ -67,7 +73,15 @@
         super(HgLogBrowserDialog, self).__init__(parent)
         self.setupUi(self)
         
-        self.__position = QPoint()
+        windowFlags = self.windowFlags()
+        windowFlags |= Qt.WindowContextHelpButtonHint
+        self.setWindowFlags(windowFlags)
+        
+        self.mainSplitter.setSizes([300, 400])
+        self.mainSplitter.setStretchFactor(0, 1)
+        self.mainSplitter.setStretchFactor(1, 2)
+        self.diffSplitter.setStretchFactor(0, 1)
+        self.diffSplitter.setStretchFactor(1, 2)
         
         if mode == "log":
             self.setWindowTitle(self.tr("Mercurial Log"))
@@ -103,6 +117,14 @@
         self.fieldCombo.addItem(self.tr("Message"), "message")
         self.fieldCombo.addItem(self.tr("File"), "file")
         
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.diffEdit.setFontFamily(font.family())
+        self.diffEdit.setFontPointSize(font.pointSize())
+        
+        self.diffHighlighter = HgDiffHighlighter(self.diffEdit.document())
+        self.__diffGenerator = HgDiffGenerator(vcs, self)
+        self.__diffGenerator.finished.connect(self.__generatorFinished)
+        
         self.vcs = vcs
         if mode in ("log", "incoming", "outgoing"):
             self.commandMode = mode
@@ -118,11 +140,16 @@
             "<tr><td><b>Date</b></td><td>{1}</td></tr>"
             "<tr><td><b>Author</b></td><td>{2}</td></tr>"
             "<tr><td><b>Branch</b></td><td>{3}</td></tr>"
-            "<tr><td><b>Parents</b></td><td>{4}</td></tr>"
-            "<tr><td><b>Children</b></td><td>{5}</td></tr>"
-            "{6}"
+            "{4}"
+            "<tr><td><b>Message</b></td><td>{5}</td></tr>"
             "</table>"
         )
+        self.__parentsTemplate = self.tr(
+            "<tr><td><b>Parents</b></td><td>{0}</td></tr>"
+        )
+        self.__childrenTemplate = self.tr(
+            "<tr><td><b>Children</b></td><td>{0}</td></tr>"
+        )
         self.__tagsTemplate = self.tr(
             "<tr><td><b>Tags</b></td><td>{0}</td></tr>"
         )
@@ -136,7 +163,7 @@
         self.__bundle = ""
         self.__filename = ""
         self.__isFile = False
-        self.__currentRevision = ""
+        self.__selectedRevisions = []
         self.intercept = False
         
         self.__initData()
@@ -147,12 +174,16 @@
         self.toDate.setDisplayFormat("yyyy-MM-dd")
         self.__resetUI()
         
+        # roles used in the log tree
         self.__messageRole = Qt.UserRole
         self.__changesRole = Qt.UserRole + 1
         self.__edgesRole = Qt.UserRole + 2
         self.__parentsRole = Qt.UserRole + 3
         self.__latestTagRole = Qt.UserRole + 4
         
+        # roles used in the file tree
+        self.__diffFileLineRole = Qt.UserRole
+        
         if self.__hgClient:
             self.process = None
         else:
@@ -211,12 +242,24 @@
         Private method to initialize the actions menu.
         """
         self.__actionsMenu = QMenu()
+        self.__actionsMenu.setTearOffEnabled(True)
+        if qVersion() >= "5.1.0":
+            self.__actionsMenu.setToolTipsVisible(True)
+        else:
+            self.__actionsMenu.hovered.connect(self.__actionsMenuHovered)
+        
         self.__graftAct = self.__actionsMenu.addAction(
             UI.PixmapCache.getIcon("vcsGraft.png"),
             self.tr("Copy Changesets"), self.__graftActTriggered)
         self.__graftAct.setToolTip(self.tr(
             "Copy the selected changesets to the current branch"))
         
+        self.__mergeAct = self.__actionsMenu.addAction(
+            UI.PixmapCache.getIcon("vcsMerge.png"),
+            self.tr("Merge with Changeset"), self.__mergeActTriggered)
+        self.__mergeAct.setToolTip(self.tr(
+            "Merge the working directory with the selected changeset"))
+        
         self.__phaseAct = self.__actionsMenu.addAction(
             self.tr("Change Phase"), self.__phaseActTriggered)
         self.__phaseAct.setToolTip(self.tr(
@@ -282,16 +325,70 @@
         
         self.__actionsMenu.addSeparator()
         
+        self.__bundleAct = self.__actionsMenu.addAction(
+            UI.PixmapCache.getIcon("vcsCreateChangegroup.png"),
+            self.tr("Create Changegroup"), self.__bundleActTriggered)
+        self.__bundleAct.setToolTip(self.tr(
+            "Create a changegroup file containing the selected changesets"))
+        self.__bundleAct.setWhatsThis(self.tr(
+            """<b>Create Changegroup</b>\n<p>This creates a changegroup"""
+            """ file containing the selected revisions. If no revisions"""
+            """ are selected, all changesets will be bundled. If one"""
+            """ revision is selected, it will be interpreted as the base"""
+            """ revision. Otherwise the lowest revision will be used as"""
+            """ the base revision and all other revision will be bundled."""
+            """ If the dialog is showing outgoing changesets, all"""
+            """ selected changesets will be bundled.</p>"""))
+        self.__unbundleAct = self.__actionsMenu.addAction(
+            UI.PixmapCache.getIcon("vcsApplyChangegroup.png"),
+            self.tr("Apply Changegroup"), self.__unbundleActTriggered)
+        self.__unbundleAct.setToolTip(self.tr(
+            "Apply the currently viewed changegroup file"))
+        
+        self.__actionsMenu.addSeparator()
+        
+        self.__gpgSignAct = self.__actionsMenu.addAction(
+            UI.PixmapCache.getIcon("changesetSign.png"),
+            self.tr("Sign Revisions"), self.__gpgSignActTriggered)
+        self.__gpgSignAct.setToolTip(self.tr(
+            "Add a signature for the selected revisions"))
+        self.__gpgVerifyAct = self.__actionsMenu.addAction(
+            UI.PixmapCache.getIcon("changesetSignVerify.png"),
+            self.tr("Verify Signatures"), self.__gpgVerifyActTriggered)
+        self.__gpgVerifyAct.setToolTip(self.tr(
+            "Verify all signatures there may be for the selected revision"))
+        
+        self.__actionsMenu.addSeparator()
+        
         self.__stripAct = self.__actionsMenu.addAction(
             UI.PixmapCache.getIcon("fileDelete.png"),
             self.tr("Strip Changesets"), self.__stripActTriggered)
         self.__stripAct.setToolTip(self.tr(
             "Strip changesets from a repository"))
         
+        self.__actionsMenu.addSeparator()
+        
+        self.__selectAllAct = self.__actionsMenu.addAction(
+            self.tr("Select All Entries"), self.__selectAllActTriggered)
+        self.__unselectAllAct = self.__actionsMenu.addAction(
+            self.tr("Deselect All Entries"),
+            lambda: self.__selectAllActTriggered(False))
+        
         self.actionsButton.setIcon(
             UI.PixmapCache.getIcon("actionsToolButton.png"))
         self.actionsButton.setMenu(self.__actionsMenu)
     
+    def __actionsMenuHovered(self, action):
+        """
+        Private slot to show the tooltip for an action menu entry.
+        
+        @param action action to show tooltip for
+        @type QAction
+        """
+        QToolTip.showText(
+            QCursor.pos(), action.toolTip(),
+            self.__actionsMenu, self.__actionsMenu.actionGeometry(action))
+    
     def __initData(self):
         """
         Private method to (re-)initialize some data.
@@ -334,7 +431,15 @@
                 QTimer.singleShot(2000, self.process.kill)
                 self.process.waitForFinished(3000)
         
-        self.__position = self.pos()
+        self.vcs.getPlugin().setPreferences(
+            "LogBrowserGeometry", self.saveGeometry())
+        self.vcs.getPlugin().setPreferences(
+            "LogBrowserSplitterStates", [
+                self.mainSplitter.saveState(),
+                self.detailsSplitter.saveState(),
+                self.diffSplitter.saveState(),
+            ]
+        )
         
         e.accept()
     
@@ -342,11 +447,34 @@
         """
         Public slot to show the dialog.
         """
-        if not self.__position.isNull():
-            self.move(self.__position)
+        self.__reloadGeometry()
+        self.__restoreSplitterStates()
         self.__resetUI()
         
         super(HgLogBrowserDialog, self).show()
+
+    def __reloadGeometry(self):
+        """
+        Private method to restore the geometry.
+        """
+        geom = self.vcs.getPlugin().getPreferences("LogBrowserGeometry")
+        if geom.isEmpty():
+            s = QSize(1000, 800)
+            self.resize(s)
+        else:
+            self.restoreGeometry(geom)
+    
+    def __restoreSplitterStates(self):
+        """
+        Private method to restore the state of the various splitters.
+        """
+        states = self.vcs.getPlugin().getPreferences(
+            "LogBrowserSplitterStates")
+        if len(states) == 3:
+            # we have three splitters
+            self.mainSplitter.restoreState(states[0])
+            self.detailsSplitter.restoreState(states[1])
+            self.diffSplitter.restoreState(states[2])
     
     def __resetUI(self):
         """
@@ -606,12 +734,12 @@
                                 "The hg process did not finish within 30s.")
                 else:
                     errMsg = self.tr("Could not start the hg executable.")
-            
-            if errMsg:
-                E5MessageBox.critical(
-                    self,
-                    self.tr("Mercurial Error"),
-                    errMsg)
+                
+                if errMsg:
+                    E5MessageBox.critical(
+                        self,
+                        self.tr("Mercurial Error"),
+                        errMsg)
             
             if output:
                 parents = [int(p) for p in output.strip().splitlines()]
@@ -746,10 +874,15 @@
         res = ("", "")
         if output:
             for line in output.splitlines():
-                name, rev = line.strip().rsplit(None, 1)
-                if name == tag:
-                    res = tuple(rev.split(":", 1))
-                    break
+                if line.strip():
+                    try:
+                        name, rev = line.strip().rsplit(None, 1)
+                        if name == tag:
+                            res = tuple(rev.split(":", 1))
+                            break
+                    except ValueError:
+                        # ignore silently
+                        pass
         
         return res
     
@@ -850,23 +983,6 @@
         
         return itm
     
-    def __generateFileItem(self, action, path, copyfrom):
-        """
-        Private method to generate a changed files tree entry.
-        
-        @param action indicator for the change action ("A", "D" or "M")
-        @param path path of the file in the repository (string)
-        @param copyfrom path the file was copied from (string)
-        @return reference to the generated item (QTreeWidgetItem)
-        """
-        itm = QTreeWidgetItem(self.filesTree, [
-            self.flags[action],
-            path,
-            copyfrom,
-        ])
-        
-        return itm
-    
     def __getLogEntries(self, startRev=None, noEntries=0):
         """
         Private method to retrieve log entries from the repository.
@@ -995,8 +1111,7 @@
         self.__bundle = bundle
         self.__isFile = isFile
         
-        self.sbsCheckBox.setEnabled(isFile)
-        self.sbsCheckBox.setVisible(isFile)
+        self.sbsSelectLabel.clear()
         
         self.errorGroup.hide()
         QApplication.processEvents()
@@ -1187,7 +1302,16 @@
         self.__resizeColumnsLog()
         
         if self.__started:
-            self.logTree.setCurrentItem(self.logTree.topLevelItem(0))
+            if self.__selectedRevisions:
+                foundItems = self.logTree.findItems(
+                    self.__selectedRevisions[0], Qt.MatchExactly,
+                    self.RevisionColumn)
+                if foundItems:
+                    self.logTree.setCurrentItem(foundItems[0])
+                else:
+                    self.logTree.setCurrentItem(self.logTree.topLevelItem(0))
+            else:
+                self.logTree.setCurrentItem(self.logTree.topLevelItem(0))
             self.__started = False
         
         if self.commandMode in ("incoming", "outgoing"):
@@ -1221,16 +1345,16 @@
         self.__filterLogsEnabled = True
         if self.__actionMode() == "filter":
             self.__filterLogs()
-        self.__updateDiffButtons()
         self.__updateToolMenuActions()
         
         # restore current item
-        if self.__currentRevision:
-            items = self.logTree.findItems(
-                self.__currentRevision, Qt.MatchExactly, self.RevisionColumn)
-            if items:
-                self.logTree.setCurrentItem(items[0])
-                self.__currentRevision = ""
+        if self.__selectedRevisions:
+            for revision in self.__selectedRevisions:
+                items = self.logTree.findItems(
+                    revision, Qt.MatchExactly, self.RevisionColumn)
+                if items:
+                    items[0].setSelected(True)
+            self.__selectedRevisions = []
     
     def __readStdout(self):
         """
@@ -1272,24 +1396,6 @@
             self.inputGroup.setEnabled(True)
             self.inputGroup.show()
     
-    def __diffRevisions(self, rev1, rev2):
-        """
-        Private method to do a diff of two revisions.
-        
-        @param rev1 first revision number (integer)
-        @param rev2 second revision number (integer)
-        """
-        if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked():
-            self.vcs.hgSbsDiff(self.__filename,
-                               revisions=(str(rev1), str(rev2)))
-        else:
-            if self.diff is None:
-                from .HgDiffDialog import HgDiffDialog
-                self.diff = HgDiffDialog(self.vcs)
-            self.diff.show()
-            self.diff.raise_()
-            self.diff.start(self.__filename, [rev1, rev2], self.__bundle)
-    
     def on_buttonBox_clicked(self, button):
         """
         Private slot called by a button of the button box clicked.
@@ -1307,32 +1413,38 @@
         elif button == self.refreshButton:
             self.on_refreshButton_clicked()
     
-    def __updateDiffButtons(self):
+    def __updateSbsSelectLabel(self):
         """
         Private slot to update the enabled status of the diff buttons.
         """
-        selectionLength = len(self.logTree.selectedItems())
-        if selectionLength <= 1:
-            current = self.logTree.currentItem()
-            if current is None:
-                self.diffP1Button.setEnabled(False)
-                self.diffP2Button.setEnabled(False)
-            else:
-                parents = current.data(0, self.__parentsRole)
-                self.diffP1Button.setEnabled(len(parents) > 0)
-                self.diffP2Button.setEnabled(len(parents) > 1)
-            
-            self.diffRevisionsButton.setEnabled(False)
-        elif selectionLength == 2:
-            self.diffP1Button.setEnabled(False)
-            self.diffP2Button.setEnabled(False)
-            
-            self.diffRevisionsButton.setEnabled(True)
-        else:
-            self.diffP1Button.setEnabled(False)
-            self.diffP2Button.setEnabled(False)
-            
-            self.diffRevisionsButton.setEnabled(False)
+        self.sbsSelectLabel.clear()
+        if self.__isFile:
+            selectedItems = self.logTree.selectedItems()
+            if len(selectedItems) == 1:
+                currentItem = selectedItems[0]
+                rev2 = currentItem.text(self.RevisionColumn).split(":", 1)[0]\
+                    .strip()
+                parents = currentItem.data(0, self.__parentsRole)
+                if parents:
+                    parentLinks = []
+                    for index in range(len(parents)):
+                        parentLinks.append(
+                            '<a href="sbsdiff:{0}_{1}">&nbsp;{2}&nbsp;</a>'
+                            .format(parents[index], rev2, index + 1))
+                    self.sbsSelectLabel.setText(
+                        self.tr('Side-by-Side Diff to Parent {0}').format(
+                            " ".join(parentLinks)))
+            elif len(selectedItems) == 2:
+                rev1 = int(selectedItems[0].text(self.RevisionColumn)
+                           .split(":", 1)[0])
+                rev2 = int(selectedItems[1].text(self.RevisionColumn)
+                           .split(":", 1)[0])
+                if rev1 > rev2:
+                    # Swap the entries, so that rev1 < rev2
+                    rev1, rev2 = rev2, rev1
+                self.sbsSelectLabel.setText(self.tr(
+                    '<a href="sbsdiff:{0}_{1}">Side-by-Side Compare</a>')
+                    .format(rev1, rev2))
     
     def __updateToolMenuActions(self):
         """
@@ -1340,52 +1452,54 @@
         the tool menu button.
         """
         if self.initialCommandMode == "log" and self.projectMode:
-            if self.__phaseAct is not None:
-                # step 1: count entries with changeable phases
-                secret = 0
-                draft = 0
-                public = 0
-                for itm in self.logTree.selectedItems():
-                    phase = itm.text(self.PhaseColumn)
-                    if phase == self.phases["draft"]:
-                        draft += 1
-                    elif phase == self.phases["secret"]:
-                        secret += 1
-                    else:
-                        public += 1
-                
-                # step 2: set the status of the phase button
-                if public == 0 and \
-                   ((secret > 0 and draft == 0) or
-                        (secret == 0 and draft > 0)):
-                    self.__phaseAct.setEnabled(True)
+            # do the phase action
+            # step 1: count entries with changeable phases
+            secret = 0
+            draft = 0
+            public = 0
+            for itm in self.logTree.selectedItems():
+                phase = itm.text(self.PhaseColumn)
+                if phase == self.phases["draft"]:
+                    draft += 1
+                elif phase == self.phases["secret"]:
+                    secret += 1
                 else:
-                    self.__phaseAct.setEnabled(False)
+                    public += 1
+            
+            # step 2: set the status of the phase action
+            if public == 0 and \
+               ((secret > 0 and draft == 0) or
+                    (secret == 0 and draft > 0)):
+                self.__phaseAct.setEnabled(True)
+            else:
+                self.__phaseAct.setEnabled(False)
             
-            if self.__graftAct is not None:
-                # step 1: count selected entries not belonging to the
-                #         current branch
-                otherBranches = 0
-                for itm in self.logTree.selectedItems():
-                    branch = itm.text(self.BranchColumn)
-                    if branch != self.__projectBranch:
-                        otherBranches += 1
-                
-                # step 2: set the status of the graft action
-                self.__graftAct.setEnabled(otherBranches > 0)
+            # do the graft action
+            # step 1: count selected entries not belonging to the
+            #         current branch
+            otherBranches = 0
+            for itm in self.logTree.selectedItems():
+                branch = itm.text(self.BranchColumn)
+                if branch != self.__projectBranch:
+                    otherBranches += 1
             
-            self.__tagAct.setEnabled(len(self.logTree.selectedItems()) == 1)
-            self.__switchAct.setEnabled(len(self.logTree.selectedItems()) == 1)
-            self.__bookmarkAct.setEnabled(
-                len(self.logTree.selectedItems()) == 1)
-            self.__bookmarkMoveAct.setEnabled(
-                len(self.logTree.selectedItems()) == 1)
+            # step 2: set the status of the graft action
+            self.__graftAct.setEnabled(otherBranches > 0)
             
+            selectedItemsCount = len(self.logTree.selectedItems())
+            self.__mergeAct.setEnabled(selectedItemsCount == 1)
+            self.__tagAct.setEnabled(selectedItemsCount == 1)
+            self.__switchAct.setEnabled(selectedItemsCount == 1)
+            self.__bookmarkAct.setEnabled(selectedItemsCount == 1)
+            self.__bookmarkMoveAct.setEnabled(selectedItemsCount == 1)
+            
+            self.__pullAct.setText(self.tr("Pull Changes"))
+            self.__fetchAct.setText(self.tr("Fetch Changes"))
             if self.vcs.canPull():
                 self.__pullAct.setEnabled(True)
                 self.__lfPullAct.setEnabled(
                     self.vcs.isExtensionActive("largefiles") and
-                    bool(self.logTree.selectedItems()))
+                    selectedItemsCount > 0)
                 self.__fetchAct.setEnabled(
                     self.vcs.isExtensionActive("fetch"))
             else:
@@ -1395,7 +1509,7 @@
             
             if self.vcs.canPush():
                 self.__pushAct.setEnabled(
-                    len(self.logTree.selectedItems()) == 1 and
+                    selectedItemsCount == 1 and
                     self.logTree.selectedItems()[0].text(self.PhaseColumn) ==
                     self.phases["draft"])
                 self.__pushAllAct.setEnabled(True)
@@ -1405,42 +1519,136 @@
             
             self.__stripAct.setEnabled(
                 self.vcs.isExtensionActive("strip") and
-                len(self.logTree.selectedItems()) == 1)
+                selectedItemsCount == 1)
+            
+            self.__bundleAct.setEnabled(self.logTree.topLevelItemCount() > 0)
+            self.__unbundleAct.setEnabled(False)
+            
+            self.__gpgSignAct.setEnabled(
+                self.vcs.isExtensionActive("gpg") and
+                selectedItemsCount > 0)
+            self.__gpgVerifyAct.setEnabled(
+                self.vcs.isExtensionActive("gpg") and
+                selectedItemsCount == 1)
             
             self.actionsButton.setEnabled(True)
+        
+        elif self.initialCommandMode == "incoming" and self.projectMode:
+            for act in [self.__phaseAct, self.__graftAct, self.__mergeAct,
+                        self.__tagAct, self.__switchAct, self.__bookmarkAct,
+                        self.__bookmarkMoveAct, self.__pushAct,
+                        self.__pushAllAct, self.__stripAct, self.__bundleAct,
+                        self.__gpgSignAct, self.__gpgVerifyAct]:
+                act.setEnabled(False)
+            
+            self.__pullAct.setText(self.tr("Pull Selected Changes"))
+            self.__fetchAct.setText(self.tr("Fetch Selected Changes"))
+            if self.vcs.canPull():
+                # step 1: determine number of selected draft changesets
+                #         i.e. those that can be pulled
+                selectedDraftItemsCount = 0
+                for itm in self.logTree.selectedItems():
+                    phase = itm.text(self.PhaseColumn)
+                    if phase == self.phases["draft"]:
+                        selectedDraftItemsCount += 1
+                self.__pullAct.setEnabled(selectedDraftItemsCount > 0)
+                self.__lfPullAct.setEnabled(
+                    self.vcs.isExtensionActive("largefiles") and
+                    selectedItemsCount > 0)
+                self.__fetchAct.setEnabled(
+                    self.vcs.isExtensionActive("fetch") and
+                    selectedDraftItemsCount > 0)
+            else:
+                self.__pullAct.setEnabled(False)
+                self.__lfPullAct.setEnabled(False)
+                self.__fetchAct.setEnabled(False)
+            
+            self.__unbundleAct.setEnabled(bool(self.__bundle))
+            
+            self.actionsButton.setEnabled(True)
+        
+        elif self.initialCommandMode == "outgoing" and self.projectMode:
+            for act in [self.__phaseAct, self.__graftAct, self.__mergeAct,
+                        self.__tagAct, self.__switchAct, self.__bookmarkAct,
+                        self.__bookmarkMoveAct, self.__pullAct,
+                        self.__lfPullAct, self.__fetchAct, self.__stripAct,
+                        self.__gpgSignAct, self.__gpgVerifyAct,
+                        self.__unbundleAct]:
+                act.setEnabled(False)
+            
+            selectedItemsCount = len(self.logTree.selectedItems())
+            if self.vcs.canPush():
+                self.__pushAct.setEnabled(
+                    selectedItemsCount == 1 and
+                    self.logTree.selectedItems()[0].text(self.PhaseColumn) ==
+                    self.phases["draft"])
+                self.__pushAllAct.setEnabled(True)
+            else:
+                self.__pushAct.setEnabled(False)
+                self.__pushAllAct.setEnabled(False)
+            
+            self.__bundleAct.setEnabled(selectedItemsCount > 0)
+        
         else:
             self.actionsButton.setEnabled(False)
     
-    def __updateGui(self, itm):
+    def __updateDetailsAndFiles(self):
         """
-        Private slot to update GUI elements except tool menu actions.
-        
-        @param itm reference to the item the update should be based on
-            (QTreeWidgetItem)
+        Private slot to update the details and file changes panes.
         """
         self.detailsEdit.clear()
-        self.messageEdit.clear()
         self.filesTree.clear()
+        self.__diffUpdatesFiles = False
         
+        selectedItems = self.logTree.selectedItems()
+        if len(selectedItems) == 1:
+            self.detailsEdit.setHtml(
+                self.__generateDetailsTableText(selectedItems[0]))
+            self.__updateFilesTree(self.filesTree, selectedItems[0])
+            self.__resizeColumnsFiles()
+            self.__resortFiles()
+        elif len(selectedItems) == 2:
+            self.__diffUpdatesFiles = True
+            index1 = self.logTree.indexOfTopLevelItem(selectedItems[0])
+            index2 = self.logTree.indexOfTopLevelItem(selectedItems[1])
+            if index1 > index2:
+                # Swap the entries
+                selectedItems[0], selectedItems[1] = \
+                    selectedItems[1], selectedItems[0]
+            html = "{0}<hr/>{1}".format(
+                self.__generateDetailsTableText(selectedItems[0]),
+                self.__generateDetailsTableText(selectedItems[1]),
+            )
+            self.detailsEdit.setHtml(html)
+            # self.filesTree is updated by the diff
+    
+    def __generateDetailsTableText(self, itm):
+        """
+        Private method to generate an HTML table with the details of the given
+        changeset.
+        
+        @param itm reference to the item the table should be based on
+        @type QTreeWidgetItem
+        @return HTML table containing details
+        @rtype str
+        """
         if itm is not None:
             if itm.text(self.TagsColumn):
                 tagsStr = self.__tagsTemplate.format(itm.text(self.TagsColumn))
             else:
                 tagsStr = ""
+            
             if itm.text(self.BookmarksColumn):
                 bookmarksStr = self.__bookmarksTemplate.format(
                     itm.text(self.BookmarksColumn))
             else:
                 bookmarksStr = ""
             
-            if itm.data(0, self.__latestTagRole):
+            if self.projectMode and itm.data(0, self.__latestTagRole):
                 latestTagLinks = []
                 for tag in itm.data(0, self.__latestTagRole):
-                    url = QUrl()
-                    url.setScheme("rev")
-                    url.setPath(self.__getRevisionOfTag(tag)[0])
-                    latestTagLinks.append('<a href="{0}">{1}</a>'.format(
-                        url.toString(), tag))
+                    latestTagLinks.append('<a href="rev:{0}">{1}</a>'.format(
+                        self.__getRevisionOfTag(tag)[0], tag))
                 latestTagStr = self.__latestTagTemplate.format(
                     ", ".join(latestTagLinks))
             else:
@@ -1448,43 +1656,64 @@
             
             rev = int(itm.text(self.RevisionColumn).split(":", 1)[0])
             
-            parentLinks = []
-            for parent in [str(x) for x in itm.data(0, self.__parentsRole)]:
-                url = QUrl()
-                url.setScheme("rev")
-                url.setPath(parent)
-                parentLinks.append('<a href="{0}">{1}</a>'.format(
-                    url.toString(), parent))
+            if itm.data(0, self.__parentsRole):
+                parentLinks = []
+                for parent in [str(x) for x in
+                               itm.data(0, self.__parentsRole)]:
+                    parentLinks.append(
+                        '<a href="rev:{0}">{0}</a>'.format(parent))
+                parentsStr = self.__parentsTemplate.format(
+                    ", ".join(parentLinks))
+            else:
+                parentsStr = ""
             
-            childLinks = []
-            for child in [str(x) for x in self.__childrenInfo[rev]]:
-                url = QUrl()
-                url.setScheme("rev")
-                url.setPath(child)
-                childLinks.append('<a href="{0}">{1}</a>'.format(
-                    url.toString(), child))
+            if self.__childrenInfo[rev]:
+                childLinks = []
+                for child in [str(x) for x in self.__childrenInfo[rev]]:
+                    childLinks.append(
+                        '<a href="rev:{0}">{0}</a>'.format(child))
+                childrenStr = self.__childrenTemplate.format(
+                    ", ".join(childLinks))
+            else:
+                childrenStr = ""
             
-            self.detailsEdit.setHtml(self.__detailsTemplate.format(
+            messageStr = "<br />\n".join([
+                line.strip() for line in itm.data(0, self.__messageRole)
+            ])
+            
+            html = self.__detailsTemplate.format(
                 itm.text(self.RevisionColumn),
                 itm.text(self.DateColumn),
                 itm.text(self.AuthorColumn),
                 itm.text(self.BranchColumn).replace(
                     self.ClosedIndicator, ""),
-                ", ".join(parentLinks),
-                ", ".join(childLinks),
-                tagsStr + latestTagStr + bookmarksStr,
-            ))
-            
-            for line in itm.data(0, self.__messageRole):
-                self.messageEdit.append(line.strip())
-            
+                parentsStr + childrenStr + tagsStr + latestTagStr +
+                bookmarksStr,
+                messageStr,
+            )
+        else:
+            html = ""
+        
+        return html
+    
+    def __updateFilesTree(self, parent, itm):
+        """
+        Private method to update the files tree with changes of the given item.
+        
+        @param parent parent for the items to be added
+        @type QTreeWidget or QTreeWidgetItem
+        @param itm reference to the item the update should be based on
+        @type QTreeWidgetItem
+        """
+        if itm is not None:
             changes = itm.data(0, self.__changesRole)
             if len(changes) > 0:
                 for change in changes:
-                    self.__generateFileItem(
-                        change["action"], change["path"], change["copyfrom"])
-                self.__resizeColumnsFiles()
-                self.__resortFiles()
+                    QTreeWidgetItem(parent, [
+                        self.flags[change["action"]],
+                        change["path"].strip(),
+                        change["copyfrom"].strip(),
+                    ])
     
     @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
     def on_logTree_currentItemChanged(self, current, previous):
@@ -1494,8 +1723,6 @@
         @param current reference to the new current item (QTreeWidgetItem)
         @param previous reference to the old current item (QTreeWidgetItem)
         """
-        self.__updateGui(current)
-        self.__updateDiffButtons()
         self.__updateToolMenuActions()
         
         # Highlight the current entry using a bold font
@@ -1505,19 +1732,24 @@
         
         # set the state of the up and down buttons
         self.upButton.setEnabled(
-            current is not None and 
+            current is not None and
             self.logTree.indexOfTopLevelItem(current) > 0)
         self.downButton.setEnabled(
             current is not None and
-            int(current.text(self.RevisionColumn).split(":")[0]) > 0)
+            int(current.text(self.RevisionColumn).split(":")[0]) > 0 and
+            (self.logTree.indexOfTopLevelItem(current) <
+                self.logTree.topLevelItemCount() - 1 or
+             self.nextButton.isEnabled()))
     
     @pyqtSlot()
     def on_logTree_itemSelectionChanged(self):
         """
         Private slot called, when the selection has changed.
         """
-        self.__updateDiffButtons()
+        self.__updateDetailsAndFiles()
+        self.__updateSbsSelectLabel()
         self.__updateToolMenuActions()
+        self.__generateDiffs()
     
     @pyqtSlot()
     def on_upButton_clicked(self):
@@ -1538,71 +1770,18 @@
             self.logTree.setCurrentItem(itm)
         else:
             # load the next bunch and try again
-            self.__addFinishCallback(self.on_downButton_clicked)
-            self.on_nextButton_clicked()
+            if self.nextButton.isEnabled():
+                self.__addFinishCallback(self.on_downButton_clicked)
+                self.on_nextButton_clicked()
     
     @pyqtSlot()
     def on_nextButton_clicked(self):
         """
         Private slot to handle the Next button.
         """
-        if self.__lastRev > 0:
+        if self.__lastRev > 0 and self.nextButton.isEnabled():
             self.__getLogEntries(startRev=self.__lastRev - 1)
     
-    @pyqtSlot()
-    def on_diffP1Button_clicked(self):
-        """
-        Private slot to handle the Diff to Parent 1 button.
-        """
-        if len(self.logTree.selectedItems()):
-            itm = self.logTree.selectedItems()[0]
-        else:
-            itm = self.logTree.currentItem()
-        if itm is None:
-            self.diffP1Button.setEnabled(False)
-            return
-        rev2 = int(itm.text(self.RevisionColumn).split(":")[0])
-        
-        rev1 = itm.data(0, self.__parentsRole)[0]
-        if rev1 < 0:
-            self.diffP1Button.setEnabled(False)
-            return
-        
-        self.__diffRevisions(rev1, rev2)
-    
-    @pyqtSlot()
-    def on_diffP2Button_clicked(self):
-        """
-        Private slot to handle the Diff to Parent 2 button.
-        """
-        if len(self.logTree.selectedItems()):
-            itm = self.logTree.selectedItems()[0]
-        else:
-            itm = self.logTree.currentItem()
-        if itm is None:
-            self.diffP2Button.setEnabled(False)
-            return
-        rev2 = int(itm.text(self.RevisionColumn).split(":")[0])
-        
-        rev1 = itm.data(0, self.__parentsRole)[1]
-        if rev1 < 0:
-            self.diffP2Button.setEnabled(False)
-            return
-        
-        self.__diffRevisions(rev1, rev2)
-    
-    @pyqtSlot()
-    def on_diffRevisionsButton_clicked(self):
-        """
-        Private slot to handle the Compare Revisions button.
-        """
-        items = self.logTree.selectedItems()
-        
-        rev2 = int(items[0].text(self.RevisionColumn).split(":")[0])
-        rev1 = int(items[1].text(self.RevisionColumn).split(":")[0])
-        
-        self.__diffRevisions(min(rev1, rev2), max(rev1, rev2))
-    
     @pyqtSlot(QDate)
     def on_fromDate_dateChanged(self, date):
         """
@@ -1702,7 +1881,6 @@
                 else:
                     topItem.setHidden(True)
                     if topItem is currentItem:
-                        self.messageEdit.clear()
                         self.filesTree.clear()
                     visibleItemCount -= 1
             self.logTree.header().setSectionHidden(
@@ -1763,12 +1941,10 @@
         
         self.refreshButton.setEnabled(False)
         
-        # save the current items commit ID
-        itm = self.logTree.currentItem()
-        if itm is not None:
-            self.__currentRevision = itm.text(self.RevisionColumn)
-        else:
-            self.__currentRevision = ""
+        # save the selected items commit IDs
+        self.__selectedRevisions = []
+        for item in self.logTree.selectedItems():
+            self.__selectedRevisions.append(item.text(self.RevisionColumn))
         
         if self.initialCommandMode in ("incoming", "outgoing"):
             self.nextButton.setEnabled(False)
@@ -2002,8 +2178,24 @@
         """
         Private slot to fetch changes from a remote repository.
         """
-        shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
-            self.repodir)
+        shouldReopen = False
+        refresh = False
+        
+        if self.initialCommandMode == "log":
+            shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
+                self.repodir)
+            refresh = True
+        elif self.initialCommandMode == "incoming":
+            revs = []
+            for itm in self.logTree.selectedItems():
+                rev = itm.text(self.RevisionColumn).split(":")[1].strip()
+                phase = itm.text(self.PhaseColumn).strip()
+                if rev and phase == self.phases["draft"]:
+                    revs.append(rev)
+            if revs:
+                shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
+                    self.repodir, )
+                refresh = True
         if shouldReopen:
             res = E5MessageBox.yesNo(
                 None,
@@ -2015,14 +2207,31 @@
                 e5App().getObject("Project").reopenProject()
                 return
         
-        self.on_refreshButton_clicked()
+        if refresh:
+            self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __pullActTriggered(self):
         """
         Private slot to pull changes from a remote repository.
         """
-        shouldReopen = self.vcs.hgPull(self.repodir)
+        shouldReopen = False
+        refresh = False
+        
+        if self.initialCommandMode == "log":
+            shouldReopen = self.vcs.hgPull(self.repodir)
+            refresh = True
+        elif self.initialCommandMode == "incoming":
+            revs = []
+            for itm in self.logTree.selectedItems():
+                rev = itm.text(self.RevisionColumn).split(":")[1].strip()
+                phase = itm.text(self.PhaseColumn).strip()
+                if rev and phase == self.phases["draft"]:
+                    revs.append(rev)
+            if revs:
+                shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs)
+                refresh = True
+        
         if shouldReopen:
             res = E5MessageBox.yesNo(
                 None,
@@ -2034,7 +2243,8 @@
                 e5App().getObject("Project").reopenProject()
                 return
         
-        self.on_refreshButton_clicked()
+        if refresh:
+            self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __pushActTriggered(self):
@@ -2078,6 +2288,134 @@
         
         self.on_refreshButton_clicked()
     
+    @pyqtSlot()
+    def __mergeActTriggered(self):
+        """
+        Private slot to merge the working directory with the selected
+        changeset.
+        """
+        itm = self.logTree.selectedItems()[0]
+        rev = "rev({0})".format(
+            itm.text(self.RevisionColumn).strip().split(":", 1)[0])
+        self.vcs.vcsMerge(self.repodir, rev=rev)
+    
+    @pyqtSlot()
+    def __bundleActTriggered(self):
+        """
+        Private slot to create a changegroup file.
+        """
+        if self.initialCommandMode == "log":
+            selectedItems = self.logTree.selectedItems()
+            if len(selectedItems) == 0:
+                # all revisions of the local repository will be bundled
+                bundleData = {
+                    "revs": [],
+                    "base": "",
+                    "all": True,
+                }
+            elif len(selectedItems) == 1:
+                # the selected changeset is the base
+                rev = selectedItems[0].text(self.RevisionColumn)\
+                    .split(":", 1)[0].strip()
+                bundleData = {
+                    "revs": [],
+                    "base": rev,
+                    "all": False,
+                }
+            else:
+                # lowest revision is the base, others will be bundled
+                revs = []
+                for itm in selectedItems:
+                    rev = itm.text(self.RevisionColumn).split(":", 1)[0]
+                    try:
+                        revs.append(int(rev))
+                    except ValueError:
+                        # ignore silently
+                        pass
+                baseRev = min(revs)
+                while baseRev in revs:
+                    revs.remove(baseRev)
+                
+                bundleData = {
+                    "revs": [str(rev) for rev in revs],
+                    "base": str(baseRev),
+                    "all": False,
+                }
+        elif self.initialCommandMode == "outgoing":
+            selectedItems = self.logTree.selectedItems()
+            if len(selectedItems) > 0:
+                revs = []
+                for itm in selectedItems:
+                    rev = itm.text(self.RevisionColumn).split(":", 1)[0]
+                    revs.append(rev.strip())
+                
+                bundleData = {
+                    "revs": revs,
+                    "base": "",
+                    "all": False,
+                }
+        
+        self.vcs.hgBundle(self.repodir, bundleData=bundleData)
+    
+    @pyqtSlot()
+    def __unbundleActTriggered(self):
+        """
+        Private slot to apply the currently previewed bundle file.
+        """
+        if self.initialCommandMode == "incoming" and bool(self.__bundle):
+            shouldReopen = self.vcs.hgUnbundle(self.repodir,
+                                               files=[self.__bundle])
+            if shouldReopen:
+                res = E5MessageBox.yesNo(
+                    None,
+                    self.tr("Apply Changegroup"),
+                    self.tr("""The project should be reread. Do this now?"""),
+                    yesDefault=True)
+                if res:
+                    e5App().getObject("Project").reopenProject()
+                    return
+            
+            self.on_refreshButton_clicked()
+    
+    @pyqtSlot()
+    def __gpgSignActTriggered(self):
+        """
+        Private slot to sign the selected revisions.
+        """
+        revs = []
+        for itm in self.logTree.selectedItems():
+            rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip()
+            if rev:
+                revs.append(rev)
+        
+        if revs:
+            self.vcs.getExtensionObject("gpg").hgGpgSign(
+                self.repodir, revisions=revs)
+    
+    @pyqtSlot()
+    def __gpgVerifyActTriggered(self):
+        """
+        Private slot to verify the signatures of a selected revisions.
+        """
+        rev = self.logTree.selectedItems()[0].text(self.RevisionColumn)\
+            .split(":", 1)[0].strip()
+        if rev:
+            self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures(
+                self.repodir, rev=rev)
+    
+    def __selectAllActTriggered(self, select=True):
+        """
+        Private method to select or unselect all log entries.
+        
+        @param select flag indicating to select all entries
+        @type bool
+        """
+        blocked = self.logTree.blockSignals(True)
+        for row in range(self.logTree.topLevelItemCount()):
+            self.logTree.topLevelItem(row).setSelected(select)
+        self.logTree.blockSignals(blocked)
+        self.on_logTree_itemSelectionChanged()
+    
     def __actionMode(self):
         """
         Private method to get the selected action mode.
@@ -2194,5 +2532,233 @@
                 self.logTree.setCurrentItem(itm)
             else:
                 # load the next batch and try again
-                self.on_nextButton_clicked()
-                self.__revisionClicked(url)
+                if self.nextButton.isEnabled():
+                    self.__addFinishCallback(
+                        lambda: self.__revisionClicked(url))
+                    self.on_nextButton_clicked()
+    
+    ###########################################################################
+    ## Diff handling methods below
+    ###########################################################################
+    
+    def __generateDiffs(self, parent=1):
+        """
+        Private slot to generate diff outputs for the selected item.
+        
+        @param parent number of parent to diff against
+        @type int
+        """
+        self.diffEdit.setPlainText(self.tr("Generating differences ..."))
+        self.diffLabel.setText(self.tr("Differences"))
+        self.diffSelectLabel.clear()
+        
+        selectedItems = self.logTree.selectedItems()
+        if len(selectedItems) == 1:
+            currentItem = selectedItems[0]
+            rev2 = currentItem.text(self.RevisionColumn).split(":", 1)[0]
+            parents = currentItem.data(0, self.__parentsRole)
+            if len(parents) >= parent:
+                self.diffLabel.setText(
+                    self.tr("Differences to Parent {0}").format(parent))
+                rev1 = parents[parent - 1]
+                
+                self.__diffGenerator.start(self.__filename, [rev1, rev2],
+                                           self.__bundle)
+            
+            if len(parents) > 1:
+                if parent == 1:
+                    par1 = "&nbsp;1&nbsp;"
+                else:
+                    par1 = '<a href="diff:1">&nbsp;1&nbsp;</a>'
+                if parent == 2:
+                    par2 = "&nbsp;2&nbsp;"
+                else:
+                    par2 = '<a href="diff:2">&nbsp;2&nbsp;</a>'
+                self.diffSelectLabel.setText(
+                    self.tr('Diff to Parent {0}{1}').format(par1, par2))
+        elif len(selectedItems) == 2:
+            rev2 = int(selectedItems[0].text(
+                self.RevisionColumn).split(":")[0])
+            rev1 = int(selectedItems[1].text(
+                self.RevisionColumn).split(":")[0])
+            
+            self.__diffGenerator.start(self.__filename,
+                                       [min(rev1, rev2), max(rev1, rev2)],
+                                       self.__bundle)
+        else:
+            self.diffEdit.clear()
+    
+    def __generatorFinished(self):
+        """
+        Private slot connected to the finished signal of the diff generator.
+        """
+        diff, errors, fileSeparators = self.__diffGenerator.getResult()
+        
+        if diff:
+            self.diffEdit.setPlainText("".join(diff))
+        elif errors:
+            self.diffEdit.setPlainText("".join(errors))
+        else:
+            self.diffEdit.setPlainText(self.tr('There is no difference.'))
+        
+        self.saveLabel.setVisible(bool(diff))
+        
+        if self.__diffUpdatesFiles:
+            for oldFileName, newFileName, lineNumber in fileSeparators:
+                if oldFileName == newFileName:
+                    fileName = oldFileName
+                elif oldFileName == "__NULL__":
+                    fileName = newFileName
+                else:
+                    fileName = oldFileName
+                item = QTreeWidgetItem(self.filesTree, ["", fileName, ""])
+                item.setData(0, self.__diffFileLineRole, lineNumber)
+            self.__resizeColumnsFiles()
+            self.__resortFiles()
+        else:
+            for oldFileName, newFileName, lineNumber in fileSeparators:
+                for fileName in (oldFileName, newFileName):
+                    if fileName != "__NULL__":
+                        items = self.filesTree.findItems(
+                            fileName, Qt.MatchExactly, 1)
+                        for item in items:
+                            item.setData(0, self.__diffFileLineRole,
+                                         lineNumber)
+        
+        tc = self.diffEdit.textCursor()
+        tc.movePosition(QTextCursor.Start)
+        self.diffEdit.setTextCursor(tc)
+        self.diffEdit.ensureCursorVisible()
+    
+    @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
+    def on_filesTree_currentItemChanged(self, current, previous):
+        """
+        Private slot called, when the current item of the files tree changes.
+        
+        @param current reference to the new current item (QTreeWidgetItem)
+        @param previous reference to the old current item (QTreeWidgetItem)
+        """
+        if current:
+            para = current.data(0, self.__diffFileLineRole)
+            if para is not None:
+                if para == 0:
+                    tc = self.diffEdit.textCursor()
+                    tc.movePosition(QTextCursor.Start)
+                    self.diffEdit.setTextCursor(tc)
+                    self.diffEdit.ensureCursorVisible()
+                elif para == -1:
+                    tc = self.diffEdit.textCursor()
+                    tc.movePosition(QTextCursor.End)
+                    self.diffEdit.setTextCursor(tc)
+                    self.diffEdit.ensureCursorVisible()
+                else:
+                    # step 1: move cursor to end
+                    tc = self.diffEdit.textCursor()
+                    tc.movePosition(QTextCursor.End)
+                    self.diffEdit.setTextCursor(tc)
+                    self.diffEdit.ensureCursorVisible()
+                    
+                    # step 2: move cursor to desired line
+                    tc = self.diffEdit.textCursor()
+                    delta = tc.blockNumber() - para
+                    tc.movePosition(QTextCursor.PreviousBlock,
+                                    QTextCursor.MoveAnchor, delta)
+                    self.diffEdit.setTextCursor(tc)
+                    self.diffEdit.ensureCursorVisible()
+    
+    @pyqtSlot(str)
+    def on_diffSelectLabel_linkActivated(self, link):
+        """
+        Private slot to handle the selection of a diff target.
+        
+        @param link activated link
+        @type str
+        """
+        if ":" in link:
+            scheme, parent = link.split(":", 1)
+            if scheme == "diff":
+                try:
+                    parent = int(parent)
+                    self.__generateDiffs(parent)
+                except ValueError:
+                    # ignore silently
+                    pass
+    
+    @pyqtSlot(str)
+    def on_saveLabel_linkActivated(self, link):
+        """
+        Private slot to handle the selection of the save link.
+        
+        @param link activated link
+        @type str
+        """
+        if ":" not in link:
+            return
+        
+        scheme, rest = link.split(":", 1)
+        if scheme != "save" or rest != "me":
+            return
+        
+        if self.projectMode:
+            fname = self.vcs.splitPath(self.__filename)[0]
+            fname += "/{0}.diff".format(os.path.split(fname)[-1])
+        else:
+            dname, fname = self.vcs.splitPath(self.__filename)
+            if fname != '.':
+                fname = "{0}.diff".format(self.__filename)
+            else:
+                fname = dname
+        
+        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+            self,
+            self.tr("Save Diff"),
+            fname,
+            self.tr("Patch Files (*.diff)"),
+            None,
+            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+        
+        if not fname:
+            return  # user aborted
+        
+        ext = QFileInfo(fname).suffix()
+        if not ext:
+            ex = selectedFilter.split("(*")[1].split(")")[0]
+            if ex:
+                fname += ex
+        if QFileInfo(fname).exists():
+            res = E5MessageBox.yesNo(
+                self,
+                self.tr("Save Diff"),
+                self.tr("<p>The patch file <b>{0}</b> already exists."
+                        " Overwrite it?</p>").format(fname),
+                icon=E5MessageBox.Warning)
+            if not res:
+                return
+        fname = Utilities.toNativeSeparators(fname)
+        
+        eol = e5App().getObject("Project").getEolString()
+        try:
+            f = open(fname, "w", encoding="utf-8", newline="")
+            f.write(eol.join(self.diffEdit.toPlainText().splitlines()))
+            f.close()
+        except IOError as why:
+            E5MessageBox.critical(
+                self, self.tr('Save Diff'),
+                self.tr(
+                    '<p>The patch file <b>{0}</b> could not be saved.'
+                    '<br>Reason: {1}</p>')
+                .format(fname, str(why)))
+    
+    @pyqtSlot(str)
+    def on_sbsSelectLabel_linkActivated(self, link):
+        """
+        Private slot to handle selection of a side-by-side link.
+        
+        @param link text of the selected link
+        @type str
+        """
+        if ":" in link:
+            scheme, path = link.split(":", 1)
+            if scheme == "sbsdiff" and "_" in path:
+                rev1, rev2 = path.split("_", 1)
+                self.vcs.hgSbsDiff(self.__filename, revisions=(rev1, rev2))
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -13,10 +13,33 @@
   <property name="windowTitle">
    <string>Mercurial Log</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QVBoxLayout" name="verticalLayout_3">
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_2">
      <item>
+      <widget class="QToolButton" name="actionsButton">
+       <property name="toolTip">
+        <string>Select action from menu</string>
+       </property>
+       <property name="popupMode">
+        <enum>QToolButton::InstantPopup</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="Line" name="line_5">
+       <property name="frameShadow">
+        <enum>QFrame::Raised</enum>
+       </property>
+       <property name="lineWidth">
+        <number>2</number>
+       </property>
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QComboBox" name="modeComboBox">
        <property name="toolTip">
         <string>Select the mode (find or filter)</string>
@@ -144,99 +167,196 @@
     </layout>
    </item>
    <item>
-    <widget class="QTreeWidget" name="logTree">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-       <horstretch>0</horstretch>
-       <verstretch>7</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="alternatingRowColors">
-      <bool>true</bool>
-     </property>
-     <property name="selectionMode">
-      <enum>QAbstractItemView::ExtendedSelection</enum>
-     </property>
-     <property name="rootIsDecorated">
-      <bool>false</bool>
-     </property>
-     <property name="itemsExpandable">
-      <bool>false</bool>
-     </property>
-     <property name="allColumnsShowFocus">
-      <bool>true</bool>
-     </property>
-     <column>
-      <property name="text">
-       <string>Graph</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Branch</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Revision</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Phase</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Author</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Date</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Message</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Tags</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item>
-    <widget class="QSplitter" name="splitter">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
-       <horstretch>0</horstretch>
-       <verstretch>8</verstretch>
-      </sizepolicy>
-     </property>
+    <widget class="QSplitter" name="mainSplitter">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
-     <widget class="QSplitter" name="commitSplitter">
+     <widget class="QWidget" name="layoutWidget">
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <widget class="QTreeWidget" name="logTree">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+           <horstretch>0</horstretch>
+           <verstretch>1</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="alternatingRowColors">
+          <bool>true</bool>
+         </property>
+         <property name="selectionMode">
+          <enum>QAbstractItemView::ExtendedSelection</enum>
+         </property>
+         <property name="rootIsDecorated">
+          <bool>false</bool>
+         </property>
+         <property name="itemsExpandable">
+          <bool>false</bool>
+         </property>
+         <property name="allColumnsShowFocus">
+          <bool>true</bool>
+         </property>
+         <column>
+          <property name="text">
+           <string>Graph</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Branch</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Revision</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Phase</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Author</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Date</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Message</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Tags</string>
+          </property>
+         </column>
+        </widget>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <item>
+          <widget class="QToolButton" name="upButton">
+           <property name="toolTip">
+            <string>Press to move up in the log list</string>
+           </property>
+           <property name="autoRepeat">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="downButton">
+           <property name="toolTip">
+            <string>Press to move down in the log list</string>
+           </property>
+           <property name="autoRepeat">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="Line" name="line_6">
+           <property name="frameShadow">
+            <enum>QFrame::Raised</enum>
+           </property>
+           <property name="lineWidth">
+            <number>2</number>
+           </property>
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="nextButton">
+           <property name="toolTip">
+            <string>Press to get the next bunch of log entries</string>
+           </property>
+           <property name="text">
+            <string>&amp;Next</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QSpinBox" name="limitSpinBox">
+           <property name="toolTip">
+            <string>Enter the limit of entries to fetch</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+           </property>
+           <property name="minimum">
+            <number>1</number>
+           </property>
+           <property name="maximum">
+            <number>10000</number>
+           </property>
+           <property name="value">
+            <number>20</number>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="stopCheckBox">
+           <property name="toolTip">
+            <string>Select to stop listing log messages at a copy or move</string>
+           </property>
+           <property name="text">
+            <string>Stop on Copy/Move</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QLabel" name="sbsSelectLabel">
+           <property name="focusPolicy">
+            <enum>Qt::StrongFocus</enum>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+           <property name="textInteractionFlags">
+            <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QSplitter" name="detailsSplitter">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
         <horstretch>0</horstretch>
-        <verstretch>3</verstretch>
+        <verstretch>2</verstretch>
        </sizepolicy>
       </property>
       <property name="orientation">
        <enum>Qt::Horizontal</enum>
       </property>
-      <property name="childrenCollapsible">
-       <bool>false</bool>
-      </property>
       <widget class="QTextBrowser" name="detailsEdit">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-         <horstretch>1</horstretch>
-         <verstretch>3</verstretch>
+         <horstretch>3</horstretch>
+         <verstretch>1</verstretch>
         </sizepolicy>
        </property>
        <property name="readOnly">
@@ -246,209 +366,133 @@
         <bool>false</bool>
        </property>
       </widget>
-      <widget class="QTextEdit" name="messageEdit">
+      <widget class="QSplitter" name="diffSplitter">
        <property name="sizePolicy">
-        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-         <horstretch>2</horstretch>
-         <verstretch>3</verstretch>
+        <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+         <horstretch>7</horstretch>
+         <verstretch>0</verstretch>
         </sizepolicy>
        </property>
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </widget>
-     <widget class="QTreeWidget" name="filesTree">
-      <property name="sizePolicy">
-       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-        <horstretch>0</horstretch>
-        <verstretch>4</verstretch>
-       </sizepolicy>
-      </property>
-      <property name="alternatingRowColors">
-       <bool>true</bool>
-      </property>
-      <property name="rootIsDecorated">
-       <bool>false</bool>
-      </property>
-      <property name="itemsExpandable">
-       <bool>false</bool>
-      </property>
-      <property name="sortingEnabled">
-       <bool>true</bool>
-      </property>
-      <property name="allColumnsShowFocus">
-       <bool>true</bool>
-      </property>
-      <column>
-       <property name="text">
-        <string>Action</string>
-       </property>
-      </column>
-      <column>
-       <property name="text">
-        <string>Path</string>
-       </property>
-      </column>
-      <column>
-       <property name="text">
-        <string>Copy from</string>
-       </property>
-      </column>
-     </widget>
-    </widget>
-   </item>
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QPushButton" name="nextButton">
-       <property name="toolTip">
-        <string>Press to get the next bunch of log entries</string>
-       </property>
-       <property name="text">
-        <string>&amp;Next</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QSpinBox" name="limitSpinBox">
-       <property name="toolTip">
-        <string>Enter the limit of entries to fetch</string>
-       </property>
-       <property name="alignment">
-        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-       </property>
-       <property name="minimum">
-        <number>1</number>
-       </property>
-       <property name="maximum">
-        <number>10000</number>
-       </property>
-       <property name="value">
-        <number>20</number>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="2">
-      <widget class="QCheckBox" name="stopCheckBox">
-       <property name="toolTip">
-        <string>Select to stop listing log messages at a copy or move</string>
-       </property>
-       <property name="text">
-        <string>Stop on Copy/Move</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="3" rowspan="2">
-      <widget class="Line" name="line">
-       <property name="frameShadow">
-        <enum>QFrame::Raised</enum>
-       </property>
-       <property name="lineWidth">
-        <number>2</number>
-       </property>
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
-      </widget>
-     </item>
-     <item row="0" column="4">
-      <widget class="QToolButton" name="upButton">
-       <property name="toolTip">
-        <string>Press to move up in the log list</string>
-       </property>
-       <property name="autoRepeat">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="5">
-      <widget class="QToolButton" name="downButton">
-       <property name="toolTip">
-        <string>Press to move down in the log list</string>
-       </property>
-       <property name="autoRepeat">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="6">
-      <widget class="QPushButton" name="diffP1Button">
-       <property name="toolTip">
-        <string>Press to generate a diff to the first parent revision</string>
-       </property>
-       <property name="text">
-        <string>Diff to Parent &amp;1</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="7">
-      <widget class="QPushButton" name="diffP2Button">
-       <property name="toolTip">
-        <string>Press to generate a diff to the second parent revision</string>
-       </property>
-       <property name="text">
-        <string>Diff to Parent &amp;2</string>
-       </property>
+       <widget class="QTreeWidget" name="filesTree">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>7</horstretch>
+          <verstretch>1</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="alternatingRowColors">
+         <bool>true</bool>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>false</bool>
+        </property>
+        <property name="itemsExpandable">
+         <bool>false</bool>
+        </property>
+        <property name="sortingEnabled">
+         <bool>true</bool>
+        </property>
+        <property name="allColumnsShowFocus">
+         <bool>true</bool>
+        </property>
+        <column>
+         <property name="text">
+          <string>Action</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string>Path</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string>Copy from</string>
+         </property>
+        </column>
+       </widget>
+       <widget class="QWidget" name="layoutWidget">
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout">
+           <item>
+            <widget class="QLabel" name="diffLabel">
+             <property name="text">
+              <string>Differences</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QLabel" name="diffSelectLabel">
+             <property name="focusPolicy">
+              <enum>Qt::StrongFocus</enum>
+             </property>
+             <property name="text">
+              <string/>
+             </property>
+             <property name="textInteractionFlags">
+              <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="saveLabel">
+             <property name="focusPolicy">
+              <enum>Qt::StrongFocus</enum>
+             </property>
+             <property name="text">
+              <string>&lt;a href=&quot;save:me&quot;&gt;Save&lt;/a&gt;</string>
+             </property>
+             <property name="textInteractionFlags">
+              <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QTextEdit" name="diffEdit">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+             <horstretch>7</horstretch>
+             <verstretch>2</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="tabChangesFocus">
+            <bool>true</bool>
+           </property>
+           <property name="lineWrapMode">
+            <enum>QTextEdit::NoWrap</enum>
+           </property>
+           <property name="readOnly">
+            <bool>true</bool>
+           </property>
+           <property name="acceptRichText">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
       </widget>
-     </item>
-     <item row="0" column="8">
-      <widget class="QPushButton" name="diffRevisionsButton">
-       <property name="toolTip">
-        <string>Press to compare two revisions</string>
-       </property>
-       <property name="text">
-        <string>&amp;Compare Revisions</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="9" rowspan="2">
-      <widget class="Line" name="phaseLine">
-       <property name="frameShadow">
-        <enum>QFrame::Raised</enum>
-       </property>
-       <property name="lineWidth">
-        <number>2</number>
-       </property>
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="10">
-      <widget class="QToolButton" name="actionsButton">
-       <property name="toolTip">
-        <string>Select action from menu</string>
-       </property>
-       <property name="popupMode">
-        <enum>QToolButton::InstantPopup</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="11">
-      <spacer>
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>38</width>
-         <height>18</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item row="1" column="4" colspan="5">
-      <widget class="QCheckBox" name="sbsCheckBox">
-       <property name="toolTip">
-        <string>Select to show differences side-by-side</string>
-       </property>
-       <property name="text">
-        <string>Show differences side-by-side</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
+     </widget>
+    </widget>
    </item>
    <item>
     <widget class="QGroupBox" name="errorGroup">
@@ -556,6 +600,7 @@
   </customwidget>
  </customwidgets>
  <tabstops>
+  <tabstop>actionsButton</tabstop>
   <tabstop>modeComboBox</tabstop>
   <tabstop>fromDate</tabstop>
   <tabstop>toDate</tabstop>
@@ -565,19 +610,17 @@
   <tabstop>findPrevButton</tabstop>
   <tabstop>findNextButton</tabstop>
   <tabstop>logTree</tabstop>
-  <tabstop>detailsEdit</tabstop>
-  <tabstop>messageEdit</tabstop>
-  <tabstop>filesTree</tabstop>
+  <tabstop>upButton</tabstop>
+  <tabstop>downButton</tabstop>
   <tabstop>nextButton</tabstop>
   <tabstop>limitSpinBox</tabstop>
   <tabstop>stopCheckBox</tabstop>
-  <tabstop>upButton</tabstop>
-  <tabstop>downButton</tabstop>
-  <tabstop>diffP1Button</tabstop>
-  <tabstop>diffP2Button</tabstop>
-  <tabstop>diffRevisionsButton</tabstop>
-  <tabstop>sbsCheckBox</tabstop>
-  <tabstop>actionsButton</tabstop>
+  <tabstop>sbsSelectLabel</tabstop>
+  <tabstop>detailsEdit</tabstop>
+  <tabstop>filesTree</tabstop>
+  <tabstop>diffSelectLabel</tabstop>
+  <tabstop>saveLabel</tabstop>
+  <tabstop>diffEdit</tabstop>
   <tabstop>errors</tabstop>
   <tabstop>input</tabstop>
   <tabstop>passwordCheckBox</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -10,18 +10,17 @@
 
 from __future__ import unicode_literals
 
-import os
-
-from PyQt5.QtCore import pyqtSlot, QDir
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox
+from PyQt5.QtCore import pyqtSlot, QUrl
+from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QComboBox
 
 from E5Gui.E5PathPicker import E5PathPickerModes
 
 from .Ui_HgNewProjectOptionsDialog import Ui_HgNewProjectOptionsDialog
-from .Config import ConfigHgProtocols
+from .Config import ConfigHgSchemes
 
 import Utilities
 import Preferences
+import UI.PixmapCache
 
 
 class HgNewProjectOptionsDialog(QDialog, Ui_HgNewProjectOptionsDialog):
@@ -40,19 +39,19 @@
         self.setupUi(self)
         
         self.vcsProjectDirPicker.setMode(E5PathPickerModes.DirectoryMode)
-        self.vcsUrlPicker.setMode(E5PathPickerModes.DirectoryMode)
         
-        self.protocolCombo.addItems(ConfigHgProtocols)
+        self.__vcs = vcs
         
-        hd = Utilities.toNativeSeparators(QDir.homePath())
-        hd = os.path.join(hd, 'hgroot')
-        self.vcsUrlPicker.setText(hd)
-        
-        self.vcs = vcs
-        
-        self.localPath = hd
-        self.networkPath = "localhost/"
-        self.localProtocol = True
+        vcsUrlHistory = self.__vcs.getPlugin().getPreferences(
+            "RepositoryUrlHistory")
+        self.vcsUrlPicker.setMode(E5PathPickerModes.DirectoryMode)
+        self.vcsUrlPicker.setInsertPolicy(QComboBox.InsertAtTop)
+        self.vcsUrlPicker.setSizeAdjustPolicy(
+            QComboBox.AdjustToMinimumContentsLength)
+        self.vcsUrlPicker.setPathsList(vcsUrlHistory)
+        self.vcsUrlClearHistoryButton.setIcon(
+            UI.PixmapCache.getIcon("editDelete.png"))
+        self.vcsUrlPicker.setText("")
         
         ipath = Preferences.getMultiProject("Workspace") or \
             Utilities.getHomeDir()
@@ -62,10 +61,10 @@
         ]
         self.vcsProjectDirPicker.setText(self.__initPaths[0])
         
-        self.lfNoteLabel.setVisible(self.vcs.isExtensionActive("largefiles"))
-        self.largeCheckBox.setVisible(self.vcs.isExtensionActive("largefiles"))
-        
-        self.resize(self.width(), self.minimumSizeHint().height())
+        self.lfNoteLabel.setVisible(
+            self.__vcs.isExtensionActive("largefiles"))
+        self.largeCheckBox.setVisible(
+            self.__vcs.isExtensionActive("largefiles"))
         
         self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
         
@@ -84,47 +83,61 @@
             Utilities.fromNativeSeparators(txt) not in self.__initPaths)
     
     @pyqtSlot(str)
-    def on_protocolCombo_activated(self, protocol):
-        """
-        Private slot to switch the status of the directory selection button.
-        
-        @param protocol name of the selected protocol (string)
-        """
-        self.vcsUrlPicker.setPickerEnabled(protocol == "file://")
-        if protocol == "file://":
-            self.networkPath = self.vcsUrlPicker.text()
-            self.vcsUrlPicker.setText(self.localPath)
-            self.localProtocol = True
-        else:
-            if self.localProtocol:
-                self.localPath = self.vcsUrlPicker.text()
-                self.vcsUrlPicker.setText(self.networkPath)
-                self.localProtocol = False
-    
-    @pyqtSlot(str)
     def on_vcsUrlPicker_textChanged(self, txt):
         """
         Private slot to handle changes of the URL.
         
         @param txt current text of the line edit (string)
         """
-        enable = "://" not in txt
+        url = QUrl.fromUserInput(txt)
+        enable = url.isValid() and url.scheme() in ConfigHgSchemes
         self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable)
+        
+        self.vcsUrlPicker.setPickerEnabled(url.scheme() == "file" or
+                                           len(txt) == 0)
+    
+    @pyqtSlot()
+    def on_vcsUrlClearHistoryButton_clicked(self):
+        """
+        Private slot to clear the history of entered repository URLs.
+        """
+        currentVcsUrl = self.vcsUrlPicker.text()
+        self.vcsUrlPicker.clear()
+        self.vcsUrlPicker.setText(currentVcsUrl)
+        
+        self.__saveHistory()
     
     def getData(self):
         """
-        Public slot to retrieve the data entered into the dialog.
+        Public slot to retrieve the data entered into the dialog and to
+        save the history of entered repository URLs.
         
         @return a tuple of a string (project directory) and a dictionary
             containing the data entered.
         """
-        scheme = self.protocolCombo.currentText()
-        url = self.vcsUrlPicker.text()
-        if scheme == "file://" and url[0] not in ["\\", "/"]:
-            url = "/{0}".format(url)
+        self.__saveHistory()
+        
+        url = QUrl.fromUserInput(self.vcsUrlPicker.text().replace("\\", "/"))
         vcsdatadict = {
-            "url": '{0}{1}'.format(scheme, url),
+            "url": url.toString(QUrl.None_),
             "revision": self.vcsRevisionEdit.text(),
             "largefiles": self.largeCheckBox.isChecked(),
         }
         return (self.vcsProjectDirPicker.text(), vcsdatadict)
+    
+    def __saveHistory(self):
+        """
+        Private method to save the repository URL history.
+        """
+        url = self.vcsUrlPicker.text()
+        vcsUrlHistory = self.vcsUrlPicker.getPathItems()
+        if url not in vcsUrlHistory:
+            vcsUrlHistory.insert(0, url)
+        
+        # max. list sizes is hard coded to 20 entries
+        newVcsUrlHistory = [url for url in vcsUrlHistory if url]
+        if len(newVcsUrlHistory) > 20:
+            newVcsUrlHistory = newVcsUrlHistory[:20]
+        
+        self.__vcs.getPlugin().setPreferences(
+            "RepositoryUrlHistory", newVcsUrlHistory)
--- a/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>562</width>
-    <height>191</height>
+    <height>187</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -22,35 +22,18 @@
    <bool>true</bool>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0">
-    <widget class="QLabel" name="textLabel1">
+   <item row="4" column="0" colspan="3">
+    <widget class="QLabel" name="lfNoteLabel">
      <property name="text">
-      <string>&amp;Protocol:</string>
+      <string>&lt;b&gt;Note:&lt;/b&gt; This option increases the download time and volume.</string>
      </property>
-     <property name="buddy">
-      <cstring>protocolCombo</cstring>
+     <property name="wordWrap">
+      <bool>true</bool>
      </property>
     </widget>
    </item>
    <item row="0" column="1">
-    <widget class="QComboBox" name="protocolCombo">
-     <property name="toolTip">
-      <string>Select the protocol to access the repository</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0">
-    <widget class="QLabel" name="TextLabel2">
-     <property name="text">
-      <string>&amp;URL:</string>
-     </property>
-     <property name="buddy">
-      <cstring>vcsUrlPicker</cstring>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="1">
-    <widget class="E5PathPicker" name="vcsUrlPicker" native="true">
+    <widget class="E5ComboPathPicker" name="vcsUrlPicker" native="true">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
        <horstretch>0</horstretch>
@@ -61,11 +44,11 @@
       <enum>Qt::StrongFocus</enum>
      </property>
      <property name="toolTip">
-      <string>Enter the url path of the repository (without protocol part)</string>
+      <string>Enter the URL of the repository</string>
      </property>
     </widget>
    </item>
-   <item row="2" column="0">
+   <item row="1" column="0">
     <widget class="QLabel" name="vcsRevisionLabel">
      <property name="text">
       <string>&amp;Revision:</string>
@@ -75,7 +58,7 @@
      </property>
     </widget>
    </item>
-   <item row="2" column="1">
+   <item row="1" column="1" colspan="2">
     <widget class="QLineEdit" name="vcsRevisionEdit">
      <property name="toolTip">
       <string>Enter the revision the new project should be generated from</string>
@@ -85,17 +68,7 @@
      </property>
     </widget>
    </item>
-   <item row="3" column="0">
-    <widget class="QLabel" name="TextLabel4">
-     <property name="text">
-      <string>Project &amp;Directory:</string>
-     </property>
-     <property name="buddy">
-      <cstring>vcsProjectDirPicker</cstring>
-     </property>
-    </widget>
-   </item>
-   <item row="3" column="1">
+   <item row="2" column="1" colspan="2">
     <widget class="E5PathPicker" name="vcsProjectDirPicker" native="true">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -116,24 +89,24 @@
      </property>
     </widget>
    </item>
-   <item row="4" column="0" colspan="2">
+   <item row="3" column="0" colspan="3">
     <widget class="QCheckBox" name="largeCheckBox">
      <property name="text">
       <string>Download all versions of all large files</string>
      </property>
     </widget>
    </item>
-   <item row="5" column="0" colspan="2">
-    <widget class="QLabel" name="lfNoteLabel">
+   <item row="2" column="0">
+    <widget class="QLabel" name="TextLabel4">
      <property name="text">
-      <string>&lt;b&gt;Note:&lt;/b&gt; This option increases the download time and volume.</string>
+      <string>Project &amp;Directory:</string>
      </property>
-     <property name="wordWrap">
-      <bool>true</bool>
+     <property name="buddy">
+      <cstring>vcsProjectDirPicker</cstring>
      </property>
     </widget>
    </item>
-   <item row="6" column="0" colspan="2">
+   <item row="5" column="0" colspan="3">
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
@@ -143,9 +116,25 @@
      </property>
     </widget>
    </item>
+   <item row="0" column="0">
+    <widget class="QLabel" name="TextLabel2">
+     <property name="text">
+      <string>&amp;URL:</string>
+     </property>
+     <property name="buddy">
+      <cstring>vcsUrlPicker</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="2">
+    <widget class="QToolButton" name="vcsUrlClearHistoryButton">
+     <property name="toolTip">
+      <string>Press to clear the history of entered repository URLs</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
@@ -154,10 +143,16 @@
    <header>E5Gui/E5PathPicker.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>E5ComboPathPicker</class>
+   <extends>QWidget</extends>
+   <header>E5Gui/E5PathPicker.h</header>
+   <container>1</container>
+  </customwidget>
  </customwidgets>
  <tabstops>
-  <tabstop>protocolCombo</tabstop>
   <tabstop>vcsUrlPicker</tabstop>
+  <tabstop>vcsUrlClearHistoryButton</tabstop>
   <tabstop>vcsRevisionEdit</tabstop>
   <tabstop>vcsProjectDirPicker</tabstop>
   <tabstop>largeCheckBox</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgOptionsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgOptionsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -61,7 +61,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>vcsLogEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -153,7 +153,6 @@
             else:
                 rev = str(self.numberSpinBox.value())
         elif self.idButton.isChecked():
-            rev = "id({0})".format(self.idEdit.text())
             if revset:
                 rev = "id({0})".format(self.idEdit.text())
             else:
--- a/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -381,7 +381,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>number1Button</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -16,10 +16,10 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QTimer
-from PyQt5.QtGui import QTextCursor
+from PyQt5.QtCore import pyqtSlot, qVersion, Qt, QProcess, QTimer, QSize
+from PyQt5.QtGui import QTextCursor, QCursor
 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QMenu, QHeaderView, \
-    QTreeWidgetItem, QLineEdit
+    QTreeWidgetItem, QLineEdit, QToolTip
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox
@@ -30,6 +30,7 @@
 from .HgDiffGenerator import HgDiffGenerator
 
 import Preferences
+import UI.PixmapCache
 
 
 class HgStatusDialog(QWidget, Ui_HgStatusDialog):
@@ -74,9 +75,6 @@
             self.process.readyReadStandardOutput.connect(self.__readStdout)
             self.process.readyReadStandardError.connect(self.__readStderr)
         
-        self.diffSplitter.setSizes([350, 250])
-        self.__diffSplitterState = None
-        
         self.statusList.headerItem().setText(self.__lastColumn, "")
         self.statusList.header().setSortIndicator(
             self.__pathColumn, Qt.AscendingOrder)
@@ -91,86 +89,6 @@
         
         self.__selectedName = ""
         
-        if mq:
-            self.buttonsLine.setVisible(False)
-            self.addButton.setVisible(False)
-            self.diffButton.setVisible(False)
-            self.sbsDiffButton.setVisible(False)
-            self.revertButton.setVisible(False)
-            self.forgetButton.setVisible(False)
-            self.restoreButton.setVisible(False)
-            
-            self.diffEdit.setVisible(False)
-        
-        self.menuactions = []
-        self.lfActions = []
-        self.menu = QMenu()
-        if not mq:
-            self.__commitAct = self.menu.addAction(
-                self.tr("Commit changes to repository..."), self.__commit)
-            self.menuactions.append(self.__commitAct)
-            self.menuactions.append(self.menu.addAction(
-                self.tr("Select all for commit"), self.__commitSelectAll))
-            self.menuactions.append(self.menu.addAction(
-                self.tr("Deselect all from commit"),
-                self.__commitDeselectAll))
-            self.menu.addSeparator()
-            self.__addAct = self.menu.addAction(
-                self.tr("Add to repository"), self.__add)
-            self.menuactions.append(self.__addAct)
-            self.lfActions.append(self.menu.addAction(
-                self.tr("Add as Large File"),
-                lambda: self.__lfAdd("large")))
-            self.lfActions.append(self.menu.addAction(
-                self.tr("Add as Normal File"),
-                lambda: self.__lfAdd("normal")))
-            self.menu.addSeparator()
-            self.__diffAct = self.menu.addAction(
-                self.tr("Show differences"), self.__diff)
-            self.menuactions.append(self.__diffAct)
-            self.__sbsDiffAct = self.menu.addAction(
-                self.tr("Show differences side-by-side"), self.__sbsDiff)
-            self.menuactions.append(self.__sbsDiffAct)
-            self.menu.addSeparator()
-            self.__revertAct = self.menu.addAction(
-                self.tr("Revert changes"), self.__revert)
-            self.menuactions.append(self.__revertAct)
-            self.__forgetAct = self.menu.addAction(
-                self.tr("Forget missing"), self.__forget)
-            self.menuactions.append(self.__forgetAct)
-            self.__restoreAct = self.menu.addAction(
-                self.tr("Restore missing"), self.__restoreMissing)
-            self.menuactions.append(self.__restoreAct)
-            self.menu.addSeparator()
-            self.menuactions.append(self.menu.addAction(
-                self.tr("Adjust column sizes"), self.__resizeColumns))
-            for act in self.menuactions:
-                act.setEnabled(False)
-            for act in self.lfActions:
-                act.setEnabled(False)
-            
-            self.statusList.setContextMenuPolicy(Qt.CustomContextMenu)
-            self.statusList.customContextMenuRequested.connect(
-                self.__showContextMenu)
-        
-        if not mq:
-            self.__lfAddActions = []
-            self.__addButtonMenu = QMenu()
-            self.__addButtonMenu.addAction(self.tr("Add"), self.__add)
-            self.__lfAddActions.append(
-                self.__addButtonMenu.addAction(self.tr("Add as Large File"),
-                                               lambda: self.__lfAdd("large")))
-            self.__lfAddActions.append(
-                self.__addButtonMenu.addAction(self.tr("Add as Normal File"),
-                                               lambda: self.__lfAdd("normal")))
-            self.__addButtonMenu.aboutToShow.connect(self.__showAddMenu)
-            if self.vcs.isExtensionActive("largefiles"):
-                self.addButton.setMenu(self.__addButtonMenu)
-        
-        if not mq:
-            self.vcs.activeExtensionsChanged.connect(
-                self.__activeExtensionsChanged)
-        
         self.modifiedIndicators = [
             self.tr('added'),
             self.tr('modified'),
@@ -194,17 +112,134 @@
             '?': self.tr('not tracked'),
             '!': self.tr('missing'),
         }
+        
+        self.__initActionsMenu()
+        
+        if mq:
+            self.diffLabel.setVisible(False)
+            self.diffEdit.setVisible(False)
+            self.actionsButton.setEnabled(False)
+            self.diffSplitter.setSizes([600, 0])
+        else:
+            self.diffSplitter.setSizes([300, 300])
     
-    def __activeExtensionsChanged(self):
+    def __initActionsMenu(self):
         """
-        Private slot handling a change in the activated extensions.
+        Private method to initialize the actions menu.
         """
-        if self.vcs.isExtensionActive("largefiles"):
-            if self.addButton.menu() is None:
-                self.addButton.setMenu(self.__addButtonMenu)
+        self.__actionsMenu = QMenu()
+        self.__actionsMenu.setTearOffEnabled(True)
+        if qVersion() >= "5.1.0":
+            self.__actionsMenu.setToolTipsVisible(True)
         else:
-            if self.addButton.menu() is not None:
-                self.addButton.setMenu(None)
+            self.__actionsMenu.hovered.connect(self.__actionsMenuHovered)
+        self.__actionsMenu.aboutToShow.connect(self.__showActionsMenu)
+        
+        self.__commitAct = self.__actionsMenu.addAction(
+            self.tr("Commit"), self.__commit)
+        self.__commitAct.setToolTip(self.tr("Commit the selected changes"))
+        self.__commitSelectAct = self.__actionsMenu.addAction(
+            self.tr("Select all for commit"), self.__commitSelectAll)
+        self.__commitDeselectAct = self.__actionsMenu.addAction(
+            self.tr("Unselect all from commit"), self.__commitDeselectAll)
+        
+        self.__actionsMenu.addSeparator()
+        
+        self.__addAct = self.__actionsMenu.addAction(
+            self.tr("Add"), self.__add)
+        self.__addAct.setToolTip(self.tr("Add the selected files"))
+        self.__lfAddLargeAct = self.__actionsMenu.addAction(
+            self.tr("Add as Large Files"), lambda: self.__lfAdd("large"))
+        self.__lfAddLargeAct.setToolTip(self.tr(
+            "Add the selected files as a large files using the 'Large Files'"
+            " extension"))
+        self.__lfAddNormalAct = self.__actionsMenu.addAction(
+            self.tr("Add as Normal Files"), lambda: self.__lfAdd("normal"))
+        self.__lfAddNormalAct.setToolTip(self.tr(
+            "Add the selected files as a normal files using the 'Large Files'"
+            " extension"))
+        
+        self.__actionsMenu.addSeparator()
+        
+        self.__diffAct = self.__actionsMenu.addAction(
+            self.tr("Differences"), self.__diff)
+        self.__diffAct.setToolTip(self.tr(
+            "Shows the differences of the selected entry in a"
+            " separate dialog"))
+        self.__sbsDiffAct = self.__actionsMenu.addAction(
+            self.tr("Differences Side-By-Side"), self.__sbsDiff)
+        self.__sbsDiffAct.setToolTip(self.tr(
+            "Shows the differences of the selected entry side-by-side in"
+            " a separate dialog"))
+        
+        self.__actionsMenu.addSeparator()
+        
+        self.__revertAct = self.__actionsMenu.addAction(
+            self.tr("Revert"), self.__revert)
+        self.__revertAct.setToolTip(self.tr(
+            "Reverts the changes of the selected files"))
+        
+        self.__actionsMenu.addSeparator()
+        
+        self.__forgetAct = self.__actionsMenu.addAction(
+            self.tr("Forget missing"), self.__forget)
+        self.__forgetAct.setToolTip(self.tr(
+            "Forgets about the selected missing files"))
+        self.__restoreAct = self.__actionsMenu.addAction(
+            self.tr("Restore missing"), self.__restoreMissing)
+        self.__restoreAct.setToolTip(self.tr(
+            "Restores the selected missing files"))
+        
+        self.__actionsMenu.addSeparator()
+        
+        act = self.__actionsMenu.addAction(
+            self.tr("Adjust column sizes"), self.__resizeColumns)
+        act.setToolTip(self.tr(
+            "Adjusts the width of all columns to their contents"))
+        
+        self.actionsButton.setIcon(
+            UI.PixmapCache.getIcon("actionsToolButton.png"))
+        self.actionsButton.setMenu(self.__actionsMenu)
+    
+    def __actionsMenuHovered(self, action):
+        """
+        Private slot to show the tooltip for an action menu entry.
+        
+        @param action action to show tooltip for
+        @type QAction
+        """
+        QToolTip.showText(
+            QCursor.pos(), action.toolTip(),
+            self.__actionsMenu, self.__actionsMenu.actionGeometry(action))
+    
+    def closeEvent(self, e):
+        """
+        Protected slot implementing a close event handler.
+        
+        @param e close event (QCloseEvent)
+        """
+        if self.__hgClient:
+            if self.__hgClient.isExecuting():
+                self.__hgClient.cancel()
+        else:
+            if self.process is not None and \
+               self.process.state() != QProcess.NotRunning:
+                self.process.terminate()
+                QTimer.singleShot(2000, self.process.kill)
+                self.process.waitForFinished(3000)
+        
+        if self.__mq:
+            self.vcs.getPlugin().setPreferences(
+                "MqStatusDialogGeometry", self.saveGeometry())
+            self.vcs.getPlugin().setPreferences(
+                "MqStatusDialogSplitterState", self.diffSplitter.saveState())
+        else:
+            self.vcs.getPlugin().setPreferences(
+                "StatusDialogGeometry", self.saveGeometry())
+            self.vcs.getPlugin().setPreferences(
+                "StatusDialogSplitterState", self.diffSplitter.saveState())
+        
+        e.accept()
     
     def show(self):
         """
@@ -212,8 +247,26 @@
         """
         super(HgStatusDialog, self).show()
         
-        if not self.__mq and self.__diffSplitterState:
-            self.diffSplitter.restoreState(self.__diffSplitterState)
+        if self.__mq:
+            geom = self.vcs.getPlugin().getPreferences(
+                "MqStatusDialogGeometry")
+        else:
+            geom = self.vcs.getPlugin().getPreferences(
+                "StatusDialogGeometry")
+        if geom.isEmpty():
+            s = QSize(800, 600)
+            self.resize(s)
+        else:
+            self.restoreGeometry(geom)
+        
+        if self.__mq:
+            diffSplitterState = self.vcs.getPlugin().getPreferences(
+                "MqStatusDialogSplitterState")
+        else:
+            diffSplitterState = self.vcs.getPlugin().getPreferences(
+                "StatusDialogSplitterState")
+        if diffSplitterState is not None:
+            self.diffSplitter.restoreState(diffSplitterState)
     
     def __resort(self):
         """
@@ -256,27 +309,6 @@
         if statusText not in self.__statusFilters:
             self.__statusFilters.append(statusText)
         
-    def closeEvent(self, e):
-        """
-        Protected slot implementing a close event handler.
-        
-        @param e close event (QCloseEvent)
-        """
-        if self.__hgClient:
-            if self.__hgClient.isExecuting():
-                self.__hgClient.cancel()
-        else:
-            if self.process is not None and \
-               self.process.state() != QProcess.NotRunning:
-                self.process.terminate()
-                QTimer.singleShot(2000, self.process.kill)
-                self.process.waitForFinished(3000)
-        
-        if not self.__mq:
-            self.__diffSplitterState = self.diffSplitter.saveState()
-        
-        e.accept()
-    
     def start(self, fn):
         """
         Public slot to start the hg status command.
@@ -288,18 +320,7 @@
         self.intercept = False
         self.args = fn
         
-        for act in self.menuactions:
-            act.setEnabled(False)
-        for act in self.lfActions:
-            act.setEnabled(False)
-        
-        self.addButton.setEnabled(False)
-        self.commitButton.setEnabled(False)
-        self.diffButton.setEnabled(False)
-        self.sbsDiffButton.setEnabled(False)
-        self.revertButton.setEnabled(False)
-        self.forgetButton.setEnabled(False)
-        self.restoreButton.setEnabled(False)
+        self.actionsButton.setEnabled(False)
         
         self.statusFilterCombo.clear()
         self.__statusFilters = []
@@ -400,15 +421,12 @@
         self.__statusFilters.insert(0, "<{0}>".format(self.tr("all")))
         self.statusFilterCombo.addItems(self.__statusFilters)
         
-        for act in self.menuactions:
-            act.setEnabled(True)
+        if not self.__mq:
+            self.actionsButton.setEnabled(True)
         
         self.__resort()
         self.__resizeColumns()
         
-        self.__updateButtons()
-        self.__updateCommitButton()
-        
         self.__refreshDiff()
     
     def on_buttonBox_clicked(self, button):
@@ -551,28 +569,6 @@
         
         self.start(self.args)
     
-    def __updateButtons(self):
-        """
-        Private method to update the VCS buttons status.
-        """
-        modified = len(self.__getModifiedItems())
-        unversioned = len(self.__getUnversionedItems())
-        missing = len(self.__getMissingItems())
-
-        self.addButton.setEnabled(unversioned)
-        self.diffButton.setEnabled(modified)
-        self.sbsDiffButton.setEnabled(modified == 1)
-        self.revertButton.setEnabled(modified)
-        self.forgetButton.setEnabled(missing)
-        self.restoreButton.setEnabled(missing)
-    
-    def __updateCommitButton(self):
-        """
-        Private method to update the Commit button status.
-        """
-        commitable = len(self.__getCommitableItems())
-        self.commitButton.setEnabled(commitable)
-    
     @pyqtSlot(str)
     def on_statusFilterCombo_activated(self, txt):
         """
@@ -589,88 +585,26 @@
                 topItem = self.statusList.topLevelItem(topIndex)
                 topItem.setHidden(topItem.text(self.__statusColumn) != txt)
     
-    @pyqtSlot(QTreeWidgetItem, int)
-    def on_statusList_itemChanged(self, item, column):
-        """
-        Private slot to act upon item changes.
-        
-        @param item reference to the changed item (QTreeWidgetItem)
-        @param column index of column that changed (integer)
-        """
-        if column == self.__toBeCommittedColumn:
-            self.__updateCommitButton()
-    
     @pyqtSlot()
     def on_statusList_itemSelectionChanged(self):
         """
         Private slot to act upon changes of selected items.
         """
-        self.__updateButtons()
         self.__generateDiffs()
     
-    @pyqtSlot()
-    def on_commitButton_clicked(self):
-        """
-        Private slot to handle the press of the Commit button.
-        """
-        self.__commit()
-    
-    @pyqtSlot()
-    def on_addButton_clicked(self):
-        """
-        Private slot to handle the press of the Add button.
-        """
-        self.__add()
-    
-    @pyqtSlot()
-    def on_diffButton_clicked(self):
-        """
-        Private slot to handle the press of the Differences button.
-        """
-        self.__diff()
-    
-    @pyqtSlot()
-    def on_sbsDiffButton_clicked(self):
-        """
-        Private slot to handle the press of the Side-by-Side Diff button.
-        """
-        self.__sbsDiff()
-    
-    @pyqtSlot()
-    def on_revertButton_clicked(self):
-        """
-        Private slot to handle the press of the Revert button.
-        """
-        self.__revert()
-    
-    @pyqtSlot()
-    def on_forgetButton_clicked(self):
-        """
-        Private slot to handle the press of the Forget button.
-        """
-        self.__forget()
-    
-    @pyqtSlot()
-    def on_restoreButton_clicked(self):
-        """
-        Private slot to handle the press of the Restore button.
-        """
-        self.__restoreMissing()
-    
     ###########################################################################
-    ## Context menu handling methods
+    ## Menu handling methods
     ###########################################################################
     
-    def __showContextMenu(self, coord):
+    def __showActionsMenu(self):
         """
-        Private slot to show the context menu of the status list.
-        
-        @param coord the position of the mouse pointer (QPoint)
+        Private slot to prepare the actions button menu before it is shown.
         """
         modified = len(self.__getModifiedItems())
         unversioned = len(self.__getUnversionedItems())
         missing = len(self.__getMissingItems())
         commitable = len(self.__getCommitableItems())
+        commitableUnselected = len(self.__getCommitableUnselectedItems())
 
         self.__addAct.setEnabled(unversioned)
         self.__diffAct.setEnabled(modified)
@@ -679,22 +613,15 @@
         self.__forgetAct.setEnabled(missing)
         self.__restoreAct.setEnabled(missing)
         self.__commitAct.setEnabled(commitable)
+        self.__commitSelectAct.setEnabled(commitableUnselected)
+        self.__commitDeselectAct.setEnabled(commitable)
         
         if self.vcs.isExtensionActive("largefiles"):
-            enable = len(self.__getUnversionedItems()) > 0
+            enable = bool(unversioned)
         else:
             enable = False
-        for act in self.lfActions:
-            act.setEnabled(enable)
-        self.menu.popup(self.statusList.mapToGlobal(coord))
-    
-    def __showAddMenu(self):
-        """
-        Private slot to prepare the Add button menu before it is shown.
-        """
-        enable = self.vcs.isExtensionActive("largefiles")
-        for act in self.__lfAddActions:
-            act.setEnabled(enable)
+        self.__lfAddLargeAct.setEnabled(enable)
+        self.__lfAddNormalAct.setEnabled(enable)
     
     def __commit(self):
         """
@@ -901,6 +828,21 @@
                 commitableItems.append(itm)
         return commitableItems
     
+    def __getCommitableUnselectedItems(self):
+        """
+        Private method to retrieve all entries the user may commit but hasn't
+        selected.
+        
+        @return list of all items, the user has checked
+        """
+        items = []
+        for index in range(self.statusList.topLevelItemCount()):
+            itm = self.statusList.topLevelItem(index)
+            if itm.flags() & Qt.ItemIsUserCheckable and \
+               itm.checkState(self.__toBeCommittedColumn) == Qt.Unchecked:
+                items.append(itm)
+        return items
+    
     def __getModifiedItems(self):
         """
         Private method to retrieve all entries, that have a modified status.
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>955</width>
-    <height>646</height>
+    <width>800</width>
+    <height>600</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -17,188 +17,107 @@
    <string>&lt;b&gt;Mercurial Status&lt;/b&gt;
 &lt;p&gt;This dialog shows the status of the selected file or project.&lt;/p&gt;</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_3">
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QToolButton" name="actionsButton">
+       <property name="toolTip">
+        <string>Select action from menu</string>
+       </property>
+       <property name="popupMode">
+        <enum>QToolButton::InstantPopup</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>&amp;Filter on Status:</string>
+       </property>
+       <property name="buddy">
+        <cstring>statusFilterCombo</cstring>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="statusFilterCombo">
+       <property name="toolTip">
+        <string>Select the status of entries to be shown</string>
+       </property>
+       <property name="sizeAdjustPolicy">
+        <enum>QComboBox::AdjustToContents</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
    <item>
     <widget class="QSplitter" name="diffSplitter">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>2</verstretch>
+      </sizepolicy>
+     </property>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
-     <widget class="QWidget" name="">
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_2">
-         <item>
-          <spacer name="horizontalSpacer_2">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-         <item>
-          <widget class="QLabel" name="label">
-           <property name="text">
-            <string>&amp;Filter on Status:</string>
-           </property>
-           <property name="buddy">
-            <cstring>statusFilterCombo</cstring>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QComboBox" name="statusFilterCombo">
-           <property name="toolTip">
-            <string>Select the status of entries to be shown</string>
-           </property>
-           <property name="sizeAdjustPolicy">
-            <enum>QComboBox::AdjustToContents</enum>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <widget class="QTreeWidget" name="statusList">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-           <horstretch>0</horstretch>
-           <verstretch>3</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="alternatingRowColors">
-          <bool>true</bool>
-         </property>
-         <property name="selectionMode">
-          <enum>QAbstractItemView::ExtendedSelection</enum>
-         </property>
-         <property name="rootIsDecorated">
-          <bool>false</bool>
-         </property>
-         <property name="sortingEnabled">
-          <bool>true</bool>
-         </property>
-         <column>
-          <property name="text">
-           <string>Commit</string>
-          </property>
-         </column>
-         <column>
-          <property name="text">
-           <string>Status</string>
-          </property>
-         </column>
-         <column>
-          <property name="text">
-           <string>Path</string>
-          </property>
-         </column>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <item>
-          <widget class="QPushButton" name="commitButton">
-           <property name="toolTip">
-            <string>Commit the selected changes</string>
-           </property>
-           <property name="text">
-            <string>&amp;Commit</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="Line" name="buttonsLine">
-           <property name="orientation">
-            <enum>Qt::Vertical</enum>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="addButton">
-           <property name="toolTip">
-            <string>Add the selected entries to the repository</string>
-           </property>
-           <property name="text">
-            <string>&amp;Add</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="diffButton">
-           <property name="toolTip">
-            <string>Show differences of the selected entries to the repository</string>
-           </property>
-           <property name="text">
-            <string>&amp;Differences</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="sbsDiffButton">
-           <property name="toolTip">
-            <string>Show differences of the selected entry to the repository in a side-by-side manner</string>
-           </property>
-           <property name="text">
-            <string>Side-b&amp;y-Side Diff</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="revertButton">
-           <property name="toolTip">
-            <string>Revert the selected entries to the last revision in the repository</string>
-           </property>
-           <property name="text">
-            <string>Re&amp;vert</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="forgetButton">
-           <property name="toolTip">
-            <string>Forget about the selected missing entries</string>
-           </property>
-           <property name="text">
-            <string>For&amp;get</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="restoreButton">
-           <property name="toolTip">
-            <string>Restore the selected missing entries from the repository</string>
-           </property>
-           <property name="text">
-            <string>&amp;Restore</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer name="horizontalSpacer">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </item>
-      </layout>
+     <property name="childrenCollapsible">
+      <bool>false</bool>
+     </property>
+     <widget class="QTreeWidget" name="statusList">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="alternatingRowColors">
+       <bool>true</bool>
+      </property>
+      <property name="selectionMode">
+       <enum>QAbstractItemView::ExtendedSelection</enum>
+      </property>
+      <property name="rootIsDecorated">
+       <bool>false</bool>
+      </property>
+      <property name="sortingEnabled">
+       <bool>true</bool>
+      </property>
+      <column>
+       <property name="text">
+        <string>Commit</string>
+       </property>
+      </column>
+      <column>
+       <property name="text">
+        <string>Status</string>
+       </property>
+      </column>
+      <column>
+       <property name="text">
+        <string>Path</string>
+       </property>
+      </column>
      </widget>
      <widget class="QWidget" name="layoutWidget">
       <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
-        <widget class="QLabel" name="label_2">
+        <widget class="QLabel" name="diffLabel">
          <property name="text">
           <string>Differences</string>
          </property>
@@ -209,7 +128,7 @@
          <property name="sizePolicy">
           <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
            <horstretch>0</horstretch>
-           <verstretch>1</verstretch>
+           <verstretch>0</verstretch>
           </sizepolicy>
          </property>
          <property name="tabChangesFocus">
@@ -325,18 +244,11 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
+  <tabstop>actionsButton</tabstop>
   <tabstop>statusFilterCombo</tabstop>
   <tabstop>statusList</tabstop>
-  <tabstop>commitButton</tabstop>
-  <tabstop>addButton</tabstop>
-  <tabstop>diffButton</tabstop>
-  <tabstop>sbsDiffButton</tabstop>
-  <tabstop>revertButton</tabstop>
-  <tabstop>forgetButton</tabstop>
-  <tabstop>restoreButton</tabstop>
   <tabstop>diffEdit</tabstop>
   <tabstop>errors</tabstop>
   <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -165,7 +165,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagList</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgTagDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgTagDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -155,7 +155,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -165,7 +165,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -434,7 +434,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>parentButton</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Fri Mar 03 18:34:21 2017 +0100
@@ -353,10 +353,6 @@
         except KeyError:
             rev = None
         vcsUrl = self.hgNormalizeURL(vcsDataDict["url"])
-        if vcsUrl.startswith('/'):
-            vcsUrl = 'file://{0}'.format(vcsUrl)
-        elif vcsUrl[1] in ['|', ':']:
-            vcsUrl = 'file:///{0}'.format(vcsUrl)
         
         args = self.initCommand("clone")
         if rev:
@@ -364,7 +360,7 @@
             args.append(rev)
         if vcsDataDict["largefiles"]:
             args.append("--all-largefiles")
-        args.append(self.__hgURL(vcsUrl))
+        args.append(vcsUrl)
         args.append(projectDir)
         
         if noDialog:
@@ -1010,11 +1006,14 @@
         
         return res
     
-    def vcsMerge(self, name):
+    def vcsMerge(self, name, rev=""):
         """
         Public method used to merge a URL/revision into the local project.
         
-        @param name file/directory name to be merged (string)
+        @param name file/directory name to be merged
+        @type str
+        @keyparam rev revision to merge with
+        @type str
         """
         dname, fname = self.splitPath(name)
         
@@ -1025,14 +1024,17 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        from .HgMergeDialog import HgMergeDialog
-        dlg = HgMergeDialog(self.hgGetTagsList(repodir),
-                            self.hgGetBranchesList(repodir),
-                            self.hgGetBookmarksList(repodir))
-        if dlg.exec_() == QDialog.Accepted:
-            rev, force = dlg.getParameters()
+        if not rev:
+            from .HgMergeDialog import HgMergeDialog
+            dlg = HgMergeDialog(self.hgGetTagsList(repodir),
+                                self.hgGetBranchesList(repodir),
+                                self.hgGetBookmarksList(repodir))
+            if dlg.exec_() == QDialog.Accepted:
+                rev, force = dlg.getParameters()
+            else:
+                return
         else:
-            return
+            force = False
         
         args = self.initCommand("merge")
         if force:
@@ -1488,37 +1490,6 @@
     ## Private Mercurial specific methods are below.
     ###########################################################################
     
-    def __hgURL(self, url):
-        """
-        Private method to format a url for Mercurial.
-        
-        @param url unformatted url string (string)
-        @return properly formated url for mercurial (string)
-        """
-        url = self.hgNormalizeURL(url)
-        url = url.split(':', 2)
-        if len(url) == 4:
-            scheme = url[0]
-            user = url[1]
-            host = url[2]
-            port, path = url[3].split("/", 1)
-            return "{0}:{1}:{2}:{3}/{4}".format(
-                scheme, user, host, port, Utilities.quote(path))
-        elif len(url) == 3:
-            scheme = url[0]
-            host = url[1]
-            port, path = url[2].split("/", 1)
-            return "{0}:{1}:{2}/{3}".format(
-                scheme, host, port, Utilities.quote(path))
-        else:
-            scheme = url[0]
-            if scheme == "file":
-                return "{0}:{1}".format(scheme, Utilities.quote(url[1]))
-            else:
-                host, path = url[1][2:].split("/", 1)
-                return "{0}://{1}/{2}".format(
-                    scheme, host, Utilities.quote(path))
-
     def hgNormalizeURL(self, url):
         """
         Public method to normalize a url for Mercurial.
@@ -1928,17 +1899,22 @@
         self.logBrowserOutgoing.raise_()
         self.logBrowserOutgoing.start(name)
     
-    def hgPull(self, name):
+    def hgPull(self, name, revisions=None):
         """
         Public method used to pull changes from a remote Mercurial repository.
         
-        @param name directory name of the project to be pulled to (string)
+        @param name directory name of the project to be pulled to
+        @type str
+        @param revisions list of revisions to be pulled
+        @type list of str
         @return flag indicating, that the update contained an add
-            or delete (boolean)
+            or delete
+        @rtype bool
         """
         if self.getPlugin().getPreferences("PreferUnbundle") and \
            self.bundleFile and \
-           os.path.exists(self.bundleFile):
+           os.path.exists(self.bundleFile) and \
+           revisions is None:
             command = "unbundle"
             title = self.tr('Apply changegroups')
         else:
@@ -1951,6 +1927,10 @@
             args.append('--update')
         if command == "unbundle":
             args.append(self.bundleFile)
+        if revisions:
+            for rev in revisions:
+                args.append("--rev")
+                args.append(rev)
         
         # find the root of the repo
         repodir = self.splitPath(name)[0]
@@ -2512,11 +2492,14 @@
         
         return status
     
-    def hgBundle(self, name):
+    def hgBundle(self, name, bundleData=None):
         """
         Public method to create a changegroup file.
         
-        @param name file/directory name (string)
+        @param name file/directory name
+        @type str
+        @param bundleData dictionary containing the bundle creation information
+        @type dict
         """
         dname, fname = self.splitPath(name)
         
@@ -2527,60 +2510,71 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        from .HgBundleDialog import HgBundleDialog
-        dlg = HgBundleDialog(self.hgGetTagsList(repodir),
-                             self.hgGetBranchesList(repodir),
-                             self.hgGetBookmarksList(repodir))
-        if dlg.exec_() == QDialog.Accepted:
-            revs, baseRevs, compression, all = dlg.getParameters()
-            
-            fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
-                None,
-                self.tr("Create changegroup"),
-                self.__lastChangeGroupPath or repodir,
-                self.tr("Mercurial Changegroup Files (*.hg)"),
-                None,
-                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
-            
-            if not fname:
-                return  # user aborted
+        if bundleData is None:
+            from .HgBundleDialog import HgBundleDialog
+            dlg = HgBundleDialog(self.hgGetTagsList(repodir),
+                                 self.hgGetBranchesList(repodir),
+                                 self.hgGetBookmarksList(repodir))
+            if dlg.exec_() != QDialog.Accepted:
+                return
             
-            ext = QFileInfo(fname).suffix()
-            if not ext:
-                ex = selectedFilter.split("(*")[1].split(")")[0]
-                if ex:
-                    fname += ex
-            if QFileInfo(fname).exists():
-                res = E5MessageBox.yesNo(
-                    self.__ui,
-                    self.tr("Create changegroup"),
-                    self.tr("<p>The Mercurial changegroup file <b>{0}</b> "
-                            "already exists. Overwrite it?</p>")
-                        .format(fname),
-                    icon=E5MessageBox.Warning)
-                if not res:
-                    return
-            fname = Utilities.toNativeSeparators(fname)
-            self.__lastChangeGroupPath = os.path.dirname(fname)
-            
-            args = self.initCommand("bundle")
-            if all:
-                args.append("--all")
-            for rev in revs:
-                args.append("--rev")
-                args.append(rev)
-            for baseRev in baseRevs:
-                args.append("--base")
-                args.append(baseRev)
-            if compression:
-                args.append("--type")
-                args.append(compression)
-            args.append(fname)
-            
-            dia = HgDialog(self.tr('Create changegroup'), self)
-            res = dia.startProcess(args, repodir)
-            if res:
-                dia.exec_()
+            revs, baseRevs, compression, all = dlg.getParameters()
+        else:
+            revs = bundleData["revs"]
+            if bundleData["base"]:
+                baseRevs = [bundleData["base"]]
+            else:
+                baseRevs = []
+            compression = ""
+            all = bundleData["all"]
+        
+        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+            None,
+            self.tr("Create changegroup"),
+            self.__lastChangeGroupPath or repodir,
+            self.tr("Mercurial Changegroup Files (*.hg)"),
+            None,
+            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+        
+        if not fname:
+            return  # user aborted
+        
+        ext = QFileInfo(fname).suffix()
+        if not ext:
+            ex = selectedFilter.split("(*")[1].split(")")[0]
+            if ex:
+                fname += ex
+        if QFileInfo(fname).exists():
+            res = E5MessageBox.yesNo(
+                self.__ui,
+                self.tr("Create changegroup"),
+                self.tr("<p>The Mercurial changegroup file <b>{0}</b> "
+                        "already exists. Overwrite it?</p>")
+                    .format(fname),
+                icon=E5MessageBox.Warning)
+            if not res:
+                return
+        fname = Utilities.toNativeSeparators(fname)
+        self.__lastChangeGroupPath = os.path.dirname(fname)
+        
+        args = self.initCommand("bundle")
+        if all:
+            args.append("--all")
+        for rev in revs:
+            args.append("--rev")
+            args.append(rev)
+        for baseRev in baseRevs:
+            args.append("--base")
+            args.append(baseRev)
+        if compression:
+            args.append("--type")
+            args.append(compression)
+        args.append(fname)
+        
+        dia = HgDialog(self.tr('Create changegroup'), self)
+        res = dia.startProcess(args, repodir)
+        if res:
+            dia.exec_()
     
     def hgPreviewBundle(self, name):
         """
@@ -2614,13 +2608,17 @@
             self.logBrowserIncoming.raise_()
             self.logBrowserIncoming.start(name, bundle=file)
     
-    def hgUnbundle(self, name):
+    def hgUnbundle(self, name, files=None):
         """
         Public method to apply changegroup files.
         
-        @param name directory name (string)
+        @param name directory name
+        @type str
+        @param files list of bundle files to be applied
+        @type list of str
         @return flag indicating, that the update contained an add
-            or delete (boolean)
+            or delete
+        @rtype bool
         """
         dname, fname = self.splitPath(name)
         
@@ -2632,11 +2630,13 @@
                 return
         
         res = False
-        files = E5FileDialog.getOpenFileNames(
-            None,
-            self.tr("Apply changegroups"),
-            self.__lastChangeGroupPath or repodir,
-            self.tr("Mercurial Changegroup Files (*.hg);;All Files (*)"))
+        if not files:
+            files = E5FileDialog.getOpenFileNames(
+                None,
+                self.tr("Apply changegroups"),
+                self.__lastChangeGroupPath or repodir,
+                self.tr("Mercurial Changegroup Files (*.hg);;All Files (*)"))
+        
         if files:
             self.__lastChangeGroupPath = os.path.dirname(files[0])
             
@@ -2658,6 +2658,7 @@
                 dia.exec_()
                 res = dia.hasAddOrDelete()
             self.checkVCSStatus()
+        
         return res
     
     def hgBisect(self, name, subcommand):
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -123,7 +123,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -57,6 +57,8 @@
         self.recentComboBox.addItem("")
         self.recentComboBox.addItems(self.recentCommitMessages)
         
+        self.logEdit.setFocus(Qt.OtherFocusReason)
+        
     def logMessage(self):
         """
         Public method to retrieve the log message.
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -92,7 +92,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>logEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -87,7 +87,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -79,7 +79,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>resultbox</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -445,7 +445,7 @@
         
         # set the state of the up and down buttons
         self.upButton.setEnabled(
-            current is not None and 
+            current is not None and
             self.logTree.indexOfTopLevelItem(current) > 0)
         self.downButton.setEnabled(
             current is not None and
--- a/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -129,7 +129,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tag1Combo</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -148,7 +148,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -120,7 +120,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -59,7 +59,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>propNameEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -93,7 +93,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>propsList</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -85,7 +85,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>propNameEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -327,7 +327,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>number1Button</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -266,7 +266,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>statusFilterCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -99,7 +99,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -104,7 +104,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagList</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -126,7 +126,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -123,7 +123,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -55,6 +55,8 @@
         self.recentComboBox.addItem("")
         self.recentComboBox.addItems(self.recentCommitMessages)
         
+        self.logEdit.setFocus(Qt.OtherFocusReason)
+        
     def logMessage(self):
         """
         Public method to retrieve the log message.
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -92,7 +92,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>logEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -87,7 +87,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -137,7 +137,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>resultbox</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -554,7 +554,7 @@
         
         # set the state of the up and down buttons
         self.upButton.setEnabled(
-            current is not None and 
+            current is not None and
             self.logTree.indexOfTopLevelItem(current) > 0)
         self.downButton.setEnabled(
             current is not None and
--- a/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -129,7 +129,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tag1Combo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -148,7 +148,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -120,7 +120,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -93,7 +93,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>propsList</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -108,7 +108,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -327,7 +327,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>number1Button</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -321,7 +321,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>statusFilterCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -99,7 +99,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -162,7 +162,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagList</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -126,7 +126,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>tagCombo</tabstop>
--- a/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -385,7 +385,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>rColor</tabstop>
--- a/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -528,7 +528,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>rInformation</tabstop>
--- a/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -400,7 +400,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>pyqtComboBox</tabstop>
--- a/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -173,7 +173,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>eResultVar</tabstop>
--- a/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -416,7 +416,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>rText</tabstop>
--- a/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -380,7 +380,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>rInformation</tabstop>
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -112,7 +112,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>negativeCheckBox</tabstop>
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -511,7 +511,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>py2Button</tabstop>
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -178,7 +178,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>unlimitedButton</tabstop>
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -141,7 +141,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>negativeCheckBox</tabstop>
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -550,7 +550,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>variableLineEdit</tabstop>
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -171,7 +171,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>unlimitedButton</tabstop>
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -155,7 +155,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>negativeCheckBox</tabstop>
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -477,7 +477,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>variableLineEdit</tabstop>
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -196,7 +196,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>unlimitedButton</tabstop>
--- a/Preferences/ConfigurationDialog.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ConfigurationDialog.py	Fri Mar 03 18:34:21 2017 +0100
@@ -12,7 +12,8 @@
 import os
 import types
 
-from PyQt5.QtCore import QMetaObject, pyqtSignal, Qt, QRect, pyqtSlot
+from PyQt5.QtCore import QMetaObject, pyqtSignal, Qt, QRect, pyqtSlot, \
+    qVersion
 from PyQt5.QtGui import QPixmap
 from PyQt5.QtWidgets import QSizePolicy, QSpacerItem, QWidget, QTreeWidget, \
     QStackedWidget, QDialog, QSplitter, QScrollArea, QApplication, \
@@ -339,6 +340,14 @@
                     [self.tr("VirusTotal Interface"), "virustotal.png",
                      "HelpVirusTotalPage", "0webBrowserPage", None],
                 })
+                if qVersion() >= "5.8.0":
+                    self.configItems.update({
+                        "webBrowserSpellCheckingPage":
+                        [self.tr("Spell checking"),
+                         "preferences-spellchecking.png",
+                         "WebBrowserSpellCheckingPage", "0webBrowserPage",
+                         None],
+                    })
             else:
                 try:
                     from PyQt5 import QtWebKit      # __IGNORE_WARNING__
@@ -454,6 +463,14 @@
                 [self.tr("VirusTotal Interface"), "virustotal.png",
                  "HelpVirusTotalPage", None, None],
             }
+            
+            if qVersion() >= "5.8.0":
+                self.configItems.update({
+                    "webBrowserSpellCheckingPage":
+                    [self.tr("Spell checking"),
+                     "preferences-spellchecking.png",
+                     "WebBrowserSpellCheckingPage", None, None],
+                })
         
         elif displayMode == ConfigurationWidget.TrayStarterMode:
             self.configItems = {
--- a/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Fri Mar 03 18:34:21 2017 +0100
@@ -4,7 +4,7 @@
 #
 
 """
-Module implementing the Web Browser configuration page.
+Module implementing the Web Browser Appearance configuration page.
 """
 
 from __future__ import unicode_literals
--- a/Preferences/ConfigurationPages/WebBrowserPage.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ConfigurationPages/WebBrowserPage.py	Fri Mar 03 18:34:21 2017 +0100
@@ -76,9 +76,6 @@
         
         self.jsOpenWindowsCheckBox.setChecked(
             Preferences.getWebBrowser("JavaScriptCanOpenWindows"))
-        # TODO: Qt 5.8?
-##        self.jsCloseWindowsCheckBox.setChecked(
-##            Preferences.getWebBrowser("JavaScriptCanCloseWindows"))
         self.jsClipboardCheckBox.setChecked(
             Preferences.getWebBrowser("JavaScriptCanAccessClipboard"))
         self.pluginsCheckBox.setChecked(
@@ -152,8 +149,28 @@
             Preferences.getWebBrowser("SpatialNavigationEnabled"))
         self.linksInFocusChainCheckBox.setChecked(
             Preferences.getWebBrowser("LinksIncludedInFocusChain"))
+        try:
+            # Qt 5.8
+            self.focusOnNavigationCheckBox.setChecked(
+                Preferences.getWebBrowser("FocusOnNavigationEnabled"))
+        except KeyError:
+            self.focusOnNavigationCheckBox.setEnabled(False)
+        
         self.xssAuditingCheckBox.setChecked(
             Preferences.getWebBrowser("XSSAuditingEnabled"))
+        try:
+            # Qt 5.8
+            self.insecureContentsCheckBox.setChecked(
+                Preferences.getWebBrowser("AllowRunningInsecureContent"))
+        except KeyError:
+            self.insecureContentsCheckBox.setEnabled(False)
+        
+        try:
+            # Qt 5.8
+            self.printBackgroundCheckBox.setChecked(
+                Preferences.getWebBrowser("PrintElementBackgrounds"))
+        except KeyError:
+            self.printBackgroundCheckBox.setEnabled(False)
         
         self.autoScrollGroupBox.setChecked(
             Preferences.getWebBrowser("AutoScrollEnabled"))
@@ -164,10 +181,6 @@
             Preferences.getWebBrowser("WebInspectorEnabled"))
         self.webInspectorPortSpinBox.setValue(
             Preferences.getWebBrowser("WebInspectorPort"))
-        
-        # TODO: Qt 5.8?
-        # Hide entries not yet supported
-        self.jsCloseWindowsCheckBox.hide()
     
     def save(self):
         """
@@ -206,10 +219,6 @@
         Preferences.setWebBrowser(
             "JavaScriptCanOpenWindows",
             self.jsOpenWindowsCheckBox.isChecked())
-        # TODO: Qt 5.8?
-##        Preferences.setWebBrowser(
-##            "JavaScriptCanCloseWindows",
-##            self.jsCloseWindowsCheckBox.isChecked())
         Preferences.setWebBrowser(
             "JavaScriptCanAccessClipboard",
             self.jsClipboardCheckBox.isChecked())
@@ -276,9 +285,23 @@
         Preferences.setWebBrowser(
             "LinksIncludedInFocusChain",
             self.linksInFocusChainCheckBox.isChecked())
+        if self.focusOnNavigationCheckBox.isEnabled():
+            Preferences.setWebBrowser(
+                "FocusOnNavigationEnabled",
+                self.focusOnNavigationCheckBox.isChecked())
+        
         Preferences.setWebBrowser(
             "XSSAuditingEnabled",
             self.xssAuditingCheckBox.isChecked())
+        if self.insecureContentsCheckBox.isEnabled():
+            Preferences.setWebBrowser(
+                "AllowRunningInsecureContent",
+                self.insecureContentsCheckBox.isChecked())
+        
+        if self.printBackgroundCheckBox.isEnabled():
+            Preferences.setWebBrowser(
+                "PrintElementBackgrounds",
+                self.printBackgroundCheckBox.isChecked())
         
         Preferences.setWebBrowser(
             "AutoScrollEnabled",
--- a/Preferences/ConfigurationPages/WebBrowserPage.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ConfigurationPages/WebBrowserPage.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>616</width>
-    <height>1533</height>
+    <height>1610</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_3">
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -264,8 +264,8 @@
         <property name="title">
          <string>JavaScript</string>
         </property>
-        <layout class="QGridLayout" name="gridLayout">
-         <item row="0" column="0">
+        <layout class="QVBoxLayout" name="verticalLayout_5">
+         <item>
           <widget class="QCheckBox" name="jsOpenWindowsCheckBox">
            <property name="toolTip">
             <string>Select to allow JavaScript to open windows</string>
@@ -275,17 +275,7 @@
            </property>
           </widget>
          </item>
-         <item row="0" column="1">
-          <widget class="QCheckBox" name="jsCloseWindowsCheckBox">
-           <property name="toolTip">
-            <string>Select to allow JavaScript to close windows</string>
-           </property>
-           <property name="text">
-            <string>JavaScript can close windows</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="0">
+         <item>
           <widget class="QCheckBox" name="jsClipboardCheckBox">
            <property name="toolTip">
             <string>Select to allow JavaScript to access the clipboard</string>
@@ -370,7 +360,7 @@
      <property name="title">
       <string>Security</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
+     <layout class="QHBoxLayout" name="horizontalLayout_7">
       <item>
        <widget class="QCheckBox" name="xssAuditingCheckBox">
         <property name="toolTip">
@@ -385,6 +375,16 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QCheckBox" name="insecureContentsCheckBox">
+        <property name="toolTip">
+         <string>Select to allow HTTPS pages to run JavaScript, CSS, plugins or web-sockets from HTTP URLs</string>
+        </property>
+        <property name="text">
+         <string>Allow to run insecure contents</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -587,7 +587,7 @@
      <property name="title">
       <string>Navigation</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout_6">
+     <layout class="QGridLayout" name="gridLayout">
       <item row="0" column="0">
        <widget class="QCheckBox" name="spatialCheckBox">
         <property name="toolTip">
@@ -616,6 +616,35 @@
         </property>
        </widget>
       </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="focusOnNavigationCheckBox">
+        <property name="toolTip">
+         <string>Select to give the focus to the view whenever a navigation event occurs</string>
+        </property>
+        <property name="text">
+         <string>Enable Focus on Navigation</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_7">
+     <property name="title">
+      <string>Printing</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_6">
+      <item>
+       <widget class="QCheckBox" name="printBackgroundCheckBox">
+        <property name="toolTip">
+         <string>Select to print the background of page elements as well</string>
+        </property>
+        <property name="text">
+         <string>Print Element Backgrounds</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -781,20 +810,21 @@
   <tabstop>errorPageCheckBox</tabstop>
   <tabstop>scrollingCheckBox</tabstop>
   <tabstop>fullscreenCheckBox</tabstop>
+  <tabstop>screenCaptureCheckBox</tabstop>
+  <tabstop>webGLCheckBox</tabstop>
   <tabstop>startupCombo</tabstop>
   <tabstop>homePageEdit</tabstop>
   <tabstop>setCurrentPageButton</tabstop>
   <tabstop>defaultHomeButton</tabstop>
   <tabstop>defaultSchemeCombo</tabstop>
-  <tabstop>javaScriptGroup</tabstop>
   <tabstop>jsOpenWindowsCheckBox</tabstop>
-  <tabstop>jsCloseWindowsCheckBox</tabstop>
   <tabstop>jsClipboardCheckBox</tabstop>
   <tabstop>pluginsCheckBox</tabstop>
   <tabstop>doNotTrackCheckBox</tabstop>
   <tabstop>sendRefererCheckBox</tabstop>
   <tabstop>refererWhitelistButton</tabstop>
   <tabstop>xssAuditingCheckBox</tabstop>
+  <tabstop>insecureContentsCheckBox</tabstop>
   <tabstop>expireHistory</tabstop>
   <tabstop>diskCacheCheckBox</tabstop>
   <tabstop>cacheSizeSpinBox</tabstop>
@@ -802,6 +832,8 @@
   <tabstop>imageSearchComboBox</tabstop>
   <tabstop>spatialCheckBox</tabstop>
   <tabstop>linksInFocusChainCheckBox</tabstop>
+  <tabstop>focusOnNavigationCheckBox</tabstop>
+  <tabstop>printBackgroundCheckBox</tabstop>
   <tabstop>autoScrollGroupBox</tabstop>
   <tabstop>autoScrollDividerSpinBox</tabstop>
   <tabstop>webInspectorGroup</tabstop>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py	Fri Mar 03 18:34:21 2017 +0100
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Web Browser Spell Checking configuration page.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import pyqtSlot, Qt, QCoreApplication, QDir, QLibraryInfo, \
+    QLocale
+from PyQt5.QtWidgets import QListWidgetItem
+
+from .ConfigurationPageBase import ConfigurationPageBase
+from .Ui_WebBrowserSpellCheckingPage import Ui_WebBrowserSpellCheckingPage
+
+import Preferences
+import Globals
+
+
+class WebBrowserSpellCheckingPage(ConfigurationPageBase,
+                                  Ui_WebBrowserSpellCheckingPage):
+    """
+    Class implementing the Web Browser Spell Checking page.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        super(WebBrowserSpellCheckingPage, self).__init__()
+        self.setupUi(self)
+        self.setObjectName("WebBrowserSpellCheckingPage")
+        
+        # set initial values
+        self.spellCheckEnabledCheckBox.setChecked(
+            Preferences.getWebBrowser("SpellCheckEnabled"))
+        self.on_spellCheckEnabledCheckBox_clicked()
+        
+        if Globals.isMacPlatform():
+            dictionaryDirectories = {
+                QDir.cleanPath(
+                    QCoreApplication.applicationDirPath() +
+                    "/../Contents/Resources/qtwebengine_dictionaries"),
+                QDir.cleanPath(
+                    QCoreApplication.applicationDirPath() +
+                    "/../Contents/Frameworks/QtWebEngineCore.framework"
+                    "/Resources/qtwebengine_dictionaries"),
+            }
+        else:
+            dictionaryDirectories = {
+                QDir.cleanPath(
+                    QCoreApplication.applicationDirPath() +
+                    "/qtwebengine_dictionaries"),
+                QDir.cleanPath(
+                    QLibraryInfo.location(QLibraryInfo.DataPath) +
+                    "/qtwebengine_dictionaries"),
+            }
+        self.spellCheckDictionaryDirectoriesEdit.setPlainText(
+            "\n".join(dictionaryDirectories))
+        
+        for path in dictionaryDirectories:
+            directory = QDir(path)
+            fileNames = directory.entryList(["*.bdic"])
+            for fileName in fileNames:
+                lang = fileName[:-5]
+                langStr = self.__createLanguageString(lang)
+                if self.spellCheckLanguagesList.findItems(langStr,
+                                                          Qt.MatchExactly):
+                    continue
+                
+                itm = QListWidgetItem(langStr, self.spellCheckLanguagesList)
+                itm.setData(Qt.UserRole, lang)
+                itm.setFlags(itm.flags() | Qt.ItemIsUserCheckable)
+                itm.setCheckState(Qt.Unchecked)
+        self.spellCheckLanguagesList.sortItems(Qt.AscendingOrder)
+        
+        spellCheckLanguages = Preferences.getWebBrowser("SpellCheckLanguages")
+        topIndex = 0
+        for lang in spellCheckLanguages:
+            items = self.spellCheckLanguagesList.findItems(
+                self.__createLanguageString(lang), Qt.MatchExactly)
+            if items:
+                itm = items[0]
+                self.spellCheckLanguagesList.takeItem(
+                    self.spellCheckLanguagesList.row(itm))
+                self.spellCheckLanguagesList.insertItem(topIndex, itm)
+                itm.setCheckState(Qt.Checked)
+                topIndex += 1
+        
+        if self.spellCheckLanguagesList.count():
+            self.noLanguagesLabel.hide()
+        else:
+            self.spellCheckLanguagesList.hide()
+    
+    def save(self):
+        """
+        Public slot to save the Help Viewers configuration.
+        """
+        languages = []
+        for row in range(self.spellCheckLanguagesList.count()):
+            itm = self.spellCheckLanguagesList.item(row)
+            if itm.checkState() == Qt.Checked:
+                languages.append(itm.data(Qt.UserRole))
+        
+        Preferences.setWebBrowser(
+            "SpellCheckEnabled",
+            self.spellCheckEnabledCheckBox.isChecked())
+        Preferences.setWebBrowser(
+            "SpellCheckLanguages",
+            languages)
+    
+    @pyqtSlot()
+    def on_spellCheckEnabledCheckBox_clicked(self):
+        """
+        Private slot handling a change of the spell checking enabled state.
+        """
+        enable = self.spellCheckEnabledCheckBox.isChecked()
+        self.noLanguagesLabel.setEnabled(enable)
+        self.spellCheckLanguagesList.setEnabled(enable)
+    
+    def __createLanguageString(self, language):
+        """
+        Private method to create a language string given a language identifier.
+        
+        @param language language identifier
+        @type str
+        @return language string
+        @rtype str
+        """
+        loc = QLocale(language)
+        
+        if loc.language() == QLocale.C:
+            return language
+        
+        country = QLocale.countryToString(loc.country())
+        lang = QLocale.languageToString(loc.language())
+        languageString = "{0}/{1} [{2}]".format(lang, country, language)
+        return languageString
+
+
+def create(dlg):
+    """
+    Module function to create the configuration page.
+    
+    @param dlg reference to the configuration dialog
+    @type Configuration
+    @return reference to the instantiated page
+    @rtype ConfigurationPageBase
+    """
+    page = WebBrowserSpellCheckingPage()
+    return page
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>WebBrowserSpellCheckingPage</class>
+ <widget class="QWidget" name="WebBrowserSpellCheckingPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>499</width>
+    <height>550</height>
+   </rect>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_3">
+   <item>
+    <widget class="QLabel" name="headerLabel">
+     <property name="text">
+      <string>&lt;b&gt;Configure Web Browser Spell Checking&lt;/b&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line17">
+     <property name="frameShape">
+      <enum>QFrame::HLine</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Sunken</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Spell Check Options</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QCheckBox" name="spellCheckEnabledCheckBox">
+        <property name="toolTip">
+         <string>Select to enable spell checking for editable parts</string>
+        </property>
+        <property name="text">
+         <string>Enable Spell Checking</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="noLanguagesLabel">
+        <property name="text">
+         <string>No languages found</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QListWidget" name="spellCheckLanguagesList">
+        <property name="dragEnabled">
+         <bool>true</bool>
+        </property>
+        <property name="dragDropMode">
+         <enum>QAbstractItemView::InternalMove</enum>
+        </property>
+        <property name="alternatingRowColors">
+         <bool>true</bool>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::MultiSelection</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="maximumSize">
+      <size>
+       <width>16777215</width>
+       <height>150</height>
+      </size>
+     </property>
+     <property name="title">
+      <string>Dictionary Directories</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QPlainTextEdit" name="spellCheckDictionaryDirectoriesEdit">
+        <property name="tabChangesFocus">
+         <bool>true</bool>
+        </property>
+        <property name="lineWrapMode">
+         <enum>QPlainTextEdit::NoWrap</enum>
+        </property>
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>spellCheckEnabledCheckBox</tabstop>
+  <tabstop>spellCheckLanguagesList</tabstop>
+  <tabstop>spellCheckDictionaryDirectoriesEdit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- a/Preferences/ShortcutDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ShortcutDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -110,7 +110,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>keyEdit</tabstop>
--- a/Preferences/ShortcutsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ShortcutsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -123,7 +123,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Preferences/ToolConfigurationDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ToolConfigurationDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -316,7 +316,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
--- a/Preferences/ToolGroupConfigurationDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ToolGroupConfigurationDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -186,7 +186,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>groupsList</tabstop>
--- a/Preferences/ViewProfileSidebarsDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ViewProfileSidebarsDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -114,7 +114,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>eprtCheckBox</tabstop>
--- a/Preferences/ViewProfileToolboxesDialog.ui	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/ViewProfileToolboxesDialog.ui	Fri Mar 03 18:34:21 2017 +0100
@@ -114,7 +114,6 @@
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>epltCheckBox</tabstop>
--- a/Preferences/__init__.py	Sun Feb 26 15:54:49 2017 +0100
+++ b/Preferences/__init__.py	Fri Mar 03 18:34:21 2017 +0100
@@ -746,6 +746,8 @@
         "DeterminePyFromProject": True,
         "TasksProjectAutoSave": True,
         "TasksProjectRescanOnOpen": True,
+        "DebugClientsHistory": [],
+        "DebuggerInterpreterHistory": [],
     }
     
     # defaults for the multi project settings
@@ -1064,6 +1066,9 @@
         "DownloadManagerSize": QSize(400, 300),
         "DownloadManagerPosition": QPoint(),
         "DownloadManagerDownloads": [],
+        # Spell Checking
+        "SpellCheckEnabled": False,
+        "SpellCheckLanguages": [],
         # Sync
         "SyncEnabled": False,
         "SyncBookmarks": True,
@@ -1133,9 +1138,6 @@
                 QWebEngineSettings.AutoLoadImages),
             "JavaScriptCanOpenWindows": webEngineSettings.testAttribute(
                 QWebEngineSettings.JavascriptCanOpenWindows),
-            # TODO: Qt 5.8?
-##            "JavaScriptCanCloseWindows": webEngineSettings.testAttribute(
-##                QWebEngineSettings.JavascriptCanCloseWindows),
             "JavaScriptCanAccessClipboard": webEngineSettings.testAttribute(
                 QWebEngineSettings.JavascriptCanAccessClipboard),
             "PluginsEnabled": webEngineSettings.testAttribute(
@@ -1173,6 +1175,18 @@
             })
         except AttributeError:
             pass
+        try:
+            # Qt 5.8+
+            cls.webBrowserDefaults.update({
+                "FocusOnNavigationEnabled": webEngineSettings.testAttribute(
+                    QWebEngineSettings.FocusOnNavigationEnabled),
+                "PrintElementBackgrounds": webEngineSettings.testAttribute(
+                    QWebEngineSettings.PrintElementBackgrounds),
+                "AllowRunningInsecureContent": webEngineSettings.testAttribute(
+                    QWebEngineSettings.AllowRunningInsecureContent),
+            })
+        except AttributeError:
+            pass
         
         cls.webEngineSettingsIntitialized = True
     
@@ -1855,7 +1869,10 @@
             return prefClass.uiDefaults[key]
     elif key in "ViewProfiles2":
         profiles = prefClass.settings.value("UI/ViewProfiles2")
-        if profiles is not None:
+        if profiles is None:
+            # use the defaults
+            viewProfiles = prefClass.uiDefaults["ViewProfiles2"]
+        else:
             viewProfiles = {}
             profiles = json.loads(profiles)
             for name in ["edit", "debug"]:
@@ -1867,36 +1884,6 @@
                 for bs in profiles[name][2]:
                     viewProfiles[name][2].append(
                         QByteArray.fromBase64(bs.encode("utf-8")))
-        else:
-            # migrate from the old ViewProfiles settings
-            try:
-                profiles = prefClass.settings.value("UI/ViewProfiles")
-            except TypeError:
-                profiles = None
-            if profiles is not None:
-                if isinstance(profiles, basestring):
-                    profiles = eval(profiles)
-                viewProfiles = {}
-                for name in ["edit", "debug"]:
-                    viewProfiles[name] = [
-                        QByteArray(profiles[name][4]),
-                        profiles[name][5][:],
-                        []
-                    ]
-                    for b in profiles[name][6]:
-                        viewProfiles[name][2].append(QByteArray(b))
-                    # correct some entries
-                    while (len(viewProfiles[name][1]) < len(
-                            prefClass.uiDefaults["ViewProfiles2"][name][1])):
-                        viewProfiles[name][1].append(True)
-                    while len(viewProfiles[name][2]) < len(
-                            prefClass.uiDefaults["ViewProfiles2"][name][2]):
-                        viewProfiles[name][2].append(QByteArray())
-            else:
-                # use the defaults
-                viewProfiles = prefClass.uiDefaults["ViewProfiles2"]
-        # Remove unused setting
-        prefClass.settings.remove("UI/ViewProfiles")