summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-27 22:34:02 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-27 22:34:02 +0200
commit144a79ee00951ed175a9ea3ebc28eb821f855138 (patch)
tree305d8967d817d9a4f156c6ae7b978b48875195ab /src
parentde8d2fd13645d12c8d05ebff1053d09b768a1939 (diff)
fixed ASSERT and last commit's oopsie
Diffstat (limited to 'src')
-rw-r--r--src/defines.hpp6
-rw-r--r--src/events/Windows.cpp4
-rw-r--r--src/helpers/SubsurfaceTree.cpp12
3 files changed, 19 insertions, 3 deletions
diff --git a/src/defines.hpp b/src/defines.hpp
index ff7588e0..e12aa53a 100644
--- a/src/defines.hpp
+++ b/src/defines.hpp
@@ -26,6 +26,10 @@
#define HYPRATOM(name) {name, 0}
-#define RASSERT(expr, reason) if (expr) { Debug::log(CRIT, "\n==========================================================================================\nASSERTION FAILED! \n\n%s\n\nat: line %s in %s", reason, __LINE__, __FILE__); RIP("Assertion failed! See the log in /tmp/hypr/hyprland.log for more info.");}
+#define RASSERT(expr, reason) \
+ if (!expr) { \
+ Debug::log(CRIT, "\n==========================================================================================\nASSERTION FAILED! \n\n%s\n\nat: line %d in %s", std::string(reason).c_str(), __LINE__, ([]() constexpr->std::string { return std::string(__FILE__).substr(std::string(__FILE__).find_last_of('/') + 1); })().c_str()); \
+ RIP("Assertion failed! See the log in /tmp/hypr/hyprland.log for more info."); \
+ }
#define ASSERT(expr) RASSERT(expr, "?") \ No newline at end of file
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 68adf1dd..014e5894 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -141,7 +141,9 @@ void Events::listener_unmapWindow(wl_listener* listener, void* data) {
// refocus on a new window
g_pInputManager->refocus();
+
SubsurfaceTree::destroySurfaceTree(PWINDOW->m_pSurfaceTree);
+
PWINDOW->m_pSurfaceTree = nullptr;
}
@@ -250,4 +252,4 @@ void Events::listener_newXDGSurface(wl_listener* listener, void* data) {
wl_signal_add(&XDGSURFACE->toplevel->events.set_title, &PNEWWINDOW->listen_setTitleWindow);
wl_signal_add(&XDGSURFACE->toplevel->events.request_fullscreen, &PNEWWINDOW->listen_fullscreenWindow);
wl_signal_add(&XDGSURFACE->events.new_popup, &PNEWWINDOW->listen_newPopupXDG);
-} \ No newline at end of file
+}
diff --git a/src/helpers/SubsurfaceTree.cpp b/src/helpers/SubsurfaceTree.cpp
index cdadbe75..312ac9df 100644
--- a/src/helpers/SubsurfaceTree.cpp
+++ b/src/helpers/SubsurfaceTree.cpp
@@ -56,6 +56,16 @@ SSurfaceTreeNode* SubsurfaceTree::createTreeRoot(wlr_surface* pSurface, applyGlo
void destroySubsurface(SSubsurface* pSubsurface);
void SubsurfaceTree::destroySurfaceTree(SSurfaceTreeNode* pNode) {
+ bool exists = false;
+ for (auto& n : surfaceTreeNodes) {
+ if (&n == pNode) {
+ exists = true;
+ break;
+ }
+ }
+
+ RASSERT(exists, "Tried to delete a surfaceTreeNode that doesn't exist!");
+
for (auto& c : pNode->childSubsurfaces)
destroySubsurface(&c);
@@ -160,4 +170,4 @@ void Events::listener_destroySubsurfaceNode(wl_listener* listener, void* data) {
wl_list_remove(&pNode->listen_destroy.link);
SubsurfaceTree::surfaceTreeNodes.remove(*pNode);
-} \ No newline at end of file
+}