Optimized the QtHelp handling.

Mon, 17 Oct 2016 19:51:51 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 17 Oct 2016 19:51:51 +0200
changeset 5252
321c2003745d
parent 5250
2f22b20ea9ad
child 5253
57276f763bf6

Optimized the QtHelp handling.

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
Documentation/Source/eric6.Helpviewer.HelpIndexWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Helpviewer.HelpSearchWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Helpviewer.HelpTocWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.WebBrowser.QtHelp.HelpIndexWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.WebBrowser.QtHelp.HelpSearchWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.WebBrowser.QtHelp.HelpTocWidget.html file | annotate | diff | comparison | revisions
Helpviewer/HelpIndexWidget.py file | annotate | diff | comparison | revisions
Helpviewer/HelpSearchWidget.py file | annotate | diff | comparison | revisions
Helpviewer/HelpTocWidget.py file | annotate | diff | comparison | revisions
WebBrowser/QtHelp/HelpIndexWidget.py file | annotate | diff | comparison | revisions
WebBrowser/QtHelp/HelpSearchWidget.py file | annotate | diff | comparison | revisions
WebBrowser/QtHelp/HelpTocWidget.py file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Mon Oct 17 18:57:24 2016 +0200
+++ b/APIs/Python3/eric6.api	Mon Oct 17 19:51:51 2016 +0200
@@ -2484,7 +2484,6 @@
 eric6.Helpviewer.HelpLanguagesDialog.HelpLanguagesDialog?1(parent=None)
 eric6.Helpviewer.HelpSearchWidget.HelpSearchWidget.contextMenuEvent?4(evt)
 eric6.Helpviewer.HelpSearchWidget.HelpSearchWidget.escapePressed?7
-eric6.Helpviewer.HelpSearchWidget.HelpSearchWidget.eventFilter?4(watched, event)
 eric6.Helpviewer.HelpSearchWidget.HelpSearchWidget.keyPressEvent?4(evt)
 eric6.Helpviewer.HelpSearchWidget.HelpSearchWidget.linkActivated?7
 eric6.Helpviewer.HelpSearchWidget.HelpSearchWidget?1(engine, mainWindow, parent=None)
@@ -2524,7 +2523,6 @@
 eric6.Helpviewer.HelpTabWidget.HelpTabWidget.titleChanged?7
 eric6.Helpviewer.HelpTabWidget.HelpTabWidget?1(parent)
 eric6.Helpviewer.HelpTocWidget.HelpTocWidget.escapePressed?7
-eric6.Helpviewer.HelpTocWidget.HelpTocWidget.eventFilter?4(watched, event)
 eric6.Helpviewer.HelpTocWidget.HelpTocWidget.expandToDepth?4(depth)
 eric6.Helpviewer.HelpTocWidget.HelpTocWidget.focusInEvent?4(evt)
 eric6.Helpviewer.HelpTocWidget.HelpTocWidget.itemClicked?4(index)
@@ -10203,7 +10201,6 @@
 eric6.WebBrowser.QtHelp.HelpIndexWidget.HelpIndexWidget?1(engine, parent=None)
 eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget.contextMenuEvent?4(evt)
 eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget.escapePressed?7
-eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget.eventFilter?4(watched, event)
 eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget.keyPressEvent?4(evt)
 eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget.newBackgroundTab?7
 eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget.newTab?7
@@ -10211,7 +10208,6 @@
 eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget.openUrl?7
 eric6.WebBrowser.QtHelp.HelpSearchWidget.HelpSearchWidget?1(engine, parent=None)
 eric6.WebBrowser.QtHelp.HelpTocWidget.HelpTocWidget.escapePressed?7
-eric6.WebBrowser.QtHelp.HelpTocWidget.HelpTocWidget.eventFilter?4(watched, event)
 eric6.WebBrowser.QtHelp.HelpTocWidget.HelpTocWidget.expandToDepth?4(depth)
 eric6.WebBrowser.QtHelp.HelpTocWidget.HelpTocWidget.focusInEvent?4(evt)
 eric6.WebBrowser.QtHelp.HelpTocWidget.HelpTocWidget.keyPressEvent?4(evt)
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Mon Oct 17 18:57:24 2016 +0200
+++ b/Documentation/Help/source.qhp	Mon Oct 17 19:51:51 2016 +0200
@@ -6383,15 +6383,19 @@
       <keyword name="HelpIndexWidget (Constructor)" id="HelpIndexWidget (Constructor)" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__init__" />
       <keyword name="HelpIndexWidget (Module)" id="HelpIndexWidget (Module)" ref="eric6.Helpviewer.HelpIndexWidget.html" />
       <keyword name="HelpIndexWidget (Module)" id="HelpIndexWidget (Module)" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html" />
-      <keyword name="HelpIndexWidget.__activated" id="HelpIndexWidget.__activated" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__activated" />
-      <keyword name="HelpIndexWidget.__activated" id="HelpIndexWidget.__activated" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__activated" />
       <keyword name="HelpIndexWidget.__disableSearchEdit" id="HelpIndexWidget.__disableSearchEdit" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__disableSearchEdit" />
       <keyword name="HelpIndexWidget.__disableSearchEdit" id="HelpIndexWidget.__disableSearchEdit" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__disableSearchEdit" />
       <keyword name="HelpIndexWidget.__enableSearchEdit" id="HelpIndexWidget.__enableSearchEdit" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__enableSearchEdit" />
       <keyword name="HelpIndexWidget.__enableSearchEdit" id="HelpIndexWidget.__enableSearchEdit" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__enableSearchEdit" />
       <keyword name="HelpIndexWidget.__filterIndices" id="HelpIndexWidget.__filterIndices" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__filterIndices" />
       <keyword name="HelpIndexWidget.__filterIndices" id="HelpIndexWidget.__filterIndices" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__filterIndices" />
+      <keyword name="HelpIndexWidget.__linkActivated" id="HelpIndexWidget.__linkActivated" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__linkActivated" />
+      <keyword name="HelpIndexWidget.__linkActivated" id="HelpIndexWidget.__linkActivated" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__linkActivated" />
+      <keyword name="HelpIndexWidget.__linksActivated" id="HelpIndexWidget.__linksActivated" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__linksActivated" />
+      <keyword name="HelpIndexWidget.__linksActivated" id="HelpIndexWidget.__linksActivated" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__linksActivated" />
+      <keyword name="HelpIndexWidget.__selectLink" id="HelpIndexWidget.__selectLink" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__selectLink" />
       <keyword name="HelpIndexWidget.__selectLink" id="HelpIndexWidget.__selectLink" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__selectLink" />
+      <keyword name="HelpIndexWidget.__showContextMenu" id="HelpIndexWidget.__showContextMenu" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.__showContextMenu" />
       <keyword name="HelpIndexWidget.__showContextMenu" id="HelpIndexWidget.__showContextMenu" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.__showContextMenu" />
       <keyword name="HelpIndexWidget.eventFilter" id="HelpIndexWidget.eventFilter" ref="eric6.Helpviewer.HelpIndexWidget.html#HelpIndexWidget.eventFilter" />
       <keyword name="HelpIndexWidget.eventFilter" id="HelpIndexWidget.eventFilter" ref="eric6.WebBrowser.QtHelp.HelpIndexWidget.html#HelpIndexWidget.eventFilter" />
@@ -6425,6 +6429,8 @@
       <keyword name="HelpSearchWidget (Constructor)" id="HelpSearchWidget (Constructor)" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html#HelpSearchWidget.__init__" />
       <keyword name="HelpSearchWidget (Module)" id="HelpSearchWidget (Module)" ref="eric6.Helpviewer.HelpSearchWidget.html" />
       <keyword name="HelpSearchWidget (Module)" id="HelpSearchWidget (Module)" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html" />
