[Bf-blender-cvs] [d225ddec4a8] soc-2020-custom-menus: Custom Menus : Remove auto keybinding

TempoDev noreply at git.blender.org
Fri Jul 31 22:29:43 CEST 2020


Commit: d225ddec4a8d4522885d329f4197e5e742800c93
Author: TempoDev
Date:   Fri Jul 31 22:29:31 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rBd225ddec4a8d4522885d329f4197e5e742800c93

Custom Menus : Remove auto keybinding

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

M	release/scripts/modules/rna_user_menus_ui.py
M	source/blender/editors/interface/interface_templates.c
M	source/blender/makesrna/intern/rna_userdef.c

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

diff --git a/release/scripts/modules/rna_user_menus_ui.py b/release/scripts/modules/rna_user_menus_ui.py
index 1c94e1ea934..879169d9ff1 100644
--- a/release/scripts/modules/rna_user_menus_ui.py
+++ b/release/scripts/modules/rna_user_menus_ui.py
@@ -37,7 +37,7 @@ def _indented_layout(layout, level):
     col = split.column()
     return col
 
-def get_keymap(context, index):
+def get_keymap(context, index, ensure):
     prefs = context.preferences
     um = prefs.user_menus
 
@@ -49,11 +49,12 @@ def get_keymap(context, index):
             if kmi.idname == "wm.call_user_menu":
                 if kmi.properties.index == index:
                     return kmi
-    km = context.window_manager.keyconfigs.user.keymaps['Window']
-    kmi = km.keymap_items.new("wm.call_user_menu",'NONE', 'ANY', shift=False, ctrl=False, alt=False)
-    kmi.properties.index = index
-    kmi.active = True
-    return kmi
+    if ensure:
+        km = context.window_manager.keyconfigs.user.keymaps['Window']
+        kmi = km.keymap_items.new("wm.call_user_menu",'NONE', 'ANY', shift=False, ctrl=False, alt=False)
+        kmi.properties.index = index
+        kmi.active = True
+        return kmi
 
 def draw_button(context, box, item, index):
     prefs = context.preferences
@@ -155,23 +156,49 @@ def draw_item_editor(context, row):
     else:
         col.label(text="No item selected.")
 
-def draw_user_menu_preference_expanded(context, layout, kmi):
+def draw_user_menu_preference_expanded(context, layout, kmi, map_type):
     prefs = context.preferences
     um = prefs.user_menus
-    umg = um.active_group
-
-    layout.prop(kmi, "idname", text="")
-    layout.prop(kmi.properties, "index", text="")
 
+    box = layout.box()
+    sub = box.row()
+
+    if kmi:
+        if map_type not in {'TEXTINPUT', 'TIMER'}:
+            sub = box.column()
+            subrow = sub.row(align=True)
+
+            if map_type == 'KEYBOARD':
+                subrow.prop(kmi, "type", text="", event=True)
+                subrow.prop(kmi, "value", text="")
+                subrow_repeat = subrow.row(align=True)
+                subrow_repeat.active = kmi.value in {'ANY', 'PRESS'}
+                subrow_repeat.prop(kmi, "repeat", text="Repeat")
+            elif map_type in {'MOUSE', 'NDOF'}:
+                subrow.prop(kmi, "type", text="")
+                subrow.prop(kmi, "value", text="")
+
+            subrow = sub.row()
+            subrow.scale_x = 0.75
+            subrow.prop(kmi, "any", toggle=True)
+            subrow.prop(kmi, "shift", toggle=True)
+            subrow.prop(kmi, "ctrl", toggle=True)
+            subrow.prop(kmi, "alt", toggle=True)
+            subrow.prop(kmi, "oskey", text="Cmd", toggle=True)
+            subrow.prop(kmi, "key_modifier", text="", event=True)
+    else:
+        sub.label(text="No key set")
 
 def draw_user_menu_preference(context, layout):
     prefs = context.preferences
     um = prefs.user_menus
     umg = um.active_group
