diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/dialogs/preferences.c | 26 | ||||
-rw-r--r-- | gtk/gui.c | 18 | ||||
-rw-r--r-- | gtk/scaffolding.c | 119 | ||||
-rw-r--r-- | gtk/scaffolding.h | 6 | ||||
-rw-r--r-- | gtk/search.c | 30 | ||||
-rw-r--r-- | gtk/toolbar.c | 3 |
6 files changed, 99 insertions, 103 deletions
diff --git a/gtk/dialogs/preferences.c b/gtk/dialogs/preferences.c index d36d0c68b..f5d92e361 100644 --- a/gtk/dialogs/preferences.c +++ b/gtk/dialogs/preferences.c @@ -18,6 +18,7 @@ #include <stdint.h> #include <math.h> +#include <string.h> #include "utils/utils.h" #include "utils/messages.h" @@ -923,8 +924,6 @@ TOGGLEBUTTON_SIGNALS(checkUrlSearch, search_url_bar) G_MODULE_EXPORT void nsgtk_preferences_comboSearch_changed(GtkComboBox *widget, struct ppref *priv) { - nsgtk_scaffolding *current = scaf_list; - char *name; int provider; provider = gtk_combo_box_get_active(widget); @@ -932,27 +931,8 @@ nsgtk_preferences_comboSearch_changed(GtkComboBox *widget, struct ppref *priv) /* set the option */ nsoption_set_int(search_provider, provider); - /* refresh web search prefs from file */ - search_web_provider_details(provider); - - /* retrieve ico */ - search_web_retrieve_ico(false); - - /* callback may handle changing gui */ - gui_set_search_ico(search_web_ico()); - - /* set entry */ - name = search_web_provider_name(); - if (name != NULL) { - char content[strlen(name) + SLEN("Search ") + 1]; - - sprintf(content, "Search %s", name); - free(name); - while (current) { - nsgtk_scaffolding_set_websearch(current, content); - current = nsgtk_scaffolding_iterate(current); - } - } + /* set search provider */ + search_web_select_provider(provider); } G_MODULE_EXPORT void @@ -364,12 +364,12 @@ static void gui_init(int argc, char** argv, char **respath) } /* Search engine sources */ - search_engines_file_location = filepath_find(respath, "SearchEngines"); - LOG(("Using '%s' as Search Engines file", search_engines_file_location)); - - /* Default Icon */ - search_default_ico_location = filepath_find(respath, "default.ico"); - LOG(("Using '%s' as default search ico", search_default_ico_location)); + resource_filename = filepath_find(respath, "SearchEngines"); + search_web_init(resource_filename); + if (resource_filename != NULL) { + LOG(("Using '%s' as Search Engines file", resource_filename)); + free(resource_filename); + } /* Default favicon */ resource_filename = filepath_find(respath, "favicon.png"); @@ -562,8 +562,6 @@ static void gui_quit(void) nsgtk_history_destroy(); nsgtk_hotlist_destroy(); - free(search_engines_file_location); - free(search_default_ico_location); free(toolbar_indices_file_location); free(nsgtk_config_home); @@ -1250,7 +1248,6 @@ static struct gui_browser_table nsgtk_browser_table = { .schedule = nsgtk_schedule, .quit = gui_quit, - .set_search_ico = gui_set_search_ico, .launch_url = gui_launch_url, .create_form_select_menu = gui_create_form_select_menu, .cert_verify = gui_cert_verify, @@ -1271,8 +1268,9 @@ int main(int argc, char** argv) .clipboard = nsgtk_clipboard_table, .download = nsgtk_download_table, .fetch = nsgtk_fetch_table, - .search = nsgtk_search_table, .llcache = filesystem_llcache_table, + .search = nsgtk_search_table, + .search_web = nsgtk_search_web_table, }; ret = netsurf_register(&nsgtk_table); 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 */ diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h index 285f9bb53..f03a3402a 100644 --- a/gtk/scaffolding.h +++ b/gtk/scaffolding.h @@ -22,10 +22,14 @@ #include <stdbool.h> #include "utils/errors.h" +struct bitmap; struct hlcache_handle; struct gui_window; +struct gui_search_web_table; typedef struct gtk_scaffolding nsgtk_scaffolding; +extern struct gui_search_web_table *nsgtk_search_web_table; + typedef enum { BACK_BUTTON = 0, HISTORY_BUTTON, @@ -178,6 +182,6 @@ void gui_window_set_title(struct gui_window *g, const char *title); void gui_window_set_url(struct gui_window *g, const char *url); void gui_window_start_throbber(struct gui_window *g); void gui_window_stop_throbber(struct gui_window *g); -void gui_set_search_ico(struct hlcache_handle *ico); + #endif /* NETSURF_GTK_SCAFFOLDING_H */ diff --git a/gtk/search.c b/gtk/search.c index 44f9ddeb6..2bb8a85bd 100644 --- a/gtk/search.c +++ b/gtk/search.c @@ -192,13 +192,29 @@ gboolean nsgtk_search_entry_key(GtkWidget *widget, GdkEventKey *event, gboolean nsgtk_websearch_activate(GtkWidget *widget, gpointer data) { - struct gtk_scaffolding *g = (struct gtk_scaffolding *)data; - temp_open_background = 0; - search_web_new_window(nsgtk_get_browser_window( - nsgtk_scaffolding_top_level(g)), - (char *)gtk_entry_get_text(GTK_ENTRY( - nsgtk_scaffolding_websearch(g)))); - temp_open_background = -1; + struct gtk_scaffolding *g = data; + nserror ret; + nsurl *url; + + ret = search_web_omni( + gtk_entry_get_text(GTK_ENTRY(nsgtk_scaffolding_websearch(g))), + SEARCH_WEB_OMNI_SEARCHONLY, + &url); + if (ret == NSERROR_OK) { + temp_open_background = 0; + ret = browser_window_create( + BW_CREATE_HISTORY | BW_CREATE_TAB, + url, + NULL, + nsgtk_get_browser_window(nsgtk_scaffolding_top_level(g)), + NULL); + temp_open_background = -1; + nsurl_unref(url); + } + if (ret != NSERROR_OK) { + warn_user(messages_get_errorcode(ret), 0); + } + return TRUE; } diff --git a/gtk/toolbar.c b/gtk/toolbar.c index d4a197bd4..c60bab6f1 100644 --- a/gtk/toolbar.c +++ b/gtk/toolbar.c @@ -16,6 +16,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <string.h> #include <gtk/gtk.h> #include "desktop/browser.h" @@ -438,7 +439,7 @@ void nsgtk_toolbar_close(nsgtk_scaffolding *g) /* update favicon etc */ nsgtk_scaffolding_set_top_level(nsgtk_scaffolding_top_level(g)); - gui_set_search_ico(search_web_ico()); + search_web_select_provider(-1); } /** |