Allow operators to override asset applying on click through the keymap

This commit is contained in:
Julian Eisel 2023-02-03 15:40:32 +01:00
parent 4b4cf6da9a
commit 2110b71f1c
5 changed files with 41 additions and 5 deletions

View File

@ -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;
}

View File

@ -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. */

View File

@ -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,

View File

@ -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);
}

View File

@ -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;