diff options
Diffstat (limited to 'source/frontend/StarClipboardLuaBindings.cpp')
-rw-r--r-- | source/frontend/StarClipboardLuaBindings.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/source/frontend/StarClipboardLuaBindings.cpp b/source/frontend/StarClipboardLuaBindings.cpp index c8a8dfe..037a7dd 100644 --- a/source/frontend/StarClipboardLuaBindings.cpp +++ b/source/frontend/StarClipboardLuaBindings.cpp @@ -1,21 +1,35 @@ #include "StarClipboardLuaBindings.hpp" #include "StarLuaConverters.hpp" +#include "StarInput.hpp" namespace Star { -LuaCallbacks LuaBindings::makeClipboardCallbacks(ApplicationControllerPtr appController) { +LuaCallbacks LuaBindings::makeClipboardCallbacks(ApplicationControllerPtr appController, bool alwaysAllow) { LuaCallbacks callbacks; - callbacks.registerCallback("hasText", [appController]() -> bool { - return appController->hasClipboard(); + auto available = [alwaysAllow]() { return alwaysAllow || Input::singleton().getTag("clipboard") > 0; }; + + callbacks.registerCallback("available", [=]() -> bool { + return available(); + }); + + callbacks.registerCallback("hasText", [=]() -> bool { + return available() && appController->hasClipboard(); }); - callbacks.registerCallback("getText", [appController]() -> Maybe<String> { - return appController->getClipboard(); + callbacks.registerCallback("getText", [=]() -> Maybe<String> { + if (!available()) + return {}; + else + return appController->getClipboard(); }); - callbacks.registerCallback("setText", [appController](String const& text) { - appController->setClipboard(text); + callbacks.registerCallback("setText", [=](String const& text) -> bool { + if (available()) { + appController->setClipboard(text); + return true; + } + return false; }); return callbacks; |