+      <keyword name="HelpSearchWidget.__linkActivated" id="HelpSearchWidget.__linkActivated" ref="eric6.Helpviewer.HelpSearchWidget.html#HelpSearchWidget.__linkActivated" />
+      <keyword name="HelpSearchWidget.__linkActivated" id="HelpSearchWidget.__linkActivated" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html#HelpSearchWidget.__linkActivated" />
       <keyword name="HelpSearchWidget.__search" id="HelpSearchWidget.__search" ref="eric6.Helpviewer.HelpSearchWidget.html#HelpSearchWidget.__search" />
       <keyword name="HelpSearchWidget.__search" id="HelpSearchWidget.__search" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html#HelpSearchWidget.__search" />
       <keyword name="HelpSearchWidget.__searchingFinished" id="HelpSearchWidget.__searchingFinished" ref="eric6.Helpviewer.HelpSearchWidget.html#HelpSearchWidget.__searchingFinished" />
@@ -6433,8 +6439,6 @@
       <keyword name="HelpSearchWidget.__searchingStarted" id="HelpSearchWidget.__searchingStarted" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html#HelpSearchWidget.__searchingStarted" />
       <keyword name="HelpSearchWidget.contextMenuEvent" id="HelpSearchWidget.contextMenuEvent" ref="eric6.Helpviewer.HelpSearchWidget.html#HelpSearchWidget.contextMenuEvent" />
       <keyword name="HelpSearchWidget.contextMenuEvent" id="HelpSearchWidget.contextMenuEvent" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html#HelpSearchWidget.contextMenuEvent" />
-      <keyword name="HelpSearchWidget.eventFilter" id="HelpSearchWidget.eventFilter" ref="eric6.Helpviewer.HelpSearchWidget.html#HelpSearchWidget.eventFilter" />
-      <keyword name="HelpSearchWidget.eventFilter" id="HelpSearchWidget.eventFilter" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html#HelpSearchWidget.eventFilter" />
       <keyword name="HelpSearchWidget.keyPressEvent" id="HelpSearchWidget.keyPressEvent" ref="eric6.Helpviewer.HelpSearchWidget.html#HelpSearchWidget.keyPressEvent" />
       <keyword name="HelpSearchWidget.keyPressEvent" id="HelpSearchWidget.keyPressEvent" ref="eric6.WebBrowser.QtHelp.HelpSearchWidget.html#HelpSearchWidget.keyPressEvent" />
       <keyword name="HelpSnap (Module)" id="HelpSnap (Module)" ref="eric6.Helpviewer.HelpSnap.html" />
@@ -6510,10 +6514,10 @@
       <keyword name="HelpTocWidget.__contentsCreated" id="HelpTocWidget.__contentsCreated" ref="eric6.WebBrowser.QtHelp.HelpTocWidget.html#HelpTocWidget.__contentsCreated" />
       <keyword name="HelpTocWidget.__expandTOC" id="HelpTocWidget.__expandTOC" ref="eric6.Helpviewer.HelpTocWidget.html#HelpTocWidget.__expandTOC" />
       <keyword name="HelpTocWidget.__expandTOC" id="HelpTocWidget.__expandTOC" ref="eric6.WebBrowser.QtHelp.HelpTocWidget.html#HelpTocWidget.__expandTOC" />
+      <keyword name="HelpTocWidget.__linkActivated" id="HelpTocWidget.__linkActivated" ref="eric6.Helpviewer.HelpTocWidget.html#HelpTocWidget.__linkActivated" />
+      <keyword name="HelpTocWidget.__linkActivated" id="HelpTocWidget.__linkActivated" ref="eric6.WebBrowser.QtHelp.HelpTocWidget.html#HelpTocWidget.__linkActivated" />
       <keyword name="HelpTocWidget.__showContextMenu" id="HelpTocWidget.__showContextMenu" ref="eric6.Helpviewer.HelpTocWidget.html#HelpTocWidget.__showContextMenu" />
       <keyword name="HelpTocWidget.__showContextMenu" id="HelpTocWidget.__showContextMenu" ref="eric6.WebBrowser.QtHelp.HelpTocWidget.html#HelpTocWidget.__showContextMenu" />
-      <keyword name="HelpTocWidget.eventFilter" id="HelpTocWidget.eventFilter" ref="eric6.Helpviewer.HelpTocWidget.html#HelpTocWidget.eventFilter" />
-      <keyword name="HelpTocWidget.eventFilter" id="HelpTocWidget.eventFilter" ref="eric6.WebBrowser.QtHelp.HelpTocWidget.html#HelpTocWidget.eventFilter" />
       <keyword name="HelpTocWidget.expandToDepth" id="HelpTocWidget.expandToDepth" ref="eric6.Helpviewer.HelpTocWidget.html#HelpTocWidget.expandToDepth" />
       <keyword name="HelpTocWidget.expandToDepth" id="HelpTocWidget.expandToDepth" ref="eric6.WebBrowser.QtHelp.HelpTocWidget.html#HelpTocWidget.expandToDepth" />
       <keyword name="HelpTocWidget.focusInEvent" id="HelpTocWidget.focusInEvent" ref="eric6.Helpviewer.HelpTocWidget.html#HelpTocWidget.focusInEvent" />
@@ -16699,36 +16703,6 @@
       <file>eric6.DebugClients.Python.ThreadExtension.html</file>
       <file>eric6.DebugClients.Python.eric6dbgstub.html</file>
       <file>eric6.DebugClients.Python.getpass.html</file>
-      <file>eric6.DebugClients.Python2.AsyncFile.html</file>
-      <file>eric6.DebugClients.Python2.DCTestResult.html</file>
-      <file>eric6.DebugClients.Python2.DebugBase.html</file>
-      <file>eric6.DebugClients.Python2.DebugClient.html</file>
-      <file>eric6.DebugClients.Python2.DebugClientBase.html</file>
-      <file>eric6.DebugClients.Python2.DebugClientCapabilities.html</file>
-      <file>eric6.DebugClients.Python2.DebugClientThreads.html</file>
-      <file>eric6.DebugClients.Python2.DebugConfig.html</file>
-      <file>eric6.DebugClients.Python2.DebugThread.html</file>
-      <file>eric6.DebugClients.Python2.DebugUtilities.html</file>
-      <file>eric6.DebugClients.Python2.DebugVariables.html</file>
-      <file>eric6.DebugClients.Python2.FlexCompleter.html</file>
-      <file>eric6.DebugClients.Python2.PyProfile.html</file>
-      <file>eric6.DebugClients.Python2.eric6dbgstub.html</file>
-      <file>eric6.DebugClients.Python2.getpass.html</file>
-      <file>eric6.DebugClients.Python3.AsyncFile.html</file>
-      <file>eric6.DebugClients.Python3.DCTestResult.html</file>
-      <file>eric6.DebugClients.Python3.DebugBase.html</file>
-      <file>eric6.DebugClients.Python3.DebugClient.html</file>
-      <file>eric6.DebugClients.Python3.DebugClientBase.html</file>
-      <file>eric6.DebugClients.Python3.DebugClientCapabilities.html</file>
-      <file>eric6.DebugClients.Python3.DebugClientThreads.html</file>
-      <file>eric6.DebugClients.Python3.DebugConfig.html</file>
-      <file>eric6.DebugClients.Python3.DebugThread.html</file>
-      <file>eric6.DebugClients.Python3.DebugUtilities.html</file>
-      <file>eric6.DebugClients.Python3.DebugVariables.html</file>
-      <file>eric6.DebugClients.Python3.FlexCompleter.html</file>
-      <file>eric6.DebugClients.Python3.PyProfile.html</file>
-      <file>eric6.DebugClients.Python3.eric6dbgstub.html</file>
-      <file>eric6.DebugClients.Python3.getpass.html</file>
       <file>eric6.Debugger.BreakPointModel.html</file>
       <file>eric6.Debugger.BreakPointViewer.html</file>
       <file>eric6.Debugger.CallStackViewer.html</file>
