[Bf-blender-cvs] [6609fa29968] temp-ui-button-type-refactor: Merge branch 'master' into temp-ui-cleanup

Julian Eisel noreply at git.blender.org
Fri Jun 5 14:22:47 CEST 2020


Commit: 6609fa29968454c35efec909955d9296d1962cc7
Author: Julian Eisel
Date:   Fri Jun 5 13:53:47 2020 +0200
Branches: temp-ui-button-type-refactor
https://developer.blender.org/rB6609fa29968454c35efec909955d9296d1962cc7

Merge branch 'master' into temp-ui-cleanup

===================================================================



===================================================================

diff --cc source/blender/editors/include/UI_interface.h
index 230a8a2fa3d,01bc59f71e7..303f14224a2
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@@ -504,15 -504,24 +506,24 @@@ typedef void (*uiButHandleRenameFunc)(s
  typedef void (*uiButHandleNFunc)(struct bContext *C, void *argN, void *arg2);
  typedef void (*uiButHandleHoldFunc)(struct bContext *C, struct ARegion *butregion, uiBut *but);
  typedef int (*uiButCompleteFunc)(struct bContext *C, char *str, void *arg);
- typedef struct ARegion *(*uiButSearchCreateFunc)(struct bContext *C,
-                                                  struct ARegion *butregion,
-                                                  struct uiButSearch *search_but);
- typedef void (*uiButSearchFunc)(const struct bContext *C,
-                                 void *arg,
-                                 const char *str,
-                                 uiSearchItems *items);
  
- typedef void (*uiButSearchArgFreeFunc)(void *arg);
+ /* Search types. */
+ typedef struct ARegion *(*uiButSearchCreateFn)(struct bContext *C,
+                                                struct ARegion *butregion,
 -                                               uiBut *but);
++                                               uiBut *search_but);
+ typedef void (*uiButSearchUpdateFn)(const struct bContext *C,
+                                     void *arg,
+                                     const char *str,
+                                     uiSearchItems *items);
+ typedef void (*uiButSearchArgFreeFn)(void *arg);
+ typedef bool (*uiButSearchContextMenuFn)(struct bContext *C,
+                                          void *arg,
+                                          void *active,
+                                          const struct wmEvent *event);
+ typedef struct ARegion *(*uiButSearchTooltipFn)(struct bContext *C,
+                                                 struct ARegion *region,
+                                                 void *arg,
+                                                 void *active);
  
  /* Must return allocated string. */
  typedef char *(*uiButToolTipFunc)(struct bContext *C, void *argN, const char *tip);
diff --cc source/blender/editors/interface/interface.c
index 45e474238ca,04c259ab092..bba99b8dd1b
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@@ -807,14 -807,7 +807,10 @@@ static bool ui_but_update_from_old_bloc
  
      SWAP(ListBase, but->extra_op_icons, oldbut->extra_op_icons);
  
 -    SWAP(struct uiButSearchData *, oldbut->search, but->search);
 +    if (oldbut->type == UI_BTYPE_SEARCH_MENU) {
 +      uiButSearch *search_oldbut = (uiButSearch *)oldbut, *search_but = (uiButSearch *)but;
- 
-       SWAP(uiButSearchArgFreeFunc,
-            search_oldbut->item_collect_arg_free_func,
-            search_but->item_collect_arg_free_func);
-       SWAP(void *, search_oldbut->item_collect_arg, search_but->item_collect_arg);
++      SWAP(struct uiButSearchData *, search_oldbut->search, search_but->search);
 +    }
  
      /* copy hardmin for list rows to prevent 'sticking' highlight to mouse position
       * when scrolling without moving mouse (see [#28432]) */
