[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18073] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Fri Dec 26 13:21:06 CET 2008


Revision: 18073
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18073
Author:   ton
Date:     2008-12-26 13:21:06 +0100 (Fri, 26 Dec 2008)

Log Message:
-----------
2.5

Operator calls: extended WM_operator_name_call() with options whether to
call the exec() (operate immediate) or invoke() (check user input) entry.

This will allow python to use it more efficiently, but also solves the
dreaded pulldown case that showed another menu for confirmation.

New names to learn: :)
WM_OP_EXEC_DEFAULT
WM_OP_INVOKE_DEFAULT

on todo still: allow hotkey definitions to do same.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/space_time/time_header.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_keymap.c

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2008-12-26 11:33:41 UTC (rev 18072)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2008-12-26 12:21:06 UTC (rev 18073)
@@ -1685,7 +1685,7 @@
 	const char *opname= arg;
 
 	if(opname && retval > 0)
-		WM_operator_name_call(C, opname, WM_OP_DEFAULT, NULL);
+		WM_operator_name_call(C, opname, WM_OP_EXEC_DEFAULT, NULL);
 }
 
 static void vconfirm(bContext *C, char *opname, char *title, char *itemfmt, va_list ap)

Modified: branches/blender2.5/blender/source/blender/editors/space_time/time_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/time_header.c	2008-12-26 11:33:41 UTC (rev 18072)
+++ branches/blender2.5/blender/source/blender/editors/space_time/time_header.c	2008-12-26 12:21:06 UTC (rev 18073)
@@ -302,18 +302,18 @@
 	block= uiBeginBlock(C, handle->region, "time_framemenu", UI_EMBOSSP, UI_HELV);
 	uiBlockSetButmFunc(block, do_time_framemenu, NULL);
 
-	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_add", WM_OP_REGION_WIN, ICON_BLANK1, "Add Marker",
+	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_add", WM_OP_EXEC_REGION_WIN, ICON_BLANK1, "Add Marker",
 					  0, yco-=2, menuwidth, 19, "");
-	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_duplicate", WM_OP_REGION_WIN, ICON_BLANK1, "Duplicate Marker",
+	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_duplicate", WM_OP_EXEC_REGION_WIN, ICON_BLANK1, "Duplicate Marker",
 					  0, yco-=20, menuwidth, 19, "");
-	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_delete", WM_OP_REGION_WIN, ICON_BLANK1, "Delete Marker",
+	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_delete", WM_OP_EXEC_REGION_WIN, ICON_BLANK1, "Delete Marker",
 					  0, yco-=20, menuwidth, 19, "");
 	
 	uiDefBut(block, SEPR, 0, "",        0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 	
 	uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Name Marker|Ctrl M",
 					 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
-	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_move", WM_OP_REGION_WIN, ICON_BLANK1, "Grab/Move Marker",
+	uiDefIconTextButO(C, block, BUTM, "ED_MARKER_OT_move", WM_OP_INVOKE_REGION_WIN, ICON_BLANK1, "Grab/Move Marker",
 					  0, yco-=20, menuwidth, 19, "");
 	
 	uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2008-12-26 11:33:41 UTC (rev 18072)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2008-12-26 12:21:06 UTC (rev 18073)
@@ -461,7 +461,7 @@
 // XXX		mainqenter(PADASTERKEY, 1);
 		break;
 	case 6: /* Center View and Cursor to Origin */
-		WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_REGION_WIN, NULL);
+		WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_EXEC_REGION_WIN, NULL);
 		curs= give_cursor(scene, v3d);
 		curs[0]=curs[1]=curs[2]= 0.0;
 		break;
@@ -545,10 +545,10 @@
 		endlocalview(scene, sa);
 		break;
 	case 9: /* View All (Home) */
-		WM_operator_name_call(C, "VIEW3D_OT_viewhome", WM_OP_REGION_WIN, NULL);
+		WM_operator_name_call(C, "VIEW3D_OT_viewhome", WM_OP_EXEC_REGION_WIN, NULL);
 		break;
 	case 11: /* View Selected */
