summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-05-07 14:41:40 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-05-07 14:41:40 +0100
commit3afd9c97310d58c0c6588d18887244328590731e (patch)
tree133917633f801613e8742d8b313faee3c4f47e71 /desktop
parent0647d69a8b8663fcc09af118dde6b256624fe232 (diff)
downloadnetsurf-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.c5
-rw-r--r--desktop/browser_private.h3
-rw-r--r--desktop/search.c103
-rw-r--r--desktop/search.h20
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