mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-22 04:02:34 +03:00
Allow content handlers to have debug values set through API
Previously content handler debugging features were accessed by global variables. This allows the setting of debugging parameters via a content API giving per content control over debugging features. Currently only used by the html content handler to toggle global redraw debugging.
This commit is contained in:
parent
46f369ca9e
commit
8c2cfecfb5
@ -872,6 +872,22 @@ nserror content_debug_dump(struct hlcache_handle *h, FILE *f, enum content_debug
|
||||
return c->handler->debug_dump(c, f, op);
|
||||
}
|
||||
|
||||
/* exported interface documented in content/content.h */
|
||||
nserror content_debug(struct hlcache_handle *h, enum content_debug op)
|
||||
{
|
||||
struct content *c = hlcache_handle_get_content(h);
|
||||
|
||||
if (c == NULL) {
|
||||
return NSERROR_BAD_PARAMETER;
|
||||
}
|
||||
|
||||
if (c->handler->debug == NULL) {
|
||||
return NSERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
return c->handler->debug(c, op);
|
||||
}
|
||||
|
||||
|
||||
void content_add_error(struct content *c, const char *token,
|
||||
unsigned int line)
|
||||
|
@ -90,7 +90,8 @@ typedef enum {
|
||||
/** Debugging dump operations */
|
||||
enum content_debug {
|
||||
CONTENT_DEBUG_RENDER, /** Debug the contents rendering. */
|
||||
CONTENT_DEBUG_DOM /** Debug teh contents Document Object. */
|
||||
CONTENT_DEBUG_DOM, /** Debug the contents Document Object. */
|
||||
CONTENT_DEBUG_REDRAW /** Debug redraw operations. */
|
||||
};
|
||||
|
||||
/** RFC5988 metadata link */
|
||||
@ -300,6 +301,14 @@ void content_search_clear(struct hlcache_handle *h);
|
||||
*/
|
||||
nserror content_debug_dump(struct hlcache_handle *h, FILE *f, enum content_debug op);
|
||||
|
||||
/**
|
||||
* Control debug con a content.
|
||||
*
|
||||
* \param h content handle to debug.
|
||||
* \param op Debug operation type.
|
||||
*/
|
||||
nserror content_debug(struct hlcache_handle *h, enum content_debug op);
|
||||
|
||||
struct content_rfc5988_link *content_find_rfc5988_link(struct hlcache_handle *c,
|
||||
lwc_string *rel);
|
||||
|
||||
|
@ -77,6 +77,7 @@ struct content_handler {
|
||||
const char *string);
|
||||
void (*search_clear)(struct content *c);
|
||||
nserror (*debug_dump)(struct content *c, FILE *f, enum content_debug op);
|
||||
nserror (*debug)(struct content *c, enum content_debug op);
|
||||
nserror (*clone)(const struct content *old, struct content **newc);
|
||||
bool (*matches_quirks)(const struct content *c, bool quirks);
|
||||
const char *(*get_encoding)(const struct content *c);
|
||||
|
@ -736,11 +736,19 @@ void browser_window_set_gadget_filename(struct browser_window *bw,
|
||||
nserror browser_window_debug_dump(struct browser_window *bw,
|
||||
FILE *f, enum content_debug op)
|
||||
{
|
||||
if (bw->current_content == NULL) {
|
||||
return NSERROR_OK;
|
||||
if (bw->current_content != NULL) {
|
||||
return content_debug_dump(bw->current_content, f, op);
|
||||
}
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
return content_debug_dump(bw->current_content, f, op);
|
||||
/* exported interface, documented in browser.h */
|
||||
nserror browser_window_debug(struct browser_window *bw, enum content_debug op)
|
||||
{
|
||||
if (bw->current_content != NULL) {
|
||||
return content_debug(bw->current_content, op);
|
||||
}
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
/** slow script handler
|
||||
|
@ -668,9 +668,19 @@ int browser_get_dpi(void);
|
||||
/**
|
||||
* Dump debug info concerning the browser window's contents to file
|
||||
*
|
||||
* \param bw The browser window
|
||||
* \param f The file to dump to
|
||||
* \param bw The browser window.
|
||||
* \param f The file to dump to.
|
||||
* \param op The debug operation type to dump.
|
||||
* \return NSERROR_OK on success or error code on faliure.
|
||||
*/
|
||||
nserror browser_window_debug_dump(struct browser_window *bw, FILE *f, enum content_debug op);
|
||||
|
||||
/**
|
||||
* set debug options on a window
|
||||
* \param bw The browser window.
|
||||
* \param op The debug operation type.
|
||||
* \return NSERROR_OK on success or error code on faliure.
|
||||
*/
|
||||
nserror browser_window_debug(struct browser_window *bw, enum content_debug op);
|
||||
|
||||
#endif
|
||||
|
@ -45,7 +45,6 @@
|
||||
#include "desktop/searchweb.h"
|
||||
#include "desktop/textinput.h"
|
||||
#include "desktop/font.h"
|
||||
#include "render/html.h"
|
||||
#include "content/hlcache.h"
|
||||
|
||||
#include "gtk/compat.h"
|
||||
@ -1267,8 +1266,14 @@ MULTIHANDLER(savewindowsize)
|
||||
|
||||
MULTIHANDLER(toggledebugging)
|
||||
{
|
||||
html_redraw_debug = !html_redraw_debug;
|
||||
struct browser_window *bw;
|
||||
|
||||
bw = nsgtk_get_browser_window(g->top_level);
|
||||
|
||||
browser_window_debug(bw, CONTENT_DEBUG_REDRAW);
|
||||
|
||||
nsgtk_reflow_all_windows();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1977,11 +1977,27 @@ static bool html_drop_file_at_point(struct content *c, int x, int y, char *file)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* set debug status.
|
||||
*
|
||||
* \param c The content to debug
|
||||
* \param op The debug operation type
|
||||
*/
|
||||
static nserror
|
||||
html_debug(struct content *c, enum content_debug op)
|
||||
{
|
||||
html_redraw_debug = !html_redraw_debug;
|
||||
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Dump debug info concerning the html_content
|
||||
*
|
||||
* \param bw The browser window
|
||||
* \param c The content to debug
|
||||
* \param f The file to dump to
|
||||
* \param op The debug dump type
|
||||
*/
|
||||
static nserror
|
||||
html_debug_dump(struct content *c, FILE *f, enum content_debug op)
|
||||
@ -2261,6 +2277,7 @@ static const content_handler html_content_handler = {
|
||||
.search = html_search,
|
||||
.search_clear = html_search_clear,
|
||||
.debug_dump = html_debug_dump,
|
||||
.debug = html_debug,
|
||||
.clone = html_clone,
|
||||
.get_encoding = html_encoding,
|
||||
.type = html_content_type,
|
||||
|
@ -149,9 +149,6 @@ struct content_html_iframe {
|
||||
#define STYLESHEET_USER 3 /* user stylesheet */
|
||||
#define STYLESHEET_START 4 /* start of document stylesheets */
|
||||
|
||||
/** Render padding and margin box outlines in html_redraw(). */
|
||||
extern bool html_redraw_debug;
|
||||
|
||||
nserror html_init(void);
|
||||
|
||||
void html_redraw_a_box(struct hlcache_handle *h, struct box *box);
|
||||
|
@ -176,7 +176,8 @@ typedef struct html_content {
|
||||
|
||||
} html_content;
|
||||
|
||||
|
||||
/** Render padding and margin box outlines in html_redraw(). */
|
||||
extern bool html_redraw_debug;
|
||||
|
||||
void html_set_status(html_content *c, const char *extra);
|
||||
|
||||
|
@ -2000,7 +2000,8 @@ bool ro_gui_window_handle_local_keypress(struct gui_window *g, wimp_key *key,
|
||||
|
||||
case IS_WIMP_KEY + wimp_KEY_SHIFT + wimp_KEY_F11:
|
||||
/* Toggle display of box outlines. */
|
||||
html_redraw_debug = !html_redraw_debug;
|
||||
browser_window_debug(g->bw, CONTENT_DEBUG_REDRAW);
|
||||
|
||||
gui_window_redraw_window(g);
|
||||
return true;
|
||||
|
||||
|
@ -42,7 +42,6 @@
|
||||
#include "utils/nsoption.h"
|
||||
#include "desktop/plotters.h"
|
||||
#include "desktop/textinput.h"
|
||||
#include "render/html.h"
|
||||
#include "desktop/gui_window.h"
|
||||
#include "desktop/gui_clipboard.h"
|
||||
#include "desktop/gui_misc.h"
|
||||
@ -1013,8 +1012,8 @@ nsws_window_command(HWND hwnd,
|
||||
break;
|
||||
|
||||
case IDM_VIEW_TOGGLE_DEBUG_RENDERING:
|
||||
html_redraw_debug = !html_redraw_debug;
|
||||
if (gw->bw != NULL) {
|
||||
browser_window_debug(gw->bw, CONTENT_DEBUG_REDRAW);
|
||||
/* TODO: This should only redraw, not reformat.
|
||||
* (Layout doesn't change, so reformat is a waste of time) */
|
||||
browser_window_reformat(gw->bw, false, gw->width, gw->height);
|
||||
|
Loading…
Reference in New Issue
Block a user