Esempio n. 1
0
static int lua_create_job(lua_State *L)
{
    const char * message = luaL_checkstring(L, 1);
    gboolean has_progress_bar = lua_toboolean(L, 2);
    int cancellable = FALSE;
    if(!lua_isnoneornil(L,3))
    {
        luaL_checktype(L, 3, LUA_TFUNCTION);
        cancellable = TRUE;
    }
    dt_lua_unlock(false);
    dt_progress_t *progress = dt_control_progress_create(darktable.control, has_progress_bar, message);
    if(cancellable)
    {
        dt_control_progress_make_cancellable(darktable.control, progress, lua_job_cancelled, progress);
    }
    dt_lua_lock();
    luaA_push(L, dt_lua_backgroundjob_t, &progress);
    if(cancellable)
    {
        lua_getuservalue(L, -1);
        lua_pushvalue(L, 3);
        lua_setfield(L, -2, "cancel_callback");
        lua_pop(L, 1);
    }
    return 1;
}
Esempio n. 2
0
void dt_control_progress_attach_job(dt_control_t *control, dt_progress_t *progress, dt_job_t *job)
{
  dt_control_progress_make_cancellable(control, progress, &dt_control_progress_cancel_callback, job);
}