[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59798] branches/soc-2013-ui_replay/source /blender: Drag polling and drag operator naming does now respect and prefer overlapping regions .

Vincent Akkermans vincent at ack-err.net
Wed Sep 4 13:56:15 CEST 2013


Revision: 59798
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59798
Author:   ack-err
Date:     2013-09-04 11:56:14 +0000 (Wed, 04 Sep 2013)
Log Message:
-----------
Drag polling and drag operator naming does now respect and prefer overlapping regions.

Modified Paths:
--------------
    branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c
    branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_dragdrop.c

Modified: branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c	2013-09-04 11:02:08 UTC (rev 59797)
+++ branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c	2013-09-04 11:56:14 UTC (rev 59798)
@@ -2600,7 +2600,6 @@
 				data->escapecancel = true;
 				button_activate_state(C, but, BUTTON_STATE_EXIT);
 			}
-			
 		}
 	}
 	

Modified: branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_dragdrop.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_dragdrop.c	2013-09-04 11:02:08 UTC (rev 59797)
+++ branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_dragdrop.c	2013-09-04 11:56:14 UTC (rev 59798)
@@ -199,7 +199,9 @@
 	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 @@
 	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;
 }




More information about the Bf-blender-cvs mailing list