@@ -17731,8 +17705,6 @@
       <file>index-eric6.Cooperation.html</file>
       <file>index-eric6.DataViews.html</file>
       <file>index-eric6.DebugClients.Python.html</file>
-      <file>index-eric6.DebugClients.Python2.html</file>
-      <file>index-eric6.DebugClients.Python3.html</file>
       <file>index-eric6.DebugClients.html</file>
       <file>index-eric6.Debugger.html</file>
       <file>index-eric6.DocumentationTools.html</file>
--- a/Documentation/Source/eric6.Helpviewer.HelpIndexWidget.html	Mon Oct 17 18:57:24 2016 +0200
+++ b/Documentation/Source/eric6.Helpviewer.HelpIndexWidget.html	Mon Oct 17 19:51:51 2016 +0200
@@ -73,9 +73,6 @@
 <td><a href="#HelpIndexWidget.__init__">HelpIndexWidget</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#HelpIndexWidget.__activated">__activated</a></td>
-<td>Private slot to handle the activation of a keyword entry.</td>
-</tr><tr>
 <td><a href="#HelpIndexWidget.__disableSearchEdit">__disableSearchEdit</a></td>
 <td>Private slot to enable the search edit.</td>
 </tr><tr>
@@ -85,6 +82,18 @@
 <td><a href="#HelpIndexWidget.__filterIndices">__filterIndices</a></td>
 <td>Private slot to filter the indices according to the given filter.</td>
 </tr><tr>
+<td><a href="#HelpIndexWidget.__linkActivated">__linkActivated</a></td>
+<td>Private slot to handle the activation of a keyword entry.</td>
+</tr><tr>
+<td><a href="#HelpIndexWidget.__linksActivated">__linksActivated</a></td>
+<td>Private slot to handle the activation of an entry with multiple links.</td>
+</tr><tr>
+<td><a href="#HelpIndexWidget.__selectLink">__selectLink</a></td>
+<td>Private method to give the user a chance to select among the returned links.</td>
+</tr><tr>
+<td><a href="#HelpIndexWidget.__showContextMenu">__showContextMenu</a></td>
+<td>Private slot showing the context menu.</td>
+</tr><tr>
 <td><a href="#HelpIndexWidget.eventFilter">eventFilter</a></td>
 <td>Public method called to filter the event queue.</td>
 </tr><tr>
@@ -112,16 +121,6 @@
 <dd>
 reference to the parent widget (QWidget)
 </dd>
-</dl><a NAME="HelpIndexWidget.__activated" ID="HelpIndexWidget.__activated"></a>
-<h4>HelpIndexWidget.__activated</h4>
-<b>__activated</b>(<i>idx</i>)
-<p>
-        Private slot to handle the activation of a keyword entry.
-</p><dl>
-<dt><i>idx</i></dt>
-<dd>
-index of the activated entry (QModelIndex)
-</dd>
 </dl><a NAME="HelpIndexWidget.__disableSearchEdit" ID="HelpIndexWidget.__disableSearchEdit"></a>
 <h4>HelpIndexWidget.__disableSearchEdit</h4>
 <b>__disableSearchEdit</b>(<i></i>)
@@ -142,6 +141,69 @@
 <dd>
 filter to be used (string)
 </dd>
+</dl><a NAME="HelpIndexWidget.__linkActivated" ID="HelpIndexWidget.__linkActivated"></a>
+<h4>HelpIndexWidget.__linkActivated</h4>
+<b>__linkActivated</b>(<i>url, keyword, modifiers=None</i>)
+<p>
+        Private slot to handle the activation of a keyword entry.
+</p><dl>
+<dt><i>url</i> (QUrl)</dt>
+<dd>
+URL of the selected entry
+</dd><dt><i>keyword</i> (str)</dt>
+<dd>
+keyword for the URL
+</dd><dt><i>modifiers=</i> (Qt.KeyboardModifiers or None)</dt>
+<dd>
+keyboard modifiers
+</dd>
+</dl><a NAME="HelpIndexWidget.__linksActivated" ID="HelpIndexWidget.__linksActivated"></a>
+<h4>HelpIndexWidget.__linksActivated</h4>
+<b>__linksActivated</b>(<i>links, keyword</i>)
+<p>
+        Private slot to handle the activation of an entry with multiple links.
+</p><dl>
+<dt><i>links</i> (dict of key:str and value:QUrl)</dt>
+<dd>
+dictionary containing the links
+</dd><dt><i>keyword</i> (str)</dt>
+<dd>
+keyword for the entry
+</dd>
+</dl><a NAME="HelpIndexWidget.__selectLink" ID="HelpIndexWidget.__selectLink"></a>
+<h4>HelpIndexWidget.__selectLink</h4>
+<b>__selectLink</b>(<i>links, keyword</i>)
+<p>
+        Private method to give the user a chance to select among the
+        returned links.
+</p><dl>
+<dt><i>links</i> (dictionary of str (key) and QUrl (value))</dt>
+<dd>
+dictionary of document title and URL to select from
+</dd><dt><i>keyword</i> (str)</dt>
+<dd>
+keyword for the link set
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+selected link
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QUrl
+</dd>
+</dl><a NAME="HelpIndexWidget.__showContextMenu" ID="HelpIndexWidget.__showContextMenu"></a>
+<h4>HelpIndexWidget.__showContextMenu</h4>
+<b>__showContextMenu</b>(<i>pos</i>)
+<p>
+        Private slot showing the context menu.
+</p><dl>
+<dt><i>pos</i></dt>
+<dd>
+position to show the menu at (QPoint)
+</dd>
 </dl><a NAME="HelpIndexWidget.eventFilter" ID="HelpIndexWidget.eventFilter"></a>
 <h4>HelpIndexWidget.eventFilter</h4>
 <b>eventFilter</b>(<i>watched, event</i>)
--- a/Documentation/Source/eric6.Helpviewer.HelpSearchWidget.html	Mon Oct 17 18:57:24 2016 +0200
+++ b/Documentation/Source/eric6.Helpviewer.HelpSearchWidget.html	Mon Oct 17 19:51:51 2016 +0200
@@ -69,6 +69,9 @@
 <td><a href="#HelpSearchWidget.__init__">HelpSearchWidget</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#HelpSearchWidget.__linkActivated">__linkActivated</a></td>
+<td>Private slot handling the activation of an entry.</td>
+</tr><tr>
 <td><a href="#HelpSearchWidget.__search">__search</a></td>
 <td>Private slot to perform a search of the database.</td>
 </tr><tr>
@@ -81,9 +84,6 @@
 <td><a href="#HelpSearchWidget.contextMenuEvent">contextMenuEvent</a></td>
 <td>Protected method handling context menu events.</td>
 </tr><tr>
-<td><a href="#HelpSearchWidget.eventFilter">eventFilter</a></td>
-<td>Public method called to filter the event queue.</td>
-</tr><tr>
 <td><a href="#HelpSearchWidget.keyPressEvent">keyPressEvent</a></td>
 <td>Protected method handling key press events.</td>
 </tr>
@@ -108,6 +108,16 @@
 <dd>
 reference to the parent widget (QWidget)
 </dd>
