void AU_SynchronizeVoiceOverCursorForWindow( WindowRef inWindow )
{
//-------------------------------------------------------------------
// Theory: In fact, it should be sufficient to just move
// the control. All standard controls should do the same
// as Window Manager does when a window moves, that is,
// broadcast a kAXWindowMovedNotification notification.
// This kind of notification does not work when the actual
// window position does not change.
//
// Current state: Control Manager either does not broadcast
// kAXMovedNotification or it gets ignored by the VoiceOver.
//
// Result: VoiceOver cursor overlay does not update.
//
// To go around paragraph 1 limitation, we really change window
// bounds and return it quickly back. As a result, VoiceOver
// cursor sticks the original user element it was above and
// updates its position.
//
// Author: T. Zahradnicky
// Cite this:
// @inproceedings{1427145,
// author = {Zahradnick\'{y}, Tom\'{a}\v{s} and L\'{o}rencz, R\'{o}bert and Musil, Pavel},
// title = {Making ProTools Accessible for Visually Impaired},
// booktitle = {ICCHP '08: Proceedings of the 11th international conference on Computers Helping People with Special Needs},
// year = {2008},
// isbn = {978-3-540-70539-0},
// pages = {781--788},
// location = {Linz, Austria},
// doi = {http://dx.doi.org/10.1007/978-3-540-70540-6_116},
// publisher = {Springer-Verlag},
// address = {Berlin, Heidelberg},
// }
//
//-------------------------------------------------------------------
Rect bounds;
DisableScreenUpdates();
GetWindowBounds( inWindow, kWindowContentRgn, &bounds );
MoveWindow( inWindow, bounds.left-1, bounds.top, FALSE );
MoveWindow( inWindow, bounds.left, bounds.top, FALSE );
EnableScreenUpdates();
}
Best Regards,
Tomas