[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41714] trunk/blender: presets now work from non-redo popups,

Campbell Barton ideasman42 at gmail.com
Thu Nov 10 04:44:51 CET 2011


Revision: 41714
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41714
Author:   campbellbarton
Date:     2011-11-10 03:44:50 +0000 (Thu, 10 Nov 2011)
Log Message:
-----------
presets now work from non-redo popups,

ended up having to add a new pointer into the uiBlock (which I'd rather have avoided), but setting the uiLayoutSetContextPointer(..) was complicated to properly use for submenus and popus.

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_intern.h
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/editors/screen/screen_context.c

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2011-11-10 03:40:02 UTC (rev 41713)
+++ trunk/blender/CMakeLists.txt	2011-11-10 03:44:50 UTC (rev 41714)
@@ -507,6 +507,7 @@
 		if(NOT BOOST_CUSTOM)
 			set(Boost_USE_MULTITHREADED ON)
 			find_package(Boost 1.34 COMPONENTS filesystem regex system thread)
+			mark_as_advanced(Boost_DIR)  # why doesnt boost do this?
 		endif()
 
 		set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2011-11-10 03:40:02 UTC (rev 41713)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2011-11-10 03:44:50 UTC (rev 41714)
@@ -802,6 +802,7 @@
 uiBut *uiContextActiveButton(const struct bContext *C);
 void uiContextActiveProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index);
 void uiContextActivePropertyHandle(struct bContext *C);
+struct wmOperator *uiContextActiveOperator(const struct bContext *C);
 void uiContextAnimUpdate(const struct bContext *C);
 void uiFileBrowseContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop);
 void uiIDContextProperty(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop);

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2011-11-10 03:40:02 UTC (rev 41713)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2011-11-10 03:44:50 UTC (rev 41714)
@@ -5471,6 +5471,38 @@
 	}
 }
 
+wmOperator *uiContextActiveOperator(const struct bContext *C)
+{
+	ARegion *ar_ctx= CTX_wm_region(C);
+	uiBlock *block;
+
+	/* scan active regions ui */
+	for(block=ar_ctx->uiblocks.first; block; block=block->next) {
+		if (block->ui_operator) {
+			return block->ui_operator;
+		}
+	}
+
+	/* scan popups */
+	{
+		bScreen *sc= CTX_wm_screen(C);
+		ARegion *ar;
+
+		for (ar= sc->regionbase.first; ar; ar= ar->next) {
+			if (ar == ar_ctx) {
+				continue;
+			}
+			for(block=ar->uiblocks.first; block; block=block->next) {
+				if (block->ui_operator) {
+					return block->ui_operator;
+				}
+			}
+		}
+	}
+
+	return NULL;
+}
+
 /* helper function for insert keyframe, reset to default, etc operators */
 void uiContextAnimUpdate(const bContext *C)
 {

Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h	2011-11-10 03:40:02 UTC (rev 41713)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h	2011-11-10 03:44:50 UTC (rev 41714)
@@ -314,7 +314,10 @@
 	ListBase saferct;			// uiSafetyRct list
 
 	uiPopupBlockHandle *handle;	// handle
-	
+
+	struct wmOperator *ui_operator;// use so presets can find the operator,
+								// across menus and from nested popups which fail for operator context.
+
 	void *evil_C;				// XXX hack for dynamic operator enums
 
 	struct UnitSettings *unit;	// unit system, used a lot for numeric buttons so include here rather then fetching through the scene every time.

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2011-11-10 03:40:02 UTC (rev 41713)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2011-11-10 03:44:50 UTC (rev 41714)
@@ -2767,6 +2767,8 @@
 		PointerRNA op_ptr;
 		uiLayout *row;
 
+		uiLayoutGetBlock(layout)->ui_operator= op;
+
 		row= uiLayoutRow(layout, TRUE);
 		uiItemM(row, (bContext *)C, "WM_MT_operator_presets", NULL, ICON_NONE);
 

Modified: trunk/blender/source/blender/editors/screen/screen_context.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_context.c	2011-11-10 03:40:02 UTC (rev 41713)
+++ trunk/blender/source/blender/editors/screen/screen_context.c	2011-11-10 03:44:50 UTC (rev 41714)
@@ -53,6 +53,7 @@
 #include "ED_armature.h"
 
 #include "WM_api.h"
+#include "UI_interface.h"
 
 #include "screen_intern.h"
 
@@ -399,6 +400,9 @@
 		if(sfile) {
 			op= sfile->op;
 		}
+		else if ((op= uiContextActiveOperator(C))) {
+			/* do nothign */
+		}
 		else {
 			/* note, this checks poll, could be a problem, but this also
 			 * happens for the toolbar */




More information about the Bf-blender-cvs mailing list