Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Oeser <info@graphics-engineer.com>2020-02-04 14:06:21 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2020-02-04 22:56:07 +0300
commit36d09d9029c970de6a6c4d926fc1189865b145c3 (patch)
treec321241ec1582d1761d77de726297e92cecba81c
parentf7ca86369da89a6726bc9edc9bf4e875b2b43c46 (diff)
Fix T67084: Modal keymaps could show the wrong shortcut
WM_modalkeymap_operator_items_to_string() wasnt checking WM_keymap_active(), so it was possible that e.g. when using the Industry Compatible keymap, the shortcut from the Blender keymap was shown. This also fixes the (now exposed) bug that the Industry Compatible keymap would not have a ADD_CUT_CLOSED kmi defined for the Knife Tool [mandatory for the status bar]. Maniphest Tasks: T67084 Differential Revision: https://developer.blender.org/D6748
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py2
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c5
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c4
3 files changed, 7 insertions, 4 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index ceca4687443..2af3bc4898c 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -3444,7 +3444,7 @@ def km_knife_tool_modal_map(_params):
("PANNING", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, None),
("CONFIRM", {"type": 'RET', "value": 'PRESS', "any": True}, None),
("CONFIRM", {"type": 'NUMPAD_ENTER', "value": 'PRESS', "any": True}, None),
- ("CONFIRM", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK', "any": True}, None),
+ ("ADD_CUT_CLOSED", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK', "any": True}, None),
("ADD_CUT", {"type": 'LEFTMOUSE', "value": 'ANY', "any": True}, None),
("NEW_CUT", {"type": 'E', "value": 'PRESS'}, None),
("SNAP_MIDPOINTS_ON", {"type": 'LEFT_CTRL', "value": 'PRESS', "any": False}, None),
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 104fbc84306..ddc7e325fab 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -5415,8 +5415,9 @@ void WM_window_cursor_keymap_status_refresh(bContext *C, wmWindow *win)
*
* \{ */
-bool WM_window_modal_keymap_status_draw(bContext *UNUSED(C), wmWindow *win, uiLayout *layout)
+bool WM_window_modal_keymap_status_draw(bContext *C, wmWindow *win, uiLayout *layout)
{
+ wmWindowManager *wm = CTX_wm_manager(C);
wmKeyMap *keymap = NULL;
wmOperator *op = NULL;
LISTBASE_FOREACH (wmEventHandler *, handler_base, &win->modalhandlers) {
@@ -5424,7 +5425,7 @@ bool WM_window_modal_keymap_status_draw(bContext *UNUSED(C), wmWindow *win, uiLa
wmEventHandler_Op *handler = (wmEventHandler_Op *)handler_base;
if (handler->op != NULL) {
/* 'handler->keymap' could be checked too, seems not to be used. */
- wmKeyMap *keymap_test = handler->op->type->modalkeymap;
+ wmKeyMap *keymap_test = WM_keymap_active(wm, handler->op->type->modalkeymap);
if (keymap_test && keymap_test->modal_items) {
keymap = keymap_test;
op = handler->op;
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index 1809a233ce1..1587f7ab71d 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -1295,7 +1295,9 @@ int WM_modalkeymap_operator_items_to_string(wmOperatorType *ot,
char *result,
const int result_len)
{
- return WM_modalkeymap_items_to_string(ot->modalkeymap, propvalue, compact, result, result_len);
+ wmWindowManager *wm = G_MAIN->wm.first;
+ wmKeyMap *keymap = WM_keymap_active(wm, ot->modalkeymap);
+ return WM_modalkeymap_items_to_string(keymap, propvalue, compact, result, result_len);
}
char *WM_modalkeymap_operator_items_to_string_buf(wmOperatorType *ot,