about summary refs log tree commit diff stats
path: root/src/plugins
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2016-07-12 01:51:27 +0100
committerJames Booth <boothj5@gmail.com>2016-07-12 01:51:27 +0100
commit1a7eb0076395faf9be1fcd0f5b076b3156693f37 (patch)
tree8a65d50474aa9e879ef646b503172efdb1eee6f6 /src/plugins
parent9a0111c10a3bd461c036d6d5ffb0e3390bed47c5 (diff)
downloadprofani-tty-1a7eb0076395faf9be1fcd0f5b076b3156693f37.tar.gz
Check for plugin win before creating
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/api.c4
-rw-r--r--src/plugins/callbacks.c14
-rw-r--r--src/plugins/callbacks.h1
3 files changed, 19 insertions, 0 deletions
diff --git a/src/plugins/api.c b/src/plugins/api.c
index c8e6a166..d66975d5 100644
--- a/src/plugins/api.c
+++ b/src/plugins/api.c
@@ -302,6 +302,10 @@ api_win_create(
     void(*callback_exec)(PluginWindowCallback *window_callback, const char *tag, const char * const line),
     void(*callback_destroy)(void *callback))
 {
+    if (callbacks_win_exists(plugin_name, tag)) {
+        return;
+    }
+
     PluginWindowCallback *window = malloc(sizeof(PluginWindowCallback));
     window->callback = callback;
     window->callback_exec = callback_exec;
diff --git a/src/plugins/callbacks.c b/src/plugins/callbacks.c
index 52f0aebd..4b958a67 100644
--- a/src/plugins/callbacks.c
+++ b/src/plugins/callbacks.c
@@ -206,6 +206,20 @@ callbacks_add_timed(const char *const plugin_name, PluginTimedFunction *timed_fu
     }
 }
 
+gboolean
+callbacks_win_exists(const char *const plugin_name, const char *tag)
+{
+    GHashTable *window_callbacks = g_hash_table_lookup(p_window_callbacks, plugin_name);
+    if (window_callbacks) {
+        PluginWindowCallback *cb = g_hash_table_lookup(window_callbacks, tag);
+        if (cb) {
+            return TRUE;
+        }
+    }
+
+    return FALSE;
+}
+
 void
 callbacks_add_window_handler(const char *const plugin_name, const char *tag, PluginWindowCallback *window_callback)
 {
diff --git a/src/plugins/callbacks.h b/src/plugins/callbacks.h
index b73f80ff..0b5ea141 100644
--- a/src/plugins/callbacks.h
+++ b/src/plugins/callbacks.h
@@ -69,6 +69,7 @@ void callbacks_close(void);
 
 void callbacks_add_command(const char *const plugin_name, PluginCommand *command);
 void callbacks_add_timed(const char *const plugin_name, PluginTimedFunction *timed_function);
+gboolean callbacks_win_exists(const char *const plugin_name, const char *tag);
 void callbacks_add_window_handler(const char *const plugin_name, const char *tag, PluginWindowCallback *window_callback);
 void * callbacks_get_window_handler(const char *tag);