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:
authorCampbell Barton <ideasman42@gmail.com>2018-12-12 13:39:55 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-12-12 13:43:26 +0300
commit4357fb63db77d8bee9b1a3d10fdf6abd55e4c798 (patch)
tree477adefe8069f2e09d091086fbf4bfb2968878fd /source/blender/windowmanager/intern/wm_keymap.c
parentadaadb2fa0a4fde53f5f09bc05f6758926e71f44 (diff)
Keymap: event type filter w/ finding keymap items
Now its possibly to ask for only keyboard/mouse/ndof events when finding key map items.
Diffstat (limited to 'source/blender/windowmanager/intern/wm_keymap.c')
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index 13744aa04af..2d7814b0377 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -64,7 +64,6 @@
#include "wm_event_system.h"
#include "wm_event_types.h"
-
struct wmKeyMapItemFind_Params {
bool (*filter_fn)(const wmKeyMap *km, const wmKeyMapItem *kmi, void *user_data);
void *user_data;
@@ -1415,21 +1414,29 @@ char *WM_key_event_operator_string(
return NULL;
}
-static bool kmi_filter_is_visible_hotkey(const wmKeyMap *km, const wmKeyMapItem *kmi, void *user_data)
+static bool kmi_filter_is_visible_type_mask(const wmKeyMap *km, const wmKeyMapItem *kmi, void *user_data)
{
- return (ISHOTKEY(kmi->type) && kmi_filter_is_visible(km, kmi, user_data));
+ short *mask_pair = user_data;
+ return ((WM_event_type_mask_test(kmi->type, mask_pair[0]) == true) &&
+ (WM_event_type_mask_test(kmi->type, mask_pair[1]) == false) &&
+ kmi_filter_is_visible(km, kmi, user_data));
}
+/**
+ * \param include_mask, exclude_mask: Event types to include/exclude when looking up keys (#eEventType_Mask).
+ */
wmKeyMapItem *WM_key_event_operator(
- const bContext *C, const char *opname, int opcontext,
- IDProperty *properties, const bool is_hotkey,
+ const bContext *C, const char *opname, int opcontext, IDProperty *properties,
+ const short include_mask, const short exclude_mask,
wmKeyMap **r_keymap)
{
+ short user_data_mask[2] = {include_mask, exclude_mask};
+ bool use_mask = (include_mask != EVT_TYPE_MASK_ALL) || (exclude_mask != 0);
return wm_keymap_item_find(
C, opname, opcontext, properties, true,
&(struct wmKeyMapItemFind_Params){
- .filter_fn = is_hotkey ? kmi_filter_is_visible_hotkey : kmi_filter_is_visible,
- .user_data = NULL,
+ .filter_fn = use_mask ? kmi_filter_is_visible_type_mask : kmi_filter_is_visible,
+ .user_data = use_mask ? user_data_mask : NULL,
},
r_keymap);
}