From 56f0f398a96146cae851c1847f656a4ff66964dc Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Sat, 3 Dec 2011 11:21:57 +0100 Subject: Tooltips uses markup even if column uses text. So change column to markup and escape any '&' --- gui/viewtorrents.glade | 38 ++++++++++++++++----------------- src/main.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 19 deletions(-) diff --git a/gui/viewtorrents.glade b/gui/viewtorrents.glade index 7aee1f2..5f95115 100644 --- a/gui/viewtorrents.glade +++ b/gui/viewtorrents.glade @@ -5,18 +5,20 @@ - - Connect - Connect to rTorrent - gtk-connect + + Rehash + Rehash selected torrent + gtk-refresh + - - Disconnect - Disconnect from rTorrent - gtk-disconnect + + Stop + Stop selected torrent + gtk-media-stop + @@ -27,20 +29,18 @@ - - Stop - Stop selected torrent - gtk-media-stop + + Disconnect + Disconnect from rTorrent + gtk-disconnect - - - Rehash - Rehash selected torrent - gtk-refresh + + Connect + Connect to rTorrent + gtk-connect - @@ -568,7 +568,7 @@ If authentication is needed, enter username and password as well. - 1 + 1 diff --git a/src/main.c b/src/main.c index 9c79b31..2dd2a9b 100644 --- a/src/main.c +++ b/src/main.c @@ -1977,6 +1977,8 @@ gint liststore_default_compare_func(GtkTreeModel* model, } } +static gchar* safe_str(gchar* str); + gboolean hashlist_item_sync(worker_data_t* data, xmlrpc_env * const env, const xmlrpc_value * const line, torrent_data_t* torrent_data) @@ -2046,6 +2048,7 @@ gboolean hashlist_item_sync(worker_data_t* data, xmlrpc_env * const env, } g_free(torrent_data->title); torrent_data->title = (gchar*)tmpstr; + torrent_data->title = safe_str(torrent_data->title); /* d.size_bytes */ xmlrpc_array_read_item(env, line, 5, &item); @@ -2357,3 +2360,57 @@ gboolean do_buttonpressed(GtkWidget *treeview, GdkEventButton *event, return FALSE; } + +gchar* safe_str(gchar* str) +{ + gchar* pos; + gchar* ret = NULL; + gsize size = 0, alloc = 0; + pos = strchr(str, '&'); + if (pos == NULL) + { + return str; + } + size = strlen(str); + alloc = size + 10; + ret = g_malloc(alloc); + if (ret == NULL) + { + return str; + } + memcpy(ret, str, size + 1); + pos = ret + (pos - str); + g_free(str); + for (;;) + { + gchar* last; + if (size + 5 >= alloc) + { + size_t p = pos - ret; + size_t na = alloc * 2; + gchar* tmp; + if (na < size + 10) + { + na = size + 10; + } + tmp = g_realloc(ret, na); + if (tmp == NULL) + { + break; + } + ret = tmp; + alloc = na; + pos = ret + p; + } + last = pos + 5; + memmove(last, pos + 1, size - (pos - ret)); + memcpy(pos + 1, "amp;", 4); + size += 4; + pos = strchr(last, '&'); + if (pos == NULL) + { + break; + } + } + return ret; +} -- cgit v1.2.3-70-g09d2