Why Cocoa text drags are broken

Apple still hasn’t fixed text drag-and-drop in Cocoa. In addition to going against how drag-and-drop has worked in previous versions of Mac OS for a decade, I believe it is based on a flawed concept. Has it seen any usability testing within Apple?

I guess the argument for this behavior goes something like this: Because selecting text is more common than drag-and-drop, dragging over a previously selected run of text should take precedence. If you really want to drag the text itself, merely hold the mouse down for a half-second after the click and then drag. Simple, right?

Not at all, for three reasons:

  1. It is counter to how drag and drop works in the rest of the system.
  2. It is slower.
  3. It is difficult for a new user to “learn” this Cocoa behavior.

The first is easy enough. If you can drag most “things” (a file in the Finder, or a window, or an object in a graphic design application) by clicking and dragging right away, why should dragging selected text be any different?

And it’s slower not just because you have to click and hold, but because you have to think too much. How long do I hold? Half second? Full second? Us humans never know exactly, and it’s easy to make a mistake and get a selection when you wanted a drag.

To illustrate what I mean by the last reason, let’s go over how someone would learn to make selections and use text drag-and-drop.

The Cocoa way: User makes a selection. They want to drag that selection, but instead the app keeps making a new selection where they clicked. User tries a few more times, then gives up, thinking that the app doesn’t support dragging of text. They use copy-and-paste instead.

The Carbon and old Mac way: User makes a selection. They drag that selection and it works as expected. If they are a new user, they might try to make a selection inside an existing selection, but without meaning to drag it. In this case they get the wrong behavior — the text starts to drag and they are momentarily confused. The next time this happens, they realize that they should single-click to remove the selection before making a new one in the same run of text.

See the difference? With the original Mac drag-and-drop behavior, the user might make a mistake once but that process teaches them how selection and drag-and-drop works. With the Cocoa behavior, the user might never learn how text drag-and-drop works!

Luckily, Mac developers using Cocoa can override this behavior in their application (which speaks to the power of those frameworks), but I have yet to see an application that does.