summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--desktop/search.c15
-rw-r--r--render/search.c31
-rw-r--r--render/search.h12
3 files changed, 27 insertions, 31 deletions
diff --git a/desktop/search.c b/desktop/search.c
index 205ce80c8..2fe762941 100644
--- a/desktop/search.c
+++ b/desktop/search.c
@@ -44,6 +44,19 @@
#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)
@@ -61,6 +74,8 @@ bool browser_window_search_create_context(struct browser_window *bw,
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)
diff --git a/render/search.c b/render/search.c
index 70ff3337e..d30c43f11 100644
--- a/render/search.c
+++ b/render/search.c
@@ -30,7 +30,6 @@
#include "content/content.h"
#include "content/hlcache.h"
-#include "desktop/browser.h"
#include "desktop/gui.h"
#include "desktop/selection.h"
#include "render/box.h"
@@ -76,26 +75,6 @@ struct search_context {
/**
- * Find the browser window that contains the content associated with a search
- *
- * \param search search context
- * \return the browser window, or NULL if none
- */
-static struct browser_window *search_get_browser_window(
- struct search_context *search)
-{
- if (search->c != NULL) {
- if (search->is_html == true) {
- return html_get_browser_window(search->c);
- } else {
- return textplain_get_browser_window(search->c);
- }
- }
- return NULL;
-}
-
-
-/**
* create a search_context
* \param h the hlcache_handle the search_context is connected to
* \param callbacks the callbacks to modify appearance according to results
@@ -722,13 +701,11 @@ void search_destroy_context(struct search_context *context)
{
assert(context != NULL);
- if (context->c != NULL) {
- struct browser_window *bw = search_get_browser_window(context);
+ if (context->callbacks.invalidate != NULL) {
+ context->callbacks.invalidate(context, context->callbacks.p);
+ }
- /* TODO: don't poke inside bw */
- if (bw->cur_search == context) {
- bw->cur_search = NULL;
- }
+ if (context->c != NULL) {
if (context->is_html)
html_set_search(context->c, NULL);
diff --git a/render/search.h b/render/search.h
index 3d5e9f0e3..e1f58f2ae 100644
--- a/render/search.h
+++ b/render/search.h
@@ -24,19 +24,23 @@
#include "desktop/search.h"
+struct search_context;
+
/**
* Called when a search context is destroyed
- * \param p pointer for client data
+ * \param context search context being invalidated
+ * \param p pointer for client data
*/
-typedef void (*search_destroy_callback)(void *p);
+typedef void (*search_invalidate_callback)(struct search_context *context,
+ void *p);
struct search_callbacks {
struct gui_search_callbacks *gui;
void *gui_p; /* private gui owned data */
+ search_invalidate_callback invalidate;
+ void *p; /* private client data */
};
-struct search_context;
-
struct search_context * search_create_context(struct hlcache_handle *h,
struct search_callbacks callbacks);