diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-11 18:38:16 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-11 18:38:16 +0300 |
commit | d39b43aa2010c9b5262428b4afedebd1686307ba (patch) | |
tree | 92fb3ad78b42bb9c858af84c7887e850bc68f65d /source/blender/windowmanager | |
parent | 045306ae499661d585bf989f7b6504caadd2a219 (diff) |
2.5
TimeLine window pulldowns work sorta (for the options that were coded :)
Still trying to bring back code without recoding uiDefButs. In future these
will get directly operator stuff linked. For time being made a simple
operator call function, like:
WM_operator_call(C, "ED_MARKER_OT_add");
and for forcing operator to run in the main region-window:
WM_operator_call_rwin(C, "ED_MARKER_OT_add");
These calls also work for modal operators, like marker grab in this case.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 43 |
2 files changed, 45 insertions, 0 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 08c6a786f69..908070d33fa 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -105,6 +105,8 @@ wmOperatorType *WM_operatortype_find(const char *idname); void WM_operatortype_append (void (*opfunc)(wmOperatorType*)); int WM_operator_invoke (struct bContext *C, wmOperatorType *ot, struct wmEvent *event); +int WM_operator_call (struct bContext *C, const char *opstring); +int WM_operator_call_rwin (struct bContext *C, const char *opstring); /* default operator callbacks for border/lasso */ int WM_border_select_invoke (struct bContext *C, wmOperator *op, struct wmEvent *event); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 54fbbacfaaa..ff0d6b83b34 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -305,6 +305,49 @@ int WM_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event) return retval; } +/* forces event to go to the region window, for header menus */ +int WM_operator_call_rwin(bContext *C, const char *opstring) +{ + wmOperatorType *ot= WM_operatortype_find(opstring); + + /* dummie test */ + if(ot && C && C->window) { + ARegion *ar= C->region; + int retval; + + if(C->area) { + ARegion *ar1= C->area->regionbase.first; + for(; ar1; ar1= ar1->next) + if(ar1->regiontype==RGN_TYPE_WINDOW) + break; + if(ar1) + C->region= ar1; + } + + retval= WM_operator_invoke(C, ot, C->window->eventstate); + + /* set region back */ + C->region= ar; + + return retval; + } + + return 0; +} + +/* invokes operator in context */ +int WM_operator_call(bContext *C, const char *opstring) +{ + wmOperatorType *ot= WM_operatortype_find(opstring); + + /* dummie test */ + if(ot && C && C->window) { + return WM_operator_invoke(C, ot, C->window->eventstate); + } + + return 0; +} + /* ********************* handlers *************** */ |