# How to make dynamic input fields work with drag & drop

I have an application using InputField to allow a user to dynamically update a data structure. In some cases the user will want to remove a string from one field and paste it into another. If this is done using cut and paste everything works okay, and the underlying data updates to reflect what is seen in the GUI. However, if the string is moved using drag and drop, the Dynamic in the source field does not appear to register the change of contents, although the destination field works as expected.

Here's an example:

test = {"string", ""};
Column[{
InputField[Dynamic[test[[1]]], String],
InputField[Dynamic[test[[2]]], String],
Dynamic[test]
}]


If I now drag and drop the string from the upper field into the lower field I get this:

The upper input field is now empty but test[[1]] still contains "string". This is a problem, because normally the Dynamic[test] line won't be there so the user relies on the input fields to correctly show the actual contents of test.

How can I fix this?

-
what do you mean by drag and drop? Am I missing something? Also, I assume that ContinuousAction->True does not work too, does it"? –  Kuba Sep 9 '13 at 11:52
What OS or mma version allows you to drag and drop these fields? –  Mr.Wizard Sep 9 '13 at 12:00
@Mr.Wizard, version 9 on windows 7. Pretty sure it worked with version 7 on XP too. You do have to have drag and drop editing enabled in preferences. –  Simon Woods Sep 9 '13 at 12:09
@SimonWoods oh, +1, I wasn't aware of the drag&drop built-in functionality :) each day something new :) –  Kuba Sep 9 '13 at 12:14
@Mr.Wizard. I too tried it awhile back, but Mathematica's inept undo facility made it too risky. –  m_goldberg Sep 9 '13 at 12:23

The descriprion of the problem seemed to me similar to other issues I've faced in the past.

ContinuousAction->True


option for InputField helped me then and OP confirms that it helps in his case too.

So at the end, MWE introduced by Simon Woods should be expanded to:

Column[{
InputField[Dynamic[test[[1]]], String, ContinuousAction -> True],
InputField[Dynamic[test[[2]]], String, ContinuousAction -> True],
Dynamic[test]
}]

-
Please consider editing your answer to show where in Simon Woods' code the option should be applied. –  m_goldberg Sep 9 '13 at 12:18
@m_goldberg both InputField expressions. –  Mr.Wizard Sep 9 '13 at 12:19
@m_goldberg You're right. –  Kuba Sep 9 '13 at 12:21