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>2008-12-17 18:38:40 +0300
committerTon Roosendaal <ton@blender.org>2008-12-17 18:38:40 +0300
commit07d63eb67943e6f9e93443fbbb903436c9b9503d (patch)
tree17b20fffb625948666ae05b89f6cc26c2eb28ae2
parent616edcca1222c25b53c13d4da4c3af4f7a0f349a (diff)
2.5
- Made a nice generic 'OK confirm' implementation for operators. Just use in operator type definition this line: ot->invoke= WM_operator_confirm; It will autmatically use operator name for asking OK. It will also use properties (if set before). Note for Brecht: the test okee_operator() you coded could better not be used in operators themselves. In future we can also add menus that get automatically generated based on operator properties. Like 'add constraint' showing the constraint types. - Added this confirm call for most of the keys you'd expect it for. (user settings, delete marker, rip area, split region, etc). - Cleanup: moved ed_markers.c to the util/ directory, it doesnt belong in space_time. Also made separate function for the marker keymap definition. - removed ancient redraw notifier from ghost event level (every key press gave full screen draw)
-rw-r--r--source/blender/editors/include/ED_markers.h7
-rw-r--r--source/blender/editors/screen/screen_ops.c8
-rw-r--r--source/blender/editors/space_time/time_ops.c17
-rw-r--r--source/blender/editors/util/ed_markers.c (renamed from source/blender/editors/space_time/ed_markers.c)23
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c47
-rw-r--r--source/blender/windowmanager/intern/wm_window.c2
6 files changed, 54 insertions, 50 deletions
diff --git a/source/blender/editors/include/ED_markers.h b/source/blender/editors/include/ED_markers.h
index cad985ce37c..49f805e4ddb 100644
--- a/source/blender/editors/include/ED_markers.h
+++ b/source/blender/editors/include/ED_markers.h
@@ -34,13 +34,14 @@ enum {
DRAW_MARKERS_LOCAL = (1<<1)
};
-
+struct wmWindowManager;
void draw_markers_time(const bContext *C, int flag);
-/* register operators, called in ED_operatortypes_screen() */
+/* called in screen_ops.c:ED_operatortypes_screen() */
void ED_marker_operatortypes(void);
-
+/* called in screen_ops.c:ED_keymap_screen() */
+void ED_marker_keymap(struct wmWindowManager *wm);
#endif /* ED_MARKERS_H */
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index d16ad075bf3..2ad839997db 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -271,7 +271,7 @@ void ED_SCR_OT_area_rip(wmOperatorType *ot)
ot->name= "Rip Area into New Window";
ot->idname= "ED_SCR_OT_area_rip";
- ot->invoke= NULL; //WM_operator_confirm;
+ ot->invoke= WM_operator_confirm;
ot->exec= screen_area_rip_op;
ot->poll= ED_operator_areaactive;
}
@@ -1124,6 +1124,7 @@ void ED_SCR_OT_repeat_last(wmOperatorType *ot)
ot->idname= "ED_SCR_OT_repeat_last";
/* api callbacks */
+ ot->invoke= WM_operator_confirm;
ot->exec= repeat_last_exec;
ot->poll= ED_operator_screenactive;
@@ -1161,6 +1162,7 @@ void ED_SCR_OT_region_split(wmOperatorType *ot)
ot->idname= "ED_SCR_OT_region_split";
/* api callbacks */
+ ot->invoke= WM_operator_confirm;
ot->exec= region_split_exec;
ot->poll= ED_operator_areaactive;
@@ -1196,6 +1198,7 @@ void ED_SCR_OT_region_flip(wmOperatorType *ot)
ot->idname= "ED_SCR_OT_region_flip";
/* api callbacks */
+ ot->invoke= WM_operator_confirm;
ot->exec= region_flip_exec;
ot->poll= ED_operator_areaactive;
@@ -1299,5 +1302,8 @@ void ED_keymap_screen(wmWindowManager *wm)
RNA_enum_set(WM_keymap_add_item(keymap, "ED_SCR_OT_region_split", SKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "dir", 'v');
WM_keymap_add_item(keymap, "ED_SCR_OT_region_flip", F5KEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "ED_SCR_OT_repeat_last", F4KEY, KM_PRESS, 0, 0);
+
+ /* screen level global keymaps */
+ ED_marker_keymap(wm);
}
diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c
index c95e7fd7e9d..599594a3ec0 100644
--- a/source/blender/editors/space_time/time_ops.c
+++ b/source/blender/editors/space_time/time_ops.c
@@ -217,22 +217,5 @@ void time_keymap(wmWindowManager *wm)
WM_keymap_verify_item(keymap, "ED_TIME_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "ED_TIME_OT_toggle_time", TKEY, KM_PRESS, 0, 0);
-
- /* markers (XXX move to function?) */
- keymap= WM_keymap_listbase(wm, "Markers", 0, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_add", MKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_move", EVT_TWEAK_R, KM_ANY, 0, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_mouseselect", RIGHTMOUSE, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_mouseselect_extend", RIGHTMOUSE, KM_PRESS, KM_SHIFT, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_border_select", BKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_select_all", AKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "ED_MARKER_OT_delete", XKEY, KM_PRESS, 0, 0);
-
- WM_keymap_add_item(keymap, "ED_MARKER_OT_move", GKEY, KM_PRESS, 0, 0);
-
- /* generates event, in end to make select work */
- WM_keymap_verify_item(keymap, "WM_OT_tweak_gesture", RIGHTMOUSE, KM_PRESS, 0, 0);
-
}
diff --git a/source/blender/editors/space_time/ed_markers.c b/source/blender/editors/util/ed_markers.c
index 0dc68fb4b27..843a81e7086 100644
--- a/source/blender/editors/space_time/ed_markers.c
+++ b/source/blender/editors/util/ed_markers.c
@@ -197,6 +197,7 @@ static int ed_marker_add(bContext *C, wmOperator *op)
sprintf(marker->name, "Frame %d", frame); // XXX - temp code only
BLI_addtail(markers, marker);
+ WM_event_add_notifier(C, WM_NOTE_MARKERS_CHANGED, 0, NULL);
//BIF_undo_push("Add Marker");
return OPERATOR_FINISHED;
@@ -824,6 +825,7 @@ static void ED_MARKER_OT_delete(wmOperatorType *ot)
ot->idname= "ED_MARKER_OT_delete";
/* api callbacks */
+ ot->invoke= WM_operator_confirm;
ot->exec= ed_marker_delete_exec;
ot->poll= ED_operator_areaactive;
@@ -831,7 +833,7 @@ static void ED_MARKER_OT_delete(wmOperatorType *ot)
/* ************************** registration **********************************/
-/* called in ED_operatortypes_screen() */
+/* called in screen_ops.c:ED_operatortypes_screen() */
void ED_marker_operatortypes(void)
{
WM_operatortype_append(ED_MARKER_OT_add);
@@ -844,4 +846,23 @@ void ED_marker_operatortypes(void)
WM_operatortype_append(ED_MARKER_OT_delete);
}
+/* called in screen_ops.c:ED_keymap_screen() */
+void ED_marker_keymap(wmWindowManager *wm)
+{
+ ListBase *keymap= WM_keymap_listbase(wm, "Markers", 0, 0);
+
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_add", MKEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_move", EVT_TWEAK_R, KM_ANY, 0, 0);
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_mouseselect", RIGHTMOUSE, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_mouseselect_extend", RIGHTMOUSE, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_border_select", BKEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_select_all", AKEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "ED_MARKER_OT_delete", XKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "ED_MARKER_OT_move", GKEY, KM_PRESS, 0, 0);
+
+ /* generates event, in end to make select work */
+ WM_keymap_verify_item(keymap, "WM_OT_tweak_gesture", RIGHTMOUSE, KM_PRESS, 0, 0);
+
+}
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index e87451c2a8e..897b7b23a0e 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -47,6 +47,7 @@
#include "RNA_define.h"
#include "UI_interface.h"
+#include "UI_resources.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -88,13 +89,24 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType*))
/* ************ default op callbacks, exported *********** */
+static void operator_callback(bContext *C, void *arg, int retval)
+{
+ wmOperator *op= arg;
+
+ if(retval > 0)
+ op->type->exec(C, op);
+}
+
int WM_operator_confirm(bContext *C, wmOperator *op, wmEvent *event)
{
-// if(okee(op->type->name)) {
-// return op->type->exec(C, op);
-// }
- return 0;
+ char buf[512];
+
+ sprintf(buf, "OK? %%i%d%%t|%s", ICON_HELP, op->type->name);
+ pupmenu(C, buf, event->x, event->y, operator_callback, op);
+
+ return 1;
}
+
int WM_operator_winactive(bContext *C)
{
if(C->window==NULL) return 0;
@@ -108,7 +120,7 @@ static void WM_OT_window_duplicate(wmOperatorType *ot)
ot->name= "Duplicate Window";
ot->idname= "WM_OT_window_duplicate";
- ot->invoke= NULL; //WM_operator_confirm;
+ ot->invoke= WM_operator_confirm;
ot->exec= wm_window_duplicate_op;
ot->poll= WM_operator_winactive;
}
@@ -118,7 +130,7 @@ static void WM_OT_save_homefile(wmOperatorType *ot)
ot->name= "Save User Settings";
ot->idname= "WM_OT_save_homefile";
- ot->invoke= NULL; //WM_operator_confirm;
+ ot->invoke= WM_operator_confirm;
ot->exec= WM_write_homefile;
ot->poll= WM_operator_winactive;
@@ -130,7 +142,7 @@ static void WM_OT_window_fullscreen_toggle(wmOperatorType *ot)
ot->name= "Toggle Fullscreen";
ot->idname= "WM_OT_window_fullscreen_toggle";
- ot->invoke= NULL;
+ ot->invoke= WM_operator_confirm;
ot->exec= wm_window_fullscreen_toggle_op;
ot->poll= WM_operator_winactive;
}
@@ -140,27 +152,11 @@ static void WM_OT_exit_blender(wmOperatorType *ot)
ot->name= "Exit Blender";
ot->idname= "WM_OT_exit_blender";
- ot->invoke= NULL; /* do confirm stuff */
+ ot->invoke= WM_operator_confirm;
ot->exec= wm_exit_blender_op;
ot->poll= WM_operator_winactive;
}
-static int exit_okee_blender_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
- okee_operator(C, "WM_OT_exit_blender", "Quit Blender");
-
- return OPERATOR_FINISHED;
-}
-
-static void WM_OT_exit_okee_blender(wmOperatorType *ot)
-{
- ot->name= "Exit Blender";
- ot->idname= "WM_OT_exit_okee_blender";
-
- ot->invoke= exit_okee_blender_invoke;
- ot->poll= WM_operator_winactive;
-}
-
/* ************ window gesture operator-callback definitions ************** */
/*
* These are default callbacks for use in operators requiring gesture input
@@ -366,7 +362,6 @@ void wm_operatortype_init(void)
WM_operatortype_append(WM_OT_save_homefile);
WM_operatortype_append(WM_OT_window_fullscreen_toggle);
WM_operatortype_append(WM_OT_exit_blender);
- WM_operatortype_append(WM_OT_exit_okee_blender);
WM_operatortype_append(WM_OT_tweak_gesture);
}
@@ -379,6 +374,6 @@ void wm_window_keymap(wmWindowManager *wm)
WM_keymap_verify_item(keymap, "WM_OT_window_duplicate", AKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
WM_keymap_verify_item(keymap, "WM_OT_save_homefile", UKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_verify_item(keymap, "WM_OT_window_fullscreen_toggle", FKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "WM_OT_exit_okee_blender", QKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_verify_item(keymap, "WM_OT_exit_blender", QKEY, KM_PRESS, KM_CTRL, 0);
}
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 6f723d02f30..84c003c8a00 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -474,8 +474,6 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
break;
}
default:
- if(type==GHOST_kEventKeyDown) // XXX debug
- WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
wm_event_add_ghostevent(win, type, data);
break;
}