Asynchronous processing of DPI change events is currently done by
processing the event for each control via Display#asyncExec. This has
several drawbacks:
- the events are processed rather late (even after earlier scheduled,
lower-priority business events
- the events may not be processed while dragging a shell to another
monitor in case a browser currently has focus
- the events are not processed at all if a Synchronizer is used that
does not process async events (such as for an Eclipse workspace during
startup)
This change replaces the usage of Display#asyncExec for asynchronous
processing of DPI events with the a timer message beings sent with a
callback to the processed operation via the OS. WM_TIMER
events are used as they are processed with low priority by the OS but
still with higher priority by SWT than any business-logic-side tasks
scheduled at a Display instance.