+</dl><a NAME="HelpSearchWidget.__linkActivated" ID="HelpSearchWidget.__linkActivated"></a>
+<h4>HelpSearchWidget.__linkActivated</h4>
+<b>__linkActivated</b>(<i>url</i>)
+<p>
+        Private slot handling the activation of an entry.
+</p><dl>
+<dt><i>url</i> (QUrl)</dt>
+<dd>
+URL of the activated entry
+</dd>
 </dl><a NAME="HelpSearchWidget.__search" ID="HelpSearchWidget.__search"></a>
 <h4>HelpSearchWidget.__search</h4>
 <b>__search</b>(<i></i>)
@@ -138,24 +148,6 @@
 <dd>
 reference to the context menu event (QContextMenuEvent)
 </dd>
-</dl><a NAME="HelpSearchWidget.eventFilter" ID="HelpSearchWidget.eventFilter"></a>
-<h4>HelpSearchWidget.eventFilter</h4>
-<b>eventFilter</b>(<i>watched, event</i>)
-<p>
-        Public method called to filter the event queue.
-</p><dl>
-<dt><i>watched</i></dt>
-<dd>
-the QObject being watched (QObject)
-</dd><dt><i>event</i></dt>
-<dd>
-the event that occurred (QEvent)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating whether the event was handled (boolean)
-</dd>
 </dl><a NAME="HelpSearchWidget.keyPressEvent" ID="HelpSearchWidget.keyPressEvent"></a>
 <h4>HelpSearchWidget.keyPressEvent</h4>
 <b>keyPressEvent</b>(<i>evt</i>)
--- a/Documentation/Source/eric6.Helpviewer.HelpTocWidget.html	Mon Oct 17 18:57:24 2016 +0200
+++ b/Documentation/Source/eric6.Helpviewer.HelpTocWidget.html	Mon Oct 17 19:51:51 2016 +0200
@@ -72,12 +72,12 @@
 <td><a href="#HelpTocWidget.__expandTOC">__expandTOC</a></td>
 <td>Private slot to expand the table of contents.</td>
 </tr><tr>
+<td><a href="#HelpTocWidget.__linkActivated">__linkActivated</a></td>
+<td>Private slot handling the activation of an entry.</td>
+</tr><tr>
 <td><a href="#HelpTocWidget.__showContextMenu">__showContextMenu</a></td>
 <td>Private slot showing the context menu.</td>
 </tr><tr>
-<td><a href="#HelpTocWidget.eventFilter">eventFilter</a></td>
-<td>Public method called to filter the event queue.</td>
-</tr><tr>
 <td><a href="#HelpTocWidget.expandToDepth">expandToDepth</a></td>
 <td>Public slot to expand the table of contents to a specific depth.</td>
 </tr><tr>
@@ -119,7 +119,17 @@
 <b>__expandTOC</b>(<i></i>)
 <p>
         Private slot to expand the table of contents.
-</p><a NAME="HelpTocWidget.__showContextMenu" ID="HelpTocWidget.__showContextMenu"></a>
+</p><a NAME="HelpTocWidget.__linkActivated" ID="HelpTocWidget.__linkActivated"></a>
+<h4>HelpTocWidget.__linkActivated</h4>
+<b>__linkActivated</b>(<i>url</i>)
+<p>
+        Private slot handling the activation of an entry.
+</p><dl>
+<dt><i>url</i> (QUrl)</dt>
+<dd>
+URL of the activated entry
+</dd>
+</dl><a NAME="HelpTocWidget.__showContextMenu" ID="HelpTocWidget.__showContextMenu"></a>
 <h4>HelpTocWidget.__showContextMenu</h4>
 <b>__showContextMenu</b>(<i>pos</i>)
 <p>
@@ -129,24 +139,6 @@
 <dd>
 position to show the menu at (QPoint)
 </dd>
-</dl><a NAME="HelpTocWidget.eventFilter" ID="HelpTocWidget.eventFilter"></a>
-<h4>HelpTocWidget.eventFilter</h4>
-<b>eventFilter</b>(<i>watched, event</i>)
-<p>
-        Public method called to filter the event queue.
-</p><dl>
-<dt><i>watched</i></dt>
-<dd>
-the QObject being watched (QObject)
-</dd><dt><i>event</i></dt>
-<dd>
-the event that occurred (QEvent)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating whether the event was handled (boolean)
-</dd>
 </dl><a NAME="HelpTocWidget.expandToDepth" ID="HelpTocWidget.expandToDepth"></a>
 <h4>HelpTocWidget.expandToDepth</h4>
 <b>expandToDepth</b>(<i>depth</i>)
--- a/Documentation/Source/eric6.WebBrowser.QtHelp.HelpIndexWidget.html	Mon Oct 17 18:57:24 2016 +0200
+++ b/Documentation/Source/eric6.WebBrowser.QtHelp.HelpIndexWidget.html	Mon Oct 17 19:51:51 2016 +0200
@@ -79,9 +79,6 @@
 <td><a href="#HelpIndexWidget.__init__">HelpIndexWidget</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#HelpIndexWidget.__activated">__activated</a></td>
-<td>Private slot to handle the activation of a keyword entry.</td>
-</tr><tr>
 <td><a href="#HelpIndexWidget.__disableSearchEdit">__disableSearchEdit</a></td>
 <td>Private slot to enable the search edit.</td>
 </tr><tr>
@@ -91,6 +88,12 @@
 <td><a href="#HelpIndexWidget.__filterIndices">__filterIndices</a></td>
 <td>Private slot to filter the indices according to the given filter.</td>
 </tr><tr>
+<td><a href="#HelpIndexWidget.__linkActivated">__linkActivated</a></td>
+<td>Private slot to handle the activation of a keyword entry.</td>
+</tr><tr>
+<td><a href="#HelpIndexWidget.__linksActivated">__linksActivated</a></td>
+<td>Private slot to handle the activation of an entry with multiple links.</td>
+</tr><tr>
 <td><a href="#HelpIndexWidget.__selectLink">__selectLink</a></td>
 <td>Private method to give the user a chance to select among the returned links.</td>
 </tr><tr>
@@ -121,19 +124,6 @@
 <dd>
 reference to the parent widget (QWidget)
 </dd>
-</dl><a NAME="HelpIndexWidget.__activated" ID="HelpIndexWidget.__activated"></a>
-<h4>HelpIndexWidget.__activated</h4>
-<b>__activated</b>(<i>idx, midButton=False</i>)
-<p>
-        Private slot to handle the activation of a keyword entry.
-</p><dl>
-<dt><i>idx</i> (QModelIndex)</dt>
-<dd>
-index of the activated entry
-</dd><dt><i>midButton</i> (bool)</dt>
-<dd>
-flag indicating a middle mouse button release
-</dd>
 </dl><a NAME="HelpIndexWidget.__disableSearchEdit" ID="HelpIndexWidget.__disableSearchEdit"></a>
 <h4>HelpIndexWidget.__disableSearchEdit</h4>
 <b>__disableSearchEdit</b>(<i></i>)
@@ -154,6 +144,35 @@
 <dd>
 filter to be used (string)
 </dd>
