--- a/switchspell/switchspell.c Wed Sep 26 13:25:54 2007 -0400
+++ b/switchspell/switchspell.c Fri Sep 28 06:15:07 2007 -0400
@@ -40,7 +40,27 @@
#define PROP_LANG "switchspell::language"
-/* TODO: Add option to save the selected language for the dude and restore it */
+static PurpleBlistNode * +blist_node_for_conv(PurpleConversation *conv) + PurpleBlistNode *node = NULL; + switch (purple_conversation_get_type(conv)) { + case PURPLE_CONV_TYPE_IM: + PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name); + node = (PurpleBlistNode *)purple_buddy_get_contact(buddy); + case PURPLE_CONV_TYPE_CHAT: + node = (PurpleBlistNode *)purple_blist_find_chat(conv->account, conv->name); menu_conv_use_dict_cb(GObject *m, gpointer data)
@@ -51,6 +71,10 @@
PidginConversation *gtkconv;
+ if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(m))) conv = pidgin_conv_window_get_active_conversation(win);
@@ -59,6 +83,10 @@
gtkspell_set_language(spell, lang, &error); /* XXX: error can possibly leak here */
g_object_set_data(G_OBJECT(gtkconv->entry), PROP_LANG, lang);
+ node = blist_node_for_conv(gtkconv->active_conv); + purple_blist_node_set_string(node, "switchspell", lang); @@ -119,7 +147,7 @@
@@ -133,7 +161,7 @@
menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu));
- curlang = g_object_get_data(G_OBJECT(gtkconv->entry), PROP_LANG);
+ curlang = g_strdup(g_object_get_data(G_OBJECT(gtkconv->entry), PROP_LANG)); g_list_foreach(gtk_container_get_children(GTK_CONTAINER(menu)),
(GFunc)gtk_check_menu_item_set_active, GINT_TO_POINTER(FALSE));
@@ -146,12 +174,17 @@
+static gboolean make_sure_gtkconv(PurpleConversation *conv); conversation_switched_cb(PurpleConversation *conv)
PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
+ if (!g_object_get_data(G_OBJECT(gtkconv->entry), PROP_LANG)) + make_sure_gtkconv(conv); regenerate_switchspell_menu(gtkconv);
update_switchspell_selection(gtkconv);
@@ -160,9 +193,15 @@
make_sure_gtkconv(PurpleConversation *conv)
PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
+ const char *lang = NULL; - g_object_set_data(G_OBJECT(gtkconv->entry), PROP_LANG, getenv("LANG"));
+ node = blist_node_for_conv(conv); + lang = purple_blist_node_get_string(node, "switchspell"); + g_object_set_data(G_OBJECT(gtkconv->entry), PROP_LANG, lang ? (char *)lang : getenv("LANG")); update_switchspell_selection(gtkconv);