diff options
Diffstat (limited to 'source/blender/windowmanager/intern')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 46 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_keymap.c | 1 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 5 |
3 files changed, 38 insertions, 14 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 0da13fa119f..6d18df40215 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -47,9 +47,10 @@ #include "BKE_report.h" #include "BKE_utildefines.h" +#include "ED_anim_api.h" #include "ED_screen.h" #include "ED_space_api.h" -#include "ED_anim_api.h" +#include "ED_util.h" #include "RNA_access.h" @@ -214,8 +215,14 @@ int WM_operator_call(bContext *C, wmOperator *op) if(op->reports->list.first) uiPupMenuReports(C, op->reports); - if((retval & OPERATOR_FINISHED) && (op->type->flag & OPTYPE_REGISTER)) { - wm_operator_register(CTX_wm_manager(C), op); + if(retval & OPERATOR_FINISHED) { + if(op->type->flag & OPTYPE_UNDO) + ED_undo_push_op(C, op); + + if(op->type->flag & OPTYPE_REGISTER) + wm_operator_register(CTX_wm_manager(C), op); + else + WM_operator_free(op); } else WM_operator_free(op); @@ -282,8 +289,14 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P WM_operator_print(op); } - if((retval & OPERATOR_FINISHED) && (ot->flag & OPTYPE_REGISTER)) { - wm_operator_register(wm, op); + if(retval & OPERATOR_FINISHED) { + if(ot->flag & OPTYPE_UNDO) + ED_undo_push_op(C, op); + + if(ot->flag & OPTYPE_REGISTER) + wm_operator_register(wm, op); + else + WM_operator_free(op); } else if(!(retval & OPERATOR_RUNNING_MODAL)) { WM_operator_free(op); @@ -510,8 +523,17 @@ static int wm_eventmatch(wmEvent *winevent, wmKeymapItem *kmi) if(winevent->keymodifier!=kmi->keymodifier) return 0; /* happens on tweak failure */ - if(kmi->is_tweak) - if(winevent->no_tweak) return 0; + /* weak code, testing only now! (ton) */ + if(kmi->is_tweak) { + /* only after tweak keymap we allow the hack */ + if(winevent->no_tweak) { + winevent->no_tweak= 2; + return 0; + } + } + + if(winevent->no_tweak==1) + return 0; return 1; } @@ -562,8 +584,14 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand WM_operator_print(op); /* todo - this print may double up, might want to check more flags then the FINISHED */ } - if((retval & OPERATOR_FINISHED) && (ot->flag & OPTYPE_REGISTER)) { - wm_operator_register(CTX_wm_manager(C), op); + if(retval & OPERATOR_FINISHED) { + if(ot->flag & OPTYPE_UNDO) + ED_undo_push_op(C, op); + + if(ot->flag & OPTYPE_REGISTER) + wm_operator_register(CTX_wm_manager(C), op); + else + WM_operator_free(op); handler->op= NULL; } else if(retval & (OPERATOR_CANCELLED|OPERATOR_FINISHED)) { diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index b4ab5d9151a..22189b1707c 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -64,6 +64,7 @@ static void keymap_event_set(wmKeymapItem *kmi, short type, short val, int modif } else { + /* defines? */ if(modifier & KM_SHIFT) kmi->shift= 1; else if(modifier & KM_SHIFT2) diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 55d0fd4ab46..50de3a03b82 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -283,8 +283,6 @@ static void WM_OT_save_homefile(wmOperatorType *ot) ot->invoke= WM_operator_confirm; ot->exec= WM_write_homefile; ot->poll= WM_operator_winactive; - - ot->flag= OPTYPE_REGISTER; } /* ********* recent file *********** */ @@ -351,10 +349,7 @@ static void WM_OT_open_recentfile(wmOperatorType *ot) ot->exec= recentfile_exec; ot->poll= WM_operator_winactive; - ot->flag= OPTYPE_REGISTER; - RNA_def_property(ot->srna, "nr", PROP_ENUM, PROP_NONE); - } /* ********* main file *********** */ |