diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e3779b39749..8226d6be8d7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -747,6 +747,7 @@ if(USE_LUA) "lua/styles.c" "lua/tags.c" "lua/types.c" + "lua/util.c" "lua/view.c" "lua/widget/box.c" "lua/widget/button.c" diff --git a/src/lua/configuration.h b/src/lua/configuration.h index 5e04dd79e8f..b324d93f60a 100644 --- a/src/lua/configuration.h +++ b/src/lua/configuration.h @@ -40,10 +40,11 @@ // 4.4.0 was 9.1.0 (added mimic and dt_lua_image_t changes) // 4.6.0 was 9.2.0 (added change_timestamp to dt_image_t) // 4.8.0 was 9.3.0 (added button and box widget enhancements) +// 5.0.0 was 9.4.0 (added group events and uuid) /* incompatible API change */ #define LUA_API_VERSION_MAJOR 9 /* backward compatible API change */ -#define LUA_API_VERSION_MINOR 3 +#define LUA_API_VERSION_MINOR 4 /* bugfixes that should not change anything to the API */ #define LUA_API_VERSION_PATCH 0 /* suffix for unstable version */ diff --git a/src/lua/init.c b/src/lua/init.c index b3bf425e249..01086d46621 100644 --- a/src/lua/init.c +++ b/src/lua/init.c @@ -43,6 +43,7 @@ #include "lua/styles.h" #include "lua/tags.h" #include "lua/types.h" +#include "lua/util.h" #include "lua/view.h" #include "lua/widget/widget.h" @@ -138,7 +139,7 @@ static lua_CFunction init_funcs[] dt_lua_init_luastorages, dt_lua_init_tags, dt_lua_init_film, dt_lua_init_call, dt_lua_init_view, dt_lua_init_events, dt_lua_init_init, dt_lua_init_widget, dt_lua_init_lualib, dt_lua_init_gettext, dt_lua_init_guides, dt_lua_init_cairo, - dt_lua_init_password, NULL }; + dt_lua_init_password, dt_lua_init_util, NULL }; void dt_lua_init(lua_State *L, const char *lua_command) diff --git a/src/lua/util.c b/src/lua/util.c new file mode 100644 index 00000000000..e463c3e32fb --- /dev/null +++ b/src/lua/util.c @@ -0,0 +1,66 @@ +/* + This file is part of darktable, + Copyright (C) 2024 darktable developers. + + darktable is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + darktable is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with darktable. If not, see . + */ +#include "lua/preferences.h" +#include "lua/call.h" +#include "lua/events.h" +#include +#include +#include + +static int message(lua_State *L) +{ + const char *sender = luaL_checkstring(L, 1); + const char *receiver = luaL_checkstring(L, 2); + const char *message = luaL_checkstring(L, 3); + + dt_lua_async_call_alien(dt_lua_event_trigger_wrapper, + 0, NULL, NULL, + LUA_ASYNC_TYPENAME, "const char*", "inter-script-communication", + LUA_ASYNC_TYPENAME, "const char*", sender, + LUA_ASYNC_TYPENAME, "const char*", receiver, + LUA_ASYNC_TYPENAME, "const char*", message, + LUA_ASYNC_DONE); + + return 0; +} + + +int dt_lua_init_util(lua_State *L) +{ + dt_lua_push_darktable_lib(L); + dt_lua_goto_subtable(L, "util"); + + lua_pushcfunction(L, message); + lua_setfield(L, -2, "message"); + + lua_pop(L, 1); + + + lua_pushcfunction(L, dt_lua_event_multiinstance_register); + lua_pushcfunction(L, dt_lua_event_multiinstance_destroy); + lua_pushcfunction(L, dt_lua_event_multiinstance_trigger); + dt_lua_event_add(L, "inter-script-communication"); + + return 0; +} +// clang-format off +// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py +// vim: shiftwidth=2 expandtab tabstop=2 cindent +// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified; +// clang-format on + diff --git a/src/lua/util.h b/src/lua/util.h new file mode 100644 index 00000000000..2eb685bb810 --- /dev/null +++ b/src/lua/util.h @@ -0,0 +1,28 @@ +/* + This file is part of darktable, + Copyright (C) 2024 darktable developers. + + darktable is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + darktable is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with darktable. If not, see . + */ + +#pragma once + +int dt_lua_init_util(lua_State *L); + +// clang-format off +// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py +// vim: shiftwidth=2 expandtab tabstop=2 cindent +// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified; +// clang-format on +