int dt_lua_widget_trigger_callback(lua_State *L) { int nargs = lua_gettop(L) -2; lua_widget * widget; luaA_to(L,lua_widget,&widget,1); const char* name = lua_tostring(L,2); lua_getuservalue(L,1); lua_getfield(L,-1,name); if(!lua_isnil(L,-1)) { lua_pushvalue(L,1); for(int i = 0 ; i < nargs ; i++) { lua_pushvalue(L,i+3); } dt_lua_do_chunk_silent(L,nargs+1,0); dt_lua_redraw_screen(); } return 0; }
static int32_t async_callback_job(dt_job_t *job) { dt_lua_lock(); lua_State* L= darktable.lua_state.state; async_call_data* data = (async_call_data*)dt_control_job_get_params(job); lua_pushcfunction(L,data->pusher); int nargs =0; GList* cur_elt = data->extra; while(cur_elt) { GList * type_type_elt = cur_elt; cur_elt = g_list_next(cur_elt); GList * type_elt = cur_elt; cur_elt = g_list_next(cur_elt); GList * data_elt = cur_elt; cur_elt = g_list_next(cur_elt); switch(GPOINTER_TO_INT(type_type_elt->data)) { case LUA_ASYNC_TYPEID_WITH_FREE: // skip the destructor cur_elt = g_list_next(cur_elt); // do not break case LUA_ASYNC_TYPEID: luaA_push_type(L,GPOINTER_TO_INT(type_elt->data),data_elt->data); break; case LUA_ASYNC_TYPENAME_WITH_FREE: // skip the destructor cur_elt = g_list_next(cur_elt); // do not break case LUA_ASYNC_TYPENAME: luaA_push_type(L,luaA_type_find(L,type_elt->data),&data_elt->data); break; case LUA_ASYNC_DONE: default: // should never happen g_assert(false); break; } nargs++; } dt_lua_do_chunk_silent(L,nargs,0); dt_lua_redraw_screen(); dt_lua_unlock(); return 0; }
static int run_early_script(lua_State* L) { char tmp_path[PATH_MAX] = { 0 }; // run global init script dt_loc_get_datadir(tmp_path, sizeof(tmp_path)); g_strlcat(tmp_path, "/luarc", sizeof(tmp_path)); dt_lua_dofile_silent(L, tmp_path, 0, 0); if(darktable.gui != NULL) { // run user init script dt_loc_get_user_config_dir(tmp_path, sizeof(tmp_path)); g_strlcat(tmp_path, "/luarc", sizeof(tmp_path)); dt_lua_dofile_silent(L, tmp_path, 0, 0); } if(!lua_isnil(L,1)){ const char *lua_command = lua_tostring(L, 1); dt_lua_dostring_silent(L, lua_command, 0, 0); } dt_lua_redraw_screen(); return 0; }
void dt_lua_widget_trigger_callback_glist(lua_State*L,lua_widget object,const char* name,GList*extra) { luaA_push_type(L,object->type->associated_type,&object); lua_getuservalue(L,-1); lua_getfield(L,-1,name); if(! lua_isnil(L,-1)) { lua_pushvalue(L,-3); GList* cur_elt = extra; int nargs = 1; while(cur_elt) { const char* next_type = cur_elt->data; cur_elt = g_list_next(cur_elt); luaA_push_type(L,luaA_type_find(L,next_type),&cur_elt->data); nargs++; cur_elt = g_list_next(cur_elt); } dt_lua_do_chunk(L,nargs,0); } dt_lua_redraw_screen(); g_list_free(extra); lua_pop(L,2); }
static int run_early_script(lua_State* L) { char basedir[PATH_MAX] = { 0 }; // run global init script dt_loc_get_datadir(basedir, sizeof(basedir)); char *luarc = g_build_filename(basedir, "luarc", NULL); dt_lua_check_print_error(L, luaL_dofile(L, luarc)); g_free(luarc); if(darktable.gui != NULL) { // run user init script dt_loc_get_user_config_dir(basedir, sizeof(basedir)); luarc = g_build_filename(basedir, "luarc", NULL); dt_lua_check_print_error(L, luaL_dofile(L, luarc)); g_free(luarc); } if(!lua_isnil(L,1)){ const char *lua_command = lua_tostring(L, 1); dt_lua_check_print_error(L,luaL_dostring(L,lua_command)); } dt_lua_redraw_screen(); return 0; }
static int32_t run_early_script(dt_job_t *job) { char tmp_path[PATH_MAX]; lua_State *L = darktable.lua_state.state; gboolean has_lock = dt_lua_lock(); // run global init script dt_loc_get_datadir(tmp_path, sizeof(tmp_path)); g_strlcat(tmp_path, "/luarc", sizeof(tmp_path)); dt_lua_dofile_silent(L,tmp_path,0,0); if(darktable.gui != NULL) { // run user init script dt_loc_get_user_config_dir(tmp_path, sizeof(tmp_path)); g_strlcat(tmp_path, "/luarc", sizeof(tmp_path)); dt_lua_dofile_silent(L,tmp_path,0,0); } char *lua_command = dt_control_job_get_params(job); if(lua_command) dt_lua_dostring_silent(L, lua_command, 0, 0); free(lua_command); dt_lua_redraw_screen(); dt_lua_unlock(has_lock); return 0; }