[Bf-blender-cvs] [2110b71f1cc] asset-shelf: Allow operators to override asset applying on click through the keymap

Julian Eisel noreply at git.blender.org
Fri Feb 3 15:51:09 CET 2023


Commit: 2110b71f1cc8eac5e7494a827e0f83618e99bab2
Author: Julian Eisel
Date:   Fri Feb 3 15:40:32 2023 +0100
Branches: asset-shelf
https://developer.blender.org/rB2110b71f1cc8eac5e7494a827e0f83618e99bab2

Allow operators to override asset applying on click through the keymap

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

M	source/blender/editors/asset/intern/asset_shelf.cc
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/interface/interface_template_asset_shelf.cc
M	source/blender/editors/screen/area.c
M	source/blender/editors/space_view3d/space_view3d.cc

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

diff --git a/source/blender/editors/asset/intern/asset_shelf.cc b/source/blender/editors/asset/intern/asset_shelf.cc
index 8e9f65c4270..6974397abfe 100644
--- a/source/blender/editors/asset/intern/asset_shelf.cc
+++ b/source/blender/editors/asset/intern/asset_shelf.cc
@@ -207,6 +207,7 @@ int ED_asset_shelf_context(const bContext *C,
 {
   static const char *context_dir[] = {
       "asset_shelf_settings",
+      "active_file", /* XXX yuk... */
       nullptr,
   };
 
@@ -223,6 +224,28 @@ int ED_asset_shelf_context(const bContext *C,
     return CTX_RESULT_OK;
   }
 
+  /* XXX hack. Get the asset from the hovered button, but needs to be the file... */
+  if (CTX_data_equals(member, "active_file")) {
+    const uiBut *but = UI_context_active_but_get(C);
+    if (!but) {
+      return CTX_RESULT_NO_DATA;
+    }
+
+    const bContextStore *but_context = UI_but_context_get(but);
+    if (!but_context) {
+      return CTX_RESULT_NO_DATA;
+    }
+
+    const PointerRNA *file_ptr = CTX_store_ptr_lookup(
+        but_context, "active_file", &RNA_FileSelectEntry);
+    if (!file_ptr) {
+      return CTX_RESULT_NO_DATA;
+    }
+
+    CTX_data_pointer_set_ptr(result, file_ptr);
+    return CTX_RESULT_OK;
+  }
+
   return CTX_RESULT_MEMBER_NOT_FOUND;
 }
 
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index b71fa39543c..2ad8e68c05d 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -701,7 +701,7 @@ enum {
   ED_KEYMAP_FOOTER = (1 << 9),
   ED_KEYMAP_GPENCIL = (1 << 10),
   ED_KEYMAP_NAVBAR = (1 << 11),
-  ED_KEYMAP_ASSET_SHELF_FOOTER = (1 << 12),
+  ED_KEYMAP_ASSET_SHELF = (1 << 12),
 };
 
 /** #SCREEN_OT_space_context_cycle direction. */
diff --git a/source/blender/editors/interface/interface_template_asset_shelf.cc b/source/blender/editors/interface/interface_template_asset_shelf.cc
index abab93c3612..114062716f9 100644
--- a/source/blender/editors/interface/interface_template_asset_shelf.cc
+++ b/source/blender/editors/interface/interface_template_asset_shelf.cc
@@ -13,6 +13,8 @@
 
 #include "ED_asset.h"
 
+#include "RNA_access.h"
+
 #include "UI_interface.h"
 #include "UI_resources.h"
 #include "interface_intern.hh"
@@ -53,6 +55,16 @@ static void asset_tile_draw(uiLayout &layout,
                             const int height,
                             const bool show_names)
 {
+  PointerRNA file_ptr;
+  RNA_pointer_create(
+      nullptr,
+      &RNA_FileSelectEntry,
+      /* XXX passing file pointer here, should be asset handle or asset representation. */
+      const_cast<FileDirEntry *>(asset_handle.file_data),
+      &file_ptr);
+
+  uiLayoutSetContextPointer(&layout, "active_file", &file_ptr);
+
   uiBlock *block = uiLayoutGetBlock(&layout);
   uiBut *but = uiDefIconTextBut(block,
                                 UI_BTYPE_PREVIEW_TILE,
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 9f77fc80ddd..8fcba51d6f9 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -1743,9 +1743,9 @@ static void ed_default_handlers(
     wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Region Context Menu", 0, 0);
     WM_event_add_keymap_handler(&region->handlers, keymap);
   }
-  if (flag & ED_KEYMAP_ASSET_SHELF_FOOTER) {
+  if (flag & ED_KEYMAP_ASSET_SHELF) {
     /* standard keymap for Navigation bar regions */
-    wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Region Context Menu", 0, 0);
+    wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Asset Shelf", 0, 0);
     WM_event_add_keymap_handler(&region->handlers, keymap);
   }
 
diff --git a/source/blender/editors/space_view3d/space_view3d.cc b/source/blender/editors/space_view3d/space_view3d.cc
index 694792b8a04..1d27dae2bca 100644
--- a/source/blender/editors/space_view3d/space_view3d.cc
+++ b/source/blender/editors/space_view3d/space_view3d.cc
@@ -2184,7 +2184,8 @@ void ED_spacetype_view3d()
   art = MEM_cnew<ARegionType>("spacetype view3d asset shelf region");
   art->regionid = RGN_TYPE_ASSET_SHELF;
   art->prefsizey = HEADERY * 3.5f;
-  art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_HEADER;
+  art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_ASSET_SHELF | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES |
+                    ED_KEYMAP_HEADER;
   art->listener = ED_asset_shelf_region_listen;
   art->context = view3d_asset_shelf_context;
   art->init = view3d_header_region_init;
@@ -2194,7 +2195,7 @@ void ED_spacetype_view3d()
   art = MEM_cnew<ARegionType>("spacetype view3d asset shelf footer region");
   art->regionid = RGN_TYPE_ASSET_SHELF_FOOTER;
   art->prefsizey = HEADERY;
-  art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FOOTER;
+  art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_ASSET_SHELF | ED_KEYMAP_VIEW2D | ED_KEYMAP_FOOTER;
   art->init = ED_asset_shelf_footer_region_init;
   art->draw = ED_asset_shelf_footer_region;
   art->listener = ED_asset_shelf_footer_region_listen;



More information about the Bf-blender-cvs mailing list