thoughts on drag and drop events

John M McIntosh johnmci at smalltalkconsulting.com
Tue Apr 11 16:27:04 UTC 2006


This looks ok, lets see about an implementation on the mac for the  
drag/drop.
I note we should use ioSetDropFlags  to tell the vm that the image  
supports the new drag/drop features, versus falling back to the old  
implementation

On 10-Apr-06, at 3:50 PM, Andreas Raab wrote:

> Hi Guys -
>
> On Windows, what you get is a (set of) format identifier (either  
> one of the "standard" ones like CF_TEXT, CF_BITMAP, or one of the  
> "private" ones that applications can register directly) and its  
> interpretation is up to your app. This is the same between DnD and  
> clipboard, but DnD may also indicate feedback for the DnD operation  
> (e.g., whether the app can support the operation, whether it would  
> "move" or "copy" the contents etc).
>
> The interface that I could support most easily would be one where  
> we query for the available formats and (later) request a byte array  
> consisting of data in the requested format. Put together, it might  
> look like here:
>
> * ioGetClipboardFormat(clp,n): Get the n-th format of clipboard data.
>   This function is used to enumerate available clipboard formats.
>   Arguments:
>     clp <Integer> - identifier of clipboard (0 - default)
>     n   <Integer> - format index
>   Return value:
>     format <Integer> - the identifier for the clipboard format
>                        returns -1 for last entry
>
> * ioReadClipboard(clp, fmt): Get clipboard data in format "fmt".
>   This function answers a byte array consisting of the clipboard  
> data in the request format.
>   Arguments:
>     clp <Integer> - identifier of clipboard (0 - default)
>     fmt <Integer> - format index
>   Return value:
>     bytes <ByteArray> - the data read from the clipboard
>
> * ioClearClipboard(clp): Clears the clipboard.
>   This function is used to clear the entire clipboard so that  
> subsequent operations can set multiple formats for the same data.
>   Arguments:
>     clp <Integer> - identifier of clipboard (0 - default)
>
> * ioAddClipboardData(fmt, data): Add clipboard data in format fmt.
>   This function is used for adding clipboard data in the given format.
>   Arguments:
>     clp  <Integer> - identifier of clipboard (0 - default)
>     data <ByteArray> - the data for the clipboard
>
>
> I'd do the same thing for DnD, e.g.,
>
> * ioGetDropFormat(dh,n): Get the n-th format of drop data
>   This function is used to enumerate available drop formats.
>   Arguments:
>     dh  <Integer> - drop handle
>     n   <Integer> - format index
>   Return value:
>     format <Integer> - the identifier for the drop format
>                        returns -1 for last entry
>
> * ioGetDropData(dh, fmt): Get drop data in format "fmt".
>   This function answers a byte array consisting of the clipboard  
> data in the request format.
>   Arguments:
>     dh  <Integer> - drop handle
>     fmt <Integer> - format index
>   Return value:
>     bytes <ByteArray> - the data read from the drop handle
>
> * ioDeleteDropHandle(dh): Free a drop handle
>   This function is necessary since the drop handle will have to be  
> preserved until the (Squeak) DnD operation is complete which  
> typically outlasts the OS' transaction.
>   Arguments:
>     dh  <Integer> - drop handle
>
> * ioSetDropFlags(dh, flags): Set drop flags during drag and drop.
>   This function allows us to customize user feedback for the drop.
>   Arguments:
>     dh    <Integer> - drop handle
>     flags <Integer> Either one of "reject drop", "move operation",  
> "copy operation" etc.
>
> Would this work on other platforms?
>
> Cheers,
>   - Andreas
>
> John M McIntosh wrote:
>> Someone asked about drag and drop of a URL from Safari to Squeak.  
>> Turns out we get a drag
>> and drop event with a flavor type of URL, mind we get 7 other  
>> flavors too, like txt, utf, etc all these
>> are indicators of an object we want Squeak to process.
>> Problem is we don't have any way for the VM to feed those back to  
>> us because the logic is setup
>> only to consider a file drag/drop event.
>> So, either I create a file and stuff the data into it, messy but  
>> would work with existing logic, and have the
>> drag file dispatcher would need to do the right thing.
>> Or alter sqDragDropFilesEvent and have a different drag type and  
>> pass up an object containing the bits in question
>> Thoughts on the choices are welcome
>> -- 
>> ===================================================================== 
>> ======
>> John M. McIntosh <johnmci at smalltalkconsulting.com> 1-800-477-2659
>> Corporate Smalltalk Consulting Ltd.  http:// 
>> www.smalltalkconsulting.com
>> ===================================================================== 
>> ======

--
======================================================================== 
===
John M. McIntosh <johnmci at smalltalkconsulting.com> 1-800-477-2659
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
======================================================================== 
===




More information about the Vm-dev mailing list