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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-12-12 07:52:34 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-12-12 07:52:34 +0300
commitbbb71ccbde023436a80230f286c1535afe96b753 (patch)
tree99a26c47b3c86e4b1bae769cfaa9d19b7b52a3ea /source
parent768e69eb37e19d50420fa5de33ae6736d8030c5d (diff)
Fix action-zones showing up as shortcuts
Toggle fullscreen area for eg, was showing the action-zone instead of the key binding.
Diffstat (limited to 'source')
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c23
-rw-r--r--source/blender/windowmanager/wm_event_types.h4
2 files changed, 21 insertions, 6 deletions
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index 311f34c0c74..13744aa04af 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -1169,7 +1169,7 @@ static wmKeyMapItem *wm_keymap_item_find_handlers(
bool kmi_match = false;
- if (STREQ(kmi->idname, opname) && WM_key_event_string(kmi->type, false)[0]) {
+ if (STREQ(kmi->idname, opname)) {
if (properties) {
/* example of debugging keymaps */
#if 0
@@ -1389,12 +1389,24 @@ static wmKeyMapItem *wm_keymap_item_find(
return found;
}
+static bool kmi_filter_is_visible(const wmKeyMap *UNUSED(km), const wmKeyMapItem *kmi, void *UNUSED(user_data))
+{
+ return ((WM_key_event_string(kmi->type, false)[0] != '\0') &&
+ (IS_EVENT_ACTIONZONE(kmi->type) == false));
+}
+
char *WM_key_event_operator_string(
const bContext *C, const char *opname, int opcontext,
IDProperty *properties, const bool is_strict,
char *result, const int result_len)
{
- wmKeyMapItem *kmi = wm_keymap_item_find(C, opname, opcontext, properties, is_strict, NULL, NULL);
+ wmKeyMapItem *kmi = wm_keymap_item_find(
+ C, opname, opcontext, properties, is_strict,
+ &(struct wmKeyMapItemFind_Params){
+ .filter_fn = kmi_filter_is_visible,
+ .user_data = NULL,
+ },
+ NULL);
if (kmi) {
WM_keymap_item_to_string(kmi, false, result, result_len);
return result;
@@ -1403,9 +1415,9 @@ char *WM_key_event_operator_string(
return NULL;
}
-static bool kmi_is_hotkey(const wmKeyMap *UNUSED(km), const wmKeyMapItem *kmi, void *UNUSED(user_data))
+static bool kmi_filter_is_visible_hotkey(const wmKeyMap *km, const wmKeyMapItem *kmi, void *user_data)
{
- return ISHOTKEY(kmi->type);
+ return (ISHOTKEY(kmi->type) && kmi_filter_is_visible(km, kmi, user_data));
}
wmKeyMapItem *WM_key_event_operator(
@@ -1415,9 +1427,8 @@ wmKeyMapItem *WM_key_event_operator(
{
return wm_keymap_item_find(
C, opname, opcontext, properties, true,
- (is_hotkey == false) ? NULL :
&(struct wmKeyMapItemFind_Params){
- .filter_fn = kmi_is_hotkey,
+ .filter_fn = is_hotkey ? kmi_filter_is_visible_hotkey : kmi_filter_is_visible,
.user_data = NULL,
},
r_keymap);
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 40a3d148b7b..b2c4c0494ce 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -308,9 +308,11 @@ enum {
TIMERF = 0x011F, /* last timer */
/* Actionzones, tweak, gestures: 0x500x, 0x501x */
+#define EVT_ACTIONZONE_FIRST EVT_ACTIONZONE_AREA
EVT_ACTIONZONE_AREA = 0x5000,
EVT_ACTIONZONE_REGION = 0x5001,
EVT_ACTIONZONE_FULLSCREEN = 0x5011,
+#define EVT_ACTIONZONE_LAST (EVT_ACTIONZONE_FULLSCREEN + 1)
/* NOTE: these values are saved in keymap files, do not change them but just add new ones */
@@ -374,6 +376,8 @@ enum {
/* test whether the event is a NDOF event */
#define ISNDOF(event_type) ((event_type) >= NDOF_MOTION && (event_type) < NDOF_LAST)
+#define IS_EVENT_ACTIONZONE(event_type) ((event_type) >= EVT_ACTIONZONE_FIRST && (event_type) < EVT_ACTIONZONE_LAST)
+
/* test whether event type is acceptable as hotkey, excluding modifiers */
#define ISHOTKEY(event_type) \
((ISKEYBOARD(event_type) || ISMOUSE(event_type) || ISNDOF(event_type)) && \