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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/core/StarLua.cpp4
-rw-r--r--source/core/StarLua.hpp1
-rw-r--r--source/frontend/StarClientCommandProcessor.cpp2
-rw-r--r--source/game/StarInput.cpp5
-rw-r--r--source/game/StarInput.hpp1
5 files changed, 10 insertions, 3 deletions
diff --git a/source/core/StarLua.cpp b/source/core/StarLua.cpp
index 91aebab..201f238 100644
--- a/source/core/StarLua.cpp
+++ b/source/core/StarLua.cpp
@@ -125,7 +125,9 @@ LuaTable LuaContext::createTable() {
LuaNullEnforcer::LuaNullEnforcer(LuaEngine& engine)
: m_engine(&engine) { ++m_engine->m_nullTerminated; };
-LuaNullEnforcer::~LuaNullEnforcer() { --m_engine->m_nullTerminated; };
+LuaNullEnforcer::LuaNullEnforcer(LuaNullEnforcer&& other) { m_engine = take(other.m_engine); };
+
+LuaNullEnforcer::~LuaNullEnforcer() { if (m_engine) --m_engine->m_nullTerminated; };
LuaValue LuaConverter<Json>::from(LuaEngine& engine, Json const& v) {
if (v.isType(Json::Type::Null)) {
diff --git a/source/core/StarLua.hpp b/source/core/StarLua.hpp
index fa777c2..1f0dc43 100644
--- a/source/core/StarLua.hpp
+++ b/source/core/StarLua.hpp
@@ -414,6 +414,7 @@ struct LuaNullTermWrapper : T {
class LuaNullEnforcer {
public:
LuaNullEnforcer(LuaEngine& engine);
+ LuaNullEnforcer(LuaNullEnforcer&&);
~LuaNullEnforcer();
private:
LuaEngine* m_engine;
diff --git a/source/frontend/StarClientCommandProcessor.cpp b/source/frontend/StarClientCommandProcessor.cpp
index d0afb0c..599d506 100644
--- a/source/frontend/StarClientCommandProcessor.cpp
+++ b/source/frontend/StarClientCommandProcessor.cpp
@@ -78,7 +78,7 @@ String ClientCommandProcessor::previewQuestPane(StringList const& arguments, fun
StringList ClientCommandProcessor::handleCommand(String const& commandLine, bool userInput) {
Maybe<Input::ClipboardUnlock> unlock;
if (userInput) // allow clipboard usage during this code
- unlock = Input::singleton().unlockClipboard();
+ unlock = std::move(Input::singleton().unlockClipboard());
try {
if (!commandLine.beginsWith("/"))
throw StarException("ClientCommandProcessor expected command, does not start with '/'");
diff --git a/source/game/StarInput.cpp b/source/game/StarInput.cpp
index d47045d..dec6705 100644
--- a/source/game/StarInput.cpp
+++ b/source/game/StarInput.cpp
@@ -688,7 +688,10 @@ unsigned Input::getTag(String const& tagName) const {
Input::ClipboardUnlock::ClipboardUnlock(Input& input)
: m_input(&input) { ++m_input->m_clipboardAllowed; };
-Input::ClipboardUnlock::~ClipboardUnlock() { --m_input->m_clipboardAllowed; };
+Input::ClipboardUnlock::ClipboardUnlock(ClipboardUnlock&& other) { m_input = take(other.m_input); };
+
+Input::ClipboardUnlock::~ClipboardUnlock() { if (m_input) --m_input->m_clipboardAllowed; };
+
Input::ClipboardUnlock Input::unlockClipboard() {
return Input::ClipboardUnlock(*this);
diff --git a/source/game/StarInput.hpp b/source/game/StarInput.hpp
index 1746739..05b20eb 100644
--- a/source/game/StarInput.hpp
+++ b/source/game/StarInput.hpp
@@ -184,6 +184,7 @@ public:
class ClipboardUnlock {
public:
ClipboardUnlock(Input& input);
+ ClipboardUnlock(ClipboardUnlock&&);
~ClipboardUnlock();
private: