Fri, 31 Jan 2014 12:20:32 +0100
Implemented some work-arounds for strange focus handling on Qt5.
--- a/Documentation/Help/source.qhp Fri Jan 31 12:15:02 2014 +0100 +++ b/Documentation/Help/source.qhp Fri Jan 31 12:20:32 2014 +0100 @@ -9363,6 +9363,7 @@ <keyword name="QsciScintillaCompat" id="QsciScintillaCompat" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat" /> <keyword name="QsciScintillaCompat (Constructor)" id="QsciScintillaCompat (Constructor)" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__init__" /> <keyword name="QsciScintillaCompat (Module)" id="QsciScintillaCompat (Module)" ref="eric5.QScintilla.QsciScintillaCompat.html" /> + <keyword name="QsciScintillaCompat.__completionListSelected" id="QsciScintillaCompat.__completionListSelected" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__completionListSelected" /> <keyword name="QsciScintillaCompat.__doSearchTarget" id="QsciScintillaCompat.__doSearchTarget" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__doSearchTarget" /> <keyword name="QsciScintillaCompat.__setFoldMarker" id="QsciScintillaCompat.__setFoldMarker" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__setFoldMarker" /> <keyword name="QsciScintillaCompat._encodeString" id="QsciScintillaCompat._encodeString" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat._encodeString" />
--- a/Documentation/Source/eric5.QScintilla.QsciScintillaCompat.html Fri Jan 31 12:15:02 2014 +0100 +++ b/Documentation/Source/eric5.QScintilla.QsciScintillaCompat.html Fri Jan 31 12:20:32 2014 +0100 @@ -73,6 +73,9 @@ <td><a href="#QsciScintillaCompat.__init__">QsciScintillaCompat</a></td> <td>Constructor</td> </tr><tr> +<td><a href="#QsciScintillaCompat.__completionListSelected">__completionListSelected</a></td> +<td>Private slot to handle the selection from the completion list.</td> +</tr><tr> <td><a href="#QsciScintillaCompat.__doSearchTarget">__doSearchTarget</a></td> <td>Private method to perform the search in target.</td> </tr><tr> @@ -379,6 +382,24 @@ <dd> parent widget (QWidget) </dd> +</dl><a NAME="QsciScintillaCompat.__completionListSelected" ID="QsciScintillaCompat.__completionListSelected"></a> +<h4>QsciScintillaCompat.__completionListSelected</h4> +<b>__completionListSelected</b>(<i>id, txt</i>) +<p> + Private slot to handle the selection from the completion list. +</p><p> + Note: This works around an issue of some window managers taking + focus away from the application when clicked inside a completion + list but not giving it back when an item is selected via a + double-click. +</p><dl> +<dt><i>id</i></dt> +<dd> +the ID of the user list (integer) +</dd><dt><i>txt</i></dt> +<dd> +the selected text (string) +</dd> </dl><a NAME="QsciScintillaCompat.__doSearchTarget" ID="QsciScintillaCompat.__doSearchTarget"></a> <h4>QsciScintillaCompat.__doSearchTarget</h4> <b>__doSearchTarget</b>(<i></i>)
--- a/QScintilla/QsciScintillaCompat.py Fri Jan 31 12:15:02 2014 +0100 +++ b/QScintilla/QsciScintillaCompat.py Fri Jan 31 12:20:32 2014 +0100 @@ -67,6 +67,8 @@ self.__targetSearchStart = 0 self.__targetSearchEnd = -1 self.__targetSearchActive = False + + self.userListActivated.connect(self.__completionListSelected) def setLexer(self, lex=None): """ @@ -1179,7 +1181,12 @@ @param event event object (QFocusEvent) """ if self.isListActive(): - self.cancelList() + if event.reason() == Qt.ActiveWindowFocusReason: + aw = QApplication.activeWindow() + if aw is None or aw.parent() is not self: + self.cancelList() + else: + self.cancelList() super().focusOutEvent(event) @@ -1261,6 +1268,24 @@ self._encodeString(self.UserSeparator.join(lst))) ########################################################################### + ## work-arounds for buggy behavior + ########################################################################### + + def __completionListSelected(self, id, txt): + """ + Private slot to handle the selection from the completion list. + + Note: This works around an issue of some window managers taking + focus away from the application when clicked inside a completion + list but not giving it back when an item is selected via a + double-click. + + @param id the ID of the user list (integer) + @param txt the selected text (string) + """ + self.activateWindow() + + ########################################################################### ## utility methods ###########################################################################