[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56676] trunk/blender/source/blender: Fix #35262: assiging shortcuts from e.g.

Brecht Van Lommel brechtvanlommel at pandora.be
Sat May 11 01:41:42 CEST 2013


Revision: 56676
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56676
Author:   blendix
Date:     2013-05-10 23:41:41 +0000 (Fri, 10 May 2013)
Log Message:
-----------
Fix #35262: assiging shortcuts from e.g. delete or selection mode menus did not
work anymore. This was due to a bugfix to show missing shortcut keys for e.g. the
mesh > vertices > separate menu. Both should work now.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface.c
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/space_logic/logic_window.c
    trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
    trunk/blender/source/blender/windowmanager/WM_keymap.h
    trunk/blender/source/blender/windowmanager/intern/wm_keymap.c

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2013-05-10 23:41:41 UTC (rev 56676)
@@ -892,7 +892,7 @@
 void uiItemS(uiLayout *layout); /* separator */
 
 void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg);
-void uiItemMenuEnumO(uiLayout *layout, const char *opname, const char *propname, const char *name, int icon);
+void uiItemMenuEnumO(uiLayout *layout, struct bContext *C, const char *opname, const char *propname, const char *name, int icon);
 void uiItemMenuEnumR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, const char *name, int icon);
 
 /* UI Operators */

Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/editors/interface/interface.c	2013-05-10 23:41:41 UTC (rev 56676)
@@ -878,7 +878,7 @@
 		if (but->optype) {
 			IDProperty *prop = (but->opptr) ? but->opptr->data : NULL;
 
-			if (WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, TRUE,
+			if (WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, true,
 			                                 buf, sizeof(buf)))
 			{
 				ui_but_add_shortcut(but, buf, FALSE);
@@ -895,7 +895,7 @@
 
 			IDP_AssignString(prop_menu_name, mt->idname, sizeof(mt->idname));
 
-			if (WM_key_event_operator_string(C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, FALSE,
+			if (WM_key_event_operator_string(C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, true,
 			                                 buf, sizeof(buf)))
 			{
 				ui_but_add_shortcut(but, buf, FALSE);
@@ -4093,7 +4093,7 @@
 				IDProperty *prop = (but->opptr) ? but->opptr->data : NULL;
 				char buf[512];
 
-				if (WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, TRUE,
+				if (WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, true,
 				                                 buf, sizeof(buf)))
 				{
 					tmp = BLI_strdup(buf);

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2013-05-10 23:41:41 UTC (rev 56676)
@@ -1681,10 +1681,11 @@
 	uiItemsEnumO(layout, lvl->opname, lvl->propname);
 }
 
-void uiItemMenuEnumO(uiLayout *layout, const char *opname, const char *propname, const char *name, int icon)
+void uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const char *propname, const char *name, int icon)
 {
 	wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
 	MenuItemLevel *lvl;
+	char namestr[UI_MAX_NAME_STR], keybuf[128];
 
 	UI_OPERATOR_ERROR_RET(ot, opname, return );
 
@@ -1694,8 +1695,11 @@
 		return;
 	}
 
-	if (!name)
-		name = RNA_struct_ui_name(ot->srna);
+	if (name)
+		BLI_strncpy(namestr, name, sizeof(namestr));
+	else
+		BLI_strncpy(namestr, RNA_struct_ui_name(ot->srna), sizeof(namestr));
+
 	if (layout->root->type == UI_LAYOUT_MENU && !icon)
 		icon = ICON_BLANK1;
 
@@ -1704,7 +1708,16 @@
 	BLI_strncpy(lvl->propname, propname, sizeof(lvl->propname));
 	lvl->opcontext = layout->root->opcontext;
 
-	ui_item_menu(layout, name, icon, menu_item_enum_opname_menu, NULL, lvl, RNA_struct_ui_description(ot->srna));
+	/* add hotkey here, lower UI code can't detect it */
+	if(layout->root->block->flag & UI_BLOCK_LOOP) {
+		if (ot->prop && WM_key_event_operator_string(C, ot->idname,
+			layout->root->opcontext, NULL, false, keybuf, sizeof(keybuf))) {
+			strncat(namestr, "|", sizeof(namestr)-1);
+			strncat(namestr, keybuf, sizeof(namestr)-1);
+		}
+	}
+
+	ui_item_menu(layout, namestr, icon, menu_item_enum_opname_menu, NULL, lvl, RNA_struct_ui_description(ot->srna));
 }
 
 static void menu_item_enum_rna_menu(bContext *UNUSED(C), uiLayout *layout, void *arg)

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2013-05-10 23:41:41 UTC (rev 56676)
@@ -2768,7 +2768,7 @@
 				
 				/* check for hotkey */
 				if (len < sizeof(name) - 6) {
-					if (WM_key_event_operator_string(C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, TRUE,
+					if (WM_key_event_operator_string(C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, true,
 					                                 &name[len + 1], sizeof(name) - len - 1))
 					{
 						name[len] = '|';

Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c	2013-05-10 23:41:41 UTC (rev 56676)
@@ -2329,7 +2329,7 @@
 
 		RNA_pointer_create((ID *)ob, &RNA_Object, ob, &object_ptr);
 		uiLayoutSetContextPointer(row, "object", &object_ptr);
-		uiItemMenuEnumO(row, "LOGIC_OT_controller_add", "type", IFACE_("Add Controller"), ICON_NONE);
+		uiItemMenuEnumO(row, C, "LOGIC_OT_controller_add", "type", IFACE_("Add Controller"), ICON_NONE);
 
 		if (RNA_boolean_get(&settings_ptr, "show_state_panel")) {
 
@@ -2426,7 +2426,7 @@
 
 		RNA_pointer_create((ID *)ob, &RNA_Object, ob, &object_ptr);
 		uiLayoutSetContextPointer(row, "object", &object_ptr);
-		uiItemMenuEnumO(row, "LOGIC_OT_sensor_add", "type", IFACE_("Add Sensor"), ICON_NONE);
+		uiItemMenuEnumO(row, C, "LOGIC_OT_sensor_add", "type", IFACE_("Add Sensor"), ICON_NONE);
 		
 		if ((ob->scaflag & OB_SHOWSENS) == 0) continue;
 		
@@ -2497,7 +2497,7 @@
 
 		RNA_pointer_create((ID *)ob, &RNA_Object, ob, &object_ptr);
 		uiLayoutSetContextPointer(row, "object", &object_ptr);
-		uiItemMenuEnumO(row, "LOGIC_OT_actuator_add", "type", IFACE_("Add Actuator"), ICON_NONE);
+		uiItemMenuEnumO(row, C, "LOGIC_OT_actuator_add", "type", IFACE_("Add Actuator"), ICON_NONE);
 
 		if ((ob->scaflag & OB_SHOWACT) == 0) continue;
 		

Modified: trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ui_api.c	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/makesrna/intern/rna_ui_api.c	2013-05-10 23:41:41 UTC (rev 56676)
@@ -194,7 +194,7 @@
 	return uiItemFullO_ptr(layout, ot, name, icon, NULL, uiLayoutGetOperatorContext(layout), flag);
 }
 
-static void rna_uiItemMenuEnumO(uiLayout *layout, const char *opname, const char *propname, const char *name,
+static void rna_uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const char *propname, const char *name,
                                 const char *text_ctxt, int translate, int icon)
 {
 	wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
@@ -208,7 +208,7 @@
 	name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
 
 	/* XXX This will search operator again :( */
-	uiItemMenuEnumO(layout, opname, propname, name, icon);
+	uiItemMenuEnumO(layout, C, opname, propname, name, icon);
 }
 
 static void rna_uiItemL(uiLayout *layout, const char *name, const char *text_ctxt, int translate,
@@ -549,6 +549,7 @@
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 
 	func = RNA_def_function(srna, "operator_menu_enum", "rna_uiItemMenuEnumO");
+	RNA_def_function_flag(func, FUNC_USE_CONTEXT);
 	api_ui_item_op(func); /* cant use api_ui_item_op_common because property must come right after */
 	parm = RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator");
 	RNA_def_property_flag(parm, PROP_REQUIRED);

Modified: trunk/blender/source/blender/windowmanager/WM_keymap.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_keymap.h	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/windowmanager/WM_keymap.h	2013-05-10 23:41:41 UTC (rev 56676)
@@ -95,7 +95,7 @@
 
 const char	*WM_key_event_string(short type);
 int			WM_key_event_operator_id(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, int hotkey, struct wmKeyMap **keymap_r);
-char		*WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, const bool sloppy, char *str, int len);
+char		*WM_key_event_operator_string(const struct bContext *C, const char *opname, int opcontext, struct IDProperty *properties, const bool strict, char *str, int len);
 
 #ifdef __cplusplus
 }

Modified: trunk/blender/source/blender/windowmanager/intern/wm_keymap.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_keymap.c	2013-05-10 22:41:24 UTC (rev 56675)
+++ trunk/blender/source/blender/windowmanager/intern/wm_keymap.c	2013-05-10 23:41:41 UTC (rev 56676)
@@ -863,14 +863,9 @@
 						}
 #endif
 
-						if (kmi->ptr) {
-							PointerRNA properties_ptr;
-							RNA_pointer_create(NULL, kmi->ptr->type, properties, &properties_ptr);
-
-							if (RNA_struct_equals(&properties_ptr, kmi->ptr, is_strict)) {
-								if (keymap_r) *keymap_r = keymap;
-								return kmi;
-							}
+						if (kmi->ptr && IDP_EqualsProperties_ex(properties, kmi->ptr->data, is_strict)) {
+							if (keymap_r) *keymap_r = keymap;
+							return kmi;
 						}
 					}
 					else {
@@ -938,9 +933,9 @@
 
 static wmKeyMapItem *wm_keymap_item_find(
         const bContext *C, const char *opname, int opcontext,
-        IDProperty *properties, const short hotkey, const short UNUSED(sloppy), wmKeyMap **keymap_r)
+        IDProperty *properties, const short hotkey, const bool strict, wmKeyMap **keymap_r)
 {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list