[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Have there been recent changes in DnD?

From: Andreas Schik
Subject: Re: Have there been recent changes in DnD?
Date: Wed, 16 Jan 2008 13:56:26 +0100
User-agent: GNUMail (Version 1.2.0)

On 2008-01-16 11:49:32 +0100 Andreas Schik <address@hidden>

On 2008-01-14 13:10:17 +0100 Fred Kiefer <address@hidden> wrote:

Andreas Schik wrote:
On 2008-01-10 21:46:38 +0100 Fred Kiefer <address@hidden> wrote:

Andreas Schik wrote:
since I 'upgraded' to yesterdays SVN og GNUstep I do have problems
with DnD in GNUMail. Have there been any changes in the underlying
mechanisms making it necessary to change applications?

The basic mechanism hasn't changed since April last year. What has
changed a bit was the implementation for NSTableVie and NSTextView. Are
you using subclasses of these?
It looks like GNUMail is using a subclass of NSTableView in the mail
window. This table is the source of the operation. What I found out so far is that the target of the operation (outline view) in the method -
outlineView:validateDrop:proposedItem:proposedChildIndex: receives
NSDragOperationNone in the NSDraggingInfo object ([info
draggingSourceOperationMask]), no matter which modifier I press down.

There has been one important change for dragging in NSTableView, which
may affect that code in some way. Now there are different drag mask
settings for local and non-local dragging. The later by default is set to NSDragOperationNone. This behaviour matches, as far as I know, what Apple is doing. But why would the drag view see this as a non-local drag

What you should do is debug into GSDragView (and it's subclass XX) to
see, how the value for draggingSourceOperationMask is build up from
dragMask (coming from the drag source) and operationMask (coming from
the modifier keys). One of these two (most likely dragmask) must be wrong.
Well, it is not a GNUMail problem, but a combination of GNUstep and
Camaelon introduces a category for NSTableView that does not call the
(assumedly new) selector -_initDefaults: Hence, the local dragging
mask is 0. Fixing this remedies part of the problem. What remains is a
quite strange behaviour:
If I overlap the mailbox window and the mail window of GNUMail the
operation works. As soon as there is a gap between the windows, i.e.
the drag operation touches an external application, the operation
again fails. It looks like GSDragView does not recognize that it must
switch back from non-local to local operation. It did not debug this,
though, and probabyl won't have time today to do so. But this might
anyway help you to track it down.
This did let me sleep :-)
Find a patch attached to this mail that fixes GSDragView. It finally
came down to a missing ! operator.


Mail: andreas dot schik at web dot de
Home: http://www.andreasheppel.de

PGP Key is available from the MIT key server (pgp.mit.edu).

Attachment: GSDragView.patch
Description: Text Data

Attachment: pgpUbLNjNF3pu.pgp
Description: PGP signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]