diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-03-21 16:30:17 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-03-21 16:32:01 +0300 |
commit | 9a09246dc02df29302130fc902cc69f827c99311 (patch) | |
tree | 412c9af8fd6a74c8e3f6194a83abbeace3a1c2e4 /source/blender | |
parent | 19dc7f7fdfc996f7cb68f3f5269c9ce7b839a005 (diff) |
WM: enable activate on init for wmOperatorType.prop
This enables popups to edit text when displayed,
use for new collection popup.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/include/UI_interface.h | 1 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 1 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_utils.c | 22 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 6 | ||||
-rw-r--r-- | source/blender/editors/object/object_edit.c | 1 | ||||
-rw-r--r-- | source/blender/editors/screen/screendump.c | 2 | ||||
-rw-r--r-- | source/blender/editors/sound/sound_ops.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_ops.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_add.c | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_types.h | 9 |
10 files changed, 37 insertions, 13 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index bd08ed88603..d330014d277 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -839,6 +839,7 @@ uiBut *uiDefAutoButR(uiBlock *block, struct PointerRNA *ptr, struct PropertyRNA eAutoPropButsReturn uiDefAutoButsRNA( uiLayout *layout, struct PointerRNA *ptr, bool (*check_prop)(struct PointerRNA *ptr, struct PropertyRNA *prop, void *user_data), void *user_data, + struct PropertyRNA *prop_activate_init, eButLabelAlign label_align, const bool compact); /* use inside searchfunc to add items */ diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index b4bfdbd340f..e63b4572894 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -4466,6 +4466,7 @@ eAutoPropButsReturn uiTemplateOperatorPropertyButs( layout, &ptr, op->type->poll_property ? ui_layout_operator_buts_poll_property : NULL, op->type->poll_property ? &user_data : NULL, + op->type->prop, label_align, (flag & UI_TEMPLATE_OP_PROPS_COMPACT)); if ((return_info & UI_PROP_BUTS_NONE_ADDED) && (flag & UI_TEMPLATE_OP_PROPS_SHOW_EMPTY)) { diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 85eae9a253d..74f65220433 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -146,20 +146,22 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind /** * \a check_prop callback filters functions to avoid drawing certain properties, * in cases where PROP_HIDDEN flag can't be used for a property. + * + * \param prop_activate_init: Property to activate on initial popup (#UI_BUT_ACTIVATE_ON_INIT). */ eAutoPropButsReturn uiDefAutoButsRNA( uiLayout *layout, PointerRNA *ptr, bool (*check_prop)(PointerRNA *ptr, PropertyRNA *prop, void *user_data), void *user_data, + PropertyRNA *prop_activate_init, const eButLabelAlign label_align, const bool compact) { eAutoPropButsReturn return_info = UI_PROP_BUTS_NONE_ADDED; uiLayout *split, *col; - int flag; const char *name; RNA_STRUCT_BEGIN (ptr, prop) { - flag = RNA_property_flag(prop); + const int flag = RNA_property_flag(prop); if (flag & PROP_HIDDEN) { continue; @@ -169,11 +171,11 @@ eAutoPropButsReturn uiDefAutoButsRNA( continue; } + const PropertyType type = RNA_property_type(prop); switch (label_align) { case UI_BUT_LABEL_ALIGN_COLUMN: case UI_BUT_LABEL_ALIGN_SPLIT_COLUMN: { - PropertyType type = RNA_property_type(prop); const bool is_boolean = (type == PROP_BOOLEAN && !RNA_property_array_check(prop)); name = RNA_property_ui_name(prop); @@ -208,8 +210,22 @@ eAutoPropButsReturn uiDefAutoButsRNA( break; } + /* Only buttons that can be edited as text. */ + const bool use_activate_init = ( + (prop == prop_activate_init) && + (ELEM(type, PROP_STRING, PROP_INT, PROP_FLOAT))); + + if (use_activate_init) { + uiLayoutSetActivateInit(col, true); + } + uiItemFullR(col, ptr, prop, -1, 0, compact ? UI_ITEM_R_COMPACT : 0, name, ICON_NONE); return_info &= ~UI_PROP_BUTS_NONE_ADDED; + + if (use_activate_init) { + uiLayoutSetActivateInit(col, false); + } + } RNA_STRUCT_END; diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 98700425e56..5d653ffe00b 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -7540,7 +7540,7 @@ static void edbm_point_normals_ui(bContext *C, wmOperator *op) RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); /* Main auto-draw call */ - uiDefAutoButsRNA(layout, &ptr, point_normals_draw_check_prop, NULL, '\0', false); + uiDefAutoButsRNA(layout, &ptr, point_normals_draw_check_prop, NULL, NULL, '\0', false); } void MESH_OT_point_normals(struct wmOperatorType *ot) @@ -7935,7 +7935,7 @@ static void edbm_average_normals_ui(bContext *C, wmOperator *op) RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); /* Main auto-draw call */ - uiDefAutoButsRNA(layout, &ptr, average_normals_draw_check_prop, NULL, '\0', false); + uiDefAutoButsRNA(layout, &ptr, average_normals_draw_check_prop, NULL, NULL, '\0', false); } void MESH_OT_average_normals(struct wmOperatorType *ot) @@ -8127,7 +8127,7 @@ static void edbm_normals_tools_ui(bContext *C, wmOperator *op) RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); /* Main auto-draw call */ - uiDefAutoButsRNA(layout, &ptr, normals_tools_draw_check_prop, NULL, '\0', false); + uiDefAutoButsRNA(layout, &ptr, normals_tools_draw_check_prop, NULL, NULL, '\0', false); } void MESH_OT_normals_tools(struct wmOperatorType *ot) diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 1964cd53cc7..7950e79162d 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1711,6 +1711,7 @@ void OBJECT_OT_move_to_collection(wmOperatorType *ot) prop = RNA_def_string(ot->srna, "new_collection_name", NULL, MAX_NAME, "Name", "Name of the newly added collection"); RNA_def_property_flag(prop, PROP_SKIP_SAVE); + ot->prop = prop; } void OBJECT_OT_link_to_collection(wmOperatorType *ot) diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c index e49b42574a8..2e634cccedb 100644 --- a/source/blender/editors/screen/screendump.c +++ b/source/blender/editors/screen/screendump.c @@ -260,7 +260,7 @@ static void screenshot_draw(bContext *UNUSED(C), wmOperator *op) /* main draw call */ RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr); - uiDefAutoButsRNA(layout, &ptr, screenshot_draw_check_prop, NULL, UI_BUT_LABEL_ALIGN_NONE, false); + uiDefAutoButsRNA(layout, &ptr, screenshot_draw_check_prop, NULL, NULL, UI_BUT_LABEL_ALIGN_NONE, false); } static bool screenshot_poll(bContext *C) diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c index 8c6970eba77..2a64d87fcba 100644 --- a/source/blender/editors/sound/sound_ops.c +++ b/source/blender/editors/sound/sound_ops.c @@ -627,7 +627,7 @@ static void sound_mixdown_draw(bContext *C, wmOperator *op) RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); /* main draw call */ - uiDefAutoButsRNA(layout, &ptr, sound_mixdown_draw_check_prop, NULL, UI_BUT_LABEL_ALIGN_NONE, false); + uiDefAutoButsRNA(layout, &ptr, sound_mixdown_draw_check_prop, NULL, NULL, UI_BUT_LABEL_ALIGN_NONE, false); } #endif // WITH_AUDASPACE diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index bba336ca2e0..9cbb4263e23 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -1422,7 +1422,7 @@ static void image_open_draw(bContext *UNUSED(C), wmOperator *op) /* main draw call */ RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr); - uiDefAutoButsRNA(layout, &ptr, image_open_draw_check_prop, NULL, UI_BUT_LABEL_ALIGN_NONE, false); + uiDefAutoButsRNA(layout, &ptr, image_open_draw_check_prop, NULL, NULL, UI_BUT_LABEL_ALIGN_NONE, false); /* image template */ RNA_pointer_create(NULL, &RNA_ImageFormatSettings, imf, &imf_ptr); @@ -2147,7 +2147,7 @@ static void image_save_as_draw(bContext *UNUSED(C), wmOperator *op) /* main draw call */ RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr); - uiDefAutoButsRNA(layout, &ptr, image_save_as_draw_check_prop, NULL, UI_BUT_LABEL_ALIGN_NONE, false); + uiDefAutoButsRNA(layout, &ptr, image_save_as_draw_check_prop, NULL, NULL, UI_BUT_LABEL_ALIGN_NONE, false); /* multiview template */ if (is_multiview) diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index 34211f4d907..c21d1f6f57e 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -697,7 +697,7 @@ static void sequencer_add_draw(bContext *UNUSED(C), wmOperator *op) /* main draw call */ RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr); - uiDefAutoButsRNA(layout, &ptr, sequencer_add_draw_check_prop, NULL, UI_BUT_LABEL_ALIGN_NONE, false); + uiDefAutoButsRNA(layout, &ptr, sequencer_add_draw_check_prop, NULL, NULL, UI_BUT_LABEL_ALIGN_NONE, false); /* image template */ RNA_pointer_create(NULL, &RNA_ImageFormatSettings, imf, &imf_ptr); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 96560b423a1..9e18a655903 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -611,8 +611,13 @@ typedef struct wmOperatorType { /* previous settings - for initializing on re-use */ struct IDProperty *last_properties; - /* Default rna property to use for generic invoke functions. - * menus, enum search... etc. Example: Enum 'type' for a Delete menu */ + /** + * Default rna property to use for generic invoke functions. + * menus, enum search... etc. Example: Enum 'type' for a Delete menu. + * + * When assigned a string/number property, + * immediately edit the value when used in a popup. see: #UI_BUT_ACTIVATE_ON_INIT. + */ PropertyRNA *prop; /* struct wmOperatorTypeMacro */ |