DragAndDropManager.st
changeset 1487 6cefff982779
parent 1484 f25e9b6f8edd
child 1490 b2e1f907060c
--- a/DragAndDropManager.st	Sat Jul 28 16:28:13 2001 +0200
+++ b/DragAndDropManager.st	Mon Jul 30 18:05:38 2001 +0200
@@ -16,7 +16,8 @@
 Object subclass:#DragAndDropManager
 	instanceVariableNames:'dropContext dragView dropAction dragOffset handler restoreBlock
 		alienCursor enabledCursor disabledCursor canDrop'
-	classVariableNames:'DragOriginatorQuerySignal DragOffsetQuerySignal'
+	classVariableNames:'DragOriginatorQuerySignal DragOffsetQuerySignal
+		ActiveDragAndDropManagers'
 	poolDictionaries:''
 	category:'Interface-DragAndDrop'
 !
@@ -235,6 +236,7 @@
 initialize
     DragOriginatorQuerySignal := QuerySignal new.
     DragOffsetQuerySignal := QuerySignal new.
+    ActiveDragAndDropManagers := IdentityDictionary new.
 
     "
      self initialize
@@ -261,6 +263,25 @@
     ^ DragOriginatorQuerySignal
 ! !
 
+!DragAndDropManager class methodsFor:'helpers'!
+
+saveDraw:aBlock device:aDevice
+    |activeManager|
+
+    activeManager := ActiveDragAndDropManagers at:aDevice ifAbsent:nil.
+    activeManager isNil ifTrue:[
+        aBlock value
+    ] ifFalse:[
+        activeManager saveDraw:aBlock
+    ].
+! !
+
+!DragAndDropManager class methodsFor:'queries'!
+
+isDragAndDropActiveOnDevice:aDevice
+    ^ ActiveDragAndDropManagers includesKey:aDevice
+! !
+
 !DragAndDropManager class methodsFor:'simple start - drop source'!
 
 startDragFrom:aView dropSource:aDropSource
@@ -1243,6 +1264,12 @@
     "
     |savedCursor savedDelegate prevGrab sensor p|
 
+    (ActiveDragAndDropManagers at:aView device ifAbsent:nil) notNil ifTrue:[
+        self error:'oops - two dnd managers active'.
+        ^ self.
+    ].
+    ActiveDragAndDropManagers at:aView device put:self.
+
     dropContext sourceWidget:aView.
 
     dragOffset  isNil ifTrue:[ dragOffset  := 0 @ 0 ].
@@ -1257,6 +1284,7 @@
     dropContext dragHandler:aHandler.
 
     restoreBlock := [
+        ActiveDragAndDropManagers removeKey:aView device.
         aHandler postDragging.
         aView delegate:savedDelegate.
         aView cursor:savedCursor now:true.
@@ -1283,6 +1311,13 @@
     p := aView device pointerPosition.
     p := aView device translatePoint:p from:(aView device rootWindowId) to:(aView id).
     self buttonMotion:1 x:p x y:p y view:aView
+!
+
+saveDraw:aBlock
+    handler postDragging.
+    aBlock value.
+    handler rereadSaveArea.
+    handler restoreFromSaveArea.
 ! !
 
 !DragAndDropManager methodsFor:'translation'!
@@ -1311,6 +1346,6 @@
 !DragAndDropManager class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview2/DragAndDropManager.st,v 1.29 2001-07-20 12:20:57 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview2/DragAndDropManager.st,v 1.30 2001-07-30 16:05:38 martin Exp $'
 ! !
 DragAndDropManager initialize!