From 3afd9c97310d58c0c6588d18887244328590731e Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 7 May 2013 14:41:40 +0100 Subject: 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. --- desktop/search.c | 103 +++++++++++++++---------------------------------------- 1 file changed, 27 insertions(+), 76 deletions(-) (limited to 'desktop/search.c') 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); -} - -- cgit v1.2.3