Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Eisel <julian@blender.org>2022-05-13 16:55:11 +0300
committerJulian Eisel <julian@blender.org>2022-05-13 18:55:52 +0300
commit8d43ee1b0823e6e5fae2fdceaee0a94d3d61f9b7 (patch)
treeaf808de0186cfb0a57ced1f5445317bb20bf3d84 /source/blender/editors/interface/interface_handlers.c
parentc2d2cd1468cd89e7aaf7770a8b89be19a83490df (diff)
Fix T97518: All buttons with eyedropper highlight if one is hovered
Issue is that the operator acts on the active button, and also uses that in the poll. So the actually active button would affect the poll of a different button. For the superimposed icons we need to be able to execute these polls properly for non-active buttons. This enables temporarily overriding the active button for lookups via context. While a bit of a hack it makes sense conceptually. Reviewed By: Campbell Barton Maniphest Tasks: T97518 Differential Revision: https://developer.blender.org/D14880
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r--source/blender/editors/interface/interface_handlers.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 26b9b82d67f..9d30ad992c9 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -8714,13 +8714,23 @@ static uiBut *ui_context_button_active(const ARegion *region, bool (*but_check_c
/* find active button */
LISTBASE_FOREACH (uiBlock *, block, &region->uiblocks) {
LISTBASE_FOREACH (uiBut *, but, &block->buttons) {
+ if (but->flag & UI_BUT_ACTIVE_OVERRIDE) {
+ activebut = but;
+ break;
+ }
if (but->active) {
activebut = but;
+ break;
}
- else if (!activebut && (but->flag & UI_BUT_LAST_ACTIVE)) {
+ if (but->flag & UI_BUT_LAST_ACTIVE) {
activebut = but;
+ break;
}
}
+
+ if (activebut) {
+ break;
+ }
}
if (activebut && (but_check_cb == NULL || but_check_cb(activebut))) {