diff options
author | Vincent Sanders <vince@kyllikki.org> | 2014-05-25 00:57:48 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2014-05-25 01:01:59 +0100 |
commit | a6d3ceae0ee7cee85020a70b716586425a042900 (patch) | |
tree | 1177195f3f3ab1b38d7beb2ec5e412bc2170e4c2 /gtk/scaffolding.c | |
parent | fb5af8a1b612e210384a1a6a4f8d5ee5fafef054 (diff) | |
download | netsurf-a6d3ceae0ee7cee85020a70b716586425a042900.tar.gz netsurf-a6d3ceae0ee7cee85020a70b716586425a042900.tar.bz2 |
Completely re-write web search provider handling
Diffstat (limited to 'gtk/scaffolding.c')
-rw-r--r-- | gtk/scaffolding.c | 119 |
1 files changed, 58 insertions, 61 deletions
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c index 7ae61dac0..7d4c49c92 100644 --- a/gtk/scaffolding.c +++ b/gtk/scaffolding.c @@ -417,29 +417,20 @@ static gboolean nsgtk_window_popup_menu_hidden(GtkWidget *widget, gboolean nsgtk_window_url_activate_event(GtkWidget *widget, gpointer data) { struct gtk_scaffolding *g = data; - struct browser_window *bw = nsgtk_get_browser_window(g->top_level); - char *urltxt; + nserror ret; nsurl *url; - nserror error; - if (search_is_url(gtk_entry_get_text(GTK_ENTRY(g->url_bar))) == false) { - urltxt = search_web_from_term(gtk_entry_get_text(GTK_ENTRY( - g->url_bar))); - } else { - urltxt = strdup(gtk_entry_get_text(GTK_ENTRY(g->url_bar))); + ret = search_web_omni(gtk_entry_get_text(GTK_ENTRY(g->url_bar)), + SEARCH_WEB_OMNI_NONE, + &url); + if (ret == NSERROR_OK) { + ret = browser_window_navigate(nsgtk_get_browser_window(g->top_level), + url, NULL, BW_NAVIGATE_HISTORY, + NULL, NULL, NULL); + nsurl_unref(url); } - - if (urltxt != NULL) { - error = nsurl_create(urltxt, &url); - if (error != NSERROR_OK) { - warn_user(messages_get_errorcode(error), 0); - } else { - browser_window_navigate(bw, url, NULL, - BW_NAVIGATE_HISTORY, NULL, - NULL, NULL); - nsurl_unref(url); - } - free(urltxt); + if (ret != NSERROR_OK) { + warn_user(messages_get_errorcode(ret), 0); } return TRUE; @@ -1814,7 +1805,6 @@ static bool nsgtk_new_scaffolding_popup(struct gtk_scaffolding *g, GtkAccelGroup nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) { struct gtk_scaffolding *g; - char *searchname; int i; GtkAccelGroup *group; GError* error = NULL; @@ -2078,30 +2068,10 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) nsgtk_toolbar_connect_all(g); nsgtk_attach_menu_handlers(g); - /* prepare to set the web search ico */ - - /* init web search prefs from file */ - search_web_provider_details(nsoption_int(search_provider)); - - /* potentially retrieve ico */ - if (search_web_ico() == NULL) { - search_web_retrieve_ico(false); - } - - /* set entry */ - searchname = search_web_provider_name(); - if (searchname != NULL) { - char searchcontent[strlen(searchname) + SLEN("Search ") + 1]; - sprintf(searchcontent, "Search %s", searchname); - nsgtk_scaffolding_set_websearch(g, searchcontent); - free(searchname); - } - nsgtk_scaffolding_initial_sensitivity(g); g->fullscreen = false; - /* attach to the list */ if (scaf_list) scaf_list->prev = g; @@ -2113,8 +2083,8 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) nsgtk_theme_init(); nsgtk_theme_implement(g); - /* set web search ico */ - gui_set_search_ico(search_web_ico()); + /* set web search provider */ + search_web_select_provider(nsoption_int(search_provider)); /* finally, show the window. */ gtk_widget_show(GTK_WIDGET(g->window)); @@ -2227,38 +2197,65 @@ nsgtk_scaffolding_set_icon(struct gui_window *gw) gtk_widget_show_all(GTK_WIDGET(sc->buttons[URL_BAR_ITEM]->button)); } -void gui_set_search_ico(hlcache_handle *ico) +/** + * Gui callback when search provider details are updated. + * + * \param provider_name The providers name. + * \param ico_bitmap The icon bitmap representing the provider. + * \return NSERROR_OK on success else error code. + */ +static nserror +gui_search_web_provider_update(const char *provider_name, + struct bitmap *provider_bitmap) { - struct bitmap *srch_bitmap; nsgtk_scaffolding *current; - GdkPixbuf *srch_pixbuf; + GdkPixbuf *srch_pixbuf = NULL; + char *searchcontent; - if ((ico == NULL) && - (ico = search_web_ico()) == NULL) { - return; - } + if (provider_bitmap != NULL) { + srch_pixbuf = nsgdk_pixbuf_get_from_surface(provider_bitmap->surface, 16, 16); - srch_bitmap = content_get_bitmap(ico); - if (srch_bitmap == NULL) { - return; + if (srch_pixbuf == NULL) { + return NSERROR_NOMEM; + } } - srch_pixbuf = nsgdk_pixbuf_get_from_surface(srch_bitmap->surface, 16, 16); - - if (srch_pixbuf == NULL) { - return; + /* setup the search content name */ + searchcontent = malloc(strlen(provider_name) + SLEN("Search ") + 1); + if (searchcontent != NULL) { + sprintf(searchcontent, "Search %s", provider_name); } - /* add ico to each window's toolbar */ + /* set the search provider parameters up in each scaffold */ for (current = scaf_list; current != NULL; current = current->next) { - nsgtk_entry_set_icon_from_pixbuf(current->webSearchEntry, - GTK_ENTRY_ICON_PRIMARY, - srch_pixbuf); + /* add ico to each window's toolbar */ + if (srch_pixbuf != NULL) { + nsgtk_entry_set_icon_from_pixbuf(current->webSearchEntry, + GTK_ENTRY_ICON_PRIMARY, + srch_pixbuf); + } + + /* set search entry text */ + if (searchcontent != NULL) { + nsgtk_scaffolding_set_websearch(current, searchcontent); + } else { + nsgtk_scaffolding_set_websearch(current, provider_name); + } } + free(searchcontent); + g_object_unref(srch_pixbuf); + + return NSERROR_OK; } +static struct gui_search_web_table search_web_table = { + .provider_update = gui_search_web_provider_update, +}; + +struct gui_search_web_table *nsgtk_search_web_table = &search_web_table; + bool nsgtk_scaffolding_is_busy(nsgtk_scaffolding *g) { /* We are considered "busy" if the stop button is sensitive */ |