Mousemove events passed on to another window (as part of ton's drag commit) incorrectly set the eventstate's type to a mousemove. Eventstate's type shouldn't be changed as currently eventstate is only used to store modifiers, mouse locations, and some previous event types or values, but not the actual current event types or values. So it would be changed to a mousemove on the other window and then never changed back to 0 again because there is no code that changes it other then this.
The reason this came to be a problem.
BIF_do_manipulator() is the function that handles manipulator events and it actually has the correct leftmouse event passed to it, but it then calls an operator by name which doesn't currently have a way to pass the event on. wm_operator_call_internal() then uses the eventstate event to pass on to the operator. This seems to be the main breakdown here, why does this work like that? Anyways, it invokes the operator and eventually gets down to initTransform() which has a hack to check if the type is 0, which it should be if the eventstate was used, but in this case it was set by the drag code to a mousemove (event type=4), and therefor doesn't setup the launch_event correctly. This leads to the mouse button release of a manipulator transform not having the correct launch_event so it doesn't end the transform on the release, and instead requires another click to confirm.
This patch only fixes the eventstate's type getting changed to a mousemove, and doesn't touch the use of eventstate in operator by name calls as I don't fully understand the reason of that code. I tested dragging from one window to another after the change and it still works perfectly for me on X11.
Original bug:
http://projects.blender.org/tracker/?func=detail&atid=498&aid=21677&group_id=9
Description
Description