Updating branch refs/heads/master to 2d9bfff212b882e272509557b4e1ad7fedfd5804 (commit) from b862afd9c630ea8b6c24dcfa5a459ba2dbb61457 (commit)
commit 2d9bfff212b882e272509557b4e1ad7fedfd5804 Author: Christian Dywan <christ...@twotoasts.de> Date: Fri Dec 7 01:30:04 2012 +0100 Fix url completion highlight regression and add test cases Fixes: https://bugs.launchpad.net/midori/+bug/1087251 midori/midori-locationaction.c | 66 ++++++++++++++++++++++++---------------- midori/midori-locationaction.h | 8 +++++ midori/midori.vapi | 6 ++++ tests/completion.vala | 28 +++++++++++++++++ 4 files changed, 82 insertions(+), 26 deletions(-) diff --git a/midori/midori-locationaction.c b/midori/midori-locationaction.c index 79b3731..52b96d3 100644 --- a/midori/midori-locationaction.c +++ b/midori/midori-locationaction.c @@ -224,9 +224,9 @@ midori_location_action_class_init (MidoriLocationActionClass* class) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } -static gchar* -midori_location_entry_render_uri (gchar** keys, - const gchar* uri_escaped) +gchar* +midori_location_action_render_uri (gchar** keys, + const gchar* uri_escaped) { gchar* uri_unescaped = midori_uri_unescape (uri_escaped); gchar* uri = g_strescape (uri_unescaped, NULL); @@ -238,19 +238,28 @@ midori_location_entry_render_uri (gchar** keys, gchar* desc_iter = stripped_uri; gint key_idx = 0; gchar* key = keys[key_idx]; - gint offset = 0; gchar* start; gchar* desc_uri = NULL; - while (key && (start = strstr (temp_iter, key)) && start) + while (key && (start = strstr (temp_iter, key))) { gsize len = strlen (key); if (len) { - offset = (start - temp_iter); + gint offset = (start - temp_iter); gchar* skey = g_strndup (desc_iter + offset, len); gchar** parts = g_strsplit (desc_iter, skey, 2); if (parts[0] && parts[1]) - desc_uri = g_markup_printf_escaped ("%s<b>%s</b>", parts[0], skey); + { + if (desc_uri) + { + gchar* temp_markup = g_markup_printf_escaped ("%s<b>%s</b>", parts[0], skey); + gchar* temp_concat = g_strconcat (desc_uri, temp_markup, NULL); + g_free (temp_markup); + katze_assign (desc_uri, temp_concat); + } + else + desc_uri = g_markup_printf_escaped ("%s<b>%s</b>", parts[0], skey); + } g_strfreev (parts); g_free (skey); @@ -264,43 +273,50 @@ midori_location_entry_render_uri (gchar** keys, break; } if (key) - katze_assign (desc_uri, NULL); - if (desc_uri) + katze_assign (desc_uri,g_markup_escape_text (stripped_uri, -1)); + else { gchar* temp_markup = g_markup_escape_text (desc_iter, -1); gchar* temp_concat = g_strconcat (desc_uri, temp_markup, NULL); g_free (temp_markup); katze_assign (desc_uri, temp_concat); } - else - desc_uri = g_markup_escape_text (stripped_uri, -1); g_free (temp); g_free (stripped_uri); return desc_uri; } -static gchar* -midori_location_entry_render_title (gchar** keys, - const gchar* title) +gchar* +midori_location_action_render_title (gchar** keys, + const gchar* title) { gchar* temp; gchar* temp_iter = temp = g_utf8_strdown (title, -1); const gchar* desc_iter = title; gint key_idx = 0; gchar* key = keys[key_idx]; - gint offset = 0; gchar* start; gchar* desc_title = NULL; - while (key && (start = strstr (temp_iter, key)) && start) + while (key && (start = strstr (temp_iter, key))) { gsize len = strlen (key); if (len) { - offset = (start - temp_iter); + gint offset = (start - temp_iter); gchar* skey = g_strndup (desc_iter + offset, len); gchar** parts = g_strsplit (desc_iter, skey, 2); if (parts[0] && parts[1]) - desc_title = g_markup_printf_escaped ("%s<b>%s</b>", parts[0], skey); + { + if (desc_title) + { + gchar* temp_markup = g_markup_printf_escaped ("%s<b>%s</b>", parts[0], skey); + gchar* temp_concat = g_strconcat (desc_title, temp_markup, NULL); + g_free (temp_markup); + katze_assign (desc_title, temp_concat); + } + else + desc_title = g_markup_printf_escaped ("%s<b>%s</b>", parts[0], skey); + } g_strfreev (parts); g_free (skey); @@ -314,16 +330,14 @@ midori_location_entry_render_title (gchar** keys, break; } if (key) - katze_assign (desc_title, NULL); - if (desc_title) + katze_assign (desc_title, g_markup_escape_text (title, -1)); + else { gchar* temp_markup = g_markup_escape_text (desc_iter, -1); gchar* temp_concat = g_strconcat (desc_title, temp_markup, NULL); g_free (temp_markup); katze_assign (desc_title, temp_concat); } - else - desc_title = g_markup_escape_text (title, -1); g_free (temp); return desc_title; } @@ -358,7 +372,7 @@ midori_location_entry_render_title_cb (GtkCellLayout* layout, gchar* key = g_utf8_strdown (action->key ? action->key : "", -1); gchar** keys = g_strsplit_set (key, " %", -1); g_free (key); - desc = midori_location_entry_render_title (keys, title); + desc = midori_location_action_render_title (keys, title); g_strfreev (keys); } @@ -399,7 +413,7 @@ midori_location_entry_render_uri_cb (GtkCellLayout* layout, gchar* key = g_utf8_strdown (action->key ? action->key : "", -1); gchar** keys = g_strsplit_set (key, " %", -1); g_free (key); - desc = midori_location_entry_render_uri (keys, uri_escaped); + desc = midori_location_action_render_uri (keys, uri_escaped); g_strfreev (keys); g_free (uri_escaped); } @@ -440,8 +454,8 @@ midori_location_entry_render_text_cb (GtkCellLayout* layout, gchar* key = g_utf8_strdown (action->key ? action->key : "", -1); gchar** keys = g_strsplit_set (key, " %", -1); g_free (key); - gchar* desc_uri = midori_location_entry_render_uri (keys, uri_escaped); - gchar* desc_title = midori_location_entry_render_title (keys, title); + gchar* desc_uri = midori_location_action_render_uri (keys, uri_escaped); + gchar* desc_title = midori_location_action_render_title (keys, title); desc = g_strdup_printf ("%s\n<span color='gray45'>%s</span>", desc_title, desc_uri); g_free (uri_escaped); g_free (title); diff --git a/midori/midori-locationaction.h b/midori/midori-locationaction.h index 2a8dac2..7fad42b 100644 --- a/midori/midori-locationaction.h +++ b/midori/midori-locationaction.h @@ -74,6 +74,14 @@ void midori_location_action_set_security_hint (MidoriLocationAction* location_action, MidoriSecurity hint); +gchar* +midori_location_action_render_uri (gchar** keys, + const gchar* uri_escaped); + +gchar* +midori_location_action_render_title (gchar** keys, + const gchar* title); + G_END_DECLS #endif /* __MIDORI_LOCATION_ACTION_H__ */ diff --git a/midori/midori.vapi b/midori/midori.vapi index fd4ced7..b3c70f6 100644 --- a/midori/midori.vapi +++ b/midori/midori.vapi @@ -187,6 +187,12 @@ namespace Midori { } [CCode (cheader_filename = "midori/midori.h")] + public class LocationAction : Gtk.Action { + public static string render_uri ([CCode (array_length = false)] string[] keys, string uri_escaped); + public static string render_title ([CCode (array_length = false)] string[] keys, string title); + } + + [CCode (cheader_filename = "midori/midori.h")] public class SearchAction : Gtk.Action { public static Katze.Item? get_engine_for_form (WebKit.WebView web_view, Pango.EllipsizeMode ellipsize); } diff --git a/tests/completion.vala b/tests/completion.vala index 0a6261d..df51b8a 100644 --- a/tests/completion.vala +++ b/tests/completion.vala @@ -122,11 +122,39 @@ void completion_history () { complete_spec.begin (completion, spec); } +struct TestCaseRender { + public string keys; + public string uri; + public string title; + public string expected_uri; + public string expected_title; +} + +const TestCaseRender[] renders = { + { "debian", "planet.debian.org", "Planet Debian", "planet.<b>debian</b>.org", "Planet <b>Debian</b>" }, + { "p debian o", "planet.debian.org", "Planet Debian", "<b>p</b>lanet.<b>debian</b>.<b>o</b>rg", "Planet Debian" }, + { "pla deb o", "planet.debian.org", "Planet Debian", "<b>pla</b>net.<b>deb</b>ian.<b>o</b>rg", "Planet Debian" }, + { "ebi", "planet.debian.org", "Planet Debian", "planet.d<b>ebi</b>an.org", "Planet D<b>ebi</b>an" }, + { "an ebi", "planet.debian.org", "Planet Debian", "pl<b>an</b>et.d<b>ebi</b>an.org", "Pl<b>an</b>et D<b>ebi</b>an" } +}; + +void completion_location_action () { + foreach (var spec in renders) { + string uri = Midori.LocationAction.render_uri (spec.keys.split (" ", 0), spec.uri); + string title = Midori.LocationAction.render_title (spec.keys.split (" ", 0), spec.title); + if (uri != spec.expected_uri || title != spec.expected_title) + error ("\nExpected: %s/ %s\nInput : %s/ %s/ %s\nResult : %s/ %s", + spec.expected_uri, spec.expected_title, + spec.keys, spec.uri, spec.title, uri, title); + } +} + void main (string[] args) { Test.init (ref args); Midori.App.setup (ref args, null); Test.add_func ("/completion/autocompleter", completion_autocompleter); Test.add_func ("/completion/history", completion_history); + Test.add_func ("/completion/location-action", completion_location_action); Test.run (); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits