org.guifications.plugins: beacb4988ca80e4a1ac0e423ccbd4c7c9310e147

grim at guifications.org grim at guifications.org
Fri Jul 4 22:20:04 CDT 2008


-----------------------------------------------------------------
Revision: beacb4988ca80e4a1ac0e423ccbd4c7c9310e147
Ancestor: 59728386a81b657f620accc81feb6f3f627122b8
Author: grim at guifications.org
Date: 2008-07-05T03:16:15
Branch: org.guifications.plugins

Modified files:
        msglen/msglen.c msglen/plugins.cfg

ChangeLog: 

This is better, but still really broken, as such i'm marking it incomplete


-----------------------------------------------------------------
This revision's diffstat output:
 msglen.c    |   58 ++++++++++++++++++++++++++++++++++++++++------------------
 plugins.cfg |    2 +-
 2 files changed, 41 insertions(+), 19 deletions(-)
-------------- next part --------------
============================================================
--- msglen/msglen.c	038681eab61ec0e29c90f58bbe44437903948bf9
+++ msglen/msglen.c	e294a0650f89d1c4671bf5be1035e101cba41763
@@ -37,6 +37,7 @@ typedef struct {
 	PurpleConversation *conv;
 	PidginWindow *win;
 	GtkWidget *label;
+	gulong sig_id;
 } MsgLenData;
 
 /******************************************************************************
@@ -50,7 +51,6 @@ msg_len_data_free(MsgLenData *mld) {
 static void
 msg_len_data_free(MsgLenData *mld) {
 	mld->win = NULL;
-	mld->conv = NULL;
 
 	if(mld->label && GTK_IS_LABEL(mld->label))
 		gtk_widget_destroy(mld->label);
@@ -80,24 +80,22 @@ static void
 }
 
 static void
-msg_len_update(PidginWindow *win, PurpleConversation *conv) {
-	PidginConversation *gtkconv = NULL;
-	MsgLenData *mld = NULL;
-	gchar *text = NULL;
-	gint count = 0;
+msg_len_add_signal(PidginConversation *pconv, MsgLenData *mld) {
+	g_signal_connect(G_OBJECT(pconv->entry),
+					 "key-release-event",
+					 G_CALLBACK(msg_len_key_released_cb), mld);
+}
 
-	g_return_if_fail(win);
-	g_return_if_fail(conv);
+static MsgLenData *
+msg_len_find_data(PidginWindow *win) {
+	MsgLenData *mld = NULL;
 
-	gtkconv = PIDGIN_CONVERSATION(conv);
+	mld = g_hash_table_lookup(data, win);
 
-	mld = g_hash_table_lookup(data, conv);
-
 	if(mld == NULL) {
 		mld = g_new0(MsgLenData, 1);
 
 		mld->win = win;
-		mld->conv = conv;
 
 		mld->label = gtk_label_new("");
 		pidgin_menu_tray_append(PIDGIN_MENU_TRAY(win->menu.tray), mld->label,
@@ -106,18 +104,34 @@ msg_len_update(PidginWindow *win, Purple
 
 		g_signal_connect_swapped(G_OBJECT(mld->label), "destroy",
 								 G_CALLBACK(g_nullify_pointer), &mld->label);
+	}
 
-		g_signal_connect(G_OBJECT(gtkconv->entry), "key-release-event",
-						 G_CALLBACK(msg_len_key_released_cb), mld);
-	}
+	return mld;
+}
 
+static void
+msg_len_update(PidginWindow *win, PurpleConversation *conv) {
+	PidginConversation *gtkconv = NULL;
+	MsgLenData *mld = NULL;
+	gchar *text = NULL;
+	gint count = 0;
+
+	g_return_if_fail(win);
+	g_return_if_fail(conv);
+
+	gtkconv = PIDGIN_CONVERSATION(conv);
+
+	mld = msg_len_find_data(win);
+
+	mld->conv = conv;
+
 	count = gtk_text_buffer_get_char_count(gtkconv->entry_buffer);
 
 	text = g_strdup_printf("%d", count);
 	gtk_label_set_text(GTK_LABEL(mld->label), text);
 	g_free(text);
 
-	g_hash_table_insert(data, conv, mld);
+	g_hash_table_insert(data, win, mld);
 }
 
 /******************************************************************************
@@ -127,7 +141,12 @@ msg_len_conv_created_cb(PurpleConversati
 msg_len_conv_created_cb(PurpleConversation *conv, gpointer d) {
 	PidginConversation *pconv = PIDGIN_CONVERSATION(conv);
 	PidginWindow *win = pidgin_conv_get_window(pconv);
+	MsgLenData *mld = NULL;
 
+	mld = msg_len_find_data(win);
+
+	msg_len_add_signal(pconv, mld);
+
 	msg_len_update(win, conv);
 }
 
@@ -166,9 +185,12 @@ plugin_load(PurplePlugin *plugin) {
 
 	for(convs = purple_get_conversations(); convs; convs = convs->next) {
 		PurpleConversation *conv = (PurpleConversation *)convs->data;
-		PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
+		PidginConversation *pconv = PIDGIN_CONVERSATION(conv);
+		MsgLenData *mld = msg_len_find_data(pconv->win);
 
-		msg_len_update(gtkconv->win, conv);
+		msg_len_add_signal(pconv, mld);
+
+		msg_len_update(pconv->win, conv);
 	}
 
 	return TRUE;
============================================================
--- msglen/plugins.cfg	7ea67988aa80171a21940eac2c7f47e57f241d6b
+++ msglen/plugins.cfg	8f559b867f8e7f805c466bad72187c9f4e8f8bc2
@@ -1,5 +1,5 @@
 [Message Length]
-type=default
+type=incomplete
 depends=pidgin
 provides=msglen
 summary=Shows the length of your current message in the menu tray


More information about the Plugins-commits mailing list