Replace hasExclusiveControl with plugin-scoped exclusive control - #544
Merged
Merged
Conversation
markfee
approved these changes
Sep 28, 2026
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.



Replace hasExclusiveControl with plugin-scoped exclusive control
hasExclusiveControl was an anonymous boolean that only search set, so CSS couldn't tell which plugin had taken over the interface. Draw needs to hide other controls in its draw and edit modes to make room for its own buttons, and the two plugins would have overwritten each other's flag.
Plugin components now get a setExclusiveControl prop, bound to their plugin id. It adds a single im-o-app--exclusive-control-{pluginId} [--{name}] class to the app root, and each plugin's CSS decides what to hide. Claims stack across plugins, so releasing one brings back the claim underneath, and a plugin can only release its own. Search now uses it, with its behaviour unchanged.