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:
authorack-err <ack-err>2013-09-04 15:56:14 +0400
committerack-err <ack-err>2013-09-04 15:56:14 +0400
commita8ee1b7f5486d325eda484649c4860d43b5642ed (patch)
treeee6c2f6cee71520f54d957da08e46e6daceaaec3
parenta8db9bcf5f330fbdca87d76611a902f0977b3f6e (diff)
Drag polling and drag operator naming does now respect and prefer overlapping regions.
-rw-r--r--source/blender/editors/interface/interface_handlers.c1
-rw-r--r--source/blender/windowmanager/intern/wm_dragdrop.c26
2 files changed, 24 insertions, 3 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index c1ec8652b29..cf77c12e5ce 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -2600,7 +2600,6 @@ static int ui_do_but_HOTKEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data
data->escapecancel = true;
button_activate_state(C, but, BUTTON_STATE_EXIT);
}
-
}
}
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c
index d41715640df..42c13d39fe5 100644
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@ -199,7 +199,9 @@ static const char *wm_dropbox_active(bContext *C, wmDrag *drag, wmEvent *event)
wmWindow *win = CTX_wm_window(C);
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
- const char *name;
+ ARegion *ar_iter = NULL;
+ const char *name = NULL;
+ const char *name_overlap = NULL;
name = dropbox_active(C, &win->handlers, drag, event);
if (name) return name;
@@ -208,7 +210,27 @@ static const char *wm_dropbox_active(bContext *C, wmDrag *drag, wmEvent *event)
if (name) return name;
name = dropbox_active(C, &ar->handlers, drag, event);
- if (name) return name;
+
+ /* Make sure overlapping regions are preferred over non-overlapping ones */
+ if (!ar->overlap) {
+ for (ar_iter = sa->regionbase.first; ar_iter; ar_iter = ar_iter->next) {
+ if (ar_iter->overlap) {
+ /* only update name_overlap if none was found yet */
+ if (name_overlap == NULL) {
+ /* We've got to fake the region for a little bit */
+ CTX_wm_region_set(C, ar_iter);
+ name_overlap = dropbox_active(C, &ar_iter->handlers, drag, event);
+ }
+ }
+ }
+ }
+ /* make sure proper region is restored */
+ CTX_wm_region_set(C, ar);
+
+ if (name_overlap)
+ return name_overlap;
+ if (name)
+ return name;
return NULL;
}