diff --git a/midori/main.c b/midori/main.c index d7472822..077bc6af 100644 --- a/midori/main.c +++ b/midori/main.c @@ -2035,7 +2035,7 @@ main (int argc, g_free (current_dir); } else - uri_ready = sokoke_magic_uri (uri, NULL); + uri_ready = sokoke_magic_uri (uri, NULL, NULL); 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 05742594..c1df59e4 100644 --- a/midori/midori-app.c +++ b/midori/midori-app.c @@ -454,7 +454,7 @@ 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); + gchar* fixed_uri = sokoke_magic_uri (*uris, NULL, NULL); if (first) { midori_browser_set_current_uri (browser, fixed_uri); diff --git a/midori/midori-browser.c b/midori/midori-browser.c index 13f06967..62667dbb 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -198,6 +198,11 @@ static void midori_browser_add_download_item (MidoriBrowser* browser, WebKitDownload* download); +GdkPixbuf* +midori_search_action_get_icon (KatzeItem* item, + GtkWidget* widget, + const gchar** icon_name); + static GtkAction* _action_by_name (MidoriBrowser* browser, const gchar* name) @@ -2918,7 +2923,7 @@ midori_browser_open_bookmark (MidoriBrowser* browser, return; /* Imported bookmarks may lack a protocol */ - uri_fixed = sokoke_magic_uri (uri, NULL); + uri_fixed = sokoke_magic_uri (uri, NULL, NULL); /* FIXME: Use the same binary that is running right now */ if (katze_item_get_meta_integer (item, "app") != -1) @@ -3707,6 +3712,8 @@ _action_location_reset_uri (GtkAction* action, midori_location_action_set_uri (MIDORI_LOCATION_ACTION (action), uri); } + + static void _action_location_submit_uri (GtkAction* action, const gchar* uri, @@ -3715,15 +3722,38 @@ _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); - new_uri = sokoke_magic_uri (stripped_uri, browser->search_engines); + item = NULL; + new_uri = sokoke_magic_uri (stripped_uri, browser->search_engines, &item); 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; + + 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) + { + 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); + } + midori_location_action_add_item (MIDORI_LOCATION_ACTION (action), + uri, icon, title); + if (icon) + g_object_unref (icon); + g_free (title); + } + if (new_tab) { n = midori_browser_add_uri (browser, new_uri); diff --git a/midori/midori-view.c b/midori/midori-view.c index 4abd75c6..5a2e43d7 100644 --- a/midori/midori-view.c +++ b/midori/midori-view.c @@ -1303,7 +1303,7 @@ gtk_widget_button_press_event_cb (WebKitWebView* web_view, while (uri[i++] != '\0') if (uri[i] == '\n' || uri[i] == '\r') uri[i] = ' '; - new_uri = sokoke_magic_uri (g_strstrip (uri), empty_array); + new_uri = sokoke_magic_uri (g_strstrip (uri), empty_array, NULL); g_object_unref (empty_array); if (!new_uri) { @@ -1554,7 +1554,7 @@ midori_web_view_menu_new_tab_activate_cb (GtkWidget* widget, } else { - gchar* uri = sokoke_magic_uri (data, NULL); + gchar* uri = sokoke_magic_uri (data, NULL, NULL); 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 89dd0b3a..15e5504b 100644 --- a/midori/sokoke.c +++ b/midori/sokoke.c @@ -526,15 +526,19 @@ 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. + * * Return value: a newly allocated URI **/ gchar* sokoke_magic_uri (const gchar* uri, - KatzeArray* search_engines) + KatzeArray* search_engines, + KatzeItem** found_item) { gchar** parts; gchar* search; @@ -593,6 +597,8 @@ sokoke_magic_uri (const gchar* uri, { 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; diff --git a/midori/sokoke.h b/midori/sokoke.h index acf91ef7..85c11ff8 100644 --- a/midori/sokoke.h +++ b/midori/sokoke.h @@ -61,7 +61,8 @@ sokoke_uri_to_ascii (const gchar* uri); gchar* sokoke_magic_uri (const gchar* uri, - KatzeArray* search_engines); + KatzeArray* search_engines, + KatzeItem** found_item); gchar* sokoke_format_uri_for_display (const gchar* uri); diff --git a/tests/magic-uri.c b/tests/magic-uri.c index 5733927e..35c6fdb5 100644 --- a/tests/magic-uri.c +++ b/tests/magic-uri.c @@ -55,7 +55,7 @@ test_input (const gchar* input, g_object_unref (item); } - gchar* uri = sokoke_magic_uri (input, search_engines); + gchar* uri = sokoke_magic_uri (input, search_engines, NULL); sokoke_assert_str_equal (input, uri, expected); g_free (uri); }