WM: enable activate on init for wmOperatorType.prop
authorCampbell Barton <ideasman42@gmail.com>
Thu, 21 Mar 2019 13:30:17 +0000 (00:30 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 21 Mar 2019 13:32:01 +0000 (00:32 +1100)
This enables popups to edit text when displayed,
use for new collection popup.

source/blender/editors/include/UI_interface.h
source/blender/editors/interface/interface_templates.c
source/blender/editors/interface/interface_utils.c
source/blender/editors/mesh/editmesh_tools.c
source/blender/editors/object/object_edit.c
source/blender/editors/screen/screendump.c
source/blender/editors/sound/sound_ops.c
source/blender/editors/space_image/image_ops.c
source/blender/editors/space_sequencer/sequencer_add.c
source/blender/windowmanager/WM_types.h

index bd08ed8..d330014 100644 (file)
@@ -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 */
index b4bfdbd..e63b457 100644 (file)
@@ -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)) {
index 85eae9a..74f6522 100644 (file)
@@ -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;
 
index 9870042..5d653ff 100644 (file)
@@ -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)
index 1964cd5..7950e79 100644 (file)
@@ -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)
index e49b425..2e634cc 100644 (file)
@@ -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)
index 8c6970e..2a64d87 100644 (file)
@@ -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
 
index bba336c..9cbb426 100644 (file)
@@ -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)
index 34211f4..c21d1f6 100644 (file)
@@ -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);
index 96560b4..9e18a65 100644 (file)
@@ -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 */