all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Nick Helm <nick@tenpoint.co.nz>
To: Alan Third <alan@idiocy.org>
Cc: 30929@debbugs.gnu.org
Subject: bug#30929: 26.0.91; Text drag and drop does not work
Date: Thu, 26 Apr 2018 11:16:32 +1200	[thread overview]
Message-ID: <m2muxqnagf.fsf@tenpoint.co.nz> (raw)
In-Reply-To: <20180424181933.GA48133@breton.holly.idiocy.org> (Alan Third's message of "Tue, 24 Apr 2018 19:19:33 +0100")

On Wed, 25 Apr 2018 at 06:19:33 +1200, Alan Third wrote:

> What do you mean by too many permutations? Is it because of the number
> of NSDragOperation options?

No, the NSDragOperation and mask stuff is relatively straightforward,
although we have to work out which one to apply and a lot of that
depends on the context in Lisp.

My main problem is the bewildering number of different data types that
have be to handled, in particular casting every possibility from 
ObjC -> C -> Lisp and interpreting them at the end.

But there are other complications. When the source adds a dragging image
to the pasteboard, I thought it was a single type. It's not, each one
(NSStringPboardType, NSFilenamesPboardType, etc) is an array of
conforming types, and different sources can use different conforming
types to represent the same image. We have to work out which one to use.
This gets harder when we're dealing with more than one image on the
pasteboard, each with it's own types. Some sources also place the same
image on the pasteboard twice (or more) to represent it using different
types, so we need to know about those too.

Then there's backwards compatibility, as not all these things work the
same way on older versions of macOS. It all gets pretty convoluted. 

Other related stuff doesn't work the way I expect either. I'd planned to
highlight the target Emacs window with a border to give the user better
feedback about the drop location. That's a pretty basic thing to do. But
there's something odd about Emacs's NSView implementation, which means
any code using drawRect is either ignored or affects all the objects in
the view at once, as if everything is drawn onto one flat canvas.

I also wanted to use draggingUpdate to update point during the dragging
session, in order to give the user better control over the insertion
point. Again, pretty rudimentary stuff. But I'm embarrassed to admit, I
can't even work out how to move point from C, much less from ObjC, and
much much less make it follow the mouse mid-dragging session.

As far as I can tell, Emacs on free platforms doesn't support being the
dragging source (either to other apps or within Emacs itself), so
I didn't look at that option at all.










  reply	other threads:[~2018-04-25 23:16 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-24 12:28 bug#30929: 26.0.91; Text drag and drop does not work Nick Helm
2018-03-25 11:57 ` Alan Third
2018-03-28  9:20   ` Nick Helm
2018-04-07 15:01     ` Alan Third
2018-04-09  1:51       ` Nick Helm
2018-04-10 19:38         ` Alan Third
2018-04-12  5:34           ` Nick Helm
2018-04-13 18:33             ` Alan Third
2018-04-24 12:42               ` Nick Helm
2018-04-24 18:19                 ` Alan Third
2018-04-25 23:16                   ` Nick Helm [this message]
2018-04-26 20:44                     ` Alan Third
2018-04-28  9:57                       ` Nick Helm
2019-01-05 10:27                         ` Alan Third
2019-01-05 13:05                           ` Nick Helm
2019-01-05 16:20                             ` Alan Third
2019-01-07 10:38                               ` Nick Helm
2019-01-10 19:23                                 ` Alan Third

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2muxqnagf.fsf@tenpoint.co.nz \
    --to=nick@tenpoint.co.nz \
    --cc=30929@debbugs.gnu.org \
    --cc=alan@idiocy.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.