diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2013-05-07 14:41:40 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2013-05-07 14:41:40 +0100 |
commit | 3afd9c97310d58c0c6588d18887244328590731e (patch) | |
tree | 133917633f801613e8742d8b313faee3c4f47e71 /desktop | |
parent | 0647d69a8b8663fcc09af118dde6b256624fe232 (diff) | |
download | netsurf-3afd9c97310d58c0c6588d18887244328590731e.tar.gz netsurf-3afd9c97310d58c0c6588d18887244328590731e.tar.bz2 |
Remove search context from browser window, simplify search interface for front ends.
Added content interface for search.
Removed bw->cur_search search context. Desktop layer now does nothing
except pass search requests from front end onto the bw's current_content
via the content interface.
Search API reduced to a pair of functions at each level:
{desktop|content|html|textplain}_search
and
{desktop|content|html|textplain}_search_clear
Updated front ends to use simplified search API. Only tested GTK and RO builds.
These confine the search stuff to render/. However search still uses struct
selection. The handling for which is still spread over desktop/ and render/.
Also the render/search code itself still fiddles inside html and textplain
privates.
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser.c | 5 | ||||
-rw-r--r-- | desktop/browser_private.h | 3 | ||||
-rw-r--r-- | desktop/search.c | 103 | ||||
-rw-r--r-- | desktop/search.h | 20 |
4 files changed, 37 insertions, 94 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index 9e12e8c0d..a02807eeb 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -764,7 +764,6 @@ void browser_window_initialise_common(struct browser_window *bw, bw->history = history_clone(clone->history); /* window characteristics */ - bw->cur_search = NULL; bw->refresh_interval = -1; bw->reformat_pending = false; @@ -2128,10 +2127,6 @@ void browser_window_destroy_internal(struct browser_window *bw) } } - /* Destroying a search context causes it to redraw any deselected, - * content areas, so do this first */ - browser_window_search_destroy_context(bw); - /* Destruction order is important: we must ensure that the frontend * destroys any window(s) associated with this browser window before * we attempt any destructive cleanup. diff --git a/desktop/browser_private.h b/desktop/browser_private.h index 4c14b1700..4412f4bf4 100644 --- a/desktop/browser_private.h +++ b/desktop/browser_private.h @@ -153,9 +153,6 @@ struct browser_window { } selection; bool can_edit; - /** Current context for free text search, or NULL if none */ - struct search_context *cur_search; - /** current javascript context */ struct jscontext *jsctx; diff --git a/desktop/search.c b/desktop/search.c index 29d28bdaa..014488e2d 100644 --- a/desktop/search.c +++ b/desktop/search.c @@ -44,93 +44,44 @@ #include "utils/utils.h" -/* callback informing us that a search context is nolonger valid */ -static void browser_window_search_invalidate(struct search_context *context, - void *p) -{ - struct browser_window *bw = p; - assert(bw != NULL); - - if (bw->cur_search != NULL && bw->cur_search == context) { - /* The browser's current search is the one being invalidated */ - bw->cur_search = NULL; - } -} -bool browser_window_search_create_context(struct browser_window *bw, - struct gui_search_callbacks *gui_callbacks, void *gui_p) +/** + * Starts or continues an existing search. + * + * \param bw the browser_window to search + * \param callbacks callbacks vtable to update frontend according to results + * \param gui_data a pointer returned to the callbacks + * \param flags search flags + * \param string string to search for + */ +void browser_window_search(struct browser_window *bw, + struct gui_search_callbacks *gui_callbacks, void *gui_data, + search_flags_t flags, const char *string) { - struct search_callbacks callbacks; - assert(bw != NULL); assert(gui_callbacks != NULL); - if (bw->cur_search != NULL) - search_destroy_context(bw->cur_search); - bw->cur_search = NULL; - - if (!bw->current_content) - return false; - - callbacks.gui = gui_callbacks; - callbacks.gui_p = gui_p; - callbacks.invalidate = browser_window_search_invalidate; - callbacks.p = bw; - bw->cur_search = search_create_context(bw->current_content, callbacks); - - if (bw->cur_search == NULL) - return false; - - return true; -} - - -void browser_window_search_destroy_context(struct browser_window *bw) -{ - assert(bw != NULL); + if (bw == NULL || bw->current_content == NULL) + return; - if (bw->cur_search != NULL) - search_destroy_context(bw->cur_search); - bw->cur_search = NULL; + content_search(bw->current_content, gui_callbacks, gui_data, + flags, string); } /** - * to simplify calls to search_step(); checks that the browser_window is - * non-NULL, creates a new search_context in case of a new search - * \param bw the browser_window the search refers to - * \param callbacks the callbacks to modify appearance according to results - * \param gui_p a pointer returned to the callbacks - * \return true for success + * Clear up a search. Frees any memory used by the search + * + * \param bw the browser_window to search + * \param callbacks callbacks vtable to update frontend according to results + * \param gui_data a pointer returned to the callbacks + * \param flags search flags + * \param string string to search for */ -bool browser_window_search_verify_new(struct browser_window *bw, - struct gui_search_callbacks *gui_callbacks, void *gui_p) -{ - if (bw == NULL) - return false; - if (bw->cur_search == NULL) - return browser_window_search_create_context(bw, - gui_callbacks, gui_p); - - return true; -} - - -void browser_window_search_step(struct browser_window *bw, - search_flags_t flags, const char *string) +void browser_window_search_clear(struct browser_window *bw) { - assert(bw != NULL); + if (bw == NULL || bw->current_content == NULL) + return; - if (bw->cur_search != NULL) - search_step(bw->cur_search, flags, string); + content_search_clear(bw->current_content); } - - -void browser_window_search_show_all(bool all, struct browser_window *bw) -{ - assert(bw != NULL); - - if (bw->cur_search != NULL) - search_show_all(all, bw->cur_search); -} - diff --git a/desktop/search.h b/desktop/search.h index e178138de..8440ce982 100644 --- a/desktop/search.h +++ b/desktop/search.h @@ -22,10 +22,14 @@ #include <ctype.h> #include <string.h> +struct browser_window; + typedef enum { - SEARCH_FLAG_CASE_SENSITIVE = (1 << 0), - SEARCH_FLAG_FORWARDS = (1 << 1), - SEARCH_FLAG_SHOWALL = (1 << 2) + SEARCH_FLAG_NONE = 0, + SEARCH_FLAG_CASE_SENSITIVE = (1 << 0), + SEARCH_FLAG_FORWARDS = (1 << 1), + SEARCH_FLAG_BACKWARDS = (1 << 2), + SEARCH_FLAG_SHOWALL = (1 << 3) } search_flags_t; /** @@ -74,13 +78,9 @@ struct gui_search_callbacks { }; -bool browser_window_search_create_context(struct browser_window *bw, - struct gui_search_callbacks *gui_callbacks, void *gui_p); -void browser_window_search_destroy_context(struct browser_window *bw); -bool browser_window_search_verify_new(struct browser_window *bw, - struct gui_search_callbacks *gui_callbacks, void *gui_p); -void browser_window_search_step(struct browser_window *bw, +void browser_window_search(struct browser_window *bw, + struct gui_search_callbacks *gui_callbacks, void *gui_data, search_flags_t flags, const char *string); -void browser_window_search_show_all(bool all, struct browser_window *bw); +void browser_window_search_clear(struct browser_window *bw); #endif |