From d36a1b4f06698bcf031f06f7f289ca4636f42c88 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 9 Jun 2009 10:30:11 +0000 Subject: [PATCH] added layout attribute for setting the operator execution context. eg, layout.operator_context = 'INVOKE_REGION_WIN' Needed to set the context that menu item operators are executed in. fixed missing NULL check with anim system debug printing. --- release/ui/space_sequencer.py | 2 +- source/blender/editors/animation/keyframing.c | 5 ++- source/blender/editors/include/UI_interface.h | 2 ++ .../editors/interface/interface_layout.c | 6 ++++ source/blender/makesrna/intern/rna_ui.c | 33 +++++++++++++++++-- source/blender/windowmanager/WM_types.h | 1 + 6 files changed, 44 insertions(+), 5 deletions(-) diff --git a/release/ui/space_sequencer.py b/release/ui/space_sequencer.py index 01583e578ab..2c599fd96cd 100644 --- a/release/ui/space_sequencer.py +++ b/release/ui/space_sequencer.py @@ -188,7 +188,7 @@ class SEQUENCER_MT_strip(bpy.types.Menu): layout = self.layout st = context.space_data - # uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_REGION_WIN); + layout.operator_context = 'INVOKE_REGION_WIN' layout.column() layout.item_enumO("TFM_OT_transform", "mode", 'TRANSLATION', text="Grab/Move") diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index 4a5f9efa968..90804052370 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1249,7 +1249,10 @@ static int insert_key_button_exec (bContext *C, wmOperator *op) } else if (G.f & G_DEBUG) { printf("ptr.data = %p, prop = %p,", ptr.data, prop); - printf("animateable = %d \n", RNA_property_animateable(&ptr, prop)); + if(prop) + printf("animateable = %d \n", RNA_property_animateable(&ptr, prop)); + else + printf("animateable = NULL \n"); } if (success) { diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 14394b124c3..fad19b6063d 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -581,6 +581,8 @@ void uiLayoutSetKeepAspect(uiLayout *layout, int keepaspect); void uiLayoutSetScaleX(uiLayout *layout, float scale); void uiLayoutSetScaleY(uiLayout *layout, float scale); + +int uiLayoutGetOperatorContext(uiLayout *layout); int uiLayoutGetActive(uiLayout *layout); int uiLayoutGetEnabled(uiLayout *layout); int uiLayoutGetRedAlert(uiLayout *layout); diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 7144e9b866f..723e48e5970 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -1951,6 +1951,12 @@ uiBlock *uiLayoutGetBlock(uiLayout *layout) return layout->root->block; } +int uiLayoutGetOperatorContext(uiLayout *layout) +{ + return layout->root->opcontext; +} + + void uiBlockSetCurLayout(uiBlock *block, uiLayout *layout) { block->curlayout= layout; diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 796817e1018..b6912c44fb7 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -32,6 +32,8 @@ #include "UI_interface.h" +#include "WM_types.h" + #ifdef RNA_RUNTIME #include "MEM_guardedalloc.h" @@ -47,7 +49,6 @@ #include "BKE_screen.h" #include "WM_api.h" -#include "WM_types.h" static ARegionType *region_type_find(ReportList *reports, int space_type, int region_type) { @@ -418,6 +419,16 @@ static void rna_UILayout_active_set(struct PointerRNA *ptr, int value) return uiLayoutSetActive(ptr->data, value); } +static void rna_UILayout_op_context_set(struct PointerRNA *ptr, int value) +{ + return uiLayoutSetOperatorContext(ptr->data, value); +} + +static int rna_UILayout_op_context_get(struct PointerRNA *ptr) +{ + return uiLayoutGetOperatorContext(ptr->data); +} + static int rna_UILayout_enabled_get(struct PointerRNA *ptr) { return uiLayoutGetEnabled(ptr->data); @@ -478,7 +489,7 @@ static void rna_UILayout_scale_y_set(struct PointerRNA *ptr, float value) return uiLayoutSetScaleY(ptr->data, value); } -#else +#else // RNA_RUNTIME static void rna_def_ui_layout(BlenderRNA *brna) { @@ -491,6 +502,18 @@ static void rna_def_ui_layout(BlenderRNA *brna) {UI_LAYOUT_ALIGN_CENTER, "CENTER", "Center", ""}, {UI_LAYOUT_ALIGN_RIGHT, "RIGHT", "RIght", ""}, {0, NULL, NULL, NULL}}; + + /* see WM_types.h */ + static EnumPropertyItem operator_context_items[] = { + {WM_OP_INVOKE_DEFAULT, "INVOKE_DEFAULT", "Invoke Default", ""}, + {WM_OP_INVOKE_REGION_WIN, "INVOKE_REGION_WIN", "Invoke Region Window", ""}, + {WM_OP_INVOKE_AREA, "INVOKE_AREA", "Invoke Area", ""}, + {WM_OP_INVOKE_SCREEN, "INVOKE_SCREEN", "Invoke Screen", ""}, + {WM_OP_EXEC_DEFAULT, "EXEC_DEFAULT", "Exec Default", ""}, + {WM_OP_EXEC_REGION_WIN, "EXEC_REGION_WIN", "Exec Region Window", ""}, + {WM_OP_EXEC_AREA, "EXEC_AREA", "Exec Area", ""}, + {WM_OP_EXEC_SCREEN, "EXEC_SCREEN", "Exec Screen", ""}, + {0, NULL, NULL, NULL}}; srna= RNA_def_struct(brna, "UILayout", NULL); RNA_def_struct_sdna(srna, "uiLayout"); @@ -498,6 +521,10 @@ static void rna_def_ui_layout(BlenderRNA *brna) prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_UILayout_active_get", "rna_UILayout_active_set"); + + prop= RNA_def_property(srna, "operator_context", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, operator_context_items); + RNA_def_property_enum_funcs(prop, "rna_UILayout_op_context_get", "rna_UILayout_op_context_set", NULL); prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_funcs(prop, "rna_UILayout_enabled_get", "rna_UILayout_enabled_set"); @@ -661,5 +688,5 @@ void RNA_def_ui(BlenderRNA *brna) rna_def_menu(brna); } -#endif +#endif // RNA_RUNTIME diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 2a68a9980de..739cfbcc1ac 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -44,6 +44,7 @@ struct wmWindowManager; #define OPTYPE_UNDO 2 /* context to call operator in for WM_operator_name_call */ +/* rna_ui.c contains EnumPropertyItem's of these, keep in sync */ enum { /* if there's invoke, call it, otherwise exec */ WM_OP_INVOKE_DEFAULT, -- 2.28.0