diff options
author | Phillip Wood <phillip.wood@dunelm.org.uk> | 2012-01-25 14:10:00 +0000 |
---|---|---|
committer | Christophe Fergeau <cfergeau@redhat.com> | 2012-09-06 19:58:37 +0200 |
commit | 9c9bd0d3f0f9ebc083b8ea704538188a1db2a44c (patch) | |
tree | 478a7bbc1b074a3a56e1c51fc7a84c7ea059bf29 | |
parent | 05c42926a6318777a03c4587d70a4d8a745ba18c (diff) |
Use UTF8-safe case comparison for artist editing callbacks
https://bugzilla.gnome.org/show_bug.cgi?id=661646
-rw-r--r-- | src/sj-main.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/sj-main.c b/src/sj-main.c index 1ecd8e5..2074063 100644 --- a/src/sj-main.c +++ b/src/sj-main.c @@ -1560,6 +1560,31 @@ G_MODULE_EXPORT void on_title_edit_changed(GtkEditable *widget, gpointer user_da current_album->title = gtk_editable_get_chars (widget, 0, -1); /* get all the characters */ } +/** + * Return TRUE if s1 and s2 are equal according to g_utf8_casefold or + * if they are NULL, NUL or just ascii space. NULL, NUL and space are + * considered equal + */ +static gboolean str_case_equal (const char*s1, const char *s2) +{ + gboolean retval; + char *t1, *t2; + + if (sj_str_is_empty (s1) && sj_str_is_empty (s2)) + return TRUE; + + /* is_empty can handle NULL pointers but g_utf8_casefold cannot */ + if (!s1 || !s2) + return FALSE; + + t1 = g_utf8_casefold (s1, -1); + t2 = g_utf8_casefold (s2, -1); + retval = g_str_equal (t1, t2); + g_free (t1); + g_free (t2); + return retval; +} + G_MODULE_EXPORT void on_artist_edit_changed(GtkEditable *widget, gpointer user_data) { GtkTreeIter iter; TrackDetails *track; @@ -1589,7 +1614,8 @@ G_MODULE_EXPORT void on_artist_edit_changed(GtkEditable *widget, gpointer user_d do { gtk_tree_model_get (GTK_TREE_MODEL (track_store), &iter, COLUMN_ARTIST, ¤t_track_artist, -1); /* Change track artist if it matched album artist before the change */ - if ((strcasecmp (current_track_artist, former_album_artist) == 0) || (strcasecmp (current_track_artist, current_album->artist) == 0)) { + if ((str_case_equal (current_track_artist, former_album_artist)) || + (str_case_equal (current_track_artist, current_album->artist))) { gtk_tree_model_get (GTK_TREE_MODEL (track_store), &iter, COLUMN_DETAILS, &track, -1); g_free (track->artist); |