WorkSpace: UI filtering for add-ons

Allows for each workspace to have it's own add-ons on display.

Filtering for: Panels, Menus, Keymaps & Manipulators.
Automatically applies to add-ons at the moment.

Access from workspace, toggled off by default
once enabled, add-ons can be white-listed.

See D3076
This commit is contained in:
2018-03-01 01:26:02 +11:00
parent 80d1d9629e
commit d937d06c02
26 changed files with 402 additions and 2 deletions

View File

@@ -376,6 +376,9 @@ void BPy_init_modules(void)
PyModule_AddObject(mod, meth_bpy_register_class.ml_name, (PyObject *)PyCFunction_New(&meth_bpy_register_class, NULL));
PyModule_AddObject(mod, meth_bpy_unregister_class.ml_name, (PyObject *)PyCFunction_New(&meth_bpy_unregister_class, NULL));
PyModule_AddObject(mod, meth_bpy_owner_id_get.ml_name, (PyObject *)PyCFunction_New(&meth_bpy_owner_id_get, NULL));
PyModule_AddObject(mod, meth_bpy_owner_id_set.ml_name, (PyObject *)PyCFunction_New(&meth_bpy_owner_id_set, NULL));
/* add our own modules dir, this is a python package */
bpy_package_py = bpy_import_test("bpy");
}

View File

@@ -8257,6 +8257,43 @@ static PyObject *pyrna_unregister_class(PyObject *UNUSED(self), PyObject *py_cla
Py_RETURN_NONE;
}
/* Access to 'owner_id' internal global. */
static PyObject *pyrna_bl_owner_id_get(PyObject *UNUSED(self))
{
const char *name = RNA_struct_state_owner_get();
if (name) {
return PyUnicode_FromString(name);
}
Py_RETURN_NONE;
}
static PyObject *pyrna_bl_owner_id_set(PyObject *UNUSED(self), PyObject *value)
{
const char *name;
if (value == Py_None) {
name = NULL;
}
else if (PyUnicode_Check(value)) {
name = _PyUnicode_AsString(value);
}
else {
PyErr_Format(PyExc_ValueError,
"owner_set(...): "
"expected None or a string, not '%.200s'", Py_TYPE(value)->tp_name);
return NULL;
}
RNA_struct_state_owner_set(name);
Py_RETURN_NONE;
}
PyMethodDef meth_bpy_owner_id_get = {
"_bl_owner_id_get", (PyCFunction)pyrna_bl_owner_id_get, METH_NOARGS, NULL,
};
PyMethodDef meth_bpy_owner_id_set = {
"_bl_owner_id_set", (PyCFunction)pyrna_bl_owner_id_set, METH_O, NULL,
};
/* currently this is fairly limited, we would need to make some way to split up
* pyrna_callback_classmethod_... if we want more than one callback per type */
typedef struct BPyRNA_CallBack {

View File

@@ -225,4 +225,8 @@ int pyrna_prop_validity_check(BPy_PropertyRNA *self);
extern PyMethodDef meth_bpy_register_class;
extern PyMethodDef meth_bpy_unregister_class;
/* bpy.utils._bl_owner_(get/set) */
extern PyMethodDef meth_bpy_owner_id_set;
extern PyMethodDef meth_bpy_owner_id_get;
#endif