Merge lp:~jibel/synaptic/bug.567172 into lp:synaptic

Proposed by Jean-Baptiste Lallement
Status: Merged
Merge reported by: Michael Vogt
Merged at revision: not available
Proposed branch: lp:~jibel/synaptic/bug.567172
Merge into: lp:synaptic
Diff against target: 110 lines (+63/-2)
3 files modified
gtk/rgmainwindow.cc (+5/-2)
gtk/rgutils.cc (+56/-0)
gtk/rgutils.h (+2/-0)
To merge this branch: bzr merge lp:~jibel/synaptic/bug.567172
Reviewer Review Type Date Requested Status
synaptic-developers Pending
Review via email: mp+23893@code.launchpad.net

Description of the change

it's a bit of a hammer, because only '<' need to be escaped.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'gtk/rgmainwindow.cc'
2--- gtk/rgmainwindow.cc 2010-03-25 20:34:44 +0000
3+++ gtk/rgmainwindow.cc 2010-04-21 22:59:12 +0000
4@@ -142,7 +142,7 @@
5 if(gtk_tree_model_get_iter_first(model, &iter)) {
6 do {
7 gtk_tree_model_get(model, &iter, 0, &str, -1);
8- if(strcoll(str,subView.c_str()) == 0) {
9+ if(strcoll(str, MarkupEscapeString(subView).c_str()) == 0) {
10 gtk_tree_selection_select_iter(selection, &iter);
11 break;
12 }
13@@ -167,6 +167,9 @@
14
15 vector<string> subViews = _lister->getSubViews();
16
17+ for(unsigned int i=0; i<subViews.size(); i++)
18+ subViews[i] = MarkupEscapeString(subViews[i]);
19+
20 gchar *str = g_strdup_printf("<b>%s</b>", _("All"));
21 subViews.insert(subViews.begin(), str);
22 g_free(str);
23@@ -2645,7 +2648,7 @@
24 // at us, see LP: #38397 for more information
25 gtk_tree_view_set_model(GTK_TREE_VIEW(me->_treeView), NULL);
26
27- string selected = me->selectedSubView();
28+ string selected = MarkupUnescapeString(me->selectedSubView());
29 me->_lister->setSubView(utf8(selected.c_str()));
30 me->refreshTable(NULL, false);
31 me->setBusyCursor(false);
32
33=== modified file 'gtk/rgutils.cc'
34--- gtk/rgutils.cc 2008-08-21 14:32:18 +0000
35+++ gtk/rgutils.cc 2010-04-21 22:59:12 +0000
36@@ -162,6 +162,62 @@
37 return _str;
38 }
39
40+/*
41+ * MarkupEscapeString: Escape markup from a string
42+ * ----------------------------------------------------
43+ * @unescaped: string to escape markup from
44+ *
45+ * we use g_markup_escape_text which only support 5 standard entities:
46+ * &amp; &lt; &gt; &quot; &apos;
47+ * We must escape the string used as list item of a GtkTree
48+ */
49+ string MarkupEscapeString(string unescaped) {
50+ string escaped;
51+ char *c_esc = g_markup_escape_text(unescaped.c_str(), -1);
52+ escaped = string(c_esc);
53+ g_free(c_esc);
54+ return escaped;
55+}
56+
57+/*
58+ * MarkupUnescapeString: Unescape markup from a string
59+ * ----------------------------------------------------
60+ * @escaped: string to unescape markup from
61+ * unescaped entities: &amp; &lt; &gt; &quot; &apos;
62+ *
63+ * sadly there is no simple way to unescape a previously escaped string with
64+ * g_markup_escape_text
65+ */
66+ string MarkupUnescapeString(string escaped) {
67+ size_t pos = 0, end = 0;
68+ string entity, str;
69+ while ((pos = escaped.find("&", pos)) != string::npos ) {
70+ end = escaped.find(";", pos);
71+ if (end == string::npos)
72+ break;
73+
74+ entity = escaped.substr(pos,end-pos+1);
75+ str = "";
76+ if(entity == "&lt;")
77+ str = "<";
78+ else if(entity == "&gt;")
79+ str = ">";
80+ else if(entity == "&amp;")
81+ str = "&";
82+ else if(entity == "&quot;")
83+ str = "\"";
84+ else if(entity == "&apos;")
85+ str = "'";
86+
87+ if(!str.empty()) {
88+ escaped.replace(pos, entity.size(), str);
89+ pos++;
90+ } else {
91+ pos = end;
92+ }
93+ }
94+ return escaped;
95+}
96
97
98
99
100=== modified file 'gtk/rgutils.h'
101--- gtk/rgutils.h 2008-08-21 14:32:18 +0000
102+++ gtk/rgutils.h 2010-04-21 22:59:12 +0000
103@@ -56,5 +56,7 @@
104
105 string SizeToStr(double Bytes);
106
107+string MarkupEscapeString(string str);
108+string MarkupUnescapeString(string str);
109
110 #endif

Subscribers

People subscribed via source and target branches

to status/vote changes: