r12645 jmb - in /trunk/libcss: include/libcss/ src/select/ src/select/properties/
by netsurf@semichrome.net
Author: jmb
Date: Tue Aug 23 15:12:41 2011
New Revision: 12645
URL: http://source.netsurf-browser.org?rev=12645&view=rev
Log:
Add support for selecting page-break-{before, after, inside}
Credit: James Montgomerie
Modified:
trunk/libcss/include/libcss/computed.h
trunk/libcss/include/libcss/properties.h
trunk/libcss/src/select/computed.c
trunk/libcss/src/select/computed.h
trunk/libcss/src/select/properties/helpers.c
trunk/libcss/src/select/properties/helpers.h
trunk/libcss/src/select/properties/page_break_after.c
trunk/libcss/src/select/properties/page_break_before.c
trunk/libcss/src/select/properties/page_break_inside.c
trunk/libcss/src/select/propget.h
trunk/libcss/src/select/propset.h
Modified: trunk/libcss/include/libcss/computed.h
URL: http://source.netsurf-browser.org/trunk/libcss/include/libcss/computed.h?...
==============================================================================
--- trunk/libcss/include/libcss/computed.h (original)
+++ trunk/libcss/include/libcss/computed.h Tue Aug 23 15:12:41 2011
@@ -379,6 +379,15 @@
uint8_t css_computed_text_align(
const css_computed_style *style);
+uint8_t css_computed_page_break_after(
+ const css_computed_style *style);
+
+uint8_t css_computed_page_break_before(
+ const css_computed_style *style);
+
+uint8_t css_computed_page_break_inside(
+ const css_computed_style *style);
+
#ifdef __cplusplus
}
Modified: trunk/libcss/include/libcss/properties.h
URL: http://source.netsurf-browser.org/trunk/libcss/include/libcss/properties....
==============================================================================
--- trunk/libcss/include/libcss/properties.h (original)
+++ trunk/libcss/include/libcss/properties.h Tue Aug 23 15:12:41 2011
@@ -488,6 +488,30 @@
CSS_PADDING_SET = 0x1
};
+enum css_page_break_after_e {
+ CSS_PAGE_BREAK_AFTER_INHERIT = 0x0,
+ CSS_PAGE_BREAK_AFTER_AUTO = 0x1,
+ CSS_PAGE_BREAK_AFTER_AVOID = 0x2,
+ CSS_PAGE_BREAK_AFTER_ALWAYS = 0x3,
+ CSS_PAGE_BREAK_AFTER_LEFT = 0x4,
+ CSS_PAGE_BREAK_AFTER_RIGHT = 0x5
+};
+
+enum css_page_break_before_e {
+ CSS_PAGE_BREAK_BEFORE_INHERIT = CSS_PAGE_BREAK_AFTER_INHERIT,
+ CSS_PAGE_BREAK_BEFORE_AUTO = CSS_PAGE_BREAK_AFTER_AUTO,
+ CSS_PAGE_BREAK_BEFORE_AVOID = CSS_PAGE_BREAK_AFTER_AVOID,
+ CSS_PAGE_BREAK_BEFORE_ALWAYS = CSS_PAGE_BREAK_AFTER_ALWAYS,
+ CSS_PAGE_BREAK_BEFORE_LEFT = CSS_PAGE_BREAK_AFTER_LEFT,
+ CSS_PAGE_BREAK_BEFORE_RIGHT = CSS_PAGE_BREAK_AFTER_RIGHT
+};
+
+enum css_page_break_inside_e {
+ CSS_PAGE_BREAK_INSIDE_INHERIT = CSS_PAGE_BREAK_AFTER_INHERIT,
+ CSS_PAGE_BREAK_INSIDE_AUTO = CSS_PAGE_BREAK_AFTER_AUTO,
+ CSS_PAGE_BREAK_INSIDE_AVOID = CSS_PAGE_BREAK_AFTER_AVOID
+};
+
enum css_position_e {
CSS_POSITION_INHERIT = 0x0,
CSS_POSITION_STATIC = 0x1,
Modified: trunk/libcss/src/select/computed.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/computed.c?rev=...
==============================================================================
--- trunk/libcss/src/select/computed.c (original)
+++ trunk/libcss/src/select/computed.c Tue Aug 23 15:12:41 2011
@@ -2160,6 +2160,70 @@
#undef CSS_TEXT_ALIGN_SHIFT
#undef CSS_TEXT_ALIGN_INDEX
+#define CSS_PAGE_BREAK_AFTER_INDEX 0
+#define CSS_PAGE_BREAK_AFTER_SHIFT 0
+#define CSS_PAGE_BREAK_AFTER_MASK 0x7
+uint8_t css_computed_page_break_after(
+ const css_computed_style *style)
+{
+ if (style->page != NULL) {
+ uint8_t bits = style->page->bits[CSS_PAGE_BREAK_AFTER_INDEX];
+ bits &= CSS_PAGE_BREAK_AFTER_MASK;
+ bits >>= CSS_PAGE_BREAK_AFTER_SHIFT;
+
+ /* 3bits: type */
+ return bits;
+ }
+
+ return CSS_PAGE_BREAK_AFTER_AUTO;
+}
+#undef CSS_PAGE_BREAK_AFTER_MASK
+#undef CSS_PAGE_BREAK_AFTER_SHIFT
+#undef CSS_PAGE_BREAK_AFTER_INDEX
+
+#define CSS_PAGE_BREAK_BEFORE_INDEX 0
+#define CSS_PAGE_BREAK_BEFORE_SHIFT 3
+#define CSS_PAGE_BREAK_BEFORE_MASK 0x38
+uint8_t css_computed_page_break_before(
+ const css_computed_style *style)
+{
+ if (style->page != NULL) {
+ uint8_t bits = style->page->bits[CSS_PAGE_BREAK_BEFORE_INDEX];
+ bits &= CSS_PAGE_BREAK_BEFORE_MASK;
+ bits >>= CSS_PAGE_BREAK_BEFORE_SHIFT;
+
+ /* 3bits: type */
+ return bits;
+ }
+
+ return CSS_PAGE_BREAK_BEFORE_AUTO;
+}
+#undef CSS_PAGE_BREAK_BEFORE_MASK
+#undef CSS_PAGE_BREAK_BEFORE_SHIFT
+#undef CSS_PAGE_BREAK_BEFORE_INDEX
+
+#define CSS_PAGE_BREAK_INSIDE_INDEX 0
+#define CSS_PAGE_BREAK_INSIDE_SHIFT 6
+#define CSS_PAGE_BREAK_INSIDE_MASK 0xc0
+uint8_t css_computed_page_break_inside(
+ const css_computed_style *style)
+{
+ if (style->page != NULL) {
+ uint8_t bits = style->page->bits[CSS_PAGE_BREAK_INSIDE_INDEX];
+ bits &= CSS_PAGE_BREAK_INSIDE_MASK;
+ bits >>= CSS_PAGE_BREAK_INSIDE_SHIFT;
+
+ /* 2bits: type */
+ return bits;
+ }
+
+ return CSS_PAGE_BREAK_INSIDE_AUTO;
+}
+#undef CSS_PAGE_BREAK_INSIDE_MASK
+#undef CSS_PAGE_BREAK_INSIDE_SHIFT
+#undef CSS_PAGE_BREAK_INSIDE_INDEX
+
+
/******************************************************************************
* Library internals *
Modified: trunk/libcss/src/select/computed.h
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/computed.h?rev=...
==============================================================================
--- trunk/libcss/src/select/computed.h (original)
+++ trunk/libcss/src/select/computed.h Tue Aug 23 15:12:41 2011
@@ -85,6 +85,17 @@
css_computed_content_item *content;
} css_computed_uncommon;
+typedef struct css_computed_page {
+/*
+ * page_break_after 3
+ * page_break_before 3
+ * page_break_inside 2
+ * ---
+ * 8 bits
+ */
+ uint8_t bits[1];
+} css_computed_page;
+
struct css_computed_style {
/*
* background_attachment 2
@@ -270,7 +281,7 @@
css_computed_uncommon *uncommon;/**< Uncommon properties */
void *aural; /**< Aural properties */
- void *page; /**< Page properties */
+ css_computed_page *page; /**< Page properties */
css_allocator_fn alloc;
void *pw;
Modified: trunk/libcss/src/select/properties/helpers.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/properties/help...
==============================================================================
--- trunk/libcss/src/select/properties/helpers.c (original)
+++ trunk/libcss/src/select/properties/helpers.c Tue Aug 23 15:12:41 2011
@@ -356,22 +356,30 @@
return CSS_OK;
}
-css_error css__cascade_page_break_after_before(uint32_t opv, css_style *style,
- css_select_state *state,
+css_error css__cascade_page_break_after_before_inside(uint32_t opv,
+ css_style *style, css_select_state *state,
css_error (*fun)(css_computed_style *, uint8_t))
{
- uint16_t value = 0;
+ uint16_t value = CSS_PAGE_BREAK_AFTER_INHERIT;
UNUSED(style);
if (isInherit(opv) == false) {
switch (getValue(opv)) {
case PAGE_BREAK_AFTER_AUTO:
+ value = CSS_PAGE_BREAK_AFTER_AUTO;
+ break;
case PAGE_BREAK_AFTER_ALWAYS:
+ value = CSS_PAGE_BREAK_AFTER_ALWAYS;
+ break;
case PAGE_BREAK_AFTER_AVOID:
+ value = CSS_PAGE_BREAK_AFTER_AVOID;
+ break;
case PAGE_BREAK_AFTER_LEFT:
+ value = CSS_PAGE_BREAK_AFTER_LEFT;
+ break;
case PAGE_BREAK_AFTER_RIGHT:
- /** \todo convert to public values */
+ value = CSS_PAGE_BREAK_AFTER_RIGHT;
break;
}
}
Modified: trunk/libcss/src/select/properties/helpers.h
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/properties/help...
==============================================================================
--- trunk/libcss/src/select/properties/helpers.h (original)
+++ trunk/libcss/src/select/properties/helpers.h Tue Aug 23 15:12:41 2011
@@ -48,8 +48,8 @@
css_error css__cascade_number(uint32_t opv, css_style *style,
css_select_state *state,
css_error (*fun)(css_computed_style *, uint8_t, css_fixed));
-css_error css__cascade_page_break_after_before(uint32_t opv, css_style *style,
- css_select_state *state,
+css_error css__cascade_page_break_after_before_inside(uint32_t opv,
+ css_style *style, css_select_state *state,
css_error (*fun)(css_computed_style *, uint8_t));
css_error css__cascade_counter_increment_reset(uint32_t opv, css_style *style,
css_select_state *state,
Modified: trunk/libcss/src/select/properties/page_break_after.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/properties/page...
==============================================================================
--- trunk/libcss/src/select/properties/page_break_after.c (original)
+++ trunk/libcss/src/select/properties/page_break_after.c Tue Aug 23 15:12:41 2011
@@ -17,34 +17,32 @@
css_error css__cascade_page_break_after(uint32_t opv, css_style *style,
css_select_state *state)
{
- /** \todo page-break-after */
- return css__cascade_page_break_after_before(opv, style, state, NULL);
+ return css__cascade_page_break_after_before_inside(opv, style, state,
+ set_page_break_after);
}
css_error css__set_page_break_after_from_hint(const css_hint *hint,
css_computed_style *style)
{
- UNUSED(hint);
- UNUSED(style);
-
- return CSS_OK;
+ return set_page_break_after(style, hint->status);
}
css_error css__initial_page_break_after(css_select_state *state)
{
- UNUSED(state);
-
- return CSS_OK;
+ return set_page_break_after(state->computed,
+ CSS_PAGE_BREAK_AFTER_AUTO);
}
css_error css__compose_page_break_after(const css_computed_style *parent,
const css_computed_style *child,
css_computed_style *result)
{
- UNUSED(parent);
- UNUSED(child);
- UNUSED(result);
+ uint8_t type = get_page_break_after(child);
- return CSS_OK;
+ if (type == CSS_PAGE_BREAK_AFTER_INHERIT) {
+ type = get_page_break_after(parent);
+ }
+
+ return set_page_break_after(result, type);
}
Modified: trunk/libcss/src/select/properties/page_break_before.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/properties/page...
==============================================================================
--- trunk/libcss/src/select/properties/page_break_before.c (original)
+++ trunk/libcss/src/select/properties/page_break_before.c Tue Aug 23 15:12:41 2011
@@ -17,34 +17,31 @@
css_error css__cascade_page_break_before(uint32_t opv, css_style *style,
css_select_state *state)
{
- /** \todo page-break-before */
- return css__cascade_page_break_after_before(opv, style, state, NULL);
+ return css__cascade_page_break_after_before_inside(opv, style, state,
+ set_page_break_before);
}
css_error css__set_page_break_before_from_hint(const css_hint *hint,
css_computed_style *style)
{
- UNUSED(hint);
- UNUSED(style);
-
- return CSS_OK;
+ return set_page_break_before(style, hint->status);
}
css_error css__initial_page_break_before(css_select_state *state)
{
- UNUSED(state);
-
- return CSS_OK;
+ return set_page_break_before(state->computed,
+ CSS_PAGE_BREAK_BEFORE_AUTO);
}
css_error css__compose_page_break_before(const css_computed_style *parent,
const css_computed_style *child,
css_computed_style *result)
{
- UNUSED(parent);
- UNUSED(child);
- UNUSED(result);
-
- return CSS_OK;
+ uint8_t type = get_page_break_before(child);
+
+ if (type == CSS_PAGE_BREAK_BEFORE_INHERIT) {
+ type = get_page_break_before(parent);
+ }
+
+ return set_page_break_before(result, type);
}
-
Modified: trunk/libcss/src/select/properties/page_break_inside.c
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/properties/page...
==============================================================================
--- trunk/libcss/src/select/properties/page_break_inside.c (original)
+++ trunk/libcss/src/select/properties/page_break_inside.c Tue Aug 23 15:12:41 2011
@@ -17,49 +17,32 @@
css_error css__cascade_page_break_inside(uint32_t opv, css_style *style,
css_select_state *state)
{
- UNUSED(style);
-
- if (isInherit(opv) == false) {
- switch (getValue(opv)) {
- case PAGE_BREAK_INSIDE_AUTO:
- case PAGE_BREAK_INSIDE_AVOID:
- /** \todo convert to public values */
- break;
- }
- }
-
- if (css__outranks_existing(getOpcode(opv), isImportant(opv), state,
- isInherit(opv))) {
- /** \todo page-break-inside */
- }
-
- return CSS_OK;
+ return css__cascade_page_break_after_before_inside(opv, style, state,
+ set_page_break_inside);
}
css_error css__set_page_break_inside_from_hint(const css_hint *hint,
css_computed_style *style)
{
- UNUSED(hint);
- UNUSED(style);
-
- return CSS_OK;
+ return set_page_break_inside(style, hint->status);
}
css_error css__initial_page_break_inside(css_select_state *state)
{
- UNUSED(state);
-
- return CSS_OK;
+ return set_page_break_inside(state->computed,
+ CSS_PAGE_BREAK_INSIDE_AUTO);
}
css_error css__compose_page_break_inside(const css_computed_style *parent,
const css_computed_style *child,
css_computed_style *result)
{
- UNUSED(parent);
- UNUSED(child);
- UNUSED(result);
-
- return CSS_OK;
+ uint8_t type = get_page_break_inside(child);
+
+ if (type == CSS_PAGE_BREAK_INSIDE_INHERIT) {
+ type = get_page_break_inside(parent);
+ }
+
+ return set_page_break_inside(result, type);
}
Modified: trunk/libcss/src/select/propget.h
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/propget.h?rev=1...
==============================================================================
--- trunk/libcss/src/select/propget.h (original)
+++ trunk/libcss/src/select/propget.h Tue Aug 23 15:12:41 2011
@@ -1744,4 +1744,67 @@
#undef TEXT_ALIGN_SHIFT
#undef TEXT_ALIGN_INDEX
+#define PAGE_BREAK_AFTER_INDEX 0
+#define PAGE_BREAK_AFTER_SHIFT 0
+#define PAGE_BREAK_AFTER_MASK 0x7
+static inline uint8_t get_page_break_after(
+ const css_computed_style *style)
+{
+ if (style->page != NULL) {
+ uint8_t bits = style->page->bits[PAGE_BREAK_AFTER_INDEX];
+ bits &= PAGE_BREAK_AFTER_MASK;
+ bits >>= PAGE_BREAK_AFTER_SHIFT;
+
+ /* 3bits: type */
+ return bits;
+ }
+
+ return CSS_PAGE_BREAK_AFTER_AUTO;
+}
+#undef PAGE_BREAK_AFTER_MASK
+#undef PAGE_BREAK_AFTER_SHIFT
+#undef PAGE_BREAK_AFTER_INDEX
+
+#define PAGE_BREAK_BEFORE_INDEX 0
+#define PAGE_BREAK_BEFORE_SHIFT 3
+#define PAGE_BREAK_BEFORE_MASK 0x38
+static inline uint8_t get_page_break_before(
+ const css_computed_style *style)
+{
+ if (style->page != NULL) {
+ uint8_t bits = style->page->bits[PAGE_BREAK_BEFORE_INDEX];
+ bits &= PAGE_BREAK_BEFORE_MASK;
+ bits >>= PAGE_BREAK_BEFORE_SHIFT;
+
+ /* 3bits: type */
+ return bits;
+ }
+
+ return CSS_PAGE_BREAK_BEFORE_AUTO;
+}
+#undef PAGE_BREAK_BEFORE_MASK
+#undef PAGE_BREAK_BEFORE_SHIFT
+#undef PAGE_BREAK_BEFORE_INDEX
+
+#define PAGE_BREAK_INSIDE_INDEX 0
+#define PAGE_BREAK_INSIDE_SHIFT 6
+#define PAGE_BREAK_INSIDE_MASK 0xc0
+static inline uint8_t get_page_break_inside(
+ const css_computed_style *style)
+{
+ if (style->page != NULL) {
+ uint8_t bits = style->page->bits[PAGE_BREAK_INSIDE_INDEX];
+ bits &= PAGE_BREAK_INSIDE_MASK;
+ bits >>= PAGE_BREAK_INSIDE_SHIFT;
+
+ /* 2bits: type */
+ return bits;
+ }
+
+ return CSS_PAGE_BREAK_INSIDE_AUTO;
+}
+#undef PAGE_BREAK_INSIDE_MASK
+#undef PAGE_BREAK_INSIDE_SHIFT
+#undef PAGE_BREAK_INSIDE_INDEX
+
#endif
Modified: trunk/libcss/src/select/propset.h
URL: http://source.netsurf-browser.org/trunk/libcss/src/select/propset.h?rev=1...
==============================================================================
--- trunk/libcss/src/select/propset.h (original)
+++ trunk/libcss/src/select/propset.h Tue Aug 23 15:12:41 2011
@@ -48,6 +48,25 @@
\
memcpy(style->uncommon, &default_uncommon, \
sizeof(css_computed_uncommon)); \
+ } \
+} while(0)
+
+static const css_computed_page default_page = {
+ { (CSS_PAGE_BREAK_INSIDE_AUTO << 6) |
+ (CSS_PAGE_BREAK_BEFORE_AUTO << 3) |
+ CSS_PAGE_BREAK_AFTER_AUTO
+ }
+};
+
+#define ENSURE_PAGE do { \
+ if (style->page == NULL) { \
+ style->page = style->alloc(NULL, \
+ sizeof(css_computed_page), style->pw); \
+ if (style->page == NULL) \
+ return CSS_NOMEM; \
+ \
+ memcpy(style->page, &default_page, \
+ sizeof(css_computed_page)); \
} \
} while(0)
@@ -1835,4 +1854,64 @@
#undef TEXT_ALIGN_SHIFT
#undef TEXT_ALIGN_INDEX
+#define PAGE_BREAK_AFTER_INDEX 0
+#define PAGE_BREAK_AFTER_SHIFT 0
+#define PAGE_BREAK_AFTER_MASK 0x7
+static inline css_error set_page_break_after(
+ css_computed_style *style, uint8_t type)
+{
+ ENSURE_PAGE;
+
+ uint8_t *bits = &style->page->bits[PAGE_BREAK_AFTER_INDEX];
+
+ /* 3bits: type */
+ *bits = (*bits & ~PAGE_BREAK_AFTER_MASK) |
+ ((type & 0x7) << PAGE_BREAK_AFTER_SHIFT);
+
+ return CSS_OK;
+}
+#undef PAGE_BREAK_AFTER_INDEX
+#undef PAGE_BREAK_AFTER_SHIFT
+#undef PAGE_BREAK_AFTER_MASK
+
+#define PAGE_BREAK_BEFORE_INDEX 0
+#define PAGE_BREAK_BEFORE_SHIFT 3
+#define PAGE_BREAK_BEFORE_MASK 0x38
+static inline css_error set_page_break_before(
+ css_computed_style *style, uint8_t type)
+{
+ ENSURE_PAGE;
+
+ uint8_t *bits = &style->page->bits[PAGE_BREAK_BEFORE_INDEX];
+
+ /* 3bits: type */
+ *bits = (*bits & ~PAGE_BREAK_BEFORE_MASK) |
+ ((type & 0x7) << PAGE_BREAK_BEFORE_SHIFT);
+
+ return CSS_OK;
+}
+#undef PAGE_BREAK_BEFORE_INDEX
+#undef PAGE_BREAK_BEFORE_SHIFT
+#undef PAGE_BREAK_BEFORE_MASK
+
+#define PAGE_BREAK_INSIDE_INDEX 0
+#define PAGE_BREAK_INSIDE_SHIFT 6
+#define PAGE_BREAK_INSIDE_MASK 0xc0
+static inline css_error set_page_break_inside(
+ css_computed_style *style, uint8_t type)
+{
+ ENSURE_PAGE;
+
+ uint8_t *bits = &style->page->bits[PAGE_BREAK_INSIDE_INDEX];
+
+ /* 2bits: type */
+ *bits = (*bits & ~PAGE_BREAK_INSIDE_MASK) |
+ ((type & 0x3) << PAGE_BREAK_INSIDE_SHIFT);
+
+ return CSS_OK;
+}
+#undef PAGE_BREAK_INSIDE_INDEX
+#undef PAGE_BREAK_INSIDE_SHIFT
+#undef PAGE_BREAK_INSIDE_MASK
+
#endif
11 years, 5 months
r12644 jmb - /trunk/netsurf/css/css.c
by netsurf@semichrome.net
Author: jmb
Date: Tue Aug 23 14:59:13 2011
New Revision: 12644
URL: http://source.netsurf-browser.org?rev=12644&view=rev
Log:
Reject attempts by a stylesheet to import itself
Modified:
trunk/netsurf/css/css.c
Modified: trunk/netsurf/css/css.c
URL: http://source.netsurf-browser.org/trunk/netsurf/css/css.c?rev=12644&r1=12...
==============================================================================
--- trunk/netsurf/css/css.c (original)
+++ trunk/netsurf/css/css.c Tue Aug 23 14:59:13 2011
@@ -587,13 +587,22 @@
/* Create content */
c->imports[c->import_count].media = media;
- nerror = hlcache_handle_retrieve(lwc_string_data(url),
- 0, referer, NULL, nscss_import, ctx,
- &child, accept,
- &c->imports[c->import_count].c);
- if (nerror != NSERROR_OK) {
+
+ /* Avoid importing ourself */
+ if (strcmp(lwc_string_data(url), referer) == 0) {
+ c->imports[c->import_count].c = NULL;
+ /* No longer require context as we're not fetching anything */
free(ctx);
- return CSS_NOMEM;
+ ctx = NULL;
+ } else {
+ nerror = hlcache_handle_retrieve(lwc_string_data(url),
+ 0, referer, NULL, nscss_import, ctx,
+ &child, accept,
+ &c->imports[c->import_count].c);
+ if (nerror != NSERROR_OK) {
+ free(ctx);
+ return CSS_NOMEM;
+ }
}
#ifdef NSCSS_IMPORT_TRACE
11 years, 5 months
r12642 tlsa - /trunk/netsurf/render/layout.c
by netsurf@semichrome.net
Author: tlsa
Date: Tue Aug 23 05:42:03 2011
New Revision: 12642
URL: http://source.netsurf-browser.org?rev=12642&view=rev
Log:
Replaced elements' children are not laid out, so don't look at their descendants. Fixes #3380281.
Modified:
trunk/netsurf/render/layout.c
Modified: trunk/netsurf/render/layout.c
URL: http://source.netsurf-browser.org/trunk/netsurf/render/layout.c?rev=12642...
==============================================================================
--- trunk/netsurf/render/layout.c (original)
+++ trunk/netsurf/render/layout.c Tue Aug 23 05:42:03 2011
@@ -5050,6 +5050,10 @@
return;
}
+ if (box->flags & REPLACE_DIM)
+ /* Box's children aren't displayed if the box is replaced */
+ return;
+
for (child = box->children; child; child = child->next) {
if (child->type == BOX_FLOAT_LEFT ||
child->type == BOX_FLOAT_RIGHT)
11 years, 5 months
r12641 jmb - /trunk/netsurf/render/html.c
by netsurf@semichrome.net
Author: jmb
Date: Fri Aug 19 20:13:51 2011
New Revision: 12641
URL: http://source.netsurf-browser.org?rev=12641&view=rev
Log:
Fix bug #3390958: forcibly discard references to any child objects if we fail to complete conversion of an HTML content
Modified:
trunk/netsurf/render/html.c
Modified: trunk/netsurf/render/html.c
URL: http://source.netsurf-browser.org/trunk/netsurf/render/html.c?rev=12641&r...
==============================================================================
--- trunk/netsurf/render/html.c (original)
+++ trunk/netsurf/render/html.c Fri Aug 19 20:13:51 2011
@@ -96,6 +96,7 @@
static void html_object_failed(struct box *box, html_content *content,
bool background);
static void html_object_refresh(void *p);
+static void html_destroy_objects(html_content *html);
static void html_destroy_frameset(struct content_html_frames *frameset);
static void html_destroy_iframe(struct content_html_iframe *iframe);
#if ALWAYS_DUMP_FRAMESET
@@ -662,7 +663,8 @@
LOG(("XML to box"));
content_set_status(&c->base, messages_get("Processing"));
content_broadcast(&c->base, CONTENT_MSG_STATUS, msg_data);
- if (!xml_to_box(html, c)) {
+ if (xml_to_box(html, c) == false) {
+ html_destroy_objects(c);
msg_data.error = messages_get("NoMemory");
content_broadcast(&c->base, CONTENT_MSG_ERROR, msg_data);
content_set_error(&c->base);
@@ -677,8 +679,9 @@
#endif
/* extract image maps - can't do this sensibly in xml_to_box */
- if (!imagemap_extract(html, c)) {
+ if (imagemap_extract(html, c) == false) {
LOG(("imagemap extraction failed"));
+ html_destroy_objects(c);
msg_data.error = messages_get("NoMemory");
content_broadcast(&c->base, CONTENT_MSG_ERROR, msg_data);
content_set_error(&c->base);
@@ -1942,6 +1945,11 @@
}
/* Free objects */
+ html_destroy_objects(html);
+}
+
+void html_destroy_objects(html_content *html)
+{
while (html->object_list != NULL) {
struct content_html_object *victim = html->object_list;
@@ -1959,7 +1967,8 @@
}
}
-void html_destroy_frameset(struct content_html_frames *frameset) {
+void html_destroy_frameset(struct content_html_frames *frameset)
+{
int i;
if (frameset->name) {
@@ -1988,7 +1997,8 @@
}
}
-void html_destroy_iframe(struct content_html_iframe *iframe) {
+void html_destroy_iframe(struct content_html_iframe *iframe)
+{
struct content_html_iframe *next;
next = iframe;
while ((iframe = next) != NULL) {
11 years, 5 months
r12640 vince - /trunk/netsurf/gtk/theme.c
by netsurf@semichrome.net
Author: vince
Date: Sat Aug 13 17:02:36 2011
New Revision: 12640
URL: http://source.netsurf-browser.org?rev=12640&view=rev
Log:
refactor to fix warning about out of range enums
split default image finding for toolbar and findbar
reorder to avoid forward declarations
refactor macros to be *slightly* less awful
Modified:
trunk/netsurf/gtk/theme.c
Modified: trunk/netsurf/gtk/theme.c
URL: http://source.netsurf-browser.org/trunk/netsurf/gtk/theme.c?rev=12640&r1=...
==============================================================================
--- trunk/netsurf/gtk/theme.c (original)
+++ trunk/netsurf/gtk/theme.c Sat Aug 13 17:02:36 2011
@@ -54,20 +54,99 @@
static struct nsgtk_theme_cache *theme_cache_menu = NULL;
static struct nsgtk_theme_cache *theme_cache_toolbar = NULL;
-static struct nsgtk_theme *nsgtk_theme_default(GtkIconSize s);
-static GtkImage *nsgtk_theme_image_default(nsgtk_toolbar_button i,
- GtkIconSize s);
-static bool nsgtk_theme_verify(const char *themename);
-static void nsgtk_theme_cache_image(nsgtk_toolbar_button i,
- const char *filename, const char *path);
-static void nsgtk_theme_cache_searchimage(nsgtk_search_buttons i,
- const char *filename, const char *path);
-
-#ifdef WITH_THEME_INSTALL
-static nserror theme_install_callback(hlcache_handle *c,
- const hlcache_event *event, void *pw);
-static bool theme_install_read(const char *data, unsigned long len);
-#endif
+/**
+ * \param themename contains a name of theme to check whether it may
+ * properly be added to the list; alternatively NULL to check the integrity
+ * of the list
+ * \return true for themename may be added / every item in the list is
+ * a valid directory
+ */
+
+static bool nsgtk_theme_verify(const char *themename)
+{
+ long filelength;
+ FILE *fp;
+ size_t val = SLEN("themelist") + strlen(res_dir_location) + 1;
+ char buf[50];
+ char themefile[val];
+ snprintf(themefile, val, "%s%s", res_dir_location, "themelist");
+ if (themename == NULL) {
+ char *filecontent, *testfile;
+ struct stat sta;
+ fp = fopen(themefile, "r+");
+ if (fp == NULL) {
+ warn_user(messages_get("gtkFileError"), themefile);
+ return true;
+ }
+ fseek(fp, 0L, SEEK_END);
+ filelength = ftell(fp);
+ filecontent = malloc(filelength +
+ SLEN("gtk default theme\n") + SLEN("\n")
+ + 1);
+ if (filecontent == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ fclose(fp);
+ return true;
+ }
+ strcpy(filecontent, "gtk default theme\n");
+ fseek(fp, 0L, SEEK_SET);
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ /* iterate list */
+ buf[strlen(buf) - 1] = '\0';
+ /* "\n\0" -> "\0\0" */
+ testfile = malloc(strlen(res_dir_location) +
+ SLEN("themes/") + strlen(buf) + 1);
+ if (testfile == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ free(filecontent);
+ fclose(fp);
+ return false;
+ }
+ sprintf(testfile, "%sthemes/%s", res_dir_location,
+ buf);
+ /* check every directory */
+ if (access(testfile, R_OK) == 0) {
+ stat(testfile, &sta);
+ if (S_ISDIR(sta.st_mode)) {
+ buf[strlen(buf)] = '\n';
+ /* "\0\0" -> "\n\0" */
+ strcat(filecontent, buf);
+ }
+ }
+ free(testfile);
+ }
+ fclose(fp);
+ fp = fopen(themefile, "w");
+ if (fp == NULL) {
+ warn_user(messages_get("gtkFileError"), themefile);
+ free(filecontent);
+ return true;
+ }
+ val = fwrite(filecontent, strlen(filecontent), 1, fp);
+ if (val == 0)
+ LOG(("empty write themelist"));
+ fclose(fp);
+ free(filecontent);
+ return true;
+ } else {
+ fp = fopen(themefile, "r");
+ if (fp == NULL) {
+ warn_user(messages_get("gtkFileError"), themefile);
+ return false;
+ }
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ buf[strlen(buf) - 1] = '\0';
+ /* "\n\0" -> "\0\0" */
+ if (strcmp(buf, themename) == 0) {
+ fclose(fp);
+ return false;
+ }
+ }
+ fclose(fp);
+ return true;
+ }
+
+}
/**
* called during gui init phase to retrieve theme name from file then
@@ -77,8 +156,10 @@
void nsgtk_theme_init(void)
{
size_t len;
- if (option_current_theme == 0)
+ if (option_current_theme == 0) {
return;
+ }
+
len = SLEN("themelist") + strlen(res_dir_location) + 1;
char themefile[len];
snprintf(themefile, len, "%s%s", res_dir_location, "themelist");
@@ -103,7 +184,7 @@
}
}
fclose(fp);
-
+
while (list != NULL) {
nsgtk_theme_implement(list);
list = nsgtk_scaffolding_iterate(list);
@@ -153,7 +234,7 @@
}
fprintf(fp, "%s\n", themename);
fclose(fp);
-
+
/* notification that theme was added successfully */
notification = gtk_dialog_new_with_buttons(messages_get("gtkThemeAdd"),
NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK,
@@ -165,117 +246,23 @@
len = SLEN("\t\t\t\t\t\t") + strlen(messages_get("gtkThemeAdd")) + 1;
char labelcontent[len];
snprintf(labelcontent, len, "\t\t\t%s\t\t\t",
- messages_get("gtkThemeAdd"));
+ messages_get("gtkThemeAdd"));
label = gtk_label_new(labelcontent);
if (label == NULL) {
warn_user(messages_get("NoMemory"), 0);
return;
}
g_signal_connect_swapped(notification, "response",
- G_CALLBACK(gtk_widget_destroy), notification);
+ G_CALLBACK(gtk_widget_destroy), notification);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(notification)->vbox), label);
gtk_widget_show_all(notification);
-
+
/* update combo */
- if (wndPreferences == NULL)
- return;
- nsgtk_options_combo_theme_add(themename);
-
-}
-
-/**
- * \param themename contains a name of theme to check whether it may
- * properly be added to the list; alternatively NULL to check the integrity
- * of the list
- * \return true for themename may be added / every item in the list is
- * a valid directory
- */
-
-bool nsgtk_theme_verify(const char *themename)
-{
- long filelength;
- FILE *fp;
- size_t val = SLEN("themelist") + strlen(res_dir_location) + 1;
- char buf[50];
- char themefile[val];
- snprintf(themefile, val, "%s%s", res_dir_location, "themelist");
- if (themename == NULL) {
- char *filecontent, *testfile;
- struct stat sta;
- fp = fopen(themefile, "r+");
- if (fp == NULL) {
- warn_user(messages_get("gtkFileError"), themefile);
- return true;
- }
- fseek(fp, 0L, SEEK_END);
- filelength = ftell(fp);
- filecontent = malloc(filelength +
- SLEN("gtk default theme\n") + SLEN("\n")
- + 1);
- if (filecontent == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- fclose(fp);
- return true;
- }
- strcpy(filecontent, "gtk default theme\n");
- fseek(fp, 0L, SEEK_SET);
- while (fgets(buf, sizeof(buf), fp) != NULL) {
- /* iterate list */
- buf[strlen(buf) - 1] = '\0';
- /* "\n\0" -> "\0\0" */
- testfile = malloc(strlen(res_dir_location) +
- SLEN("themes/") + strlen(buf) + 1);
- if (testfile == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- free(filecontent);
- fclose(fp);
- return false;
- }
- sprintf(testfile, "%sthemes/%s", res_dir_location,
- buf);
- /* check every directory */
- if (access(testfile, R_OK) == 0) {
- stat(testfile, &sta);
- if (S_ISDIR(sta.st_mode)) {
- buf[strlen(buf)] = '\n';
- /* "\0\0" -> "\n\0" */
- strcat(filecontent, buf);
- }
- }
- free(testfile);
- }
- fclose(fp);
- fp = fopen(themefile, "w");
- if (fp == NULL) {
- warn_user(messages_get("gtkFileError"), themefile);
- free(filecontent);
- return true;
- }
- val = fwrite(filecontent, strlen(filecontent), 1, fp);
- if (val == 0)
- LOG(("empty write themelist"));
- fclose(fp);
- free(filecontent);
- return true;
- } else {
- fp = fopen(themefile, "r");
- if (fp == NULL) {
- warn_user(messages_get("gtkFileError"), themefile);
- return false;
- }
- while (fgets(buf, sizeof(buf), fp) != NULL) {
- buf[strlen(buf) - 1] = '\0';
- /* "\n\0" -> "\0\0" */
- if (strcmp(buf, themename) == 0) {
- fclose(fp);
- return false;
- }
- }
- fclose(fp);
- return true;
- }
-
-}
+ if (wndPreferences != NULL) {
+ nsgtk_options_combo_theme_add(themename);
+ }
+}
+
/**
* sets the images for a particular scaffolding according to the current theme
@@ -290,86 +277,229 @@
for (i = 0; i <= IMAGE_SET_POPUP_MENU; i++)
theme[i] = nsgtk_theme_load(GTK_ICON_SIZE_MENU);
-
+
theme[IMAGE_SET_BUTTONS] =
- nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
+ nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR);
for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) {
- if ((i == URL_BAR_ITEM) || (i == THROBBER_ITEM) ||
- (i == WEBSEARCH_ITEM))
+ if ((i == URL_BAR_ITEM) || (i == THROBBER_ITEM) ||
+ (i == WEBSEARCH_ITEM))
continue;
button = nsgtk_scaffolding_button(g, i);
if (button == NULL)
continue;
/* gtk_image_menu_item_set_image accepts NULL image */
- if ((button->main != NULL) &&
- (theme[IMAGE_SET_MAIN_MENU] != NULL)) {
+ if ((button->main != NULL) &&
+ (theme[IMAGE_SET_MAIN_MENU] != NULL)) {
gtk_image_menu_item_set_image(button->main,
- GTK_WIDGET(
- theme[IMAGE_SET_MAIN_MENU]->
- image[i]));
+ GTK_WIDGET(
+ theme[IMAGE_SET_MAIN_MENU]->
+ image[i]));
gtk_widget_show_all(GTK_WIDGET(button->main));
}
- if ((button->rclick != NULL) &&
- (theme[IMAGE_SET_RCLICK_MENU] != NULL)) {
+ if ((button->rclick != NULL) &&
+ (theme[IMAGE_SET_RCLICK_MENU] != NULL)) {
gtk_image_menu_item_set_image(button->rclick,
- GTK_WIDGET(
- theme[IMAGE_SET_RCLICK_MENU]->
- image[i]));
+ GTK_WIDGET(
+ theme[IMAGE_SET_RCLICK_MENU]->
+ image[i]));
gtk_widget_show_all(GTK_WIDGET(button->rclick));
}
- if ((button->popup != NULL) &&
- (theme[IMAGE_SET_POPUP_MENU] != NULL)) {
+ if ((button->popup != NULL) &&
+ (theme[IMAGE_SET_POPUP_MENU] != NULL)) {
gtk_image_menu_item_set_image(button->popup,
- GTK_WIDGET(
- theme[IMAGE_SET_POPUP_MENU]->
- image[i]));
+ GTK_WIDGET(
+ theme[IMAGE_SET_POPUP_MENU]->
+ image[i]));
gtk_widget_show_all(GTK_WIDGET(button->popup));
}
- if ((button->location != -1) && (button->button != NULL) &&
- (theme[IMAGE_SET_BUTTONS] != NULL)) {
+ if ((button->location != -1) && (button->button != NULL) &&
+ (theme[IMAGE_SET_BUTTONS] != NULL)) {
gtk_tool_button_set_icon_widget(
- GTK_TOOL_BUTTON(button->button),
- GTK_WIDGET(
+ GTK_TOOL_BUTTON(button->button),
+ GTK_WIDGET(
theme[IMAGE_SET_BUTTONS]->
image[i]));
gtk_widget_show_all(GTK_WIDGET(button->button));
}
}
-
+
/* set search bar images */
search = nsgtk_scaffolding_search(g);
if ((search != NULL) && (theme[IMAGE_SET_MAIN_MENU] != NULL)) {
/* gtk_tool_button_set_icon_widget accepts NULL image */
if (search->buttons[SEARCH_BACK_BUTTON] != NULL) {
gtk_tool_button_set_icon_widget(
- search->buttons[SEARCH_BACK_BUTTON],
- GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]->
- searchimage[SEARCH_BACK_BUTTON]));
+ search->buttons[SEARCH_BACK_BUTTON],
+ GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]->
+ searchimage[SEARCH_BACK_BUTTON]));
gtk_widget_show_all(GTK_WIDGET(
- search->buttons[SEARCH_BACK_BUTTON]));
+ search->buttons[SEARCH_BACK_BUTTON]));
}
if (search->buttons[SEARCH_FORWARD_BUTTON] != NULL) {
gtk_tool_button_set_icon_widget(
- search->buttons[SEARCH_FORWARD_BUTTON],
- GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]->
- searchimage[SEARCH_FORWARD_BUTTON]));
+ search->buttons[SEARCH_FORWARD_BUTTON],
+ GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]->
+ searchimage[SEARCH_FORWARD_BUTTON]));
gtk_widget_show_all(GTK_WIDGET(
- search->buttons[
- SEARCH_FORWARD_BUTTON]));
+ search->buttons[
+ SEARCH_FORWARD_BUTTON]));
}
if (search->buttons[SEARCH_CLOSE_BUTTON] != NULL) {
gtk_tool_button_set_icon_widget(
- search->buttons[SEARCH_CLOSE_BUTTON],
- GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]->
- searchimage[SEARCH_CLOSE_BUTTON]));
+ search->buttons[SEARCH_CLOSE_BUTTON],
+ GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]->
+ searchimage[SEARCH_CLOSE_BUTTON]));
gtk_widget_show_all(GTK_WIDGET(
- search->buttons[SEARCH_CLOSE_BUTTON]));
- }
- }
- for (i = 0; i < IMAGE_SET_COUNT; i++)
- if (theme[i] != NULL)
+ search->buttons[SEARCH_CLOSE_BUTTON]));
+ }
+ }
+ for (i = 0; i < IMAGE_SET_COUNT; i++) {
+ if (theme[i] != NULL) {
free(theme[i]);
+ }
+ }
+}
+
+/**
+ * returns default image for buttons / menu items from gtk stock items
+ * \param tbbutton button reference
+ */
+
+static GtkImage *
+nsgtk_theme_image_default(nsgtk_toolbar_button tbbutton, GtkIconSize iconsize)
+{
+ GtkImage *image; /* The GTK image to return */
+ char *imagefile;
+ size_t len;
+
+ switch(tbbutton) {
+
+#define BUTTON_IMAGE(p, q) \
+ case p##_BUTTON: \
+ image = GTK_IMAGE(gtk_image_new_from_stock(#q, iconsize)); \
+ break
+
+ BUTTON_IMAGE(BACK, gtk-go-back);
+ BUTTON_IMAGE(FORWARD, gtk-go-forward);
+ BUTTON_IMAGE(STOP, gtk-stop);
+ BUTTON_IMAGE(RELOAD, gtk-refresh);
+ BUTTON_IMAGE(HOME, gtk-home);
+ BUTTON_IMAGE(NEWWINDOW, gtk-new);
+ BUTTON_IMAGE(NEWTAB, gtk-new);
+ BUTTON_IMAGE(OPENFILE, gtk-open);
+ BUTTON_IMAGE(CLOSETAB, gtk-close);
+ BUTTON_IMAGE(CLOSEWINDOW, gtk-close);
+ BUTTON_IMAGE(SAVEPAGE, gtk-save-as);
+ BUTTON_IMAGE(PRINTPREVIEW, gtk-print-preview);
+ BUTTON_IMAGE(PRINT, gtk-print);
+ BUTTON_IMAGE(QUIT, gtk-quit);
+ BUTTON_IMAGE(CUT, gtk-cut);
+ BUTTON_IMAGE(COPY, gtk-copy);
+ BUTTON_IMAGE(PASTE, gtk-paste);
+ BUTTON_IMAGE(DELETE, gtk-delete);
+ BUTTON_IMAGE(SELECTALL, gtk-select-all);
+ BUTTON_IMAGE(FIND, gtk-find);
+ BUTTON_IMAGE(PREFERENCES, gtk-preferences);
+ BUTTON_IMAGE(ZOOMPLUS, gtk-zoom-in);
+ BUTTON_IMAGE(ZOOMMINUS, gtk-zoom-out);
+ BUTTON_IMAGE(ZOOMNORMAL, gtk-zoom-100);
+ BUTTON_IMAGE(FULLSCREEN, gtk-fullscreen);
+ BUTTON_IMAGE(VIEWSOURCE, gtk-index);
+ BUTTON_IMAGE(CONTENTS, gtk-help);
+ BUTTON_IMAGE(ABOUT, gtk-about);
+#undef BUTTON_IMAGE
+
+ case HISTORY_BUTTON:
+ len = SLEN("arrow_down_8x32.png") +strlen(res_dir_location) + 1;
+ imagefile = malloc(len);
+ if (imagefile == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
+ }
+ snprintf(imagefile, len, "%sarrow_down_8x32.png",
+ res_dir_location);
+ image = GTK_IMAGE(gtk_image_new_from_file(imagefile));
+ free(imagefile);
+ break;
+
+ default:
+ len = SLEN("themes/Alpha.png") + strlen(res_dir_location) + 1;
+ imagefile = malloc(len);
+ if (imagefile == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
+ }
+ snprintf(imagefile, len, "%sthemes/Alpha.png",res_dir_location);
+ image = GTK_IMAGE(gtk_image_new_from_file(imagefile));
+ free(imagefile);
+ break;
+
+ }
+ return image;
+
+}
+
+/**
+ * returns default image for search buttons / menu items from gtk stock items
+ * \param tbbutton button reference
+ */
+
+static GtkImage *
+nsgtk_theme_searchimage_default(nsgtk_search_buttons tbbutton,
+ GtkIconSize iconsize)
+{
+ char *imagefile;
+ GtkImage *image;
+ switch(tbbutton) {
+
+ case (SEARCH_BACK_BUTTON):
+ return GTK_IMAGE(gtk_image_new_from_stock("gtk-go-back", iconsize));
+ case (SEARCH_FORWARD_BUTTON):
+ return GTK_IMAGE(gtk_image_new_from_stock("gtk-go-forward",
+ iconsize));
+ case (SEARCH_CLOSE_BUTTON):
+ return GTK_IMAGE(gtk_image_new_from_stock("gtk-close", iconsize));
+ default: {
+ size_t len = SLEN("themes/Alpha.png") +
+ strlen(res_dir_location) + 1;
+ imagefile = malloc(len);
+ if (imagefile == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
+ }
+ snprintf(imagefile, len, "%sthemes/Alpha.png",
+ res_dir_location);
+ image = GTK_IMAGE(
+ gtk_image_new_from_file(imagefile));
+ free(imagefile);
+ return image;
+ }
+ }
+}
+
+/**
+ * loads the set of default images for the toolbar / menus
+ */
+
+static struct nsgtk_theme *nsgtk_theme_default(GtkIconSize iconsize)
+{
+ struct nsgtk_theme *theme = malloc(sizeof(struct nsgtk_theme));
+ int btnloop;
+
+ if (theme == NULL) {
+ warn_user("NoMemory", 0);
+ return NULL;
+ }
+
+ for (btnloop = BACK_BUTTON; btnloop < PLACEHOLDER_BUTTON ; btnloop++) {
+ theme->image[btnloop] = nsgtk_theme_image_default(btnloop, iconsize);
+ }
+
+ for (btnloop = SEARCH_BACK_BUTTON; btnloop < SEARCH_BUTTONS_COUNT; btnloop++) {
+ theme->searchimage[btnloop] = nsgtk_theme_searchimage_default(btnloop, iconsize);
+ }
+ return theme;
}
/**
@@ -380,101 +510,104 @@
struct nsgtk_theme *nsgtk_theme_load(GtkIconSize s)
{
- if (current_theme_name == NULL)
+ if (current_theme_name == NULL) {
return nsgtk_theme_default(s);
+ }
struct nsgtk_theme *theme = malloc(sizeof(struct nsgtk_theme));
- if (theme == NULL)
+ if (theme == NULL) {
return theme;
-
- if ((theme_cache_menu == NULL) || (theme_cache_toolbar == NULL))
+ }
+
+ if ((theme_cache_menu == NULL) || (theme_cache_toolbar == NULL)) {
nsgtk_theme_prepare();
-
+ }
+
/* load theme from cache */
struct nsgtk_theme_cache *cachetheme = (s == GTK_ICON_SIZE_MENU) ?
- theme_cache_menu : theme_cache_toolbar;
+ theme_cache_menu : theme_cache_toolbar;
if (cachetheme == NULL) {
free(theme);
return NULL;
}
-#define SET_BUTTON_IMAGE(p, q, r)\
- if (p->image[q##_BUTTON] != NULL)\
- r->image[q##_BUTTON] = GTK_IMAGE(gtk_image_new_from_pixbuf(\
- p->image[q##_BUTTON]));\
- else\
- r->image[q##_BUTTON] = nsgtk_theme_image_default(\
- q##_BUTTON, s);
-
- SET_BUTTON_IMAGE(cachetheme, BACK, theme)
- SET_BUTTON_IMAGE(cachetheme, HISTORY, theme)
- SET_BUTTON_IMAGE(cachetheme, FORWARD, theme)
- SET_BUTTON_IMAGE(cachetheme, STOP, theme)
- SET_BUTTON_IMAGE(cachetheme, RELOAD, theme)
- SET_BUTTON_IMAGE(cachetheme, HOME, theme)
- SET_BUTTON_IMAGE(cachetheme, NEWWINDOW, theme)
- SET_BUTTON_IMAGE(cachetheme, NEWTAB, theme)
- SET_BUTTON_IMAGE(cachetheme, OPENFILE, theme)
- SET_BUTTON_IMAGE(cachetheme, CLOSETAB, theme)
- SET_BUTTON_IMAGE(cachetheme, CLOSEWINDOW, theme)
- SET_BUTTON_IMAGE(cachetheme, SAVEPAGE, theme)
- SET_BUTTON_IMAGE(cachetheme, PRINTPREVIEW, theme)
- SET_BUTTON_IMAGE(cachetheme, PRINT, theme)
- SET_BUTTON_IMAGE(cachetheme, QUIT, theme)
- SET_BUTTON_IMAGE(cachetheme, CUT, theme)
- SET_BUTTON_IMAGE(cachetheme, COPY, theme)
- SET_BUTTON_IMAGE(cachetheme, PASTE, theme)
- SET_BUTTON_IMAGE(cachetheme, DELETE, theme)
- SET_BUTTON_IMAGE(cachetheme, SELECTALL, theme)
- SET_BUTTON_IMAGE(cachetheme, PREFERENCES, theme)
- SET_BUTTON_IMAGE(cachetheme, ZOOMPLUS, theme)
- SET_BUTTON_IMAGE(cachetheme, ZOOMMINUS, theme)
- SET_BUTTON_IMAGE(cachetheme, ZOOMNORMAL, theme)
- SET_BUTTON_IMAGE(cachetheme, FULLSCREEN, theme)
- SET_BUTTON_IMAGE(cachetheme, VIEWSOURCE, theme)
- SET_BUTTON_IMAGE(cachetheme, CONTENTS, theme)
- SET_BUTTON_IMAGE(cachetheme, ABOUT, theme)
- SET_BUTTON_IMAGE(cachetheme, PDF, theme)
- SET_BUTTON_IMAGE(cachetheme, PLAINTEXT, theme)
- SET_BUTTON_IMAGE(cachetheme, DRAWFILE, theme)
- SET_BUTTON_IMAGE(cachetheme, POSTSCRIPT, theme)
- SET_BUTTON_IMAGE(cachetheme, FIND, theme)
- SET_BUTTON_IMAGE(cachetheme, DOWNLOADS, theme)
- SET_BUTTON_IMAGE(cachetheme, SAVEWINDOWSIZE, theme)
- SET_BUTTON_IMAGE(cachetheme, TOGGLEDEBUGGING, theme)
- SET_BUTTON_IMAGE(cachetheme, SAVEBOXTREE, theme)
- SET_BUTTON_IMAGE(cachetheme, SAVEDOMTREE, theme)
- SET_BUTTON_IMAGE(cachetheme, LOCALHISTORY, theme)
- SET_BUTTON_IMAGE(cachetheme, GLOBALHISTORY, theme)
- SET_BUTTON_IMAGE(cachetheme, ADDBOOKMARKS, theme)
- SET_BUTTON_IMAGE(cachetheme, SHOWBOOKMARKS, theme)
- SET_BUTTON_IMAGE(cachetheme, SHOWCOOKIES, theme)
- SET_BUTTON_IMAGE(cachetheme, OPENLOCATION, theme)
- SET_BUTTON_IMAGE(cachetheme, NEXTTAB, theme)
- SET_BUTTON_IMAGE(cachetheme, PREVTAB, theme)
- SET_BUTTON_IMAGE(cachetheme, GUIDE, theme)
- SET_BUTTON_IMAGE(cachetheme, INFO, theme)
-#undef SET_BUTTON_IMAGE
-#define SET_BUTTON_IMAGE(p, q, qq, r)\
- if (qq->searchimage[SEARCH_##p##_BUTTON] != NULL)\
- r->searchimage[SEARCH_##p##_BUTTON] =\
- GTK_IMAGE(gtk_image_new_from_pixbuf(\
- qq->searchimage[\
- SEARCH_##p##_BUTTON]));\
- else if (qq->image[q##_BUTTON] != NULL)\
- r->searchimage[SEARCH_##p##_BUTTON] =\
- GTK_IMAGE(gtk_image_new_from_pixbuf(\
- qq->image[q##_BUTTON]));\
- else\
- r->searchimage[SEARCH_##p##_BUTTON] =\
- nsgtk_theme_image_default(\
- PLACEHOLDER_BUTTON + SEARCH_##p##_BUTTON, s);
-
- SET_BUTTON_IMAGE(BACK, BACK, cachetheme, theme)
- SET_BUTTON_IMAGE(FORWARD, FORWARD, cachetheme, theme)
- SET_BUTTON_IMAGE(CLOSE, CLOSEWINDOW, cachetheme, theme)
+#define SET_BUTTON_IMAGE(p, q, r) \
+ if (p->image[q##_BUTTON] != NULL) \
+ r->image[q##_BUTTON] = GTK_IMAGE(gtk_image_new_from_pixbuf( \
+ p->image[q##_BUTTON])); \
+ else \
+ r->image[q##_BUTTON] = nsgtk_theme_image_default(q##_BUTTON, s)
+
+ SET_BUTTON_IMAGE(cachetheme, BACK, theme);
+ SET_BUTTON_IMAGE(cachetheme, HISTORY, theme);
+ SET_BUTTON_IMAGE(cachetheme, FORWARD, theme);
+ SET_BUTTON_IMAGE(cachetheme, STOP, theme);
+ SET_BUTTON_IMAGE(cachetheme, RELOAD, theme);
+ SET_BUTTON_IMAGE(cachetheme, HOME, theme);
+ SET_BUTTON_IMAGE(cachetheme, NEWWINDOW, theme);
+ SET_BUTTON_IMAGE(cachetheme, NEWTAB, theme);
+ SET_BUTTON_IMAGE(cachetheme, OPENFILE, theme);
+ SET_BUTTON_IMAGE(cachetheme, CLOSETAB, theme);
+ SET_BUTTON_IMAGE(cachetheme, CLOSEWINDOW, theme);
+ SET_BUTTON_IMAGE(cachetheme, SAVEPAGE, theme);
+ SET_BUTTON_IMAGE(cachetheme, PRINTPREVIEW, theme);
+ SET_BUTTON_IMAGE(cachetheme, PRINT, theme);
+ SET_BUTTON_IMAGE(cachetheme, QUIT, theme);
+ SET_BUTTON_IMAGE(cachetheme, CUT, theme);
+ SET_BUTTON_IMAGE(cachetheme, COPY, theme);
+ SET_BUTTON_IMAGE(cachetheme, PASTE, theme);
+ SET_BUTTON_IMAGE(cachetheme, DELETE, theme);
+ SET_BUTTON_IMAGE(cachetheme, SELECTALL, theme);
+ SET_BUTTON_IMAGE(cachetheme, PREFERENCES, theme);
+ SET_BUTTON_IMAGE(cachetheme, ZOOMPLUS, theme);
+ SET_BUTTON_IMAGE(cachetheme, ZOOMMINUS, theme);
+ SET_BUTTON_IMAGE(cachetheme, ZOOMNORMAL, theme);
+ SET_BUTTON_IMAGE(cachetheme, FULLSCREEN, theme);
+ SET_BUTTON_IMAGE(cachetheme, VIEWSOURCE, theme);
+ SET_BUTTON_IMAGE(cachetheme, CONTENTS, theme);
+ SET_BUTTON_IMAGE(cachetheme, ABOUT, theme);
+ SET_BUTTON_IMAGE(cachetheme, PDF, theme);
+ SET_BUTTON_IMAGE(cachetheme, PLAINTEXT, theme);
+ SET_BUTTON_IMAGE(cachetheme, DRAWFILE, theme);
+ SET_BUTTON_IMAGE(cachetheme, POSTSCRIPT, theme);
+ SET_BUTTON_IMAGE(cachetheme, FIND, theme);
+ SET_BUTTON_IMAGE(cachetheme, DOWNLOADS, theme);
+ SET_BUTTON_IMAGE(cachetheme, SAVEWINDOWSIZE, theme);
+ SET_BUTTON_IMAGE(cachetheme, TOGGLEDEBUGGING, theme);
+ SET_BUTTON_IMAGE(cachetheme, SAVEBOXTREE, theme);
+ SET_BUTTON_IMAGE(cachetheme, SAVEDOMTREE, theme);
+ SET_BUTTON_IMAGE(cachetheme, LOCALHISTORY, theme);
+ SET_BUTTON_IMAGE(cachetheme, GLOBALHISTORY, theme);
+ SET_BUTTON_IMAGE(cachetheme, ADDBOOKMARKS, theme);
+ SET_BUTTON_IMAGE(cachetheme, SHOWBOOKMARKS, theme);
+ SET_BUTTON_IMAGE(cachetheme, SHOWCOOKIES, theme);
+ SET_BUTTON_IMAGE(cachetheme, OPENLOCATION, theme);
+ SET_BUTTON_IMAGE(cachetheme, NEXTTAB, theme);
+ SET_BUTTON_IMAGE(cachetheme, PREVTAB, theme);
+ SET_BUTTON_IMAGE(cachetheme, GUIDE, theme);
+ SET_BUTTON_IMAGE(cachetheme, INFO, theme);
#undef SET_BUTTON_IMAGE
- return theme;
+
+#define SET_BUTTON_IMAGE(p, q, qq, r) \
+ if (qq->searchimage[SEARCH_##p##_BUTTON] != NULL) \
+ r->searchimage[SEARCH_##p##_BUTTON] = \
+ GTK_IMAGE(gtk_image_new_from_pixbuf( \
+ qq->searchimage[ \
+ SEARCH_##p##_BUTTON])); \
+ else if (qq->image[q##_BUTTON] != NULL) \
+ r->searchimage[SEARCH_##p##_BUTTON] = \
+ GTK_IMAGE(gtk_image_new_from_pixbuf( \
+ qq->image[q##_BUTTON])); \
+ else \
+ r->searchimage[SEARCH_##p##_BUTTON] = \
+ nsgtk_theme_searchimage_default( \
+ SEARCH_##p##_BUTTON, s)
+
+ SET_BUTTON_IMAGE(BACK, BACK, cachetheme, theme);
+ SET_BUTTON_IMAGE(FORWARD, FORWARD, cachetheme, theme);
+ SET_BUTTON_IMAGE(CLOSE, CLOSEWINDOW, cachetheme, theme);
+#undef SET_BUTTON_IMAGE
+ return theme;
}
/**
@@ -483,33 +616,40 @@
* \param filename the image file name
* \param path the path to the theme folder
*/
-void nsgtk_theme_cache_image(nsgtk_toolbar_button i, const char *filename,
+static void
+nsgtk_theme_cache_image(nsgtk_toolbar_button i, const char *filename,
const char *path)
{
char fullpath[strlen(filename) + strlen(path) + 1];
sprintf(fullpath, "%s%s", path, filename);
if (theme_cache_toolbar != NULL)
theme_cache_toolbar->image[i] =
- gdk_pixbuf_new_from_file_at_size(fullpath,
- 24, 24, NULL);
- if (theme_cache_menu != NULL)
+ gdk_pixbuf_new_from_file_at_size(fullpath,
+ 24, 24, NULL);
+ if (theme_cache_menu != NULL) {
theme_cache_menu->image[i] = gdk_pixbuf_new_from_file_at_size(
- fullpath, 16, 16, NULL);
-}
-
-void nsgtk_theme_cache_searchimage(nsgtk_search_buttons i,
+ fullpath, 16, 16, NULL);
+ }
+}
+
+static void
+nsgtk_theme_cache_searchimage(nsgtk_search_buttons i,
const char *filename, const char *path)
{
char fullpath[strlen(filename) + strlen(path) + 1];
+
sprintf(fullpath, "%s%s", path, filename);
- if (theme_cache_toolbar != NULL)
+ if (theme_cache_toolbar != NULL) {
theme_cache_toolbar->searchimage[i] =
- gdk_pixbuf_new_from_file_at_size(fullpath,
- 24, 24, NULL);
- if (theme_cache_menu != NULL)
+ gdk_pixbuf_new_from_file_at_size(fullpath,
+ 24, 24, NULL);
+ }
+
+ if (theme_cache_menu != NULL) {
theme_cache_menu->searchimage[i] =
- gdk_pixbuf_new_from_file_at_size(fullpath,
- 16, 16, NULL);
+ gdk_pixbuf_new_from_file_at_size(fullpath,
+ 16, 16, NULL);
+ }
}
/**
@@ -524,11 +664,11 @@
if (theme_cache_toolbar == NULL)
theme_cache_toolbar = malloc(sizeof(struct nsgtk_theme_cache));
size_t len = strlen(res_dir_location) + SLEN("/themes/") +
- strlen(current_theme_name) + 1;
+ strlen(current_theme_name) + 1;
char path[len];
- snprintf(path, len, "%sthemes/%s/", res_dir_location,
- current_theme_name);
-#define CACHE_IMAGE(p, q, r)\
+ snprintf(path, len, "%sthemes/%s/", res_dir_location,
+ current_theme_name);
+#define CACHE_IMAGE(p, q, r) \
nsgtk_theme_cache_image(p##_BUTTON, #q ".png", r)
CACHE_IMAGE(BACK, back, path);
@@ -580,176 +720,38 @@
CACHE_IMAGE(GUIDE, helpguide, path);
CACHE_IMAGE(INFO, helpinfo, path);
#undef CACHE_IMAGE
-#define CACHE_IMAGE(p, q, r)\
+#define CACHE_IMAGE(p, q, r) \
nsgtk_theme_cache_searchimage(p, #q ".png", r);
-
+
CACHE_IMAGE(SEARCH_BACK_BUTTON, searchback, path);
CACHE_IMAGE(SEARCH_FORWARD_BUTTON, searchforward, path);
CACHE_IMAGE(SEARCH_CLOSE_BUTTON, searchclose, path);
#undef CACHE_IMAGE
}
-/**
- * returns default image for buttons / menu items from gtk stock items
- * \param i button reference
- */
-
-GtkImage *nsgtk_theme_image_default(nsgtk_toolbar_button i, GtkIconSize s)
-{
- char *imagefile;
- GtkImage *image;
- switch(i) {
-#define BUTTON_IMAGE(p, q)\
- case p##_BUTTON:\
- return GTK_IMAGE(gtk_image_new_from_stock(#q, s))
-
- BUTTON_IMAGE(BACK, gtk-go-back);
- case HISTORY_BUTTON: {
- size_t len = SLEN("arrow_down_8x32.png") +
- strlen(res_dir_location) + 1;
- imagefile = malloc(len);
- if (imagefile == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
- }
- snprintf(imagefile, len, "%sarrow_down_8x32.png",
- res_dir_location);
- image = GTK_IMAGE(gtk_image_new_from_file(imagefile));
- free(imagefile);
- return image;
- }
- BUTTON_IMAGE(FORWARD, gtk-go-forward);
- BUTTON_IMAGE(STOP, gtk-stop);
- BUTTON_IMAGE(RELOAD, gtk-refresh);
- BUTTON_IMAGE(HOME, gtk-home);
- BUTTON_IMAGE(NEWWINDOW, gtk-new);
- BUTTON_IMAGE(NEWTAB, gtk-new);
- BUTTON_IMAGE(OPENFILE, gtk-open);
- BUTTON_IMAGE(CLOSETAB, gtk-close);
- BUTTON_IMAGE(CLOSEWINDOW, gtk-close);
- BUTTON_IMAGE(SAVEPAGE, gtk-save-as);
- BUTTON_IMAGE(PRINTPREVIEW, gtk-print-preview);
- BUTTON_IMAGE(PRINT, gtk-print);
- BUTTON_IMAGE(QUIT, gtk-quit);
- BUTTON_IMAGE(CUT, gtk-cut);
- BUTTON_IMAGE(COPY, gtk-copy);
- BUTTON_IMAGE(PASTE, gtk-paste);
- BUTTON_IMAGE(DELETE, gtk-delete);
- BUTTON_IMAGE(SELECTALL, gtk-select-all);
- BUTTON_IMAGE(FIND, gtk-find);
- BUTTON_IMAGE(PREFERENCES, gtk-preferences);
- BUTTON_IMAGE(ZOOMPLUS, gtk-zoom-in);
- BUTTON_IMAGE(ZOOMMINUS, gtk-zoom-out);
- BUTTON_IMAGE(ZOOMNORMAL, gtk-zoom-100);
- BUTTON_IMAGE(FULLSCREEN, gtk-fullscreen);
- BUTTON_IMAGE(VIEWSOURCE, gtk-index);
- BUTTON_IMAGE(CONTENTS, gtk-help);
- BUTTON_IMAGE(ABOUT, gtk-about);
-#undef BUTTON_IMAGE
- case (PLACEHOLDER_BUTTON + SEARCH_BACK_BUTTON):
- return GTK_IMAGE(gtk_image_new_from_stock("gtk-go-back", s));
- case (PLACEHOLDER_BUTTON + SEARCH_FORWARD_BUTTON):
- return GTK_IMAGE(gtk_image_new_from_stock("gtk-go-forward",
- s));
- case (PLACEHOLDER_BUTTON + SEARCH_CLOSE_BUTTON):
- return GTK_IMAGE(gtk_image_new_from_stock("gtk-close", s));
- default: {
- size_t len = SLEN("themes/Alpha.png") +
- strlen(res_dir_location) + 1;
- imagefile = malloc(len);
- if (imagefile == NULL) {
- warn_user(messages_get("NoMemory"), 0);
- return NULL;
- }
- snprintf(imagefile, len, "%sthemes/Alpha.png",
- res_dir_location);
- image = GTK_IMAGE(
- gtk_image_new_from_file(imagefile));
- free(imagefile);
- return image;
- }
- }
-}
#ifdef WITH_THEME_INSTALL
-/**
- * when CONTENT_THEME needs handling call this function
- */
-void theme_install_start(hlcache_handle *c)
-{
- assert(c);
- assert(content_get_type(c) == CONTENT_THEME);
-
- /* stop theme sitting in memory cache */
- content_invalidate_reuse_data(c);
-
- hlcache_handle_replace_callback(c, theme_install_callback, NULL);
-}
-
-
-/**
- * Callback for fetchcache() for theme install fetches.
- */
-
-nserror theme_install_callback(hlcache_handle *c,
- const hlcache_event *event, void *pw)
-{
- switch (event->type) {
- case CONTENT_MSG_READY:
- break;
-
- case CONTENT_MSG_DONE:
- {
- const char *source_data;
- unsigned long source_size;
-
- source_data = content_get_source_data(c, &source_size);
-
- if (!theme_install_read(source_data, source_size))
- warn_user("ThemeInvalid", 0);
-
- hlcache_handle_release(c);
- }
- break;
-
- case CONTENT_MSG_ERROR:
- warn_user(event->data.error, 0);
- break;
-
- case CONTENT_MSG_STATUS:
- break;
-
- case CONTENT_MSG_LOADING:
- case CONTENT_MSG_REFORMAT:
- case CONTENT_MSG_REDRAW:
- default:
- assert(0);
- break;
- }
-
- return NSERROR_OK;
-}
/**
* handler saves theme data content as a local theme
*/
-bool theme_install_read(const char *data, unsigned long len)
+static bool theme_install_read(const char *data, unsigned long len)
{
char *filename, *newfilename;
size_t namelen;
int handle = g_file_open_tmp("nsgtkthemeXXXXXX", &filename, NULL);
if (handle == -1) {
warn_user(messages_get("gtkFileError"),
- "temporary theme file");
+ "temporary theme file");
return false;
}
ssize_t written = write(handle, data, len);
close(handle);
if ((unsigned)written != len)
return false;
-
+
/* get name of theme; set as dirname */
namelen = SLEN("themes/") + strlen(res_dir_location) + 1;
char dirname[namelen];
@@ -762,25 +764,68 @@
return false;
nsgtk_theme_add(newfilename);
free(newfilename);
-
+
return true;
}
+
+/**
+ * Callback for fetchcache() for theme install fetches.
+ */
+
+static nserror
+theme_install_callback(hlcache_handle *c,
+ const hlcache_event *event, void *pw)
+{
+ switch (event->type) {
+ case CONTENT_MSG_READY:
+ break;
+
+ case CONTENT_MSG_DONE:
+ {
+ const char *source_data;
+ unsigned long source_size;
+
+ source_data = content_get_source_data(c, &source_size);
+
+ if (!theme_install_read(source_data, source_size))
+ warn_user("ThemeInvalid", 0);
+
+ hlcache_handle_release(c);
+ }
+ break;
+
+ case CONTENT_MSG_ERROR:
+ warn_user(event->data.error, 0);
+ break;
+
+ case CONTENT_MSG_STATUS:
+ break;
+
+ case CONTENT_MSG_LOADING:
+ case CONTENT_MSG_REFORMAT:
+ case CONTENT_MSG_REDRAW:
+ default:
+ assert(0);
+ break;
+ }
+
+ return NSERROR_OK;
+}
+
+/**
+ * when CONTENT_THEME needs handling call this function
+ */
+void theme_install_start(hlcache_handle *c)
+{
+ assert(c);
+ assert(content_get_type(c) == CONTENT_THEME);
+
+ /* stop theme sitting in memory cache */
+ content_invalidate_reuse_data(c);
+
+ hlcache_handle_replace_callback(c, theme_install_callback, NULL);
+}
+
+
+
#endif
-
-/**
- * loads the set of default images for the toolbar / menus
- */
-
-struct nsgtk_theme *nsgtk_theme_default(GtkIconSize s)
-{
- struct nsgtk_theme *theme = malloc(sizeof(struct nsgtk_theme));
- if (theme == NULL) {
- warn_user("NoMemory", 0);
- return NULL;
- }
- for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON +
- SEARCH_BUTTONS_COUNT; i++)
- theme->image[i] = nsgtk_theme_image_default(i, s);
- return theme;
-}
-
11 years, 5 months
r12639 tlsa - in /trunk/netsurfweb/welcome: index.de index.en index.it index.ja
by netsurf@semichrome.net
Author: tlsa
Date: Sat Aug 13 08:43:24 2011
New Revision: 12639
URL: http://source.netsurf-browser.org?rev=12639&view=rev
Log:
Revert to normal google search.
Modified:
trunk/netsurfweb/welcome/index.de
trunk/netsurfweb/welcome/index.en
trunk/netsurfweb/welcome/index.it
trunk/netsurfweb/welcome/index.ja
Modified: trunk/netsurfweb/welcome/index.de
URL: http://source.netsurf-browser.org/trunk/netsurfweb/welcome/index.de?rev=1...
==============================================================================
--- trunk/netsurfweb/welcome/index.de (original)
+++ trunk/netsurfweb/welcome/index.de Sat Aug 13 08:43:24 2011
@@ -22,12 +22,10 @@
<p class="intro">NetSurf ist ein kleiner, schneller Opensource Webbrowser. Wir sind ständig daran interessiert, unseren Browser zu verbessern. Bitte kontaktieren Sie uns, wenn Sie irgend welche Probleme bemerken.<br>
Danke, dass Sie sich für NetSurf entschieden haben!</p>
-<form method="get" action="http://www.google.de/cse" id="cse-search-box">
+<form method="get" action="http://www.google.de/search">
<div class="websearch">
-<input type="hidden" name="cx" value="!partner-pub-2827028264017539:8068601809" />
-<input type="hidden" name="ie" value="UTF-8" />
-<input type="text" name="q" size="42" maxlength="255" />
-<input type="submit" name="btnG" value="Google-Suche" />
+<input type="text" name="q" size="42" maxlength="255">
+<input type="submit" value="Google-Suche" name="btnG">
</div>
</form>
Modified: trunk/netsurfweb/welcome/index.en
URL: http://source.netsurf-browser.org/trunk/netsurfweb/welcome/index.en?rev=1...
==============================================================================
--- trunk/netsurfweb/welcome/index.en (original)
+++ trunk/netsurfweb/welcome/index.en Sat Aug 13 08:43:24 2011
@@ -21,12 +21,10 @@
<p class="intro">NetSurf is a small, fast open source web browser. We are always keen to improve our browser, so get in touch if you run into any problems. Thanks for choosing NetSurf!</p>
-<form method="get" action="http://www.google.co.uk/cse" id="cse-search-box">
+<form method="get" action="http://www.google.co.uk/search">
<div class="websearch">
-<input type="hidden" name="cx" value="!partner-pub-2827028264017539:8068601809" />
-<input type="hidden" name="ie" value="UTF-8" />
-<input type="text" name="q" size="42" maxlength="255" />
-<input type="submit" name="btnG" value="Google Search" />
+<input type="text" name="q" size="42" maxlength="255">
+<input type="submit" value="Google Search" name="btnG">
</div>
</form>
@@ -64,4 +62,4 @@
</div>
</body>
-</html>
+</html>
Modified: trunk/netsurfweb/welcome/index.it
URL: http://source.netsurf-browser.org/trunk/netsurfweb/welcome/index.it?rev=1...
==============================================================================
--- trunk/netsurfweb/welcome/index.it (original)
+++ trunk/netsurfweb/welcome/index.it Sat Aug 13 08:43:24 2011
@@ -21,12 +21,10 @@
<p class="intro">NetSurf è la nostra idea di browser, per questo abbiamo scelto di renderlo piccolo e veloce e stiamo lavorando per renderlo sempre migliore, se hai qualche suggerimento o semplicemente hai bisogno di aiuto contattaci! Grazie per aver scelto NetSurf!</p>
-<form method="get" action="http://www.google.it/cse" id="cse-search-box">
+<form method="get" action="http://www.google.it/search">
<div class="websearch">
-<input type="hidden" name="cx" value="!partner-pub-2827028264017539:8068601809" />
-<input type="hidden" name="ie" value="UTF-8" />
-<input type="text" name="q" size="42" maxlength="255" />
-<input type="submit" name="btnG" value="Ricerca Google" />
+<input type="text" name="q" size="42" maxlength="255">
+<input type="submit" value="Ricerca Google" name="btnG">
</div>
</form>
Modified: trunk/netsurfweb/welcome/index.ja
URL: http://source.netsurf-browser.org/trunk/netsurfweb/welcome/index.ja?rev=1...
==============================================================================
--- trunk/netsurfweb/welcome/index.ja (original)
+++ trunk/netsurfweb/welcome/index.ja Sat Aug 13 08:43:24 2011
@@ -22,12 +22,10 @@
<p class="intro">NetSurfã¯å°ããã¦éããªã¼ãã³ã½ã¼ã¹ã®ã¦ã§ããã©ã¦ã¶ã§ããç§ãã¡ã¯ãã¤ããã®ãã©ã¦ã¶ãæ¹è¯ããæ°æºã
ã§ããããã©ããªåé¡ã§ã声ãããã¦ãã ãããNetSurfãé¸ãã§ããã¦ãããã¨ãï¼</p>
-<form method="get" action="http://www.google.co.jp/cse" id="cse-search-box">
+<form method="get" action="http://www.google.co.jp/search">
<div class="websearch">
-<input type="hidden" name="cx" value="!partner-pub-2827028264017539:8068601809" />
-<input type="hidden" name="ie" value="UTF-8" />
-<input type="text" name="q" size="42" maxlength="255" />
-<input type="submit" name="btnG" value="Googleæ¤ç´¢" />
+<input type="text" name="q" size="42" maxlength="255">
+<input type="submit" value="Googleæ¤ç´¢" name="btnG">
</div>
</form>
11 years, 5 months
r12638 mono - /trunk/netsurf/atari/gui.c
by netsurf@semichrome.net
Author: mono
Date: Fri Aug 5 06:02:33 2011
New Revision: 12638
URL: http://source.netsurf-browser.org?rev=12638&view=rev
Log:
Convert window title to local encoding.
Modified:
trunk/netsurf/atari/gui.c
Modified: trunk/netsurf/atari/gui.c
URL: http://source.netsurf-browser.org/trunk/netsurf/atari/gui.c?rev=12638&r1=...
==============================================================================
--- trunk/netsurf/atari/gui.c (original)
+++ trunk/netsurf/atari/gui.c Fri Aug 5 06:02:33 2011
@@ -314,10 +314,19 @@
void gui_window_set_title(struct gui_window *gw, const char *title)
{
+ int l;
+ char * conv;
+
if (gw == NULL)
return;
if( gw->root ){
- strncpy(gw->root->title, title, atari_sysinfo.aes_max_win_title_len);
+ l = strlen(title);
+ if( utf8_to_local_encoding(title, l, &conv) == UTF8_CONVERT_OK ){
+ strncpy(gw->root->title, conv, atari_sysinfo.aes_max_win_title_len);
+ free( conv );
+ } else {
+ strncpy(gw->root->title, title, atari_sysinfo.aes_max_win_title_len);
+ }
gw->root->title[atari_sysinfo.aes_max_win_title_len] = 0;
WindSetStr( gw->root->handle, WF_NAME, gw->root->title );
}
11 years, 6 months
r12637 mono - /trunk/netsurf/atari/browser_win.c
by netsurf@semichrome.net
Author: mono
Date: Fri Aug 5 05:34:06 2011
New Revision: 12637
URL: http://source.netsurf-browser.org?rev=12637&view=rev
Log:
Added missing position update when window got moved.
Modified:
trunk/netsurf/atari/browser_win.c
Modified: trunk/netsurf/atari/browser_win.c
URL: http://source.netsurf-browser.org/trunk/netsurf/atari/browser_win.c?rev=1...
==============================================================================
--- trunk/netsurf/atari/browser_win.c (original)
+++ trunk/netsurf/atari/browser_win.c Fri Aug 5 05:34:06 2011
@@ -379,7 +379,7 @@
void window_open( struct gui_window * gw)
{
- LGRECT br;
+ LGRECT br;
GRECT dim;
WindOpen(gw->root->handle, 20, 20, app.w/2, app.h/2 );
WindSetStr( gw->root->handle, WF_NAME, (char *)"" );
@@ -387,7 +387,7 @@
long lfbuff[8] = { CM_GETFOCUS };
mt_CompEvntExec( gl_appvar, gw->browser->comp, lfbuff );
/* recompute the nested component sizes and positions: */
- browser_update_rects( gw );
+ browser_update_rects( gw );
mt_WindGetGrect( &app, gw->root->handle, WF_CURRXYWH, (GRECT*)&gw->root->loc);
browser_get_rect( gw, BR_CONTENT, &br );
plotter->move( plotter, br.g_x, br.g_y );
@@ -709,11 +709,9 @@
void __CDECL evnt_window_resize( WINDOW *win, short buff[8], void * data )
{
- //short mx,my, mb, ks;
short wx, wy, wh, ww, nw, nh;
short r;
- // graf_mkstate( &mx, &my, &mb, &ks );
wind_get( win->handle, WF_CURRXYWH, &wx, &wy, &ww, &wh );
r = graf_rubberbox(wx, wy, 20, 20, &nw, &nh);
if( nw < 40 && nw < 40 )
@@ -745,7 +743,7 @@
if(gw->root->loc.g_w != w || gw->root->loc.g_h != h ){
/* report resize to component interface: */
- browser_update_rects( gw );
+ browser_update_rects( gw );
mt_WindGetGrect( &app, gw->root->handle, WF_CURRXYWH, (GRECT*)&gw->root->loc);
browser_get_rect( gw, BR_CONTENT, &rect );
if( gw->browser->bw->current_content != NULL )
@@ -756,6 +754,7 @@
} else {
if(gw->root->loc.g_x != x || gw->root->loc.g_y != y ){
mt_WindGetGrect( &app, gw->root->handle, WF_CURRXYWH, (GRECT*)&gw->root->loc);
+ browser_update_rects( gw );
}
}
}
11 years, 6 months
r12636 mono - in /trunk/netsurf/atari: browser_win.c statusbar.c statusbar.h
by netsurf@semichrome.net
Author: mono
Date: Thu Aug 4 20:12:03 2011
New Revision: 12636
URL: http://source.netsurf-browser.org?rev=12636&view=rev
Log:
Improved accuracy for window resize.
Modified:
trunk/netsurf/atari/browser_win.c
trunk/netsurf/atari/statusbar.c
trunk/netsurf/atari/statusbar.h
Modified: trunk/netsurf/atari/browser_win.c
URL: http://source.netsurf-browser.org/trunk/netsurf/atari/browser_win.c?rev=1...
==============================================================================
--- trunk/netsurf/atari/browser_win.c (original)
+++ trunk/netsurf/atari/browser_win.c Thu Aug 4 20:12:03 2011
@@ -57,9 +57,6 @@
#include "atari/search.h"
#include "atari/osspec.h"
-
-bool cfg_rt_resize = false;
-bool cfg_rt_move = false;
extern void * h_gem_rsrc;
extern struct gui_window *input_window;
extern GEM_PLOTTER plotter;
@@ -82,11 +79,11 @@
bool abs = false;
LGRECT cwork;
int value = BROWSER_SCROLL_SVAL;
-
+
if( input_window == NULL ) {
return;
}
-
+
browser_get_rect( input_window, BR_CONTENT, &cwork );
switch( buff[4] ) {
@@ -100,22 +97,22 @@
case WA_RTPAGE:
value = cwork.g_w;
break;
-
- default:
+
+ default:
break;
}
browser_scroll( input_window, buff[4], value, abs );
}
-/*
- this gets called at end of gui poll to track the mouse state and
- finally checks for released buttons.
+/*
+ this gets called at end of gui poll to track the mouse state and
+ finally checks for released buttons.
*/
static void window_track_mouse_state( LGRECT * bwrect, bool within, short mx, short my, short mbut, short mkstate ){
int i = 0;
- int nx, ny;
+ int nx, ny;
struct gui_window * gw = input_window;
-
+
if( !gw ) {
bmstate = 0;
mouse_hold_start[0] = 0;
@@ -159,7 +156,7 @@
bmstate &= ~( BROWSER_MOUSE_HOLDING_1 | BROWSER_MOUSE_DRAG_1 ) ;
if( within ) {
/* drag end */
- browser_window_mouse_track(
+ browser_window_mouse_track(
gw->browser->bw, 0, nx, ny
);
}
@@ -169,7 +166,7 @@
LOG(("Drag for %d ended", i));
if( within ) {
/* drag end */
- browser_window_mouse_track(
+ browser_window_mouse_track(
gw->browser->bw, 0, nx, ny
);
}
@@ -195,15 +192,15 @@
if( gw == NULL)
return;
- graf_mkstate(&mx, &my, &mbut, &mkstate);
-
- browser_get_rect( gw, BR_CONTENT, &bwbox );
+ graf_mkstate(&mx, &my, &mbut, &mkstate);
+
+ browser_get_rect( gw, BR_CONTENT, &bwbox );
if( gw->root->toolbar )
mt_CompGetLGrect(&app, gw->root->toolbar->url.comp, WF_WORKXYWH, &urlbox);
if( gw->root->statusbar )
mt_CompGetLGrect(&app, gw->root->statusbar->comp, WF_WORKXYWH, &sbbox);
- if( mx > bwbox.g_x && mx < bwbox.g_x + bwbox.g_w &&
+ if( mx > bwbox.g_x && mx < bwbox.g_x + bwbox.g_w &&
my > bwbox.g_y && my < bwbox.g_y + bwbox.g_h ){
within = true;
}
@@ -224,12 +221,14 @@
my >= sbbox.g_y + (sbbox.g_h-MOVER_WH) && my <= sbbox.g_y + sbbox.g_h ) {
/* mouse within sizer box ( bottom right ) */
prev_sb = a = true;
- gem_set_cursor( &gem_cursors.sizenwse );
+ gem_set_cursor( &gem_cursors.sizenwse );
}
}
if( !a ) {
+ if( prev_sb )
+ gw->root->statusbar->resize_init = true;
if( prev_url || prev_sb ) {
- gem_set_cursor( &gem_cursors.arrow );
+ gem_set_cursor( &gem_cursors.arrow );
prev_url = false;
prev_sb = false;
}
@@ -237,12 +236,12 @@
if( within ){
nx = mx - bwbox.g_x;
ny = my - bwbox.g_y;
- if( ( abs(mx-last_drag_x)>5 || abs(mx-last_drag_y)>5 ) ||
+ if( ( abs(mx-last_drag_x)>5 || abs(mx-last_drag_y)>5 ) ||
!MOUSE_IS_DRAGGING() ){
- browser_window_mouse_track(
- input_window->browser->bw,
- bmstate,
- nx + gw->browser->scroll.current.x,
+ browser_window_mouse_track(
+ input_window->browser->bw,
+ bmstate,
+ nx + gw->browser->scroll.current.x,
ny + gw->browser->scroll.current.y
);
if( MOUSE_IS_DRAGGING() ){
@@ -250,7 +249,7 @@
last_drag_y = my;
}
}
- }
+ }
}
} else {
/* set input window? */
@@ -306,12 +305,8 @@
/* Event Handlers: */
EvntDataAttach( gw->root->handle, WM_CLOSED, evnt_window_close, gw );
/* capture resize/move events so we can handle that manually */
- if( !cfg_rt_resize ) {
- EvntDataAttach( gw->root->handle, WM_SIZED, evnt_window_resize, gw );
- } else {
- EvntDataAdd( gw->root->handle, WM_SIZED, evnt_window_rt_resize, gw, EV_BOT );
- }
- if( !cfg_rt_move ) {
+ EvntDataAttach( gw->root->handle, WM_SIZED, evnt_window_resize, gw );
+ if( !option_atari_realtime_move ) {
EvntDataAttach( gw->root->handle, WM_MOVED, evnt_window_move, gw );
} else {
EvntDataAdd( gw->root->handle, WM_MOVED, evnt_window_rt_resize, gw, EV_BOT );
@@ -384,14 +379,16 @@
void window_open( struct gui_window * gw)
{
- LGRECT br;
+ LGRECT br;
+ GRECT dim;
WindOpen(gw->root->handle, 20, 20, app.w/2, app.h/2 );
WindSetStr( gw->root->handle, WF_NAME, (char *)"" );
/* apply focus to the root frame: */
long lfbuff[8] = { CM_GETFOCUS };
mt_CompEvntExec( gl_appvar, gw->browser->comp, lfbuff );
/* recompute the nested component sizes and positions: */
- browser_update_rects( gw );
+ browser_update_rects( gw );
+ mt_WindGetGrect( &app, gw->root->handle, WF_CURRXYWH, (GRECT*)&gw->root->loc);
browser_get_rect( gw, BR_CONTENT, &br );
plotter->move( plotter, br.g_x, br.g_y );
plotter->resize( plotter, br.g_w, br.g_h );
@@ -694,7 +691,7 @@
short wx, wy, wh, ww, nx, ny;
short r;
short xoff, yoff;
- if( cfg_rt_move ) {
+ if( option_atari_realtime_move ) {
std_mvd( win, buff, &app );
evnt_window_rt_resize( win, buff, data );
} else {
@@ -712,25 +709,21 @@
void __CDECL evnt_window_resize( WINDOW *win, short buff[8], void * data )
{
- short mx,my, mb, ks;
+ //short mx,my, mb, ks;
short wx, wy, wh, ww, nw, nh;
short r;
- graf_mkstate( &mx, &my, &mb, &ks );
- if( cfg_rt_resize ) {
- std_szd( win, buff, &app );
- evnt_window_rt_resize( win, buff, data );
- } else {
- wind_get( win->handle, WF_CURRXYWH, &wx, &wy, &ww, &wh );
- r = graf_rubberbox(wx, wy, 20, 20, &nw, &nh);
- if( nw < 40 && nw < 40 )
- return;
- buff[4] = wx;
- buff[5] = wy;
- buff[6] = nw;
- buff[7] = nh;
- std_szd( win, buff, &app );
- evnt_window_rt_resize( win, buff, data );
- }
+
+ // graf_mkstate( &mx, &my, &mb, &ks );
+ wind_get( win->handle, WF_CURRXYWH, &wx, &wy, &ww, &wh );
+ r = graf_rubberbox(wx, wy, 20, 20, &nw, &nh);
+ if( nw < 40 && nw < 40 )
+ return;
+ buff[4] = wx;
+ buff[5] = wy;
+ buff[6] = nw;
+ buff[7] = nh;
+ std_szd( win, buff, &app );
+ evnt_window_rt_resize( win, buff, data );
}
/* perform the actual resize */
@@ -739,35 +732,30 @@
short x,y,w,h;
struct gui_window * gw;
LGRECT rect;
- bool resized;
- bool moved;
if(buff[0] == WM_FORCE_MOVE ) {
std_mvd(win, buff, &app);
std_szd(win, buff, &app);
}
- wind_get( win->handle, WF_WORKXYWH, &x, &y, &w, &h );
+ wind_get( win->handle, WF_CURRXYWH, &x, &y, &w, &h );
gw = (struct gui_window *)data;
assert( gw != NULL );
- if(gw->root->loc.g_x != x || gw->root->loc.g_y != y ){
- moved = true;
- gw->root->loc.g_x = x;
- gw->root->loc.g_y = y;
- browser_update_rects( gw );
- }
-
if(gw->root->loc.g_w != w || gw->root->loc.g_h != h ){
- resized = true;
/* report resize to component interface: */
- browser_update_rects( gw );
+ browser_update_rects( gw );
+ mt_WindGetGrect( &app, gw->root->handle, WF_CURRXYWH, (GRECT*)&gw->root->loc);
browser_get_rect( gw, BR_CONTENT, &rect );
if( gw->browser->bw->current_content != NULL )
browser_window_reformat(gw->browser->bw, false, rect.g_w, rect.g_h );
- gw->root->toolbar->url.scrollx = 0;
+ gw->root->toolbar->url.scrollx = 0;
window_redraw_controls(gw, 0);
- /* TODO: recalculate scroll position, istead of zeroing? */
- }
-}
+ /* TODO: recalculate scroll position, instead of zeroing? */
+ } else {
+ if(gw->root->loc.g_x != x || gw->root->loc.g_y != y ){
+ mt_WindGetGrect( &app, gw->root->handle, WF_CURRXYWH, (GRECT*)&gw->root->loc);
+ }
+ }
+}
Modified: trunk/netsurf/atari/statusbar.c
URL: http://source.netsurf-browser.org/trunk/netsurf/atari/statusbar.c?rev=126...
==============================================================================
--- trunk/netsurf/atari/statusbar.c (original)
+++ trunk/netsurf/atari/statusbar.c Thu Aug 4 20:12:03 2011
@@ -130,7 +130,7 @@
curx += cw;
if( curx >= lclip.g_x + lclip.g_w )
break;
- }
+ }
}
vswr_mode( vdih, MD_REPLACE );
@@ -144,7 +144,7 @@
pxy[1] = work.g_y + work.g_h;
pxy[2] = work.g_x + work.g_w - MOVER_WH;
pxy[3] = work.g_y + work.g_h - MOVER_WH;
- v_pline( vdih, 2, (short*)&pxy );
+ v_pline( vdih, 2, (short*)&pxy );
vs_clip(vdih, 0, (short*)&pxyclip );
return;
@@ -152,23 +152,29 @@
static void __CDECL evnt_sb_click( COMPONENT *c, long buff[8] )
{
+ static bool prevstate;
short sbuff[8], mx, my;
LGRECT work;
mt_CompGetLGrect(&app, c, WF_WORKXYWH, &work);
if( evnt.mx >= work.g_x + (work.g_w - MOVER_WH) && evnt.mx <= work.g_x + work.g_w &&
evnt.my >= work.g_y + (work.g_h - MOVER_WH) && evnt.my <= work.g_y + work.g_h ) {
- /* click into the mover region */
+ /* click into the resizer region */
struct gui_window * g;
for( g = window_list; g; g=g->next ) {
if( g->root->statusbar->comp == c ) {
+ if( g->root->statusbar->resize_init == true ){
+ g->root->statusbar->resize_init = false;
+ g->root->statusbar->resize_delta_x = g->root->loc.g_x+g->root->loc.g_w - evnt.mx;
+ g->root->statusbar->resize_delta_y = g->root->loc.g_y+g->root->loc.g_h - evnt.my;
+ }
sbuff[0] = WM_SIZED;
sbuff[1] = (short)buff[0];
sbuff[2] = 0;
sbuff[3] = g->root->handle->handle;
sbuff[4] = g->root->loc.g_x;
sbuff[5] = g->root->loc.g_y;
- sbuff[6] = g->root->loc.g_w;
- sbuff[7] = g->root->loc.g_h;
+ sbuff[6] = evnt.mx - sbuff[4] + g->root->statusbar->resize_delta_x;
+ sbuff[7] = evnt.my - sbuff[5] + g->root->statusbar->resize_delta_y;
evnt_window_resize( g->root->handle, sbuff, g );
}
}
@@ -178,6 +184,7 @@
CMP_STATUSBAR sb_create( struct gui_window * gw )
{
CMP_STATUSBAR s = malloc( sizeof(struct s_statusbar) );
+ s->resize_init = true;
s->attached = false;
s->comp = (COMPONENT*)mt_CompCreate(&app, CLT_HORIZONTAL, STATUSBAR_HEIGHT, 0);
s->comp->rect.g_h = STATUSBAR_HEIGHT;
Modified: trunk/netsurf/atari/statusbar.h
URL: http://source.netsurf-browser.org/trunk/netsurf/atari/statusbar.h?rev=126...
==============================================================================
--- trunk/netsurf/atari/statusbar.h (original)
+++ trunk/netsurf/atari/statusbar.h Thu Aug 4 20:12:03 2011
@@ -29,6 +29,9 @@
char text[STATUSBAR_MAX_SLEN+1];
size_t textlen;
bool attached;
+ bool resize_init;
+ short resize_delta_x;
+ short resize_delta_y;
};
11 years, 6 months