How can I prevent the DialogInput from failing (or returning early) as soon as I close the "Close this" dialog?

-

nestedDialog[] := Module[{tag = True},
Unprotect[DialogReturn];
DialogReturn[i_] /; tag :=
InternalInheritedBlock[{SystemFEDump$DialogDone}, Unprotect[DialogReturn]; DialogReturn[j_] /; tag =.; SystemFEDump$DialogDone /:
HoldPattern[SystemFEDump$DialogDone = True] = True; DialogReturn[i]; Protect[DialogReturn]; SystemFEDump$DialogDone /:
HoldPattern[SystemFEDump`$DialogDone = True] =.; ]; Protect[DialogReturn]; ]; Use: just call nestedDialog[] before creating new nested dialogs. It makes sense to make the nested dialogs modal because the DialogInput won't return until as many DialogReturnshave been run as nestedDialog[]s have been run (plus one) DialogInput@{Button["Click this", nestedDialog[]; CreateDialog["Close this", Modal -> True]], DefaultButton[DialogReturn["alskjl"]]} I tested this in Mathematica 8.0.4, W7x64. Quoted from @AlbertRetey's comment. "I have now tested your code with Mathematica 6.0.2,7.0.1 and 8.0.4 on both Windows 7 and Linux (CentOS) and at least the simple example seems to work alright with any of them" - +1, unlike my suggestion this really makes possible to use nested modal dialogs, which I couldn't get to work up to now. As you are using nondocumented internal functions, I'd suggest to add a note with which version you have tested this... – Albert Retey Jun 24 '12 at 17:15 I have now tested your code with Mathematica 6.0.2,7.0.1 and 8.0.4 on both Windows 7 and Linux (CentOS) and at least the simple example seems to work alright with any of them. I would conclude what you are using seems to be fairly stable amongs the various versions. Maybe you want to add that to your answer. – Albert Retey Jun 25 '12 at 19:20 Would that help? DialogInput@ Column[{Button["Click this", CreateDialog["Close this",NotebookEventActions -> {}]], Button["Done", DialogReturn["done"]] }] I think the outer dialog won't return as long as the inner dialog doesn't call DialogReturn (it could do something else, though). DialogReturn[$Failed] is somehow automatigally inserted for some event actions when calling CreateDialog, although Options[CreateDialog,NotebookEventActions] returns {NotebookEventActions -> None}. The inserted event actions can be seen e.g. with this:

CreateDialog[
Dynamic@Column@
CurrentValue[EvaluationNotebook[], NotebookEventActions]]
-
+1 Yeah, it helped, thanks! Now I scrapped a solution that haven't tested intensely but I'm posting it as a self answer –  Rojo Jun 23 '12 at 4:13

Try putting a semi-colon after CreateDialog

Sorry, it doesn't do what you want. What it changed is that Click this button persists. I "failed" to notice that it still "$Failed" – Robert Miller Jun 21 '12 at 16:40 @Rojo Sorry, it doesn't do what you want. What it changed is that Click this button persists. I "failed" to notice that it still "$Failed". Does adding the semi-colon to Heike's solution do what you want? It appears to. –  Robert Miller Jun 21 '12 at 16:47