From d39b43aa2010c9b5262428b4afedebd1686307ba Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 11 Dec 2008 15:38:16 +0000 Subject: 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. --- source/blender/windowmanager/WM_api.h | 2 + .../blender/windowmanager/intern/wm_event_system.c | 43 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) (limited to 'source/blender/windowmanager') 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 *************** */ -- cgit v1.2.3