+</dl><a NAME="HelpIndexWidget.__linkActivated" ID="HelpIndexWidget.__linkActivated"></a>
+<h4>HelpIndexWidget.__linkActivated</h4>
+<b>__linkActivated</b>(<i>url, keyword, modifiers=None</i>)
+<p>
+        Private slot to handle the activation of a keyword entry.
+</p><dl>
+<dt><i>url</i> (QUrl)</dt>
+<dd>
+URL of the selected entry
+</dd><dt><i>keyword</i> (str)</dt>
+<dd>
+keyword for the URL
+</dd><dt><i>modifiers=</i> (Qt.KeyboardModifiers or None)</dt>
+<dd>
+keyboard modifiers
+</dd>
+</dl><a NAME="HelpIndexWidget.__linksActivated" ID="HelpIndexWidget.__linksActivated"></a>
+<h4>HelpIndexWidget.__linksActivated</h4>
+<b>__linksActivated</b>(<i>links, keyword</i>)
+<p>
+        Private slot to handle the activation of an entry with multiple links.
+</p><dl>
+<dt><i>links</i> (dict of key:str and value:QUrl)</dt>
+<dd>
+dictionary containing the links
+</dd><dt><i>keyword</i> (str)</dt>
+<dd>
+keyword for the entry
+</dd>
 </dl><a NAME="HelpIndexWidget.__selectLink" ID="HelpIndexWidget.__selectLink"></a>
 <h4>HelpIndexWidget.__selectLink</h4>
 <b>__selectLink</b>(<i>links, keyword</i>)
--- a/Documentation/Source/eric6.WebBrowser.QtHelp.HelpSearchWidget.html	Mon Oct 17 18:57:24 2016 +0200
+++ b/Documentation/Source/eric6.WebBrowser.QtHelp.HelpSearchWidget.html	Mon Oct 17 19:51:51 2016 +0200
@@ -82,6 +82,9 @@
 <td><a href="#HelpSearchWidget.__init__">HelpSearchWidget</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#HelpSearchWidget.__linkActivated">__linkActivated</a></td>
+<td>Private slot handling the activation of an entry.</td>
+</tr><tr>
 <td><a href="#HelpSearchWidget.__search">__search</a></td>
 <td>Private slot to perform a search of the database.</td>
 </tr><tr>
@@ -94,9 +97,6 @@
 <td><a href="#HelpSearchWidget.contextMenuEvent">contextMenuEvent</a></td>
 <td>Protected method handling context menu events.</td>
 </tr><tr>
-<td><a href="#HelpSearchWidget.eventFilter">eventFilter</a></td>
-<td>Public method called to filter the event queue.</td>
-</tr><tr>
 <td><a href="#HelpSearchWidget.keyPressEvent">keyPressEvent</a></td>
 <td>Protected method handling key press events.</td>
 </tr>
@@ -118,6 +118,16 @@
 <dd>
 reference to the parent widget (QWidget)
 </dd>
+</dl><a NAME="HelpSearchWidget.__linkActivated" ID="HelpSearchWidget.__linkActivated"></a>
+<h4>HelpSearchWidget.__linkActivated</h4>
+<b>__linkActivated</b>(<i>url</i>)
+<p>
+        Private slot handling the activation of an entry.
+</p><dl>
+<dt><i>url</i> (QUrl)</dt>
+<dd>
+URL of the activated entry
+</dd>
 </dl><a NAME="HelpSearchWidget.__search" ID="HelpSearchWidget.__search"></a>
 <h4>HelpSearchWidget.__search</h4>
 <b>__search</b>(<i></i>)
@@ -148,24 +158,6 @@
 <dd>
 reference to the context menu event (QContextMenuEvent)
 </dd>
-</dl><a NAME="HelpSearchWidget.eventFilter" ID="HelpSearchWidget.eventFilter"></a>
-<h4>HelpSearchWidget.eventFilter</h4>
-<b>eventFilter</b>(<i>watched, event</i>)
-<p>
-        Public method called to filter the event queue.
-</p><dl>
-<dt><i>watched</i></dt>
-<dd>
-the QObject being watched (QObject)
-</dd><dt><i>event</i></dt>
-<dd>
-the event that occurred (QEvent)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating whether the event was handled (boolean)
-</dd>
 </dl><a NAME="HelpSearchWidget.keyPressEvent" ID="HelpSearchWidget.keyPressEvent"></a>
 <h4>HelpSearchWidget.keyPressEvent</h4>
 <b>keyPressEvent</b>(<i>evt</i>)
--- a/Documentation/Source/eric6.WebBrowser.QtHelp.HelpTocWidget.html	Mon Oct 17 18:57:24 2016 +0200
+++ b/Documentation/Source/eric6.WebBrowser.QtHelp.HelpTocWidget.html	Mon Oct 17 19:51:51 2016 +0200
@@ -85,12 +85,12 @@
 <td><a href="#HelpTocWidget.__expandTOC">__expandTOC</a></td>
 <td>Private slot to expand the table of contents.</td>
 </tr><tr>
+<td><a href="#HelpTocWidget.__linkActivated">__linkActivated</a></td>
+<td>Private slot handling the activation of an entry.</td>
+</tr><tr>
 <td><a href="#HelpTocWidget.__showContextMenu">__showContextMenu</a></td>
 <td>Private slot showing the context menu.</td>
 </tr><tr>
-<td><a href="#HelpTocWidget.eventFilter">eventFilter</a></td>
-<td>Public method called to filter the event queue.</td>
-</tr><tr>
 <td><a href="#HelpTocWidget.expandToDepth">expandToDepth</a></td>
 <td>Public slot to expand the table of contents to a specific depth.</td>
 </tr><tr>
@@ -131,7 +131,17 @@
 <b>__expandTOC</b>(<i></i>)
 <p>
         Private slot to expand the table of contents.
-</p><a NAME="HelpTocWidget.__showContextMenu" ID="HelpTocWidget.__showContextMenu"></a>
+</p><a NAME="HelpTocWidget.__linkActivated" ID="HelpTocWidget.__linkActivated"></a>
+<h4>HelpTocWidget.__linkActivated</h4>
+<b>__linkActivated</b>(<i>url</i>)
+<p>
+        Private slot handling the activation of an entry.
+</p><dl>
+<dt><i>url</i> (QUrl)</dt>
+<dd>
+URL of the activated entry
+</dd>
+</dl><a NAME="HelpTocWidget.__showContextMenu" ID="HelpTocWidget.__showContextMenu"></a>
 <h4>HelpTocWidget.__showContextMenu</h4>
 <b>__showContextMenu</b>(<i>pos</i>)
 <p>
@@ -141,24 +151,6 @@
 <dd>
 position to show the menu at (QPoint)
 </dd>
-</dl><a NAME="HelpTocWidget.eventFilter" ID="HelpTocWidget.eventFilter"></a>
-<h4>HelpTocWidget.eventFilter</h4>
-<b>eventFilter</b>(<i>watched, event</i>)
-<p>
-        Public method called to filter the event queue.
-</p><dl>
-<dt><i>watched</i></dt>
-<dd>
-the QObject being watched (QObject)
-</dd><dt><i>event</i></dt>
-<dd>
-the event that occurred (QEvent)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating whether the event was handled (boolean)
-</dd>
 </dl><a NAME="HelpTocWidget.expandToDepth" ID="HelpTocWidget.expandToDepth"></a>
 <h4>HelpTocWidget.expandToDepth</h4>
 <b>expandToDepth</b>(<i>depth</i>)
--- a/Helpviewer/HelpIndexWidget.py	Mon Oct 17 18:57:24 2016 +0200
+++ b/Helpviewer/HelpIndexWidget.py	Mon Oct 17 19:51:51 2016 +0200
@@ -9,9 +9,9 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QUrl, QEvent
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QEvent
 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QMenu, \
-    QDialog
+    QDialog, QApplication
 
 
 class HelpIndexWidget(QWidget):
@@ -54,32 +54,73 @@
         self.__layout.addWidget(self.__searchEdit)
         
         self.__index = self.__engine.indexWidget()