@@@ -3216,27 -3206,6 +3212,32 @@@ static void ui_set_but_soft_range(uiBu
  
  /* ******************* Free ********************/
  
 +/**
 + * Free data specific to a certain button type.
 + * For now just do in a switch-case, we could instead have a callback stored in #uiBut and set that
 + * in #ui_but_alloc_info().
 + */
 +static void ui_but_free_type_specific(uiBut *but)
 +{
 +  switch (but->type) {
 +    case UI_BTYPE_SEARCH_MENU: {
 +      uiButSearch *search_but = (uiButSearch *)but;
-       if (search_but->item_collect_arg_free_func) {
-         search_but->item_collect_arg_free_func(search_but->item_collect_arg);
-         search_but->item_collect_arg = NULL;
++
++      if (search_but->search != NULL) {
++        if (search_but->search->arg_free_fn) {
++          search_but->search->arg_free_fn(but->search->arg);
++          search_but->search->arg = NULL;
++        }
++        MEM_freeN(search_but->search);
 +      }
++
 +      break;
 +    }
 +    default:
 +      break;
 +  }
 +}
 +
  /* can be called with C==NULL */
  static void ui_but_free(const bContext *C, uiBut *but)
  {
@@@ -6460,46 -6351,53 +6461,57 @@@ uiBut *uiDefSearchBut(uiBlock *block
  }
  
  /**
-  * \param search_func, bfunc: both get it as \a arg.
-  * \param arg: user value,
-  * \param active: when set, button opens with this item visible and selected.
-  * \param separator_string: when not NULL, this string is used as a separator,
-  * showing the icon and highlighted text after the last instance of this string.
+  * \note The item-pointer (referred to below) is a per search item user pointer
+  * passed to #UI_search_item_add (stored in  #uiSearchItems.pointers).
+  *
+  * \param search_create_fn: Function to create the menu.
+  * \param search_update_fn: Function to refresh search content after the search text has changed.
+  * \param arg: user value.
+  * \param search_arg_free_fn: When non-null, use this function to free \a arg.
+  * \param search_exec_fn: Function that executes the action, gets \a arg as the first argument.
+  * The second argument as the active item-pointer
+  * \param active: When non-null, this item-pointer item will be visible and selected,
+  * otherwise the first item will be selected.
   */
  void UI_but_func_search_set(uiBut *but,
-                             uiButSearchCreateFunc popup_create_func,
-                             uiButSearchFunc search_func,
+                             uiButSearchCreateFn search_create_fn,
+                             uiButSearchUpdateFn search_update_fn,
                              void *arg,
-                             uiButSearchArgFreeFunc search_arg_free_func,
-                             uiButHandleFunc bfunc,
-                             const char *search_sep_string,
+                             uiButSearchArgFreeFn search_arg_free_fn,
+                             uiButHandleFunc search_exec_fn,
                              void *active)
  {
 +  uiButSearch *but_search = (uiButSearch *)but;
 +
 +  BLI_assert(but->type == UI_BTYPE_SEARCH_MENU);
 +
    /* needed since callers don't have access to internal functions
     * (as an alternative we could expose it) */
-   if (popup_create_func == NULL) {
-     popup_create_func = ui_searchbox_create_generic;
+   if (search_create_fn == NULL) {
+     search_create_fn = ui_searchbox_create_generic;
    }
  
-   if (but_search->item_collect_arg_free_func != NULL) {
-     but_search->item_collect_arg_free_func(but_search->item_collect_arg);
-     but_search->item_collect_arg = NULL;
 -  struct uiButSearchData *search = but->search;
++  struct uiButSearchData *search = but_search->search;
+   if (search != NULL) {
+     if (search->arg_free_fn != NULL) {
 -      search->arg_free_fn(but->search->arg);
++      search->arg_free_fn(but_search->search->arg);
+       search->arg = NULL;
+     }
+   }
+   else {
 -    search = MEM_callocN(sizeof(*but->search), __func__);
 -    but->search = search;
++    search = MEM_callocN(sizeof(*but_search->search), __func__);
++    but_search->search = search;
    }
  
-   but_search->popup_create_func = popup_create_func;
-   but_search->item_collect_func = search_func;
+   search->create_fn = search_create_fn;
+   search->update_fn = search_update_fn;
  
-   but_search->item_collect_arg = arg;
-   but_search->item_collect_arg_free_func = search_arg_free_func;
-   but_search->item_sep_string = search_sep_string;
+   search->arg = arg;
+   search->arg_free_fn = search_arg_free_fn;
  
-   if (bfunc) {
+   if (search_exec_fn) {
  #ifdef DEBUG
 -    if (but->func) {
 +    if (but_search->but.func) {
        /* watch this, can be cause of much confusion, see: T47691 */
        printf("%s: warning, overwriting button callback with search function callback!\n",
               __func__);
diff --cc source/blender/editors/interface/interface_context_menu.c
index 29a131cca73,cc370113422..00c5c5ea3ef
--- a/source/blender/editors/interface/interface_context_menu.c
+++ b/source/blender/editors/interface/interface_context_menu.c
@@@ -962,7 -962,7 +962,7 @@@ bool ui_popup_context_menu_for_button(b
      const PropertyType prop_type = RNA_property_type(but->rnaprop);
      if (((prop_type == PROP_POINTER) ||
           (prop_type == PROP_STRING && but->type == UI_BTYPE_SEARCH_MENU &&
-           ((uiButSearch *)but)->item_collect_func == ui_rna_collection_search_cb)) &&
 -          but->search->update_fn == ui_rna_collection_search_update_fn)) &&
++          ((uiButSearch *)but)->search->update_fn == ui_rna_collection_search_update_fn)) &&
          ui_jump_to_target_button_poll(C)) {
        uiItemO(layout,
                CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Jump to Target"),
diff --cc source/blender/editors/interface/interface_handlers.c
index 7a9aff80ed7,eb99d044e17..0c70360655a
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@@ -753,12 -756,11 +756,12 @@@ static void ui_apply_but_func(bContext 
      after->rnapoin = but->rnapoin;
      after->rnaprop = but->rnaprop;
  
 -    if (but->search != NULL) {
 -      after->search_arg_free_fn = but->search->arg_free_fn;
 -      after->search_arg = but->search->arg;
 -      but->search->arg_free_fn = NULL;
 -      but->search->arg = NULL;
 +    if (but->type == UI_BTYPE_SEARCH_MENU) {
 +      uiButSearch *search_but = (uiButSearch *)but;
-       after->search_arg_free_func = search_but->item_collect_arg_free_func;
-       after->search_arg = search_but->item_collect_arg;
-       search_but->item_collect_arg_free_func = NULL;
-       search_but->item_collect_arg = NULL;
++      after->search_arg_free_fn = search_but->search->arg_free_fn;
++      after->search_arg = search_but->search->arg;
++      search_but->search->arg_free_fn = NULL;
++      search_but->search->arg = NULL;
      }
  
      if (but->context) {
@@@ -3318,11 -3311,13 +3313,15 @@@ static void ui_textedit_begin(b

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list