[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60395] trunk/blender/source/blender: rna: implementing function to remove keymap from keyconfig

Dalai Felinto dfelinto at gmail.com
Fri Sep 27 16:05:07 CEST 2013


Revision: 60395
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60395
Author:   dfelinto
Date:     2013-09-27 14:05:07 +0000 (Fri, 27 Sep 2013)
Log Message:
-----------
rna: implementing function to remove keymap from keyconfig

Thanks Campbell Barton for reviewing.

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/intern/rna_wm_api.c
    trunk/blender/source/blender/windowmanager/WM_keymap.h
    trunk/blender/source/blender/windowmanager/intern/wm_keymap.c

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm_api.c	2013-09-27 13:56:16 UTC (rev 60394)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm_api.c	2013-09-27 14:05:07 UTC (rev 60395)
@@ -262,6 +262,18 @@
 		return ot->modalkeymap;
 }
 
+static void rna_KeyMap_remove(wmKeyConfig *keyconfig, ReportList *reports, PointerRNA *keymap_ptr)
+{
+	wmKeyMap *keymap = keymap_ptr->data;
+
+	if (WM_keymap_remove(keyconfig, keymap) == FALSE) {
+		BKE_reportf(reports, RPT_ERROR, "KeyConfig '%s' cannot be removed", keymap->idname);
+		return;
+	}
+
+	RNA_POINTER_INVALIDATE(keymap_ptr);
+}
+
 static void rna_KeyConfig_remove(wmWindowManager *wm, ReportList *reports, PointerRNA *keyconf_ptr)
 {
 	wmKeyConfig *keyconf = keyconf_ptr->data;
@@ -671,6 +683,12 @@
 	parm = RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Added key map");
 	RNA_def_function_return(func, parm);
 
+	func = RNA_def_function(srna, "remove", "rna_KeyMap_remove"); /* remove_keymap */
+	RNA_def_function_flag(func, FUNC_USE_REPORTS);
+	parm = RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Removed key map");
+	RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);
+	RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
+
 	func = RNA_def_function(srna, "find", "rna_keymap_find"); /* find_keymap */
 	parm = RNA_def_string(func, "name", "", 0, "Name", "");
 	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-09-27 13:56:16 UTC (rev 60394)
+++ trunk/blender/source/blender/windowmanager/WM_keymap.h	2013-09-27 14:05:07 UTC (rev 60395)
@@ -72,6 +72,7 @@
 wmKeyMap	*WM_keymap_find_all(const struct bContext *C, const char *idname, int spaceid, int regionid);
 wmKeyMap	*WM_keymap_active(struct wmWindowManager *wm, struct wmKeyMap *keymap);
 wmKeyMap	*WM_keymap_guess_opname(const struct bContext *C, const char *opname);
+int			 WM_keymap_remove(struct wmKeyConfig *keyconfig, 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);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_keymap.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_keymap.c	2013-09-27 13:56:16 UTC (rev 60394)
+++ trunk/blender/source/blender/windowmanager/intern/wm_keymap.c	2013-09-27 14:05:07 UTC (rev 60395)
@@ -299,6 +299,21 @@
 	BLI_freelistN(&keymap->items);
 }
 
+int WM_keymap_remove(wmKeyConfig *keyconf, wmKeyMap *keymap)
+{
+	if (BLI_findindex(&keyconf->keymaps, keymap) != -1) {
+
+		WM_keymap_free(keymap);
+		BLI_remlink(&keyconf->keymaps, keymap);
+		MEM_freeN(keymap);
+
+		return TRUE;
+	}
+	else {
+		return FALSE;
+	}
+}
+
 static void keymap_event_set(wmKeyMapItem *kmi, short type, short val, int modifier, short keymodifier)
 {
 	kmi->type = type;




More information about the Bf-blender-cvs mailing list