From 5669adf7e688a4e480461ce529f4fa053256f574 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Fri, 29 Aug 2025 14:50:32 +0200 Subject: [PATCH] Fix #145388: Pose library breaks double-click in file browser The pose library registered a double-click keymap item for the file browser keymap, because that was the only way to add keymap items to the asset browser (which is just the file browser under the hood). Since 450f428434, the pose library apply & blend operators are available in more contexts, since their check for an active asset was moved from the operator poll to the operator execution. So the pose apply operator would end up triggering. The poll function could be adjusted somehow to return false in this case, e.g. by checking if it's executed from a file browser (not an asset browser). However, the operator should be independent of where it's called from. So instead this registers a separate keymap for the asset browser, so the pose library operators can be registered exclusively for the asset browser. --- scripts/addons_core/pose_library/keymaps.py | 2 +- source/blender/editors/space_file/space_file.cc | 5 +++++ source/blender/windowmanager/intern/wm_keymap.cc | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/addons_core/pose_library/keymaps.py b/scripts/addons_core/pose_library/keymaps.py index 68cb3b1b726..0810ec79d00 100644 --- a/scripts/addons_core/pose_library/keymaps.py +++ b/scripts/addons_core/pose_library/keymaps.py @@ -15,7 +15,7 @@ def register() -> None: # This happens when Blender is running in the background. return - km = wm.keyconfigs.addon.keymaps.new(name="File Browser Main", space_type="FILE_BROWSER") + km = wm.keyconfigs.addon.keymaps.new(name="Asset Browser Main", space_type="FILE_BROWSER") # DblClick to apply pose. kmi = km.keymap_items.new("poselib.apply_pose_asset", "LEFTMOUSE", "DOUBLE_CLICK") diff --git a/source/blender/editors/space_file/space_file.cc b/source/blender/editors/space_file/space_file.cc index ad7f7736b38..ed88881226d 100644 --- a/source/blender/editors/space_file/space_file.cc +++ b/source/blender/editors/space_file/space_file.cc @@ -450,6 +450,11 @@ static void file_main_region_init(wmWindowManager *wm, ARegion *region) keymap = WM_keymap_ensure( wm->runtime->defaultconf, "File Browser Main", SPACE_FILE, RGN_TYPE_WINDOW); WM_event_add_keymap_handler_v2d_mask(®ion->runtime->handlers, keymap); + + keymap = WM_keymap_ensure( + wm->runtime->defaultconf, "Asset Browser Main", SPACE_FILE, RGN_TYPE_WINDOW); + WM_event_add_keymap_handler_v2d_mask(®ion->runtime->handlers, keymap); + keymap->poll = [](bContext *C) { return ED_operator_asset_browsing_active(C); }; } static void file_main_region_listener(const wmRegionListenerParams *listener_params) diff --git a/source/blender/windowmanager/intern/wm_keymap.cc b/source/blender/windowmanager/intern/wm_keymap.cc index 94f7f53e22a..015053c9a14 100644 --- a/source/blender/windowmanager/intern/wm_keymap.cc +++ b/source/blender/windowmanager/intern/wm_keymap.cc @@ -489,7 +489,9 @@ bool WM_keymap_poll(bContext *C, wmKeyMap *keymap) !STREQ(keymap->idname, "Node Tool: Tweak") && /* Another exception: Asset shelf keymap is meant for add-ons to use, it's empty by * default. */ - !STREQ(keymap->idname, "Asset Shelf")) + !STREQ(keymap->idname, "Asset Shelf") && + /* Same for the asset browser keymap. */ + !STREQ(keymap->idname, "Asset Browser Main")) { CLOG_WARN(WM_LOG_EVENTS, "empty keymap '%s'", keymap->idname); }