Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/frontend/StarClipboardLuaBindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/frontend/StarClipboardLuaBindings.cpp')
-rw-r--r--source/frontend/StarClipboardLuaBindings.cpp28
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;