Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2009-01-31 22:40:40 +0300
committerTon Roosendaal <ton@blender.org>2009-01-31 22:40:40 +0300
commit51ded6696a7a3efee923a4420a1ebde46a03753f (patch)
tree6f3715fc1bf8a9272647a7b3a486d57b0c13d50c /source/blender/windowmanager
parent59534ac58976515500fc174883d9a6f6d3217d62 (diff)
2.5
Big commit, but mainly adminstration. - Enabled ot->flag OPTYPE_UNDO to work. - Removed all redundant ED_undo_pushes, but I'd recommend everyone to check it while testing. :) - Added view manipulations as OPTYPE_REGISTER, although this will flood the redo stack a bit... Nevertheless; for a "redo last action" panel we can simply check if both flags are set for redo. - Bugfix in editmode undo: selectmode was cleared, so you couldn't select after undo - Bugfix in mixing tweaks and keymaps... solution works but is weak, need to think over a while.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_types.h1
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c46
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c1
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c5
4 files changed, 39 insertions, 14 deletions
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 2b53121baf2..b9fe054685c 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -41,6 +41,7 @@ struct wmWindowManager;
/* flag */
#define OPTYPE_REGISTER 1
+#define OPTYPE_UNDO 2
/* context to call operator in for WM_operator_name_call */
enum {
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 *********** */