--- 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!