CodeCompletionHelpView.st
changeset 19182 7ffb45030b04
parent 19181 e82136e9fd16
child 19183 6eaf31e148a9
--- a/CodeCompletionHelpView.st	Sun Sep 15 13:26:52 2019 +0200
+++ b/CodeCompletionHelpView.st	Sun Sep 15 15:17:57 2019 +0200
@@ -16,7 +16,8 @@
 "{ NameSpace: Smalltalk }"
 
 View subclass:#CodeCompletionHelpView
-	instanceVariableNames:'myView editView delayedCloseAction checkAction'
+	instanceVariableNames:'myView editView delayedCloseAction checkAction
+		closeOnPointerLeave pointerEntered'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Help'
@@ -68,6 +69,10 @@
 
 !CodeCompletionHelpView methodsFor:'accessing'!
 
+closeOnPointerLeave:aBoolean
+    closeOnPointerLeave := aBoolean.
+!
+
 editView:aView
     "my code editor view"
 
@@ -91,6 +96,8 @@
     myView borderWidth:0.
     myView origin:(0.0@0.0) corner:(1.0@1.0).
 
+    self enableDelegation.
+
     "Modified: 27.4.1996 / 15:16:46 / cg"
 ! !
 
@@ -198,7 +205,8 @@
         self installDelayedClose.
         ^ true.
     ].
-    
+    self uninstallDelayedClose.
+
 "/    (subViews notNil and:[aView == (subViews firstIfEmpty:nil)]) ifTrue:[
 "/        self topView destroy
 "/    ].
@@ -209,14 +217,26 @@
 !
 
 pointerEnter:state x:x y:y view:view
-    self uninstallDelayedClose.
+    (view isComponentOf:myView) ifTrue:[
+        self uninstallDelayedClose.
+        pointerEntered := true.
+    ].
     ^ false
 
     "Created: / 04-08-2018 / 17:01:39 / Claus Gittinger"
 !
 
 pointerLeave:state view:view
-    self installDelayedClose.
+    (view isComponentOf:myView) ifTrue:[
+        closeOnPointerLeave ifTrue:[
+            pointerEntered == true ifTrue:[
+                pointerEntered := false.
+                self installDelayedClose.
+                ^ false
+            ].
+        ].
+        self halt.
+    ].
     ^ false
 
     "Created: / 04-08-2018 / 16:57:18 / Claus Gittinger"
@@ -224,6 +244,7 @@
 !
 
 uninstallDelayedClose
+    closeOnPointerLeave := true.
     delayedCloseAction notNil ifTrue:[
         Processor removeTimedBlock:delayedCloseAction.
     ].    
@@ -253,6 +274,23 @@
     "Created: / 14-02-2019 / 15:33:26 / Claus Gittinger"
 !
 
+enableDelegation
+    |helpMenuView|
+
+    myView notNil ifTrue:[
+        myView isScrollWrapper ifTrue:[
+            helpMenuView := myView scrolledView
+        ] ifFalse:[
+            helpMenuView := myView
+        ].
+        helpMenuView delegate:self.
+        helpMenuView enableEnterLeaveEvents.
+        helpMenuView enableMotionEvents.
+        helpMenuView enableButtonMotionEvents.
+        helpMenuView enableFocusEvents.
+    ].
+!
+
 initStyle
     "setup viewStyle specifics"
 
@@ -276,15 +314,16 @@
     "Modified: / 26.10.1997 / 17:02:09 / cg"
 !
 
+initialize
+    super initialize.
+    closeOnPointerLeave := true.
+    pointerEntered := false.
+!
+
 realize
     self create.
     "/ self computeShape.
-    self enableMotionEvents.
-    self enableButtonMotionEvents.
-    self enableFocusEvents.
-    self subViews do:[:eachView |
-        eachView delegate:self.
-    ].
+    self enableDelegation.
 
     "/ install a watcher to check for the editView being still present
     "/ from time to time.