changeset 4876:9567b13d0e98

[gaim-migrate @ 5206] Added gaim_conversation_(set|get)_plugin_data(), which sets and gets plugin-specific data. It just wraps a hashtable, and it will be replaced sometime down the road if we move to an object framework. However, the function will still exist as a wrapper around g_object_(set|get)_data(). I've said too much. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 23 Mar 2003 21:56:18 +0000
parents 26837f462a66
children 249382064693
files src/conversation.c src/conversation.h
diffstat 2 files changed, 50 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/conversation.c	Sun Mar 23 19:43:58 2003 +0000
+++ b/src/conversation.c	Sun Mar 23 21:56:18 2003 +0000
@@ -874,6 +874,8 @@
 	conv->title        = g_strdup(name);
 	conv->send_history = g_list_append(NULL, NULL);
 	conv->history      = g_string_new("");
+	conv->plugin_data  = g_hash_table_new_full(g_str_hash, g_str_equal,
+											   g_free, NULL);
 
 	if (type == GAIM_CONV_IM)
 	{
@@ -1039,6 +1041,8 @@
 		chats = g_list_remove(chats, conv);
 	}
 
+	g_hash_table_destroy(conv->plugin_data);
+
 	if (win != NULL) {
 		gaim_window_remove_conversation(win,
 			gaim_conversation_get_index(conv));
@@ -1308,6 +1312,26 @@
 	return conv->u.chat;
 }
 
+void
+gaim_conversation_set_plugin_data(struct gaim_conversation *conv,
+								  const char *key, gpointer data)
+{
+	if (conv == NULL || key == NULL)
+		return;
+
+	g_hash_table_replace(conv->plugin_data, g_strdup(key), data);
+}
+
+gpointer
+gaim_conversation_get_plugin_data(struct gaim_conversation *conv,
+								  const char *key)
+{
+	if (conv == NULL || key == NULL)
+		return NULL;
+
+	return g_hash_table_lookup(conv->plugin_data, key);
+}
+
 GList *
 gaim_get_conversations(void)
 {
--- a/src/conversation.h	Sun Mar 23 19:43:58 2003 +0000
+++ b/src/conversation.h	Sun Mar 23 21:56:18 2003 +0000
@@ -222,6 +222,8 @@
 
 	struct gaim_conversation_ui_ops *ui_ops; /**< UI-specific operations. */
 	void *ui_data;                           /**< UI-specific data.       */
+
+	GHashTable *plugin_data;                 /**< Plugin-specific data.   */
 };
 
 typedef void (*gaim_conv_placement_fnc)(struct gaim_conversation *);
@@ -653,6 +655,30 @@
 #define GAIM_CHAT(c) (gaim_conversation_get_chat_data(c))
 
 /**
+ * Sets a conversation's plugin-specific data.
+ * 
+ * To minimize key conflicts, the key should be in the form of
+ * @c pluginname/keyname.
+ *
+ * @param conv The conversation.
+ * @param key  The unique key.
+ * @param data The data to assign.
+ */
+void gaim_conversation_set_plugin_data(struct gaim_conversation *conv,
+									   const char *key, gpointer data);
+
+/**
+ * Returns a conversation's plugin-specific data.
+ *
+ * @param conv The conversation.
+ * @param key  The unqiue key.
+ *
+ * @return The data associated with the key.
+ */
+gpointer gaim_conversation_get_plugin_data(struct gaim_conversation *conv,
+										   const char *key);
+
+/**
  * Returns a list of all conversations.
  *
  * This list includes both IMs and chats.