From 020e3dad6ba4222357eb089b89b8ee6d62bee5b5 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Tue, 22 Jun 2021 11:32:34 +0200
Subject: [PATCH] [#60] Initialized events as locked properly and added missing
 events to locking

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 include/vkcv/Event.hpp | 12 ++++++++----
 src/vkcv/Window.cpp    | 24 ++++++++++++++----------
 2 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/include/vkcv/Event.hpp b/include/vkcv/Event.hpp
index b66e4e65..da5cbc72 100644
--- a/include/vkcv/Event.hpp
+++ b/include/vkcv/Event.hpp
@@ -27,7 +27,7 @@ namespace vkcv {
     private:
         std::vector< event_function<T...> > m_functions;
         uint32_t m_id_counter;
-        std::mutex m_mutex;
+		std::mutex m_mutex;
 
     public:
 
@@ -75,17 +75,21 @@ namespace vkcv {
          * locks the event so its function handles won't be called
          */
         void lock() {
-        	m_mutex.lock();
+			m_mutex.lock();
         }
 	
 		/**
 		* unlocks the event so its function handles can be called after locking
 		*/
         void unlock() {
-        	m_mutex.unlock();
+			m_mutex.unlock();
         }
 
-        event() = default;
+        explicit event(bool locked = false) {
+        	if (locked) {
+        		lock();
+        	}
+        }
 
         event(const event &other) = delete;
 
diff --git a/src/vkcv/Window.cpp b/src/vkcv/Window.cpp
index 807c959a..45abcb77 100644
--- a/src/vkcv/Window.cpp
+++ b/src/vkcv/Window.cpp
@@ -11,16 +11,18 @@ namespace vkcv {
 
 	static std::vector<GLFWwindow*> s_Windows;
 
-    Window::Window(GLFWwindow *window)
-            : m_window(window) {
+    Window::Window(GLFWwindow *window) :
+    m_window(window),
+	e_mouseButton(true),
+	e_mouseMove(true),
+	e_mouseScroll(true),
+	e_resize(true),
+	e_key(true),
+	e_char(true),
+	e_gamepad(true)
+    {
 		glfwSetWindowUserPointer(m_window, this);
 	
-		this->e_mouseButton.lock();
-		this->e_mouseMove.lock();
-		this->e_resize.lock();
-		this->e_key.lock();
-		this->e_mouseScroll.lock();
-	
 		// combine Callbacks with Events
 		glfwSetMouseButtonCallback(m_window, Window::onMouseButtonEvent);
 		glfwSetCursorPosCallback(m_window, Window::onMouseMoveEvent);
@@ -63,9 +65,10 @@ namespace vkcv {
 			
 			window->e_mouseButton.unlock();
 			window->e_mouseMove.unlock();
+			window->e_mouseScroll.unlock();
 			window->e_resize.unlock();
 			window->e_key.unlock();
-			window->e_mouseScroll.unlock();
+			window->e_char.unlock();
 			window->e_gamepad.unlock();
     	}
 
@@ -77,9 +80,10 @@ namespace vkcv {
 		
 			window->e_mouseButton.lock();
 			window->e_mouseMove.lock();
+			window->e_mouseScroll.lock();
 			window->e_resize.lock();
 			window->e_key.lock();
-			window->e_mouseScroll.lock();
+			window->e_char.lock();
 			window->e_gamepad.lock();
 		}
     }
-- 
GitLab