Commit: f36c803e55983ad30b032da2a775752eb4491fdc
Author: Campbell Barton
Date:   Fri Feb 23 12:50:56 2018 +1100
Branches: master
https://developer.blender.org/rBf36c803e55983ad30b032da2a775752eb4491fdc

WM: add WM_keymap_poll function

Wrapps keymap poll, no functional changes.

===================================================================

M       source/blender/makesdna/DNA_windowmanager_types.h
M       source/blender/windowmanager/WM_keymap.h
M       source/blender/windowmanager/intern/wm_event_system.c
M       source/blender/windowmanager/intern/wm_keymap.c

===================================================================

diff --git a/source/blender/makesdna/DNA_windowmanager_types.h 
b/source/blender/makesdna/DNA_windowmanager_types.h
index cf8dbdd8c63..687a883f792 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -313,8 +313,10 @@ typedef struct wmKeyMap {
        short kmi_id;     /* last kmi id */
 
        /* runtime */
-       int (*poll)(struct bContext *);  /* verify if enabled in the current 
context */
-       const void *modal_items;         /* for modal, EnumPropertyItem for now 
*/
+       /** Verify if enabled in the current context, use #WM_keymap_poll 
instead of direct calls. */
+       int (*poll)(struct bContext *);
+       /** For modal, #EnumPropertyItem for now. */
+       const void *modal_items;
 } wmKeyMap;
 
 /* wmKeyMap.flag */
diff --git a/source/blender/windowmanager/WM_keymap.h 
b/source/blender/windowmanager/WM_keymap.h
index 8a94472aaf5..b4d4d55479d 100644
--- a/source/blender/windowmanager/WM_keymap.h
+++ b/source/blender/windowmanager/WM_keymap.h
@@ -76,7 +76,8 @@ wmKeyMap      *WM_keymap_find_all(const struct bContext *C, 
const char *idname, int s
 wmKeyMap       *WM_keymap_active(struct wmWindowManager *wm, struct wmKeyMap 
*keymap);
 wmKeyMap       *WM_keymap_guess_opname(const struct bContext *C, const char 
*opname);
 bool            WM_keymap_remove(struct wmKeyConfig *keyconfig, struct 
wmKeyMap *keymap);
-
+bool         WM_keymap_poll(struct bContext *C, struct wmKeyMap *keymap);
+       
 wmKeyMapItem *WM_keymap_item_find_id(struct wmKeyMap *keymap, int id);
 int                    WM_keymap_item_compare(struct wmKeyMapItem *k1, struct 
wmKeyMapItem *k2);
 
diff --git a/source/blender/windowmanager/intern/wm_event_system.c 
b/source/blender/windowmanager/intern/wm_event_system.c
index dd6defaaf87..d62327a83a9 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2084,7 +2084,7 @@ static int wm_handlers_do_intern(bContext *C, wmEvent 
*event, ListBase *handlers
 
                                PRINT("%s:   checking '%s' ...", __func__, 
keymap->idname);
 
-                               if (!keymap->poll || keymap->poll(C)) {
+                               if (WM_keymap_poll(C, keymap)) {
 
                                        PRINT("pass\n");
 
diff --git a/source/blender/windowmanager/intern/wm_keymap.c 
b/source/blender/windowmanager/intern/wm_keymap.c
index 910b7eadf4c..45ed44d83d6 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -398,6 +398,15 @@ bool WM_keymap_remove(wmKeyConfig *keyconf, wmKeyMap 
*keymap)
        }
 }
 
+
+bool WM_keymap_poll(bContext *C, wmKeyMap *keymap)
+{
+       if (keymap->poll != NULL) {
+               return keymap->poll(C);
+       }
+       return true;
+}
+
 static void keymap_event_set(wmKeyMapItem *kmi, short type, short val, int 
modifier, short keymodifier)
 {
        kmi->type = type;
@@ -1087,7 +1096,7 @@ static wmKeyMapItem *wm_keymap_item_find_handlers(
        for (handler = handlers->first; handler; handler = handler->next) {
                keymap = WM_keymap_active(wm, handler->keymap);
 
-               if (keymap && (!keymap->poll || keymap->poll((bContext *)C))) {
+               if (keymap && WM_keymap_poll((bContext *)C, keymap)) {
                        for (kmi = keymap->items.first; kmi; kmi = kmi->next) {
                                /* skip disabled keymap items [T38447] */
                                if (kmi->flag & KMI_INACTIVE)
@@ -1719,7 +1728,7 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const 
char *opname)
                km = WM_keymap_find_all(C, "Mesh", 0, 0);
                
                /* some mesh operators are active in object mode too, like 
add-prim */
-               if (km && km->poll && km->poll((bContext *)C) == 0) {
+               if (km && !WM_keymap_poll((bContext *)C, km)) {
                        km = WM_keymap_find_all(C, "Object Mode", 0, 0);
                }
        }
@@ -1729,7 +1738,7 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const 
char *opname)
                km = WM_keymap_find_all(C, "Curve", 0, 0);
                
                /* some curve operators are active in object mode too, like 
add-prim */
-               if (km && km->poll && km->poll((bContext *)C) == 0) {
+               if (km && !WM_keymap_poll((bContext *)C, km)) {
                        km = WM_keymap_find_all(C, "Object Mode", 0, 0);
                }
        }
@@ -1757,7 +1766,7 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const 
char *opname)
                km = WM_keymap_find_all(C, "Metaball", 0, 0);
                
                /* some mball operators are active in object mode too, like 
add-prim */
-               if (km && km->poll && km->poll((bContext *)C) == 0) {
+               if (km && !WM_keymap_poll((bContext *)C, km)) {
                        km = WM_keymap_find_all(C, "Object Mode", 0, 0);
                }
        }
@@ -1809,7 +1818,7 @@ wmKeyMap *WM_keymap_guess_opname(const bContext *C, const 
char *opname)
                 * Mesh keymap is probably not ideal, but best place I could 
find to put those. */
                if (sl->spacetype == SPACE_VIEW3D) {
                        km = WM_keymap_find_all(C, "Mesh", 0, 0);
-                       if (km && km->poll && !km->poll((bContext *)C)) {
+                       if (km && !WM_keymap_poll((bContext *)C, km)) {
                                km = NULL;
                        }
                }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to