Merge pull request #2286 from Scrxtchy/python-frontend-callback
obs-scripting: Add Python functions for frontend eventsmaster
commit
1b65507985
|
@ -331,6 +331,77 @@ static PyObject *add_save_callback(PyObject *self, PyObject *args)
|
||||||
return python_none();
|
return python_none();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void frontend_event_callback(enum obs_frontend_event *event_data,
|
||||||
|
void *priv)
|
||||||
|
{
|
||||||
|
struct python_obs_callback *cb = priv;
|
||||||
|
|
||||||
|
if (cb->base.removed) {
|
||||||
|
obs_frontend_remove_event_callback(frontend_event_callback, cb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lock_python();
|
||||||
|
|
||||||
|
PyObject *args = Py_BuildValue("(i)", event_data);
|
||||||
|
|
||||||
|
struct python_obs_callback *last_cb = cur_python_cb;
|
||||||
|
cur_python_cb = cb;
|
||||||
|
cur_python_script = (struct obs_python_script *)cb->base.script;
|
||||||
|
|
||||||
|
PyObject *py_ret = PyObject_CallObject(cb->func, args);
|
||||||
|
Py_XDECREF(py_ret);
|
||||||
|
py_error();
|
||||||
|
|
||||||
|
cur_python_script = NULL;
|
||||||
|
cur_python_cb = last_cb;
|
||||||
|
|
||||||
|
Py_XDECREF(args);
|
||||||
|
|
||||||
|
unlock_python();
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *remove_event_callback(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
struct obs_python_script *script = cur_python_script;
|
||||||
|
PyObject *py_cb = NULL;
|
||||||
|
|
||||||
|
UNUSED_PARAMETER(self);
|
||||||
|
|
||||||
|
if (!parse_args(args, "O", &py_cb))
|
||||||
|
return python_none();
|
||||||
|
if (!py_cb || !PyFunction_Check(py_cb))
|
||||||
|
return python_none();
|
||||||
|
|
||||||
|
struct python_obs_callback *cb =
|
||||||
|
find_python_obs_callback(script, py_cb);
|
||||||
|
if (cb)
|
||||||
|
remove_python_obs_callback(cb);
|
||||||
|
return python_none();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void add_event_callback_defer(void *cb)
|
||||||
|
{
|
||||||
|
obs_frontend_add_event_callback(frontend_event_callback, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *add_event_callback(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
struct obs_python_script *script = cur_python_script;
|
||||||
|
PyObject *py_cb = NULL;
|
||||||
|
|
||||||
|
UNUSED_PARAMETER(self);
|
||||||
|
|
||||||
|
if (!parse_args(args, "O", &py_cb))
|
||||||
|
return python_none();
|
||||||
|
if (!py_cb || !PyFunction_Check(py_cb))
|
||||||
|
return python_none();
|
||||||
|
|
||||||
|
struct python_obs_callback *cb = add_python_obs_callback(script, py_cb);
|
||||||
|
defer_call_post(add_event_callback_defer, cb);
|
||||||
|
return python_none();
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------- */
|
/* ----------------------------------- */
|
||||||
|
|
||||||
void add_python_frontend_funcs(PyObject *module)
|
void add_python_frontend_funcs(PyObject *module)
|
||||||
|
@ -353,6 +424,8 @@ void add_python_frontend_funcs(PyObject *module)
|
||||||
DEF_FUNC(set_current_profile),
|
DEF_FUNC(set_current_profile),
|
||||||
DEF_FUNC(remove_save_callback),
|
DEF_FUNC(remove_save_callback),
|
||||||
DEF_FUNC(add_save_callback),
|
DEF_FUNC(add_save_callback),
|
||||||
|
DEF_FUNC(remove_event_callback),
|
||||||
|
DEF_FUNC(add_event_callback),
|
||||||
|
|
||||||
#undef DEF_FUNC
|
#undef DEF_FUNC
|
||||||
{0}};
|
{0}};
|
||||||
|
|
Loading…
Reference in New Issue