aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/quarrel/animation/subscribable/init.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/awesome/quarrel/animation/subscribable/init.lua')
-rw-r--r--.config/awesome/quarrel/animation/subscribable/init.lua47
1 files changed, 47 insertions, 0 deletions
diff --git a/.config/awesome/quarrel/animation/subscribable/init.lua b/.config/awesome/quarrel/animation/subscribable/init.lua
new file mode 100644
index 0000000..9542704
--- /dev/null
+++ b/.config/awesome/quarrel/animation/subscribable/init.lua
@@ -0,0 +1,47 @@
+-------------------------------------------
+-- @author https://github.com/Kasper24
+-- @copyright 2021-2025 Kasper24
+-- Adopted from rubato
+-------------------------------------------
+local gobject = require "gears.object"
+
+-- Kidna copying awesotre's stores on a surface level for added compatibility
+local function subscribable(args)
+ local ret = gobject {}
+ local subscribed = {}
+
+ -- Subscrubes a function to the object so that it's called when `fire` is
+ -- Calls subscribe_callback if it exists as well
+ function ret:subscribe(func)
+ local id = tostring(func):gsub("function: ", "")
+ subscribed[id] = func
+
+ if self.subscribe_callback then
+ self.subscribe_callback(func)
+ end
+ end
+
+ -- Unsubscribes a function and calls unsubscribe_callback if it exists
+ function ret:unsubscribe(func)
+ if not func then
+ subscribed = {}
+ else
+ local id = tostring(func):gsub("function: ", "")
+ subscribed[id] = nil
+ end
+
+ if self.unsubscribe_callback then
+ self.unsubscribe_callback(func)
+ end
+ end
+
+ function ret:fire(...)
+ for _, func in pairs(subscribed) do
+ func(...)
+ end
+ end
+
+ return ret
+end
+
+return subscribable