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:
Diffstat (limited to 'source/blender/windowmanager/intern/wm_event_system.c')
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c77
1 files changed, 46 insertions, 31 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index a5cbc835168..a03425f1d11 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -309,44 +309,59 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, I
return retval;
}
-/* forces event to go to the region window, for header menus */
-int WM_operator_call_rwin(bContext *C, const char *opstring)
+/* invokes operator in context */
+int WM_operator_call(bContext *C, const char *opstring, int context)
{
wmOperatorType *ot= WM_operatortype_find(opstring);
-
+ int retval;
+
/* 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;
+ if(context == WM_OP_REGION_WIN) {
+ /* forces event to go to the region window, for header menus */
+ ARegion *ar= C->region;
+
+ 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, NULL);
+
+ /* set region back */
+ C->region= ar;
+
+ return retval;
}
-
- retval= wm_operator_invoke(C, ot, C->window->eventstate, NULL);
-
- /* set region back */
- C->region= ar;
-
- return retval;
- }
-
- return 0;
-}
+ else if(context == WM_OP_AREA) {
+ /* remove region from context */
+ ARegion *ar= C->region;
-/* invokes operator in context */
-int WM_operator_call(bContext *C, const char *opstring)
-{
- wmOperatorType *ot= WM_operatortype_find(opstring);
+ C->region= NULL;
+ retval= wm_operator_invoke(C, ot, C->window->eventstate, NULL);
+ C->region= ar;
- /* dummie test */
- if(ot && C && C->window) {
- return wm_operator_invoke(C, ot, C->window->eventstate, NULL);
+ return retval;
+ }
+ else if(context == WM_OP_SCREEN) {
+ /* remove region + area from context */
+ ARegion *ar= C->region;
+ ScrArea *area= C->area;
+
+ C->region= NULL;
+ C->area= NULL;
+ retval= wm_operator_invoke(C, ot, C->window->eventstate, NULL);
+ C->region= ar;
+ C->area= area;
+
+ return retval;
+ }
+ else
+ return wm_operator_invoke(C, ot, C->window->eventstate, NULL);
}
return 0;