You could try overwriting the dialog's moveEvent() handler and when you detect a move outside your target area you trigger a move back.

Cheers,
_