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