[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(®ion->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(®ion->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