-		WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_REGION_WIN, NULL);
+		WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_EXEC_REGION_WIN, NULL);
 		break;
 	case 13: /* Play Back Animation */
 		play_anim(0);
@@ -560,7 +560,7 @@
 		add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
 		break;
 	case 17: /* Set Clipping Border */
-		WM_operator_name_call(C, "VIEW3D_OT_clipping", WM_OP_REGION_WIN, NULL);
+		WM_operator_name_call(C, "VIEW3D_OT_clipping", WM_OP_INVOKE_REGION_WIN, NULL);
 		break;
 	case 18: /* render preview */
 		toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
@@ -5325,7 +5325,7 @@
 
 	switch(event) {
 	case B_HOME:
-		WM_operator_name_call(C, "VIEW3D_OT_viewhome", WM_OP_REGION_WIN, NULL);
+		WM_operator_name_call(C, "VIEW3D_OT_viewhome", WM_OP_EXEC_REGION_WIN, NULL);
 		break;
 	case B_SCENELOCK:
 		if(v3d->scenelock) {

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c	2008-12-26 11:33:41 UTC (rev 18072)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c	2008-12-26 12:21:06 UTC (rev 18073)
@@ -167,7 +167,7 @@
 	}
 
 	if (error_val==0) {
-		WM_operator_name_call(self->C, self->name, WM_OP_DEFAULT, properties);
+		WM_operator_name_call(self->C, self->name, WM_OP_EXEC_DEFAULT, properties);
 	}
 
 	if (properties) {

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2008-12-26 11:33:41 UTC (rev 18072)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2008-12-26 12:21:06 UTC (rev 18073)
@@ -41,12 +41,16 @@
 /* flag */
 #define OPTYPE_REGISTER		1
 
-/* context to call operator in for WM_operator_call */
+/* context to call operator in for WM_operator_name_call */
 enum {
-	WM_OP_DEFAULT,
-	WM_OP_REGION_WIN,
-	WM_OP_AREA,
-	WM_OP_SCREEN
+	WM_OP_INVOKE_DEFAULT,
+	WM_OP_INVOKE_REGION_WIN,
+	WM_OP_INVOKE_AREA,
+	WM_OP_INVOKE_SCREEN,
+	WM_OP_EXEC_DEFAULT,
+	WM_OP_EXEC_REGION_WIN,
+	WM_OP_EXEC_AREA,
+	WM_OP_EXEC_SCREEN
 };
 
 /* ************** wmEvent ************************ */

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2008-12-26 11:33:41 UTC (rev 18072)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2008-12-26 12:21:06 UTC (rev 18073)
@@ -319,10 +319,12 @@
 		op->ptr= MEM_callocN(sizeof(PointerRNA), "wmOperatorPtrRNA");
 		RNA_pointer_create(&RNA_WindowManager, &wm->id, ot->srna, &op->properties, op->ptr);
 
-		if(op->type->invoke)
+		if(op->type->invoke && event)
 			retval= (*op->type->invoke)(C, op, event);
 		else if(op->type->exec)
 			retval= op->type->exec(C, op);
+		else
+			printf("invalid operator call %s\n", ot->idname); /* debug, important to leave a while, should never happen */
 
 		/* only for testing, can remove any time */
 		WM_operator_print(op);
@@ -343,56 +345,72 @@
 {
 	wmOperatorType *ot= WM_operatortype_find(opstring);
 	wmWindow *window= CTX_wm_window(C);
+	wmEvent *event= window->eventstate;
+	
 	int retval;
 
 	/* dummie test */
 	if(ot && C && window) {
-		if(context == WM_OP_REGION_WIN) {
-			/* forces event to go to the region window, for header menus */
-			ARegion *ar= CTX_wm_region(C);
-			ScrArea *area= CTX_wm_area(C);
+		switch(context) {
 			
-			if(area) {
-				ARegion *ar1= area->regionbase.first;
-				for(; ar1; ar1= ar1->next)
-					if(ar1->regiontype==RGN_TYPE_WINDOW)
-						break;
-				if(ar1)
-					CTX_wm_region_set(C, ar1);
+			case WM_OP_EXEC_REGION_WIN:
+				event= NULL;	/* pass on without break */
+			case WM_OP_INVOKE_REGION_WIN: 
+			{
+				/* forces operator to go to the region window, for header menus */
+				ARegion *ar= CTX_wm_region(C);
+				ScrArea *area= CTX_wm_area(C);
+				
+				if(area) {
+					ARegion *ar1= area->regionbase.first;
+					for(; ar1; ar1= ar1->next)
+						if(ar1->regiontype==RGN_TYPE_WINDOW)
+							break;
+					if(ar1)
+						CTX_wm_region_set(C, ar1);
+				}
+				
+				retval= wm_operator_invoke(C, ot, event, properties);
+				
+				/* set region back */
+				CTX_wm_region_set(C, ar);
+				
+				return retval;
 			}
-			
-			retval= wm_operator_invoke(C, ot, window->eventstate, properties);
-			
-			/* set region back */
-			CTX_wm_region_set(C, ar);
-			
-			return retval;
-		}
-		else if(context == WM_OP_AREA) {
-			/* remove region from context */
-			ARegion *ar= CTX_wm_region(C);
+			case WM_OP_EXEC_AREA:
+				event= NULL;	/* pass on without break */
+			case WM_OP_INVOKE_AREA:
+			{
+					/* remove region from context */
+				ARegion *ar= CTX_wm_region(C);
 
-			CTX_wm_region_set(C, NULL);
-			retval= wm_operator_invoke(C, ot, window->eventstate, properties);
-			CTX_wm_region_set(C, ar);
+				CTX_wm_region_set(C, NULL);
+				retval= wm_operator_invoke(C, ot, event, properties);
+				CTX_wm_region_set(C, ar);
 
-			return retval;
-		}
-		else if(context == WM_OP_SCREEN) {
-			/* remove region + area from context */
-			ARegion *ar= CTX_wm_region(C);
-			ScrArea *area= CTX_wm_area(C);
+				return retval;
+			}
+			case WM_OP_EXEC_SCREEN:
+				event= NULL;	/* pass on without break */
+			case WM_OP_INVOKE_SCREEN:
+			{
+				/* remove region + area from context */
+				ARegion *ar= CTX_wm_region(C);
+				ScrArea *area= CTX_wm_area(C);
 
-			CTX_wm_region_set(C, NULL);
-			CTX_wm_area_set(C, NULL);
-			retval= wm_operator_invoke(C, ot, window->eventstate, properties);
-			CTX_wm_region_set(C, ar);
-			CTX_wm_area_set(C, area);
+				CTX_wm_region_set(C, NULL);
+				CTX_wm_area_set(C, NULL);
+				retval= wm_operator_invoke(C, ot, window->eventstate, properties);
+				CTX_wm_region_set(C, ar);
+				CTX_wm_area_set(C, area);
 
-			return retval;
+				return retval;
+			}
+			case WM_OP_EXEC_DEFAULT:
+				event= NULL;	/* pass on without break */
+			case WM_OP_INVOKE_DEFAULT:
+				return wm_operator_invoke(C, ot, event, properties);
 		}
-		else
-			return wm_operator_invoke(C, ot, window->eventstate, properties);
 	}
 	
 	return 0;

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_keymap.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_keymap.c	2008-12-26 11:33:41 UTC (rev 18072)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_keymap.c	2008-12-26 12:21:06 UTC (rev 18073)
@@ -39,6 +39,7 @@
 #include "BKE_context.h"
 #include "BKE_library.h"
 #include "BKE_main.h"

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list