Merge pull request #2987 from myk002/myk_no_soft_lock

don't softlock the game on modal popups
develop
Myk 2023-03-07 10:26:01 -08:00 committed by GitHub
commit 4632e04150
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 7 deletions

@ -13,6 +13,7 @@
#include "df/viewscreen_titlest.h" #include "df/viewscreen_titlest.h"
#include "df/viewscreen_update_regionst.h" #include "df/viewscreen_update_regionst.h"
#include "df/viewscreen_worldst.h" #include "df/viewscreen_worldst.h"
#include "df/world.h"
#include "Debug.h" #include "Debug.h"
#include "LuaTools.h" #include "LuaTools.h"
@ -27,6 +28,8 @@ using namespace DFHack;
DFHACK_PLUGIN("overlay"); DFHACK_PLUGIN("overlay");
DFHACK_PLUGIN_IS_ENABLED(is_enabled); DFHACK_PLUGIN_IS_ENABLED(is_enabled);
REQUIRE_GLOBAL(world);
namespace DFHack { namespace DFHack {
DBG_DECLARE(overlay, control, DebugCategory::LINFO); DBG_DECLARE(overlay, control, DebugCategory::LINFO);
DBG_DECLARE(overlay, event, DebugCategory::LINFO); DBG_DECLARE(overlay, event, DebugCategory::LINFO);
@ -67,13 +70,15 @@ struct viewscreen_overlay : T {
} }
DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set<df::interface_key> *input)) { DEFINE_VMETHOD_INTERPOSE(void, feed, (std::set<df::interface_key> *input)) {
bool input_is_handled = false; bool input_is_handled = false;
call_overlay_lua(NULL, "feed_viewscreen_widgets", 2, 1, // don't send input to the overlays if there is a modal dialog up
[&](lua_State *L) { if (!world->status.popups.size())
Lua::Push(L, T::_identity.getName()); call_overlay_lua(NULL, "feed_viewscreen_widgets", 2, 1,
Lua::PushInterfaceKeys(L, *input); [&](lua_State *L) {
}, [&](lua_State *L) { Lua::Push(L, T::_identity.getName());
input_is_handled = lua_toboolean(L, -1); Lua::PushInterfaceKeys(L, *input);
}); }, [&](lua_State *L) {
input_is_handled = lua_toboolean(L, -1);
});
if (!input_is_handled) if (!input_is_handled)
INTERPOSE_NEXT(feed)(input); INTERPOSE_NEXT(feed)(input);
} }