Store searches with tokens in the completion as a distinct item

Currently searches won't be stored persistently in the database.
This commit is contained in:
Christian Dywan 2010-01-01 22:47:24 +01:00
parent 3aff0a34d0
commit 311a5a8a1b
7 changed files with 46 additions and 9 deletions

View file

@ -2035,7 +2035,7 @@ main (int argc,
g_free (current_dir); g_free (current_dir);
} }
else else
uri_ready = sokoke_magic_uri (uri, NULL); uri_ready = sokoke_magic_uri (uri, NULL, NULL);
katze_item_set_uri (item, uri_ready); katze_item_set_uri (item, uri_ready);
g_free (uri_ready); g_free (uri_ready);
katze_array_add_item (_session, item); katze_array_add_item (_session, item);

View file

@ -454,7 +454,7 @@ midori_app_command_received (MidoriApp* app,
first = (open_external_pages_in == MIDORI_NEW_PAGE_CURRENT); first = (open_external_pages_in == MIDORI_NEW_PAGE_CURRENT);
while (*uris) while (*uris)
{ {
gchar* fixed_uri = sokoke_magic_uri (*uris, NULL); gchar* fixed_uri = sokoke_magic_uri (*uris, NULL, NULL);
if (first) if (first)
{ {
midori_browser_set_current_uri (browser, fixed_uri); midori_browser_set_current_uri (browser, fixed_uri);

View file

@ -198,6 +198,11 @@ static void
midori_browser_add_download_item (MidoriBrowser* browser, midori_browser_add_download_item (MidoriBrowser* browser,
WebKitDownload* download); WebKitDownload* download);
GdkPixbuf*
midori_search_action_get_icon (KatzeItem* item,
GtkWidget* widget,
const gchar** icon_name);
static GtkAction* static GtkAction*
_action_by_name (MidoriBrowser* browser, _action_by_name (MidoriBrowser* browser,
const gchar* name) const gchar* name)
@ -2918,7 +2923,7 @@ midori_browser_open_bookmark (MidoriBrowser* browser,
return; return;
/* Imported bookmarks may lack a protocol */ /* 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 */ /* FIXME: Use the same binary that is running right now */
if (katze_item_get_meta_integer (item, "app") != -1) 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); midori_location_action_set_uri (MIDORI_LOCATION_ACTION (action), uri);
} }
static void static void
_action_location_submit_uri (GtkAction* action, _action_location_submit_uri (GtkAction* action,
const gchar* uri, const gchar* uri,
@ -3715,15 +3722,38 @@ _action_location_submit_uri (GtkAction* action,
{ {
gchar* stripped_uri; gchar* stripped_uri;
gchar* new_uri; gchar* new_uri;
KatzeItem* item;
gint n; gint n;
stripped_uri = g_strdup (uri); stripped_uri = g_strdup (uri);
g_strstrip (stripped_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) if (!new_uri)
new_uri = sokoke_search_uri (browser->location_entry_search, stripped_uri); new_uri = sokoke_search_uri (browser->location_entry_search, stripped_uri);
g_free (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) if (new_tab)
{ {
n = midori_browser_add_uri (browser, new_uri); n = midori_browser_add_uri (browser, new_uri);

View file

@ -1303,7 +1303,7 @@ gtk_widget_button_press_event_cb (WebKitWebView* web_view,
while (uri[i++] != '\0') while (uri[i++] != '\0')
if (uri[i] == '\n' || uri[i] == '\r') if (uri[i] == '\n' || uri[i] == '\r')
uri[i] = ' '; 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); g_object_unref (empty_array);
if (!new_uri) if (!new_uri)
{ {
@ -1554,7 +1554,7 @@ midori_web_view_menu_new_tab_activate_cb (GtkWidget* widget,
} }
else 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, g_signal_emit (view, signals[NEW_TAB], 0, uri,
view->open_tabs_in_the_background); view->open_tabs_in_the_background);
g_free (uri); g_free (uri);

View file

@ -526,15 +526,19 @@ gchar* sokoke_search_uri (const gchar* uri,
* sokoke_magic_uri: * sokoke_magic_uri:
* @uri: a string typed by a user * @uri: a string typed by a user
* @search_engines: search engines * @search_engines: search engines
* @item: the location to store a #KatzeItem
* *
* Takes a string that was typed by a user, * Takes a string that was typed by a user,
* guesses what it is, and returns an URI. * guesses what it is, and returns an URI.
* *
* If it was a search, @item will contain the engine.
*
* Return value: a newly allocated URI * Return value: a newly allocated URI
**/ **/
gchar* gchar*
sokoke_magic_uri (const gchar* uri, sokoke_magic_uri (const gchar* uri,
KatzeArray* search_engines) KatzeArray* search_engines,
KatzeItem** found_item)
{ {
gchar** parts; gchar** parts;
gchar* search; gchar* search;
@ -593,6 +597,8 @@ sokoke_magic_uri (const gchar* uri,
{ {
search_uri = katze_item_get_uri (item); search_uri = katze_item_get_uri (item);
search = sokoke_search_uri (search_uri, parts[1] ? parts[1] : ""); search = sokoke_search_uri (search_uri, parts[1] ? parts[1] : "");
if (found_item)
*found_item = item;
} }
g_strfreev (parts); g_strfreev (parts);
return search; return search;

View file

@ -61,7 +61,8 @@ sokoke_uri_to_ascii (const gchar* uri);
gchar* gchar*
sokoke_magic_uri (const gchar* uri, sokoke_magic_uri (const gchar* uri,
KatzeArray* search_engines); KatzeArray* search_engines,
KatzeItem** found_item);
gchar* gchar*
sokoke_format_uri_for_display (const gchar* uri); sokoke_format_uri_for_display (const gchar* uri);

View file

@ -55,7 +55,7 @@ test_input (const gchar* input,
g_object_unref (item); 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); sokoke_assert_str_equal (input, uri, expected);
g_free (uri); g_free (uri);
} }