[Bf-blender-cvs] [51afd98b1dc] temp-ui-button-type-refactor: Fixes for changes in master

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


Commit: 51afd98b1dc2ec29ea1a0fad8cdbe4fb0834d215
Author: Julian Eisel
Date:   Fri Jun 5 13:54:58 2020 +0200
Branches: temp-ui-button-type-refactor
https://developer.blender.org/rB51afd98b1dc2ec29ea1a0fad8cdbe4fb0834d215

Fixes for changes in master

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

M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface.c
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_intern.h
M	source/blender/editors/interface/interface_region_search.c

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

diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 303f14224a2..6c5318d215f 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -510,7 +510,7 @@ typedef int (*uiButCompleteFunc)(struct bContext *C, char *str, void *arg);
 /* Search types. */
 typedef struct ARegion *(*uiButSearchCreateFn)(struct bContext *C,
                                                struct ARegion *butregion,
-                                               uiBut *search_but);
+                                               struct uiButSearch *search_but);
 typedef void (*uiButSearchUpdateFn)(const struct bContext *C,
                                     void *arg,
                                     const char *str,
@@ -1927,8 +1927,6 @@ uiLayout *uiLayoutGridFlow(uiLayout *layout,
 uiLayout *uiLayoutBox(uiLayout *layout);
 uiLayout *uiLayoutListBox(uiLayout *layout,
                           struct uiList *ui_list,
-                          struct PointerRNA *ptr,
-                          struct PropertyRNA *prop,
                           struct PointerRNA *actptr,
                           struct PropertyRNA *actprop);
 uiLayout *uiLayoutAbsolute(uiLayout *layout, bool align);
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index bba99b8dd1b..a1b78e9e2af 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -3225,7 +3225,7 @@ static void ui_but_free_type_specific(uiBut *but)
 
       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_free_fn(search_but->search->arg);
           search_but->search->arg = NULL;
         }
         MEM_freeN(search_but->search);
@@ -6531,8 +6531,10 @@ void UI_but_func_search_set(uiBut *but,
 
 void UI_but_func_search_set_context_menu(uiBut *but, uiButSearchContextMenuFn context_menu_fn)
 {
-  struct uiButSearchData *search = but->search;
-  search->context_menu_fn = context_menu_fn;
+  uiButSearch *but_search = (uiButSearch *)but;
+  BLI_assert(but->type == UI_BTYPE_SEARCH_MENU);
+
+  but_search->search->context_menu_fn = context_menu_fn;
 }
 
 /**
@@ -6541,14 +6543,18 @@ void UI_but_func_search_set_context_menu(uiBut *but, uiButSearchContextMenuFn co
  */
 void UI_but_func_search_set_sep_string(uiBut *but, const char *search_sep_string)
 {
-  struct uiButSearchData *search = but->search;
-  search->sep_string = search_sep_string;
+  uiButSearch *but_search = (uiButSearch *)but;
+  BLI_assert(but->type == UI_BTYPE_SEARCH_MENU);
+
+  but_search->search->sep_string = search_sep_string;
 }
 
 void UI_but_func_search_set_tooltip(uiBut *but, uiButSearchTooltipFn tooltip_fn)
 {
-  struct uiButSearchData *search = but->search;
-  search->tooltip_fn = tooltip_fn;
+  uiButSearch *but_search = (uiButSearch *)but;
+  BLI_assert(but->type == UI_BTYPE_SEARCH_MENU);
+
+  but_search->search->tooltip_fn = tooltip_fn;
 }
 
 /* Callbacks for operator search button. */
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 0c70360655a..ca1aff2256a 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -3321,7 +3321,7 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
   if (but->type == UI_BTYPE_SEARCH_MENU) {
     uiButSearch *search_but = (uiButSearch *)but;
 
-    data->searchbox = search_but->search->create_fn(C, data->region, but);
+    data->searchbox = search_but->search->create_fn(C, data->region, search_but);
     ui_searchbox_update(C, data->searchbox, but, true); /* true = reset */
   }
 
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 1f539a6b9a1..3cf0a43f512 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -217,12 +217,6 @@ struct uiBut {
   uiButCompleteFunc autocomplete_func;
   void *autofunc_arg;
 
-  uiButSearchCreateFunc search_create_func;
-  uiButSearchFunc search_func;
-  void *search_arg;
-  uiButSearchArgFreeFunc search_arg_free_func;
-  const char *search_sep_string;
-
   uiButHandleRenameFunc rename_func;
   void *rename_arg1;
   void *rename_orig;
@@ -308,7 +302,6 @@ typedef struct uiButTab {
 typedef struct uiButSearch {
   uiBut but;
 
-
   struct uiButSearchData *search;
 
   const char *item_sep_string;
diff --git a/source/blender/editors/interface/interface_region_search.c b/source/blender/editors/interface/interface_region_search.c
index c3aa4842812..6ee05a6d571 100644
--- a/source/blender/editors/interface/interface_region_search.c
+++ b/source/blender/editors/interface/interface_region_search.c
@@ -307,8 +307,13 @@ static struct ARegion *wm_searchbox_tooltip_init(struct bContext *C,
 
   LISTBASE_FOREACH (uiBlock *, block, &region->uiblocks) {
     LISTBASE_FOREACH (uiBut *, but, &block->buttons) {
-      if (but->search && but->search->tooltip_fn) {
-        return but->search->tooltip_fn(C, region, but->search->arg, but->func_arg2);
+      if (but->type != UI_BTYPE_SEARCH_MENU) {
+        continue;
+      }
+
+      uiButSearch *search_but = (uiButSearch *)but;
+      if (search_but->search && search_but->search->tooltip_fn) {
+        return search_but->search->tooltip_fn(C, region, search_but->search->arg, but->func_arg2);
       }
     }
   }
@@ -319,10 +324,13 @@ bool ui_searchbox_event(
     bContext *C, ARegion *region, uiBut *but, ARegion *butregion, const wmEvent *event)
 {
   uiSearchboxData *data = region->regiondata;
+  uiButSearch *search_but = (uiButSearch *)but;
   int type = event->type, val = event->val;
   bool handled = false;
   bool tooltip_timer_started = false;
 
+  BLI_assert(but->type == UI_BTYPE_SEARCH_MENU);
+
   if (type == MOUSEPAN) {
     ui_pan_to_scroll(event, &type, &val);
   }
@@ -340,7 +348,7 @@ bool ui_searchbox_event(
       break;
     case RIGHTMOUSE:
       if (val) {
-        if (but->search->context_menu_fn) {
+        if (search_but->search->context_menu_fn) {
           if (data->active != -1) {
             /* Check the cursor is over the active element
              * (a little confusing if this isn't the case, although it does work). */
@@ -350,7 +358,7 @@ bool ui_searchbox_event(
                     &rect, event->x - region->winrct.xmin, event->y - region->winrct.ymin)) {
 
               void *active = data->items.pointers[data->active];
-              if (but->search->context_menu_fn(C, but->search->arg, active, event)) {
+              if (search_but->search->context_menu_fn(C, search_but->search->arg, active, event)) {
                 handled = true;
               }
             }
@@ -404,11 +412,14 @@ bool ui_searchbox_event(
 }
 
 /** Wrap #uiButSearchUpdateFn callback. */
-static void ui_searchbox_update_fn(bContext *C, uiBut *but, const char *str, uiSearchItems *items)
+static void ui_searchbox_update_fn(bContext *C,
+                                   uiButSearch *search_but,
+                                   const char *str,
+                                   uiSearchItems *items)
 {
   wmWindow *win = CTX_wm_window(C);
   WM_tooltip_clear(C, win);
-  but->search->update_fn(C, but->search->arg, str, items);
+  search_but->search->update_fn(C, search_but->search->arg, str, items);
 }
 
 /* region is the search box itself */
@@ -432,7 +443,7 @@ void ui_searchbox_update(bContext *C, ARegion *region, uiBut *but, const bool re
     /* handle active */
     if (search_but->search->update_fn && but->func_arg2) {
       data->items.active = but->func_arg2;
-      ui_searchbox_update_fn(C, but, but->editstr, &data->items);
+      ui_searchbox_update_fn(C, search_but, but->editstr, &data->items);
       data->items.active = NULL;
 
       /* found active item, calculate real offset by centering it */
@@ -462,7 +473,7 @@ void ui_searchbox_update(bContext *C, ARegion *region, uiBut *but, const bool re
 
   /* callback */
   if (search_but->search->update_fn) {
-    ui_searchbox_update_fn(C, but, but->editstr, &data->items);
+    ui_searchbox_update_fn(C, search_but, but->editstr, &data->items);
   }
 
   /* handle case where editstr is equal to one of items */
@@ -499,7 +510,7 @@ int ui_searchbox_autocomplete(bContext *C, ARegion *region, uiBut *but, char *st
   if (str[0]) {
     data->items.autocpl = UI_autocomplete_begin(str, ui_but_string_get_max_length(but));
 
-    ui_searchbox_update_fn(C, but, but->editstr, &data->items);
+    ui_searchbox_update_fn(C, search_but, but->editstr, &data->items);
 
     match = UI_autocomplete_end(data->items.autocpl, str);
     data->items.autocpl = NULL;
@@ -966,7 +977,7 @@ void ui_but_search_refresh(uiButSearch *search_but)
     items->names[x1] = MEM_callocN(but->hardmax + 1, "search names");
   }
 
-  ui_searchbox_update_fn(but->block->evil_C, but, but->drawstr, items);
+  ui_searchbox_update_fn(but->block->evil_C, search_but, but->drawstr, items);
 
   /* only redalert when we are sure of it, this can miss cases when >10 matches */
   if (items->totitem == 0) {



More information about the Bf-blender-cvs mailing list