Implemented some work-arounds for strange focus handling on Qt5. 5_4_x

Fri, 31 Jan 2014 12:20:32 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 31 Jan 2014 12:20:32 +0100
branch
5_4_x
changeset 3240
7cb4665c9c05
parent 3239
518f6dcb88e4
child 3245
48311fa7c52c

Implemented some work-arounds for strange focus handling on Qt5.

Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.QScintilla.QsciScintillaCompat.html file | annotate | diff | comparison | revisions
QScintilla/QsciScintillaCompat.py file | annotate | diff | comparison | revisions
Binary file Documentation/Help/source.qch has changed
--- 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
     ###########################################################################
     

eric ide

mercurial