Fix #105548: I18n: many keymap sections cannot be translated

Ensure tool keymaps are registered when calling:
bl_keymap_utils.keymap_hierarchy.generate() in background mode.

This is an alternative to !116299 that doesn't require keymap
initialization in background mode.
Thanks to Damien Picard's for reporting & investigating this issue.
This commit is contained in:
Campbell Barton 2023-12-20 11:54:52 +11:00
parent 6007838bb2
commit c59b9ff9c2
2 changed files with 19 additions and 0 deletions

View File

@ -26,6 +26,13 @@ def _km_hierarchy_iter_recursive(items):
def generate():
import bpy
if bpy.app.background:
from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
for cls in ToolSelectPanelHelper.__subclasses__():
cls.register_ensure()
return list(_km_hierarchy_iter_recursive(_km_hierarchy))

View File

@ -499,6 +499,15 @@ class ToolSelectPanelHelper:
if kc_default is not kc:
kc_default.keymaps.new(km_idname, **km_kwargs)
@classmethod
def register_ensure(cls):
"""
Ensure register has created key-map data, needed when key-map data is needed in background mode.
"""
if cls._has_keymap_data:
return
cls.register()
@classmethod
def register(cls):
wm = bpy.context.window_manager
@ -513,6 +522,7 @@ class ToolSelectPanelHelper:
# ignore in background mode
if kc_default is None:
cls._has_keymap_data = False
return
for context_mode, tools in cls.tools_all():
@ -530,6 +540,8 @@ class ToolSelectPanelHelper:
if callable(keymap_data[0]):
cls._km_action_simple(kc_default, kc_default, context_descr, item.label, keymap_data)
cls._has_keymap_data = True
@classmethod
def keymap_ui_hierarchy(cls, context_mode):
# See: bpy_extras.keyconfig_utils