-        self.__index.installEventFilter(self)
+        self.__index.setContextMenuPolicy(Qt.CustomContextMenu)
         self.__engine.indexModel().indexCreationStarted.connect(
             self.__disableSearchEdit)
         self.__engine.indexModel().indexCreated.connect(
             self.__enableSearchEdit)
-        self.__index.activated.connect(self.__activated)
+        self.__index.linkActivated.connect(self.__linkActivated)
+        self.__index.linksActivated.connect(self.__linksActivated)
+        self.__index.customContextMenuRequested.connect(
+            self.__showContextMenu)
         self.__searchEdit.returnPressed.connect(
             self.__index.activateCurrentItem)
         self.__layout.addWidget(self.__index)
-        
-        self.__index.viewport().installEventFilter(self)
     
-    def __activated(self, idx):
+    @pyqtSlot(QUrl, str)
+    def __linkActivated(self, url, keyword, modifiers=None):
         """
         Private slot to handle the activation of a keyword entry.
         
-        @param idx index of the activated entry (QModelIndex)
+        @param url URL of the selected entry
+        @type QUrl
+        @param keyword keyword for the URL
+        @type str
+        @keyparam modifiers keyboard modifiers
+        @type Qt.KeyboardModifiers or None
+        """
+        if modifiers is None:
+            modifiers = QApplication.keyboardModifiers()
+        if not url.isEmpty() and url.isValid():
+            if modifiers & Qt.ControlModifier:
+                self.__mw.newTab(url)
+            else:
+                self.linkActivated.emit(url)
+    
+    def __linksActivated(self, links, keyword):
+        """
+        Private slot to handle the activation of an entry with multiple links.
+        
+        @param links dictionary containing the links
+        @type dict of key:str and value:QUrl
+        @param keyword keyword for the entry
+        @type str
         """
-        model = self.__index.model()
-        if model is not None:
-            keyword = model.data(idx, Qt.DisplayRole)
-            links = model.linksForKeyword(keyword)
-            if len(links) == 1:
-                self.linkActivated.emit(QUrl(links[list(links.keys())[0]]))
-            else:
-                self.linksActivated.emit(links, keyword)
+        modifiers = QApplication.keyboardModifiers()
+        if len(links) == 1:
+            url = QUrl(links[list(links.keys())[0]])
+        else:
+            url = self.__selectLink(links, keyword)
+        self.__linkActivated(url, keyword, modifiers)
+    
+    def __selectLink(self, links, keyword):
+        """
+        Private method to give the user a chance to select among the
+        returned links.
+        
+        @param links dictionary of document title and URL to select from
+        @type dictionary of str (key) and QUrl (value)
+        @param keyword keyword for the link set
+        @type str
+        @return selected link
+        @rtype QUrl
+        """
+        link = QUrl()
+        from .HelpTopicDialog import HelpTopicDialog
+        dlg = HelpTopicDialog(self, keyword, links)
+        if dlg.exec_() == QDialog.Accepted:
+            link = dlg.link()
+        return link
     
     def __filterIndices(self, filter):
         """
@@ -138,44 +179,34 @@
                     self.__index.setCurrentIndex(idx)
             elif event.key() == Qt.Key_Escape:
                 self.escapePressed.emit()
-        elif self.__index and watched == self.__index and \
-                event.type() == QEvent.ContextMenu:
-            idx = self.__index.indexAt(event.pos())
-            if idx.isValid():
-                menu = QMenu()
-                curTab = menu.addAction(self.tr("Open Link"))
-                newTab = menu.addAction(self.tr("Open Link in New Tab"))
-                menu.move(self.__index.mapToGlobal(event.pos()))
-                
-                act = menu.exec_()
-                if act == curTab:
-                    self.__activated(idx)
-                elif act == newTab:
-                    model = self.__index.model()
-                    if model is not None:
-                        keyword = model.data(idx, Qt.DisplayRole)
-                        links = model.linksForKeyword(keyword)
-                        if len(links) == 1:
-                            self.__mw.newTab(list(links.values())[0])
-                        elif len(links) > 1:
-                            from .HelpTopicDialog import HelpTopicDialog
-                            dlg = HelpTopicDialog(self, keyword, links)
-                            if dlg.exec_() == QDialog.Accepted:
-                                self.__mw.newTab(dlg.link())
-        elif self.__index and watched == self.__index.viewport() and \
-                event.type() == QEvent.MouseButtonRelease:
-            idx = self.__index.indexAt(event.pos())
-            if idx.isValid() and event.button() == Qt.MidButton:
-                model = self.__index.model()
-                if model is not None:
-                    keyword = model.data(idx, Qt.DisplayRole)
-                    links = model.linksForKeyword(keyword)
-                    if len(links) == 1:
-                        self.__mw.newTab(list(links.values())[0])
-                    elif len(links) > 1:
-                        from .HelpTopicDialog import HelpTopicDialog
-                        dlg = HelpTopicDialog(self, keyword, links)
-                        if dlg.exec_() == QDialog.Accepted:
-                            self.__mw.newTab(dlg.link())
         
         return QWidget.eventFilter(self, watched, event)
+    
+    def __showContextMenu(self, pos):
+        """
+        Private slot showing the context menu.
+        
+        @param pos position to show the menu at (QPoint)
+        """
+        idx = self.__index.indexAt(pos)
+        if idx.isValid():
+            menu = QMenu()
+            curTab = menu.addAction(self.tr("Open Link"))
+            newTab = menu.addAction(self.tr("Open Link in New Tab"))
+            menu.move(self.__index.mapToGlobal(pos))
+            
+            act = menu.exec_()
+            model = self.__index.model()
+            if model is not None:
+                keyword = model.data(idx, Qt.DisplayRole)
+                links = model.linksForKeyword(keyword)
+                if len(links) == 1:
+                    link = QUrl(links[list(links.keys())[0]])
+                else:
+                    link = self.__selectLink(links, keyword)
+                
+                if not link.isEmpty() and link.isValid():
+                    if act == curTab:
+                        self.linkActivated.emit(link)
+                    elif act == newTab:
+                        self.__mw.newTab(link)
--- a/Helpviewer/HelpSearchWidget.py	Mon Oct 17 18:57:24 2016 +0200
+++ b/Helpviewer/HelpSearchWidget.py	Mon Oct 17 19:51:51 2016 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QEvent, QUrl
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl
 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QTextBrowser, QApplication, \
     QMenu
 
@@ -48,14 +48,12 @@
         self.setFocusProxy(self.__query)
         
         self.__query.search.connect(self.__search)
-        self.__result.requestShowLink.connect(self.linkActivated)
+        self.__result.requestShowLink.connect(self.__linkActivated)
         
         self.__engine.searchingStarted.connect(self.__searchingStarted)
         self.__engine.searchingFinished.connect(self.__searchingFinished)
         
         self.__browser = self.__result.findChildren(QTextBrowser)[0]
-        if self.__browser:
-            self.__browser.viewport().installEventFilter(self)
     
     def __search(self):
         """
@@ -78,24 +76,25 @@
         """
         QApplication.restoreOverrideCursor()
     
-    def eventFilter(self, watched, event):
+    @pyqtSlot(QUrl)
+    def __linkActivated(self, url):
         """
-        Public method called to filter the event queue.
+        Private slot handling the activation of an entry.
         
