[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