From: <rl...@us...> - 2006-07-11 20:49:44
|
Revision: 16488 Author: rlaager Date: 2006-07-11 13:49:41 -0700 (Tue, 11 Jul 2006) ViewCVS: http://svn.sourceforge.net/gaim/?rev=16488&view=rev Log Message: ----------- Backport revision 16487 from trunk Fix SF Bug #1517875 "The text replacement plugin is finally a good thing to use. Unfortunately, it advertises case sensitivity falsely. Try, for example, adding 'h' and 'H' as two separate text replacements. ;-)" ViewCVS Links: ------------- http://svn.sourceforge.net/gaim/?rev=16487&view=rev Modified Paths: -------------- branches/v2_0_0/plugins/spellchk.c Modified: branches/v2_0_0/plugins/spellchk.c =================================================================== --- branches/v2_0_0/plugins/spellchk.c 2006-07-11 20:47:11 UTC (rev 16487) +++ branches/v2_0_0/plugins/spellchk.c 2006-07-11 20:49:41 UTC (rev 16488) @@ -1898,21 +1898,48 @@ static void list_add_new() { GtkTreeIter iter; + const char *word = gtk_entry_get_text(GTK_ENTRY(bad_entry)); + gboolean case_sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(case_toggle)); if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { - char *tmpword = g_utf8_casefold(gtk_entry_get_text(GTK_ENTRY(bad_entry)), -1); + char *tmpword = g_utf8_casefold(word, -1); do { - GValue val0; - char *bad; + GValue bad_val; + gboolean match; - val0.g_type = 0; - gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, BAD_COLUMN, &val0); - bad = g_utf8_casefold(g_value_get_string(&val0), -1); + bad_val.g_type = 0; + gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, BAD_COLUMN, &bad_val); - if (!strcmp(bad, tmpword)) { - g_value_unset(&val0); + if (case_sensitive) + { + GValue case_sensitive_val; + case_sensitive_val.g_type = 0; + gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, CASE_SENSITIVE_COLUMN, &case_sensitive_val); + + /* If they're both case-sensitive, then compare directly. + * Otherwise, they overlap. */ + if (g_value_get_boolean(&case_sensitive_val)) + { + match = !strcmp(g_value_get_string(&bad_val), word); + } + else + { + char *bad = g_utf8_casefold(g_value_get_string(&bad_val), -1); + match = !strcmp(bad, tmpword); + g_free(bad); + } + g_value_unset(&case_sensitive_val); + } + else + { + char *bad = g_utf8_casefold(g_value_get_string(&bad_val), -1); + match = !strcmp(bad, tmpword); g_free(bad); + } + + if (match) { + g_value_unset(&bad_val); g_free(tmpword); gaim_notify_error(NULL, _("Duplicate Correction"), @@ -1921,8 +1948,7 @@ return; } - g_value_unset(&val0); - g_free(bad); + g_value_unset(&bad_val); } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); @@ -1932,10 +1958,10 @@ gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, - BAD_COLUMN, gtk_entry_get_text(GTK_ENTRY(bad_entry)), + BAD_COLUMN, word, GOOD_COLUMN, gtk_entry_get_text(GTK_ENTRY(good_entry)), WORD_ONLY_COLUMN, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(complete_toggle)), - CASE_SENSITIVE_COLUMN, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(case_toggle)), + CASE_SENSITIVE_COLUMN, case_sensitive, -1); gtk_editable_delete_text(GTK_EDITABLE(bad_entry), 0, -1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |