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>2019-05-28 07:33:13 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-05-28 07:40:12 +0300
commit13f292d10d3bb19aa9aa694cecbde499f93e7a54 (patch)
treeb12dffe51f9649c24642f18131b47bedca169438 /source/blender/windowmanager/intern/wm_keymap_utils.c
parent2e22cfd08a0d589e8894e322ed29d5c3227ca04d (diff)
Gizmo: only highlight when held modifier keys are used
Check the current events modifiers against the gizmo keymap, only highlighting when keymap items match. Needed to resolve T63996
Diffstat (limited to 'source/blender/windowmanager/intern/wm_keymap_utils.c')
-rw-r--r--source/blender/windowmanager/intern/wm_keymap_utils.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/source/blender/windowmanager/intern/wm_keymap_utils.c b/source/blender/windowmanager/intern/wm_keymap_utils.c
index 626e9e88845..4603f14729d 100644
--- a/source/blender/windowmanager/intern/wm_keymap_utils.c
+++ b/source/blender/windowmanager/intern/wm_keymap_utils.c
@@ -451,6 +451,46 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const char *opname)
return km;
}
+static bool wm_keymap_item_uses_modifier(wmKeyMapItem *kmi, const int event_modifier)
+{
+ if (kmi->ctrl != KM_ANY) {
+ if ((kmi->ctrl == KM_NOTHING) != ((event_modifier & KM_CTRL) == 0)) {
+ return false;
+ }
+ }
+
+ if (kmi->alt != KM_ANY) {
+ if ((kmi->alt == KM_NOTHING) != ((event_modifier & KM_ALT) == 0)) {
+ return false;
+ }
+ }
+
+ if (kmi->shift != KM_ANY) {
+ if ((kmi->shift == KM_NOTHING) != ((event_modifier & KM_SHIFT) == 0)) {
+ return false;
+ }
+ }
+
+ if (kmi->oskey != KM_ANY) {
+ if ((kmi->oskey == KM_NOTHING) != ((event_modifier & KM_OSKEY) == 0)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+bool WM_keymap_uses_event_modifier(wmKeyMap *keymap, const int event_modifier)
+{
+ for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) {
+ if ((kmi->flag & KMI_INACTIVE) == 0) {
+ if (wm_keymap_item_uses_modifier(kmi, event_modifier)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
void WM_keymap_fix_linking(void)
{
}