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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-02-28 15:39:13 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-02-28 15:39:13 +0400
commit2398e074d308d7483472c9f396c4b1a2cb6dbca8 (patch)
tree7e4b7ea5ccf04041b66bf3296d495ce6e49f318b /source
parent4f4e45540daf211a3531a81c464fa3a389ea8ede (diff)
fix [#33466] alt + mouse wheel
Alt+Mouse Wheel events depended on the button under the mouse being active, else it would change the current frame. Button re-activation wasn't 100% reliable since it depends on fake mousemove events. Now keep button active when its executed if the mouse stays over it.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/interface/interface_handlers.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 37268f25993..8c3e83894ef 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -6145,14 +6145,12 @@ static void ui_handle_button_activate(bContext *C, ARegion *ar, uiBut *but, uiBu
static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but)
{
- uiHandleButtonData *data;
+ uiHandleButtonData *data = but->active;
+ const uiButtonActivateType state_orig = data->state;
uiBlock *block;
ARegion *ar;
- uiBut *postbut;
- uiButtonActivateType posttype;
int retval;
- data = but->active;
block = but->block;
ar = data->region;
@@ -6304,14 +6302,28 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but)
}
if (data->state == BUTTON_STATE_EXIT) {
- postbut = data->postbut;
- posttype = data->posttype;
+ uiBut *post_but = data->postbut;
+ uiButtonActivateType post_type = data->posttype;
- button_activate_exit(C, but, data, (postbut == NULL), false);
+ button_activate_exit(C, but, data, (post_but == NULL), false);
/* for jumping to the next button with tab while text editing */
- if (postbut)
- button_activate_init(C, ar, postbut, posttype);
+ if (post_but) {
+ button_activate_init(C, ar, post_but, post_type);
+ }
+ else {
+ /* XXX issue is because WM_event_add_mousemove(C) is a bad hack and not reliable,
+ *if that gets coded better this bypass can go away too.
+ *
+ * This is needed to make sure if a button was active,
+ * it stays active while the mouse is over it.
+ * This avoids adding mousemoves, see: [#33466] */
+ if (ELEM(state_orig, BUTTON_ACTIVATE, BUTTON_ACTIVATE_OVER)) {
+ if (ui_but_find_mouse_over(ar, event->x, event->y) == but) {
+ button_activate_init(C, ar, but, state_orig);
+ }
+ }
+ }
}
return retval;