Stop render/search.c from dereferencing bw and remove dependency on html & text contents' bw pointer.

This commit is contained in:
Michael Drake 2012-08-14 14:03:54 +01:00
parent b51816c222
commit 5526d7e6f2
3 changed files with 27 additions and 31 deletions

View File

@ -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)

View File

@ -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"
@ -75,26 +74,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
@ -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);

View File

@ -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);