summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhillip Wood <phillip.wood@dunelm.org.uk>2012-01-25 14:10:00 +0000
committerChristophe Fergeau <cfergeau@redhat.com>2012-09-06 19:58:37 +0200
commit9c9bd0d3f0f9ebc083b8ea704538188a1db2a44c (patch)
tree478a7bbc1b074a3a56e1c51fc7a84c7ea059bf29
parent05c42926a6318777a03c4587d70a4d8a745ba18c (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.c28
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, &current_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);