fix PointerConstraints activation occurring before attached to InputManager #9427
+3
−3
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.
Describe your PR, what does it fix/add?
Fixes #8506
It is possible for the CInputManager::simulateMouseMovement() method to be called via CPointerConstraint::activate() without the constraint being present in InputManager.m_vConstraints.
This occurs when the constraint is activated before CPointerConstraintsProtocol::onNewConstraint is called, which is what places it in InputManager.m_vConstraints.
The lack of the instance of CPointerConstraint in m_vConstraints causes the CInputManager::isConstrained() method to fail and return false. As a result, the CInputManager::mouseMoveUnified method is run erroneously until it's end when the constraint is activated.
This does not seem to be very common behavior, but the FFXIV game running via wine and xwayland can trigger this.
As a solution, I found it ideal to postpone the activation of the constraint until after the onNewConstraint call.
Is there anything you want to mention? (unchecked code, possible bugs, found problems, breaking compatibility, etc.)
This change assumes that it is true that a constraint cannot be activated before it is bound to the Input Manager. I don't see any sense in which this could be wrong, but it would be good to have a sanity check.
Later I will test other games that restrict the mouse to see if anything obviously broke.
Is it ready for merging, or does it need work?
Ready for merging.