-    kmi = get_keymap(context, -1)
+    kmi = get_keymap(context, -1, False)
+    map_type = None
 
     col = _indented_layout(layout, 0)
-    row = col.row()
+    box = col.box()
+    row = box.row()
 
     row.prop(um, "expanded", text="", emboss=False)
 
@@ -182,27 +209,26 @@ def draw_user_menu_preference(context, layout):
         if umg.is_pie:
             pie_text = "Pie"
         row.prop(umg, "is_pie", text=pie_text, toggle=True)
-
-    row.prop(kmi, "map_type", text="")
-    map_type = kmi.map_type
-    if map_type == 'KEYBOARD':
-        row.prop(kmi, "type", text="", full_event=True)
-    elif map_type == 'MOUSE':
-        row.prop(kmi, "type", text="", full_event=True)
-    elif map_type == 'NDOF':
-        row.prop(kmi, "type", text="", full_event=True)
-    elif map_type == 'TWEAK':
-        subrow = row.row()
-        subrow.prop(kmi, "type", text="")
-        subrow.prop(kmi, "value", text="")
-    elif map_type == 'TIMER':
-        row.prop(kmi, "type", text="")
-    else:
-        row.label()
+    if kmi:
+        row.prop(kmi, "map_type", text="")
+        map_type = kmi.map_type
+        if map_type == 'KEYBOARD':
+            row.prop(kmi, "type", text="", full_event=True)
+        elif map_type == 'MOUSE':
+            row.prop(kmi, "type", text="", full_event=True)
+        elif map_type == 'NDOF':
+            row.prop(kmi, "type", text="", full_event=True)
+        elif map_type == 'TWEAK':
+            subrow = row.row()
+            subrow.prop(kmi, "type", text="")
+            subrow.prop(kmi, "value", text="")
+        elif map_type == 'TIMER':
+            row.prop(kmi, "type", text="")
+        else:
+            row.label()
 
     if um.expanded:
-        box = col.box()
-        draw_user_menu_preference_expanded(context=context, layout=box, kmi=kmi)
+        draw_user_menu_preference_expanded(context=context, layout=box, kmi=kmi, map_type=map_type)
 
 
 def menu_id(context, umg):
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index babeb64870b..95071d11b8a 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -7462,7 +7462,7 @@ static void template_user_menu_item_properties(uiLayout *layout,
       but->rnaprop = prop;
       UI_block_emboss_set(block, UI_EMBOSS);
     }
-    if (i >= 6)
+    if (i > 5)
       break;
     i++;
   }
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 3d413548a9d..48d69e19e8e 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -1488,15 +1488,25 @@ static void rna_UserDef_usermenus_pie_set(PointerRNA *ptr, int value)
 static void rna_UserDef_usermenus_item_op_set(PointerRNA *ptr, const char *value)
 {
   bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)ptr->data;
+  char idname_bl[OP_MAX_TYPENAME];
 
   wmOperatorType *origin_ot = WM_operatortype_find(umi_op->op_idname, true);
   wmOperatorType *ot = WM_operatortype_find(value, false);
   if (origin_ot == ot || ot == NULL)
     return;
 
-  BLI_strncpy(umi_op->op_idname, value, FILE_MAX);
+  WM_operator_bl_idname(idname_bl, value);
+  WM_operator_py_idname(umi_op->op_idname, value);
+
+  if (LIKELY(umi_op->ptr)) {
+    WM_operator_properties_free(umi_op->ptr);
+    MEM_freeN(umi_op->ptr);
+
+    umi_op->ptr = NULL;
+  }
   umi_op->prop = NULL;
-  WM_operator_properties_alloc(&(umi_op->ptr), &(umi_op->prop), umi_op->op_idname);
+
+  WM_operator_properties_alloc(&(umi_op->ptr), &(umi_op->prop), idname_bl);
   WM_operator_properties_sanitize(umi_op->ptr, 1);
 }



More information about the Bf-blender-cvs mailing list