[0.6.x] Fix modifier key binding with mouse events on macOS #4233
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The previous approach relied on an undocumented flag to automatically preserve active modifier states in synthetic CGEvent mouse events. However, this flag has no effect on synthetic keyboard events, leading to modifier bindings (e.g., Ctrl+Click) to fail because the modifier states were not properly passed to the CGEvent.
To resolve this, manually set the CGEvent flags to the current keyboard modifiers when modifier binding is active; otherwise, use the ~0U auto-preserve flag, ensuring modifiers are effectively applied on both synthetic or physical modifier states.
Note: The current implementation in OpenTabletDriver lacks a mechanism to cancel modifier bindings when a pen button is clicked and the pen is dragged outside the tablet area. This can result in sticky modifier states (e.g., a persistent Shift key) if the user has configured a modifier like Shift on a pen button and drags the pen off the tablet.