I want to do something when the mouse is clicked. But it shouldn't matter where the mouse is clicked, so I can't use EventHandler. Instead, I'm trying to do it like this:

DynamicModule[{i = 0},
 WhenEvent[ControllerState["Button 1"], i = i + 1]

WhenEvent is not the right function. What I want is a function that will do something when ControllerState["Button 1"] switches from false to true.

  • $\begingroup$ Try this: DynamicModule[{i = 0}, Dynamic[If[ControllerState["Button 1"], (i = i + 1)]; i]]. I think you'll find it doesn't quite behave right. It's really more like a mouse-down event, than a mouse-click. Perhaps that's what you want $\endgroup$
    – Michael E2
    Mar 17, 2013 at 21:09
  • $\begingroup$ No, it must only count one click one time. This is part of the problem. $\endgroup$
    – C. E.
    Mar 17, 2013 at 21:10
  • $\begingroup$ There's no such thing as a dynamic variable. Dynamic only keeps some visible output up to date. So, whatever you do with Dynamic, in the best case scenario it will only work when it is visible. Is that what you want? $\endgroup$
    – Rojo
    Mar 17, 2013 at 21:12
  • $\begingroup$ If so, you can tweak @MichaelE2's suggestion to "remember" the last check result so it is only triggered in an appropriate change of state. If the behaviour is at notebook level, you can more simply use NotebookEventActions, or NotebookDynamicExpression $\endgroup$
    – Rojo
    Mar 17, 2013 at 21:14
  • $\begingroup$ Well... there will be a dynamic component to it. I will click a mouse, and it will change some variables and this will result in a graph of mouse clicks over time. It will be system wide, not on the notebook level. $\endgroup$
    – C. E.
    Mar 17, 2013 at 21:17

1 Answer 1


I was just working along the lines of @Rojo's comment:

DynamicModule[{i = 0, state = False}, 
 Dynamic[If[ControllerState["Button 1"], 
   If[state, i = i + 1; state = False], If[! state, state = True]]; i]

Sometimes it appears that the mouse action is intercepted by Mathematica. You may find that unnacceptable.

  • $\begingroup$ It doesn't seem to be intercepted for me. Works well, thank you. $\endgroup$
    – C. E.
    Mar 17, 2013 at 21:21
  • 1
    $\begingroup$ OK, I unmarked temporarily but I'm satisfied with this solution. Will accept it later if I there isn't a way better solution. $\endgroup$
    – C. E.
    Mar 17, 2013 at 21:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.