From e06109294505a28ab32406eebe5f5257dd202855 Mon Sep 17 00:00:00 2001
From: Jens Nolte <git@queezle.net>
Date: Wed, 3 Aug 2022 10:24:47 +0200
Subject: [PATCH] Patch wl_callback.done to be a destructor

---
 src/Quasar/Wayland/Protocol/TH.hs | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/Quasar/Wayland/Protocol/TH.hs b/src/Quasar/Wayland/Protocol/TH.hs
index 2dc7475..10f6410 100644
--- a/src/Quasar/Wayland/Protocol/TH.hs
+++ b/src/Quasar/Wayland/Protocol/TH.hs
@@ -617,7 +617,9 @@ parseMessage _isRequest interface (opcode, element) = do
 
   isDestructor <-
     case mtype of
-      Nothing -> pure False
+      -- Patch `wl_callback.done` to be a destructor.
+      -- This ensures `done` is called only once, releases the id, and prevents a memory leak.
+      Nothing -> pure (interface == "wl_callback" && name == "done")
       Just "destructor" -> pure True
       Just messageType -> fail $ "Unknown message type: " <> messageType
 
-- 
GitLab