summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--desktop/searchweb.c118
-rw-r--r--gtk/res/SearchEngines14
-rw-r--r--gtk/scaffolding.c2
3 files changed, 90 insertions, 44 deletions
diff --git a/desktop/searchweb.c b/desktop/searchweb.c
index 95d46e483..157646488 100644
--- a/desktop/searchweb.c
+++ b/desktop/searchweb.c
@@ -37,7 +37,7 @@ struct search_provider {
hlcache_handle *ico_handle;
};
-static struct {
+static struct search_web_ctx_s {
struct search_provider *providers; /* web search providers */
size_t providers_count; /* number of providers */
@@ -50,42 +50,13 @@ static struct {
static const char *default_providers = "Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/favicon.ico|\n";
-static const char *default_search_icon_url = "resource:default.ico";
+static const char *default_search_icon_url = "resource:icons/search.png";
-/**
- * callback for hlcache icon fetch events.
- */
-static nserror search_web_ico_callback(hlcache_handle *ico,
- const hlcache_event *event, void *pw)
-{
- hlcache_handle **pico = pw;
-
- switch (event->type) {
-
- case CONTENT_MSG_DONE:
- LOG(("icon '%s' retrived", nsurl_access(hlcache_handle_get_url(ico))));
- guit->search_web->provider_update(search_web_ctx.providers[search_web_ctx.current].name, content_get_bitmap(ico));
- break;
-
- case CONTENT_MSG_ERROR:
- LOG(("icon %s error: %s",
- nsurl_access(hlcache_handle_get_url(ico)),
- event->data.error));
- hlcache_handle_release(ico);
- *pico = NULL; /* clear reference to released handle */
- break;
-
- default:
- break;
- }
-
- return NSERROR_OK;
-}
/**
* Read providers file.
*
- * Allocates stoage of sufficient size for teh providers fiel and
+ * Allocates stoage of sufficient size for the providers file and
* reads the entire file in.
*
* \param fname The filename to read.
@@ -153,7 +124,7 @@ read_providers(const char *fname,
/**
* parse search providers from a memory block.
*
- * \parm providersd The provider info data.
+ * \param providersd The provider info data.
* \param providers_size The size of the provider data.
* \param providers_out The resulting provider array.
* \param providers_count The number of providers in the output array.
@@ -301,6 +272,41 @@ make_search_nsurl(struct search_provider *provider,
return NSERROR_OK;
}
+/**
+ * callback for hlcache icon fetch events.
+ */
+static nserror
+search_web_ico_callback(hlcache_handle *ico,
+ const hlcache_event *event,
+ void *pw)
+{
+ struct search_provider *provider = pw;
+
+ switch (event->type) {
+
+ case CONTENT_MSG_DONE:
+ LOG(("icon '%s' retrived",
+ nsurl_access(hlcache_handle_get_url(ico))));
+ guit->search_web->provider_update(provider->name,
+ content_get_bitmap(ico));
+ break;
+
+ case CONTENT_MSG_ERROR:
+ LOG(("icon %s error: %s",
+ nsurl_access(hlcache_handle_get_url(ico)),
+ event->data.error));
+ hlcache_handle_release(ico);
+ /* clear reference to released handle */
+ provider->ico_handle = NULL;
+ break;
+
+ default:
+ break;
+ }
+
+ return NSERROR_OK;
+}
+
/* exported interface documented in desktop/searchweb.h */
nserror
search_web_omni(const char *term,
@@ -405,7 +411,7 @@ nserror search_web_select_provider(int selection)
ret = hlcache_handle_retrieve(icon_nsurl, 0, NULL, NULL,
search_web_ico_callback,
- &provider->ico_handle,
+ provider,
NULL, CONTENT_IMAGE,
&provider->ico_handle);
nsurl_unref(icon_nsurl);
@@ -418,6 +424,46 @@ nserror search_web_select_provider(int selection)
return NSERROR_OK;
}
+/**
+ * callback for hlcache icon fetch events.
+ */
+static nserror
+default_ico_callback(hlcache_handle *ico,
+ const hlcache_event *event,
+ void *pw)
+{
+ struct search_web_ctx_s *ctx = pw;
+
+ switch (event->type) {
+
+ case CONTENT_MSG_DONE:
+ LOG(("default icon '%s' retrived",
+ nsurl_access(hlcache_handle_get_url(ico))));
+
+ /* only set to default icon if providers icon has no handle */
+ if (ctx->providers[search_web_ctx.current].ico_handle == NULL) {
+ guit->search_web->provider_update(
+ ctx->providers[search_web_ctx.current].name,
+ content_get_bitmap(ico));
+ }
+ break;
+
+ case CONTENT_MSG_ERROR:
+ LOG(("icon %s error: %s",
+ nsurl_access(hlcache_handle_get_url(ico)),
+ event->data.error));
+ hlcache_handle_release(ico);
+ /* clear reference to released handle */
+ ctx->default_ico_handle = NULL;
+ break;
+
+ default:
+ break;
+ }
+
+ return NSERROR_OK;
+}
+
/* exported interface documented in desktop/searchweb.h */
nserror search_web_init(const char *provider_fname)
{
@@ -454,8 +500,8 @@ nserror search_web_init(const char *provider_fname)
/* get default search icon */
ret = hlcache_handle_retrieve(icon_nsurl, 0, NULL, NULL,
- search_web_ico_callback,
- &search_web_ctx.default_ico_handle,
+ default_ico_callback,
+ &search_web_ctx,
NULL, CONTENT_IMAGE,
&search_web_ctx.default_ico_handle);
nsurl_unref(icon_nsurl);
diff --git a/gtk/res/SearchEngines b/gtk/res/SearchEngines
index e7fd7cb65..38e77957b 100644
--- a/gtk/res/SearchEngines
+++ b/gtk/res/SearchEngines
@@ -2,15 +2,13 @@ Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/fa
Yahoo|search.yahoo.com|http://search.yahoo.com/search?p=%s|http://www.yahoo.com/favicon.ico|
Bing|www.bing.com|http://www.bing.com/search?q=%s|http://www.bing.com/favicon.ico|
Business.com|www.business.com|http://www.business.com/search/rslt_default.asp?query=%s|http://www.business.com/favicon.ico|
-Omgili|www.omgili.com|http://www.omgili.com/AAAAA/%s.html|http://www.omgili.com/favicon.ico|
-BBC News|search.bbc.co.uk|http://search.bbc.co.uk/search?q=%s&tab=ns|http://news.bbc.co.uk/favicon.ico|
+Omgili|www.omgili.com|http://www.omgili.com/AAAAA/%s.html|http://omgili.com/public/images/favicon.ico|
+BBC News|search.bbc.co.uk|http://search.bbc.co.uk/search?q=%s&tab=ns|http://www.bbc.co.uk/favicon.ico|
Ubuntu Packages|packages.ubuntu.com|http://packages.ubuntu.com/search?keywords=%s|http://packages.ubuntu.com/favicon.ico|
-Creative Commons|creativecommons.org|http://creativecommons.org/?s=%s|http://creativecommons.org/favicon.ico|
-Ask.com|www.ask.com|http://www.ask.com/web?q=%s|http://www.ask.com/favicon.ico|
-Answers.com|www.answers.com|http://www.answers.com/%s|http://www.answers.com/favicon.ico|
+Creative Commons|creativecommons.org|http://creativecommons.org/?s=%s|http://creativecommons.org/favicon.ico|fixme:favicon does not work as it is served as x-icon and is a png
+Ask.com|www.ask.com|http://www.ask.com/web?q=%s|http://sp.uk.ask.com/sh/i/a14/favicon/favicon.ico|fixme:favicon is served as text/plain
Dictionary.com|dictionary.reference.com|http://dictionary.reference.com/browse/%s?jss=0|http://dictionary.reference.com/favicon.ico|
Youtube|www.youtube.com|http://www.youtube.com/results?search_query=%s|http://www.youtube.com/favicon.ico|
-AeroMp3|www.aeromp3.com|http://www.aeromp3.com/search?q=%s|http://www.aeromp3.com/favicon.ico|
AOL|search.aol.com|http://search.aol.com/aol/search?query=%s|http://www.aol.com/favicon.ico|
Baidu|www.baidu.com|http://www.baidu.com/s?wd=%s|http://www.baidu.com/favicon.ico|
Amazon|www.amazon.com|http://www.amazon.com/s/ref=nb_ss_gw?field-keywords=%s|http://www.amazon.com/favicon.ico|
@@ -18,5 +16,5 @@ Ebay|shop.ebay.com|http://shop.ebay.com/items/%s|http://www.ebay.com/favicon.ico
IMDB|www.imdb.com|http://www.imdb.com/find?q=%s|http://www.imdb.com/favicon.ico|
ESPN|search.espn.go.com|http://search.espn.go.com/%s/|http://www.espn.go.com/favicon.ico|
Wikipedia|en.wikipedia.org|http://en.wikipedia.org/w/index.php?title=Special%%3ASearch&search=%s|http://en.wikipedia.org/favicon.ico|
-DuckDuckGo|www.duckduckgo.com|http://www.duckduckgo.com/?q=%s|http://www.duckduckgo.com/favicon.ico|
-Seeks|www.seeks-project.info|https://www.seeks-project.info/search.php/search?q=%s|http://www.seeks-project.info/search.php/public/images/seek_icon_32x32_transparent.png|
+DuckDuckGo|www.duckduckgo.com|http://www.duckduckgo.com/html/?q=%s|http://www.duckduckgo.com/favicon.ico|fixme:Their ico upsets the current implementation
+Seeks|www.seeks-project.info|https://www.seeks-project.info/search.php/search?q=%s|http://www.seeks-project.info/search.php/public/images/seek_icon_32x32_transparent.png|fixme:they have no icon
diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c
index 7d4c49c92..c2dc0fdc9 100644
--- a/gtk/scaffolding.c
+++ b/gtk/scaffolding.c
@@ -2212,6 +2212,8 @@ gui_search_web_provider_update(const char *provider_name,
GdkPixbuf *srch_pixbuf = NULL;
char *searchcontent;
+ LOG(("name:%s bitmap %p", provider_name, provider_bitmap));
+
if (provider_bitmap != NULL) {
srch_pixbuf = nsgdk_pixbuf_get_from_surface(provider_bitmap->surface, 16, 16);