Update - Implementation test results.
This now works for long sustained drags of files, but for some reason is not consistently triggered by short sharp drags using a trackpad. To reproduce this issue:
1. Make sure Firefox is in the Launcher, and Nautilus is open on a folder containing a .png file
2. 'Left click hold' on the .png file and drag it in a sharp 'drag and stop' action using the trackpad.
Result: the launcher is unaffected 80% of the time. I am assuming this issue is caused is because there is a issue detecting short sharp d&d movements.
The desired resolution would be for the detection of a d&d and the corresponding change in Launcher state to be more rapid, so that drag actions that start and stop inside a timespan of roughly 50ms (or more) are detected.
As soon as the user starts dragging a file, the Launcher icons that are valid drop receptacles should instantly become highlighted. Icons that are not valid drop receptacles should disappear so that only app icons that are valid drop receptacles are shown.
This needs to happen the instant a user starts dragging a file, regardless of the position of the file on the desktop.
This bug would be an ideal bug for someone to get started hacking on Unity, here's some information:
* Time to fix: 10h
* Difficulty: normal
Implementation of this feature is evil due to the nature of XDND.
Short version: When a dnd situation is detected, quickly pop up a new X window (using a nux BaseWindow is the simplest method), collect the required DND information for the launcher to make a descision, then pop down the window as quickly as possible.
Create a new BaseWindow type class used purely to collect DND information, called DNDCollectionWindow. It will probably have the following methods.
void DNDCollectionWindow::Collect ()
std::list<char *> DNDCollectionWindow::GetUriList ()
and a signal
The window should pop down as fast as possible (but still retain the data). Collection will look specifically for a text/uri-list, as that is the only data relevant to the launcher, and retrieve that data directly for processing by the launcher. If no text/uri-list is available, the collected signal will still fire, but GetUriList should return an empty list.
Once the data is retrieved, it can be used by the launcher to shade launcher icons even before the hover starts. It is important to note that even though the launcher already has the data, it should collect the data a second time as the drag enters the launchers own XWindow. This is to ensure the data has not changed in the mean time (it is allowed to under the XDND specification).
* Where to look: src/Launcher.cpp
* Workflow information: http://unity.ubuntu.com/getinvolved/