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-24 17:52:17 +0300
committerTon Roosendaal <ton@blender.org>2008-12-24 17:52:17 +0300
commit3c612bc0e237c48bc8a3f6fdc20cec4a3b140228 (patch)
treecf36dfbf332248f0960d9f21e9fd4d28c08177f0 /source/blender/editors/interface/interface_regions.c
parent9bb7babd2c17f4be6aea2ffbfe89e18fffbd0341 (diff)
2.5
Fix: popup menus were not freeing operators. Made a new Popup menu call for this case: uiPupmenuOperator(C, maxrow, op, propname, menustr); It will set enum "propname" to the menu item and call operator, register it optionally and free it. Use it in "invoke" calls. Next: automatic menu generating for enum properties!
Diffstat (limited to 'source/blender/editors/interface/interface_regions.c')
-rw-r--r--source/blender/editors/interface/interface_regions.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index d5b49fa801d..fe7e236a841 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -1629,6 +1629,33 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiMenuBlockHandle *handle, void *
return block;
}
+/* This one will set enum propname, call operator and register it, and free the operator itself,
+ call it in op->invoke with returning OPERATOR_RUNNING_MODAL */
+/* Note: propname has to be static */
+void uiPupmenuOperator(bContext *C, int maxrow, wmOperator *op, const char *propname, char *str)
+{
+ wmWindow *window= CTX_wm_window(C);
+ uiPupMenuInfo info;
+ uiMenuBlockHandle *menu;
+
+ memset(&info, 0, sizeof(info));
+ info.mx= window->eventstate->x;
+ info.my= window->eventstate->y;
+ info.maxrow= maxrow;
+ info.instr= str;
+
+ menu= ui_menu_block_create(C, NULL, NULL, ui_block_func_PUPMENU, &info);
+ menu->popup= 1;
+
+ UI_add_popup_handlers(&window->handlers, menu);
+ WM_event_add_mousemove(C);
+
+ menu->op_arg= op;
+ menu->propname= propname;
+}
+
+
+/* this one only to be called with operatortype name option */
void uiPupmenu(bContext *C, int maxrow, uiPupmenuFunc func, void *arg, char *str, ...)
{
wmWindow *window= CTX_wm_window(C);
@@ -1658,7 +1685,7 @@ static void operator_cb(bContext *C, void *arg, int retval)
const char *opname= arg;
if(opname && retval > 0)
- WM_operator_call(C, opname, WM_OP_DEFAULT, NULL);
+ WM_operator_name_call(C, opname, WM_OP_DEFAULT, NULL);
}
static void vconfirm(bContext *C, char *opname, char *title, char *itemfmt, va_list ap)