[Bf-blender-cvs] [cd0f4da] wiggly-widgets: Add keymap basic initializer
Campbell Barton
noreply at git.blender.org
Tue Jan 5 16:35:18 CET 2016
Commit: cd0f4da24a46a8ee75894e07369f3d7eb9bda2ee
Author: Campbell Barton
Date: Wed Jan 6 02:17:44 2016 +1100
Branches: wiggly-widgets
https://developer.blender.org/rBcd0f4da24a46a8ee75894e07369f3d7eb9bda2ee
Add keymap basic initializer
WidgetGroups can now be registered without crashing.
===================================================================
M source/blender/makesrna/intern/rna_wm.c
M source/blender/makesrna/intern/rna_wm_api.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 9d688d4..8881530 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -1509,6 +1509,33 @@ static void widgetgroup_draw(const bContext *C, wmWidgetGroup *wgroup)
RNA_parameter_list_free(&list);
}
+
+static wmKeyMap *widgetgroup_keymap_init(const wmWidgetGroupType *wgrouptype, wmKeyConfig *config)
+{
+ extern FunctionRNA rna_WidgetGroup_keymap_init_func;
+ const char *wgroupname = wgrouptype->name;
+ void *ret;
+
+ PointerRNA ptr;
+ ParameterList list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(NULL, wgrouptype->ext.srna, NULL, &ptr); /* dummy */
+ func = &rna_WidgetGroup_keymap_init_func; /* RNA_struct_find_function(&wgroupr, "keymap_init"); */
+
+ RNA_parameter_list_create(&list, &ptr, func);
+ RNA_parameter_set_lookup(&list, "keyconfig", &config);
+ RNA_parameter_set_lookup(&list, "group_name", &wgroupname);
+ wgrouptype->ext.call(NULL, &ptr, func, &list);
+
+ RNA_parameter_get_lookup(&list, "keymap", &ret);
+ wmKeyMap *keymap = *(wmKeyMap **)ret;
+
+ RNA_parameter_list_free(&list);
+
+ return keymap;
+}
+
#if 0
/* same as exec(), but call cancel */
@@ -1538,14 +1565,14 @@ static char _widgetgroup_idname[OP_MAX_TYPENAME];
//static char _widgetgroup_descr[RNA_DYN_DESCR_MAX];
//static char _widgetgroup_ctxt[RNA_DYN_DESCR_MAX];
static StructRNA *rna_WidgetGroup_register(
- Main *bmain, ReportList *reports, void *data, const char *identifier,
+ Main *UNUSED(bmain), ReportList *reports, void *data, const char *identifier,
StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
{
wmWidgetGroupType *wgrouptype, dummywgt = {NULL};
wmWidgetGroup dummywg = {NULL};
PointerRNA wgptr;
- int have_function[2];
+ int have_function[3];
/* setup dummy widgetgroup & widgetgroup type to store static properties in */
dummywg.type = &dummywgt;
@@ -1566,9 +1593,11 @@ static StructRNA *rna_WidgetGroup_register(
/* check if the area supports widgets */
const struct wmWidgetMapType_Params wmap_params = {
- dummywgt.mapidname ,dummywgt.spaceid, dummywgt.regionid, dummywgt.flag,
+ dummywgt.mapidname, dummywgt.spaceid, dummywgt.regionid, dummywgt.flag,
};
- if (!WM_widgetmaptype_ensure(&wmap_params)) {
+
+ wmWidgetMapType *wmaptype = WM_widgetmaptype_ensure(&wmap_params);
+ if (wmaptype == NULL) {
BKE_reportf(reports, RPT_ERROR, "Area type does not support widgets");
return NULL;
}
@@ -1593,11 +1622,12 @@ static StructRNA *rna_WidgetGroup_register(
dummywgt.ext.free = free;
dummywgt.poll = (have_function[0]) ? widgetgroup_poll : NULL;
- dummywgt.create = (have_function[1]) ? widgetgroup_draw : NULL;
+ dummywgt.keymap_init = (have_function[1]) ? widgetgroup_keymap_init : NULL;
+ dummywgt.create = (have_function[2]) ? widgetgroup_draw : NULL;
- wgrouptype = WM_widgetgrouptype_register(
- bmain, &wmap_params,
- dummywgt.poll, dummywgt.create, NULL,
+ wgrouptype = WM_widgetgrouptype_register_ptr(
+ NULL, wmaptype,
+ dummywgt.poll, dummywgt.create, dummywgt.keymap_init,
dummywgt.name);
memcpy(wgrouptype, &dummywgt, sizeof(dummywgt));
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index feefa29..002e319 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -641,6 +641,21 @@ void RNA_api_widgetgroup(StructRNA *srna)
parm = RNA_def_pointer(func, "context", "Context", "", "");
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
+ /* keymap_init */
+ func = RNA_def_function(srna, "keymap_init", NULL);
+ RNA_def_function_ui_description(func, "Initialize keymaps for this widget group");
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER);
+ parm = RNA_def_pointer(func, "keyconf", "KeyConfig", "", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
+ parm = RNA_def_property(func, "widget_group", PROP_STRING, PROP_NONE);
+ RNA_def_property_ui_text(parm, "Widget Group", "Widget group id");
+ // RNA_def_property_string_default(parm, "");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ parm = RNA_def_pointer(func, "keymap", "KeyMap", "", "");
+ RNA_def_property_flag(parm, PROP_NEVER_NULL);
+ RNA_def_function_return(func, parm);
+
/* draw */
func = RNA_def_function(srna, "draw", NULL);
RNA_def_function_ui_description(func, "Draw function for the operator");
More information about the Bf-blender-cvs
mailing list