-        @param watched the QObject being watched (QObject)
-        @param event the event that occurred (QEvent)
-        @return flag indicating whether the event was handled (boolean)
+        @param url URL of the activated entry
+        @type QUrl
         """
-        if self.__browser and watched == self.__browser.viewport() and \
-           event.type() == QEvent.MouseButtonRelease:
-            link = self.__result.linkAt(event.pos())
-            if not link.isEmpty() and link.isValid():
-                ctrl = event.modifiers() & Qt.ControlModifier
-                if (event.button() == Qt.LeftButton and ctrl) or \
-                   event.button() == Qt.MidButton:
-                    self.__mw.newTab(link)
-        
-        return QWidget.eventFilter(self, watched, event)
+        if not url.isEmpty() and url.isValid():
+            buttons = QApplication.mouseButtons()
+            modifiers = QApplication.keyboardModifiers()
+            
+            if buttons & Qt.MidButton:
+                self.__mw.newTab(url)
+            else:
+                if modifiers & Qt.ControlModifier:
+                    self.__mw.newTab(url)
+                else:
+                    self.linkActivated.emit(url)
     
     def keyPressEvent(self, evt):
         """
--- a/Helpviewer/HelpTocWidget.py	Mon Oct 17 18:57:24 2016 +0200
+++ b/Helpviewer/HelpTocWidget.py	Mon Oct 17 19:51:51 2016 +0200
@@ -9,8 +9,8 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QEvent, QUrl
-from PyQt5.QtWidgets import QWidget, QVBoxLayout, QMenu
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl
+from PyQt5.QtWidgets import QWidget, QVBoxLayout, QMenu, QApplication
 
 
 class HelpTocWidget(QWidget):
@@ -38,7 +38,6 @@
         self.__expandDepth = -2
         
         self.__tocWidget = self.__engine.contentWidget()
-        self.__tocWidget.viewport().installEventFilter(self)
         self.__tocWidget.setContextMenuPolicy(Qt.CustomContextMenu)
         
         self.__layout = QVBoxLayout(self)
@@ -46,11 +45,31 @@
         
         self.__tocWidget.customContextMenuRequested.connect(
             self.__showContextMenu)
-        self.__tocWidget.linkActivated.connect(self.linkActivated)
+        self.__tocWidget.linkActivated.connect(self.__linkActivated)
         
         model = self.__tocWidget.model()
         model.contentsCreated.connect(self.__expandTOC)
     
+    @pyqtSlot(QUrl)
+    def __linkActivated(self, url):
+        """
+        Private slot handling the activation of an entry.
+        
+        @param url URL of the activated entry
+        @type QUrl
+        """
+        if not url.isEmpty() and url.isValid():
+            buttons = QApplication.mouseButtons()
+            modifiers = QApplication.keyboardModifiers()
+            
+            if buttons & Qt.MidButton:
+                self.__mw.newTab(url)
+            else:
+                if modifiers & Qt.ControlModifier:
+                    self.__mw.newTab(url)
+                else:
+                    self.linkActivated.emit(url)
+    
     def __expandTOC(self):
         """
         Private slot to expand the table of contents.
@@ -89,27 +108,6 @@
         if evt.key() == Qt.Key_Escape:
             self.escapePressed.emit()
     
-    def eventFilter(self, watched, event):
-        """
-        Public method called to filter the event queue.
-        
-        @param watched the QObject being watched (QObject)
-        @param event the event that occurred (QEvent)
-        @return flag indicating whether the event was handled (boolean)
-        """
-        if self.__tocWidget and watched == self.__tocWidget.viewport() and \
-           event.type() == QEvent.MouseButtonRelease:
-            if self.__tocWidget.indexAt(event.pos()).isValid() and \
-               event.button() == Qt.LeftButton:
-                self.itemClicked(self.__tocWidget.currentIndex())
-            elif self.__tocWidget.indexAt(event.pos()).isValid() and \
-                    event.button() == Qt.MidButton:
-                model = self.__tocWidget.model()
-                itm = model.contentItemAt(self.__tocWidget.currentIndex())
-                self.__mw.newTab(itm.url())
-        
-        return QWidget.eventFilter(self, watched, event)
-    
     def itemClicked(self, index):
         """
         Public slot handling a click of a TOC entry.
--- a/WebBrowser/QtHelp/HelpIndexWidget.py	Mon Oct 17 18:57:24 2016 +0200
+++ b/WebBrowser/QtHelp/HelpIndexWidget.py	Mon Oct 17 19:51:51 2016 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QUrl, QEvent
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QEvent
 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QMenu, \
     QDialog, QApplication
 
@@ -56,47 +56,60 @@
         self.__layout.addWidget(self.__searchEdit)
         
         self.__index = self.__engine.indexWidget()
-        self.__index.installEventFilter(self)
         self.__index.setContextMenuPolicy(Qt.CustomContextMenu)
         
         self.__engine.indexModel().indexCreationStarted.connect(
             self.__disableSearchEdit)
         self.__engine.indexModel().indexCreated.connect(
             self.__enableSearchEdit)
-        self.__index.activated.connect(self.__activated)
+        self.__index.linkActivated.connect(self.__linkActivated)
+        self.__index.linksActivated.connect(self.__linksActivated)
         self.__index.customContextMenuRequested.connect(
             self.__showContextMenu)
         self.__searchEdit.returnPressed.connect(
             self.__index.activateCurrentItem)
         self.__layout.addWidget(self.__index)
-        
-        self.__index.viewport().installEventFilter(self)
     
-    def __activated(self, idx, midButton=False):
+    @pyqtSlot(QUrl, str)
+    def __linkActivated(self, url, keyword, modifiers=None):
         """
         Private slot to handle the activation of a keyword entry.
         
-        @param idx index of the activated entry
-        @type QModelIndex
-        @param midButton flag indicating a middle mouse button release
-        @type bool
+        @param url URL of the selected entry
+        @type QUrl
+        @param keyword keyword for the URL
+        @type str
+        @keyparam modifiers keyboard modifiers
+        @type Qt.KeyboardModifiers or None
         """
-        model = self.__index.model()
-        if model is not None:
+        if modifiers is None:
             modifiers = QApplication.keyboardModifiers()
-            keyword = model.data(idx, Qt.DisplayRole)
-            links = model.linksForKeyword(keyword)
-            if len(links) == 1:
-                link = QUrl(links[list(links.keys())[0]])
+        if not url.isEmpty() and url.isValid():
+            if modifiers & (Qt.ControlModifier | Qt.ShiftModifier) == \
+                    (Qt.ControlModifier | Qt.ShiftModifier):
+                self.newBackgroundTab.emit(url)
+            elif modifiers & Qt.ControlModifier:
+                self.newTab.emit(url)
+            elif modifiers & Qt.ShiftModifier:
+                self.newWindow.emit(url)
             else:
