mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-02-23 18:04:48 +03:00
Stop render/search.c from dereferencing bw and remove dependency on html & text contents' bw pointer.
This commit is contained in:
parent
b51816c222
commit
5526d7e6f2
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user