Fix fallback tool for tools that don't define their own keymaps
Needed for UV editor transform tool.
This commit is contained in:
@@ -3727,12 +3727,12 @@ wmKeyMap *WM_event_get_keymap_from_toolsystem(wmWindowManager *wm, wmEventHandle
|
|||||||
ScrArea *sa = handler->dynamic.user_data;
|
ScrArea *sa = handler->dynamic.user_data;
|
||||||
handler->keymap_tool = NULL;
|
handler->keymap_tool = NULL;
|
||||||
bToolRef_Runtime *tref_rt = sa->runtime.tool ? sa->runtime.tool->runtime : NULL;
|
bToolRef_Runtime *tref_rt = sa->runtime.tool ? sa->runtime.tool->runtime : NULL;
|
||||||
if (tref_rt && tref_rt->keymap[0]) {
|
if (tref_rt && (tref_rt->keymap[0] || tref_rt->keymap_fallback[0])) {
|
||||||
const char *keymap_id = tref_rt->keymap;
|
const char *keymap_id = tref_rt->keymap;
|
||||||
|
|
||||||
/* Support for the gizmo owning the tool keymap. */
|
/* Support for the gizmo owning the tool keymap. */
|
||||||
if (USER_EXPEREMENTAL_TEST(&U, use_tool_fallback)) {
|
if (USER_EXPEREMENTAL_TEST(&U, use_tool_fallback)) {
|
||||||
if (tref_rt->gizmo_group[0] != '\0') {
|
if (tref_rt->gizmo_group[0] != '\0' && tref_rt->keymap_fallback[0] != '\n') {
|
||||||
wmGizmoMap *gzmap = NULL;
|
wmGizmoMap *gzmap = NULL;
|
||||||
wmGizmoGroup *gzgroup = NULL;
|
wmGizmoGroup *gzgroup = NULL;
|
||||||
for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
|
for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
|
||||||
@@ -3750,9 +3750,7 @@ wmKeyMap *WM_event_get_keymap_from_toolsystem(wmWindowManager *wm, wmEventHandle
|
|||||||
if (gzgroup->use_fallback_keymap) {
|
if (gzgroup->use_fallback_keymap) {
|
||||||
wmGizmo *highlight = wm_gizmomap_highlight_get(gzmap);
|
wmGizmo *highlight = wm_gizmomap_highlight_get(gzmap);
|
||||||
if (highlight == NULL) {
|
if (highlight == NULL) {
|
||||||
if (tref_rt->keymap_fallback[0]) {
|
keymap_id = tref_rt->keymap_fallback;
|
||||||
keymap_id = tref_rt->keymap_fallback;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3760,15 +3758,18 @@ wmKeyMap *WM_event_get_keymap_from_toolsystem(wmWindowManager *wm, wmEventHandle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wmKeyMap *km = WM_keymap_list_find_spaceid_or_empty(
|
if (keymap_id[0]) {
|
||||||
&wm->userconf->keymaps, keymap_id, sa->spacetype, RGN_TYPE_WINDOW);
|
wmKeyMap *km = WM_keymap_list_find_spaceid_or_empty(
|
||||||
/* We shouldn't use keymaps from unrelated spaces. */
|
&wm->userconf->keymaps, keymap_id, sa->spacetype, RGN_TYPE_WINDOW);
|
||||||
if (km != NULL) {
|
/* We shouldn't use keymaps from unrelated spaces. */
|
||||||
handler->keymap_tool = sa->runtime.tool;
|
if (km != NULL) {
|
||||||
return km;
|
handler->keymap_tool = sa->runtime.tool;
|
||||||
}
|
return km;
|
||||||
else {
|
}
|
||||||
printf("Keymap: '%s' not found for tool '%s'\n", tref_rt->keymap, sa->runtime.tool->idname);
|
else {
|
||||||
|
printf(
|
||||||
|
"Keymap: '%s' not found for tool '%s'\n", tref_rt->keymap, sa->runtime.tool->idname);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Reference in New Issue
Block a user