-                link = self.__selectLink(links, keyword)
-            if not link.isEmpty() and link.isValid():
-                if modifiers & Qt.ControlModifier or midButton:
-                    self.newTab.emit(link)
-                elif modifiers & Qt.ShiftModifier:
-                    self.newWindow.emit(link)
-                else:
-                    self.openUrl.emit(link)
+                self.openUrl.emit(url)
+    
+    def __linksActivated(self, links, keyword):
+        """
+        Private slot to handle the activation of an entry with multiple links.
+        
+        @param links dictionary containing the links
+        @type dict of key:str and value:QUrl
+        @param keyword keyword for the entry
+        @type str
+        """
+        modifiers = QApplication.keyboardModifiers()
+        if len(links) == 1:
+            url = QUrl(links[list(links.keys())[0]])
+        else:
+            url = self.__selectLink(links, keyword)
+        self.__linkActivated(url, keyword, modifiers)
     
     def __selectLink(self, links, keyword):
         """
@@ -174,11 +187,6 @@
                     self.__index.setCurrentIndex(idx)
             elif event.key() == Qt.Key_Escape:
                 self.escapePressed.emit()
-        elif self.__index and watched == self.__index.viewport() and \
-                event.type() == QEvent.MouseButtonRelease:
-            idx = self.__index.indexAt(event.pos())
-            if idx.isValid():
-                self.__activated(idx, midButton=event.button() == Qt.MidButton)
         
         return QWidget.eventFilter(self, watched, event)
     
@@ -208,11 +216,12 @@
                 else:
                     link = self.__selectLink(links, keyword)
                 
-                if act == curTab:
-                    self.openUrl.emit(link)
-                elif act == newTab:
-                    self.newTab.emit(link)
-                elif act == newBackgroundTab:
-                    self.newBackgroundTab.emit(link)
-                elif act == newWindow:
-                    self.newWindow.emit(link)
+                if not link.isEmpty() and link.isValid():
+                    if act == curTab:
+                        self.openUrl.emit(link)
+                    elif act == newTab:
+                        self.newTab.emit(link)
+                    elif act == newBackgroundTab:
+                        self.newBackgroundTab.emit(link)
+                    elif act == newWindow:
+                        self.newWindow.emit(link)
--- a/WebBrowser/QtHelp/HelpSearchWidget.py	Mon Oct 17 18:57:24 2016 +0200
+++ b/WebBrowser/QtHelp/HelpSearchWidget.py	Mon Oct 17 19:51:51 2016 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QEvent, QUrl
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl
 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QTextBrowser, QApplication, \
     QMenu
 
@@ -56,14 +56,12 @@
         self.setFocusProxy(self.__query)
         
         self.__query.search.connect(self.__search)
-        self.__result.requestShowLink.connect(self.openUrl)
+        self.__result.requestShowLink.connect(self.__linkActivated)
         
         self.__engine.searchingStarted.connect(self.__searchingStarted)
         self.__engine.searchingFinished.connect(self.__searchingFinished)
         
         self.__browser = self.__result.findChildren(QTextBrowser)[0]
-        if self.__browser:
-            self.__browser.viewport().installEventFilter(self)
     
     def __search(self):
         """
@@ -86,29 +84,30 @@
         """
         QApplication.restoreOverrideCursor()
     
-    def eventFilter(self, watched, event):
+    @pyqtSlot(QUrl)
+    def __linkActivated(self, url):
         """
-        Public method called to filter the event queue.
+        Private slot handling the activation of an entry.
         
-        @param watched the QObject being watched (QObject)
-        @param event the event that occurred (QEvent)
-        @return flag indicating whether the event was handled (boolean)
+        @param url URL of the activated entry
+        @type QUrl
         """
-        if self.__browser and watched == self.__browser.viewport() and \
-           event.type() == QEvent.MouseButtonRelease:
-            link = self.__result.linkAt(event.pos())
-            if not link.isEmpty() and link.isValid():
-                if event.button() == Qt.LeftButton:
-                    if event.modifiers() & Qt.ControlModifier:
-                        self.newTab.emit(link)
-                    elif event.modifiers() & Qt.ShiftModifier:
-                        self.newWindow.emit(link)
-                    else:
-                        self.openUrl.emit(link)
-                elif event.button() == Qt.MidButton:
-                    self.newTab.emit(link)
-        
-        return QWidget.eventFilter(self, watched, event)
+        if not url.isEmpty() and url.isValid():
+            buttons = QApplication.mouseButtons()
+            modifiers = QApplication.keyboardModifiers()
+            
+            if buttons & Qt.MidButton:
+                self.newTab.emit(url)
+            else:
+                if modifiers & (Qt.ControlModifier | Qt.ShiftModifier) == \
+                        (Qt.ControlModifier | Qt.ShiftModifier):
+                    self.newBackgroundTab.emit(url)
+                elif modifiers & Qt.ControlModifier:
+                    self.newTab.emit(url)
+                elif modifiers & Qt.ShiftModifier:
+                    self.newWindow.emit(url)
+                else:
+                    self.openUrl.emit(url)
     
     def keyPressEvent(self, evt):
         """
--- a/WebBrowser/QtHelp/HelpTocWidget.py	Mon Oct 17 18:57:24 2016 +0200
+++ b/WebBrowser/QtHelp/HelpTocWidget.py	Mon Oct 17 19:51:51 2016 +0200
@@ -9,8 +9,8 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, Qt, QEvent, QUrl
-from PyQt5.QtWidgets import QWidget, QVBoxLayout, QMenu
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl
+from PyQt5.QtWidgets import QWidget, QVBoxLayout, QMenu, QApplication
 
 
 class HelpTocWidget(QWidget):
@@ -43,7 +43,6 @@
         self.__expandDepth = -2
         
         self.__tocWidget = self.__engine.contentWidget()
-        self.__tocWidget.viewport().installEventFilter(self)
         self.__tocWidget.setContextMenuPolicy(Qt.CustomContextMenu)
         self.__tocWidget.setSortingEnabled(True)
         
@@ -52,11 +51,36 @@
         
         self.__tocWidget.customContextMenuRequested.connect(
             self.__showContextMenu)
-        self.__tocWidget.linkActivated.connect(self.openUrl)
+        self.__tocWidget.linkActivated.connect(self.__linkActivated)
         
         model = self.__tocWidget.model()
         model.contentsCreated.connect(self.__contentsCreated)
     
+    @pyqtSlot(QUrl)
+    def __linkActivated(self, url):
+        """
+        Private slot handling the activation of an entry.
+        
+        @param url URL of the activated entry
+        @type QUrl
+        """
+        if not url.isEmpty() and url.isValid():
+            buttons = QApplication.mouseButtons()
+            modifiers = QApplication.keyboardModifiers()
+            
+            if buttons & Qt.MidButton:
+                self.newTab.emit(url)
+            else:
+                if modifiers & (Qt.ControlModifier | Qt.ShiftModifier) == \
+                        (Qt.ControlModifier | Qt.ShiftModifier):
+                    self.newBackgroundTab.emit(url)
+                elif modifiers & Qt.ControlModifier:
+                    self.newTab.emit(url)
+                elif modifiers & Qt.ShiftModifier:
+                    self.newWindow.emit(url)
+                else:
+                    self.openUrl.emit(url)
+    
     def __contentsCreated(self):
         """
         Private slot to be run after the contents was generated.
@@ -102,34 +126,6 @@
         if evt.key() == Qt.Key_Escape:
             self.escapePressed.emit()
     
-    def eventFilter(self, watched, event):
-        """
-        Public method called to filter the event queue.
-        
-        @param watched the QObject being watched (QObject)
-        @param event the event that occurred (QEvent)
-        @return flag indicating whether the event was handled (boolean)
-        """
-        if self.__tocWidget and watched == self.__tocWidget.viewport() and \
-           event.type() == QEvent.MouseButtonRelease:
-            if self.__tocWidget.indexAt(event.pos()).isValid():
-                model = self.__tocWidget.model()
-                itm = model.contentItemAt(self.__tocWidget.currentIndex())
-                if itm:
-                    link = itm.url()
-                    if not link.isEmpty() and link.isValid():
-                        if event.button() == Qt.LeftButton:
-                            if event.modifiers() & Qt.ControlModifier:
-                                self.newTab.emit(link)
-                            elif event.modifiers() & Qt.ShiftModifier:
-                                self.newWindow.emit(link)
-                            else:
-                                self.openUrl.emit(link)
-                        elif event.button() == Qt.MidButton:
-                            self.newTab.emit(link)
-        
-        return QWidget.eventFilter(self, watched, event)
-    
     def syncToContent(self, url):
         """
         Public method to sync the TOC to the displayed page.

eric ide

mercurial