From 713091134f078f4317b7b80a7b37b8016450d3dc Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Tue, 9 Feb 2010 18:13:47 +0100 Subject: [PATCH] Handle search engines in MidoriBrowser and simplify sokoke_magic_uri --- midori/main.c | 6 ++++- midori/midori-app.c | 4 +++- midori/midori-browser.c | 52 ++++++++++++++++++++++++----------------- midori/midori-view.c | 8 +++---- midori/sokoke.c | 33 ++++---------------------- midori/sokoke.h | 4 +--- 6 files changed, 47 insertions(+), 60 deletions(-) diff --git a/midori/main.c b/midori/main.c index 8d49d729..87f877ee 100644 --- a/midori/main.c +++ b/midori/main.c @@ -1848,7 +1848,11 @@ main (int argc, g_free (current_dir); } else - uri_ready = sokoke_magic_uri (uri, NULL, NULL); + { + uri_ready = sokoke_magic_uri (uri); + if (!uri_ready) + uri_ready = g_strdup (uri_ready); + } katze_item_set_uri (item, uri_ready); g_free (uri_ready); katze_array_add_item (_session, item); diff --git a/midori/midori-app.c b/midori/midori-app.c index 297e25b6..0bf21b1e 100644 --- a/midori/midori-app.c +++ b/midori/midori-app.c @@ -464,7 +464,9 @@ midori_app_command_received (MidoriApp* app, first = (open_external_pages_in == MIDORI_NEW_PAGE_CURRENT); while (*uris) { - gchar* fixed_uri = sokoke_magic_uri (*uris, NULL, NULL); + gchar* fixed_uri = sokoke_magic_uri (*uris); + if (!fixed_uri) + fixed_uri = g_strdup (*uris); if (first) { midori_browser_set_current_uri (browser, fixed_uri); diff --git a/midori/midori-browser.c b/midori/midori-browser.c index 09d56efa..74530c79 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -2954,7 +2954,9 @@ midori_browser_open_bookmark (MidoriBrowser* browser, return; /* Imported bookmarks may lack a protocol */ - uri_fixed = sokoke_magic_uri (uri, NULL, NULL); + uri_fixed = sokoke_magic_uri (uri); + if (!uri_fixed) + uri_fixed = g_strdup (uri); /* FIXME: Use the same binary that is running right now */ if (katze_item_get_meta_integer (item, "app") != -1) @@ -3770,37 +3772,43 @@ _action_location_submit_uri (GtkAction* action, { gchar* stripped_uri; gchar* new_uri; - KatzeItem* item; gint n; stripped_uri = g_strdup (uri); g_strstrip (stripped_uri); - item = NULL; - new_uri = sokoke_magic_uri (stripped_uri, browser->search_engines, &item); + new_uri = sokoke_magic_uri (stripped_uri); if (!new_uri) - new_uri = sokoke_search_uri (browser->location_entry_search, stripped_uri); - g_free (stripped_uri); - - if (item) { - gchar* title; - GdkPixbuf* icon; - const gchar* icon_name; + gchar** parts; + gchar* keywords = NULL; + const gchar* search_uri = NULL; - title = g_strdup_printf (_("Search with %s"), katze_item_get_name (item)); - icon = midori_search_action_get_icon (item, GTK_WIDGET (browser), &icon_name); - if (!icon) + /* Do we have a keyword and a string? */ + parts = g_strsplit (stripped_uri, " ", 2); + if (parts[0]) { - GdkScreen* screen = gtk_widget_get_screen (GTK_WIDGET (browser)); - GtkIconTheme* icon_theme = gtk_icon_theme_get_for_screen (screen); - icon = gtk_icon_theme_load_icon (icon_theme, icon_name, 16, 0, NULL); + KatzeItem* item; + if ((item = katze_array_find_token (browser->search_engines, parts[0]))) + { + keywords = g_strdup (parts[1] ? parts[1] : ""); + search_uri = katze_item_get_uri (item); + } } - midori_location_action_add_item (MIDORI_LOCATION_ACTION (action), - uri, icon, title); - if (icon) - g_object_unref (icon); - g_free (title); + g_strfreev (parts); + + if (keywords) + g_free (stripped_uri); + else + { + keywords = stripped_uri; + search_uri = browser->location_entry_search; + } + new_uri = sokoke_search_uri (search_uri, keywords); + + g_free (keywords); } + else + g_free (stripped_uri); if (new_tab) { diff --git a/midori/midori-view.c b/midori/midori-view.c index 752e0a3b..190b008e 100644 --- a/midori/midori-view.c +++ b/midori/midori-view.c @@ -1307,9 +1307,7 @@ gtk_widget_button_press_event_cb (WebKitWebView* web_view, /* Hold Alt to search for the selected word */ if (event->state & GDK_MOD1_MASK) { - KatzeArray* empty_array = katze_array_new (KATZE_TYPE_ITEM); - new_uri = sokoke_magic_uri (uri, empty_array, NULL); - g_object_unref (empty_array); + new_uri = sokoke_magic_uri (uri); if (!new_uri) { gchar* search; @@ -1582,7 +1580,9 @@ midori_web_view_menu_new_tab_activate_cb (GtkWidget* widget, } else { - gchar* uri = sokoke_magic_uri (data, NULL, NULL); + gchar* uri = sokoke_magic_uri (data); + if (!uri) + uri = g_strdup (data); g_signal_emit (view, signals[NEW_TAB], 0, uri, view->open_tabs_in_the_background); g_free (uri); diff --git a/midori/sokoke.c b/midori/sokoke.c index c497b230..2e5a3682 100644 --- a/midori/sokoke.c +++ b/midori/sokoke.c @@ -573,29 +573,21 @@ gchar* sokoke_search_uri (const gchar* uri, /** * sokoke_magic_uri: * @uri: a string typed by a user - * @search_engines: search engines - * @item: the location to store a #KatzeItem * * Takes a string that was typed by a user, * guesses what it is, and returns an URI. * - * If it was a search, @item will contain the engine. + * If it was a search, %NULL will be returned. * - * Return value: a newly allocated URI + * Return value: a newly allocated URI, or %NULL **/ gchar* -sokoke_magic_uri (const gchar* uri, - KatzeArray* search_engines, - KatzeItem** found_item) +sokoke_magic_uri (const gchar* uri) { gchar** parts; gchar* search; - const gchar* search_uri; - KatzeItem* item; g_return_val_if_fail (uri, NULL); - g_return_val_if_fail (!search_engines || - katze_array_is_a (search_engines, KATZE_TYPE_ITEM), NULL); /* Just return if it's a javascript: or mailto: uri */ if (!strncmp (uri, "javascript:", 11) @@ -637,26 +629,9 @@ sokoke_magic_uri (const gchar* uri, } g_strfreev (parts); } - /* We don't want to search? So return early. */ - if (!search_engines) - return g_strdup (uri); - search = NULL; - search_uri = NULL; - /* Do we have a keyword and a string? */ - parts = g_strsplit (uri, " ", 2); - if (parts[0]) - if ((item = katze_array_find_token (search_engines, parts[0]))) - { - search_uri = katze_item_get_uri (item); - search = sokoke_search_uri (search_uri, parts[1] ? parts[1] : ""); - if (found_item) - *found_item = item; - } - g_strfreev (parts); - return search; + return NULL; } - /** * sokoke_format_uri_for_display: * @uri: an URI string diff --git a/midori/sokoke.h b/midori/sokoke.h index e8a6d7fc..2e86bb94 100644 --- a/midori/sokoke.h +++ b/midori/sokoke.h @@ -97,9 +97,7 @@ gchar* sokoke_uri_to_ascii (const gchar* uri); gchar* -sokoke_magic_uri (const gchar* uri, - KatzeArray* search_engines, - KatzeItem** found_item); +sokoke_magic_uri (const gchar* uri); gchar* sokoke_format_uri_for_display (const gchar* uri);