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

Ton Roosendaal ton at blender.org
Sat Feb 7 17:43:55 CET 2009


Revision: 18851
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18851
Author:   ton
Date:     2009-02-07 17:43:55 +0100 (Sat, 07 Feb 2009)

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

F6 menu "redo last operation" now works, mostly :)

Try it in editmode on add-UV-Sphere, or Subdivide, those work
fine. Transform ops have some feedback issues or so.

This is a temporary commit; brecht will take this further with
nice code (event system doesn't make menus as active region
but sets the original context instead, as stored in ui handler.)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-02-07 15:44:16 UTC (rev 18850)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-02-07 16:43:55 UTC (rev 18851)
@@ -3539,8 +3539,18 @@
 	if((/*inside &&*/ !menu->menuretval && retval == WM_UI_HANDLER_CONTINUE) || event->type == TIMER) {
 		but= ui_but_find_activated(ar);
 
-		if(but)
+		if(but) {
+			ScrArea *ctx_area= CTX_wm_area(C);
+			ARegion *ctx_region= CTX_wm_region(C);
+			
+			if(menu->ctx_area) CTX_wm_area_set(C, menu->ctx_area);
+			if(menu->ctx_region) CTX_wm_region_set(C, menu->ctx_region);
+			
 			retval= ui_handle_button_event(C, event, but);
+			
+			if(menu->ctx_area) CTX_wm_area_set(C, ctx_area);
+			if(menu->ctx_region) CTX_wm_region_set(C, ctx_region);
+		}
 		else
 			retval= ui_handle_button_over(C, event, ar);
 	}

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-02-07 15:44:16 UTC (rev 18850)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-02-07 16:43:55 UTC (rev 18851)
@@ -284,6 +284,8 @@
 	/* for operator popups */
 	const char *opname;
 	int opcontext;
+	ScrArea *ctx_area;
+	ARegion *ctx_region;
 	
 	/* return values */
 	int butretval;

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2009-02-07 15:44:16 UTC (rev 18850)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2009-02-07 16:43:55 UTC (rev 18851)
@@ -635,6 +635,10 @@
 	/* create handle */
 	handle= MEM_callocN(sizeof(uiPopupBlockHandle), "uiPopupBlockHandle");
 
+	/* store context for operator */
+	handle->ctx_area= CTX_wm_area(C);
+	handle->ctx_region= CTX_wm_region(C);
+	
 	/* create area region */
 	ar= ui_add_temporary_region(CTX_wm_screen(C));
 

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-02-07 15:44:16 UTC (rev 18850)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-02-07 16:43:55 UTC (rev 18851)
@@ -1457,12 +1457,13 @@
 
 static void redo_last_cb(bContext *C, void *arg1, void *arg2)
 {
-#if 0
-	/* XXX context here is not correct .. we get the popup block region
-	 * context but should actually have where ever the last operator was
-	 * executed. */
-	WM_operator_name_call(C, "SCREEN_OT_redo_last", WM_OP_EXEC_DEFAULT, NULL);
-#endif
+	wmOperator *lastop= CTX_wm_manager(C)->operators.last;
+	
+	if(lastop) {
+		ED_undo_pop(C);
+		WM_operator_repeat(C, lastop);
+	}
+	
 }
 
 static uiBlock *ui_block_create_redo_last(bContext *C, ARegion *ar, void *arg_op)





More information about the Bf-blender-cvs mailing list