netsurf: branch master updated. 4fbeacf830b1351646a375169aea05f264425c9b
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/4fbeacf830b1351646a37...
...commit http://git.netsurf-browser.org/netsurf.git/commit/4fbeacf830b1351646a3751...
...tree http://git.netsurf-browser.org/netsurf.git/tree/4fbeacf830b1351646a375169...
The branch, master has been updated
via 4fbeacf830b1351646a375169aea05f264425c9b (commit)
from 2437ca84a877391f8988bb166cbdc82e281fe8d2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/4fbeacf830b1351646a...
commit 4fbeacf830b1351646a375169aea05f264425c9b
Author: Ole Loots <ole(a)monochrom.net>
Commit: Ole Loots <ole(a)monochrom.net>
Fix integer overflow in percentage calculation, credits: Peter Slegg.
diff --git a/atari/download.c b/atari/download.c
index 45be977..e852a03 100755
--- a/atari/download.c
+++ b/atari/download.c
@@ -265,7 +265,7 @@ nserror gui_download_window_data(struct gui_download_window *dw,
dw->lastrdw = tnow;
tree = ObjcTree(OC_FORM, dw->form );
if( dw->size_total > 0 ){
- p = (dw->size_downloaded *100) / dw->size_total;
+ p = ((double)dw->size_downloaded / (double)dw->size_total * 100);
}
speed = dw->size_downloaded / sdiff;
tree[DOWNLOAD_PROGRESS_DONE].ob_width = MAX( MIN( p*(DOWNLOAD_BAR_MAX/100), DOWNLOAD_BAR_MAX ), 1);
-----------------------------------------------------------------------
Summary of changes:
atari/download.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/atari/download.c b/atari/download.c
index 45be977..e852a03 100755
--- a/atari/download.c
+++ b/atari/download.c
@@ -265,7 +265,7 @@ nserror gui_download_window_data(struct gui_download_window *dw,
dw->lastrdw = tnow;
tree = ObjcTree(OC_FORM, dw->form );
if( dw->size_total > 0 ){
- p = (dw->size_downloaded *100) / dw->size_total;
+ p = ((double)dw->size_downloaded / (double)dw->size_total * 100);
}
speed = dw->size_downloaded / sdiff;
tree[DOWNLOAD_PROGRESS_DONE].ob_width = MAX( MIN( p*(DOWNLOAD_BAR_MAX/100), DOWNLOAD_BAR_MAX ), 1);
--
NetSurf Browser
10 years, 2 months
netsurf: branch mono/removing-windom-dependency updated. ff7cf937629933e782eb8103dadb8b5f27f14a4d
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/ff7cf937629933e782eb8...
...commit http://git.netsurf-browser.org/netsurf.git/commit/ff7cf937629933e782eb810...
...tree http://git.netsurf-browser.org/netsurf.git/tree/ff7cf937629933e782eb8103d...
The branch, mono/removing-windom-dependency has been updated
via ff7cf937629933e782eb8103dadb8b5f27f14a4d (commit)
from fe0e2508e62323955df415b45e2ea9b1b7d6373f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/ff7cf937629933e782e...
commit ff7cf937629933e782eb8103dadb8b5f27f14a4d
Author: Ole Loots <ole(a)monochrom.net>
Commit: Ole Loots <ole(a)monochrom.net>
Started refactoring of global redraw handling.
diff --git a/atari/browser.c b/atari/browser.c
index 1904722..d0337f5 100755
--- a/atari/browser.c
+++ b/atari/browser.c
@@ -858,7 +858,6 @@ void browser_redraw( struct gui_window * gw )
/* but because this is onscreen plotter, it doesn't */
/* make much sense anyway... */
}
-
}
if (wind_get(aes_handle, WF_NEXTXYWH,
&todo[0], &todo[1], &todo[2], &todo[3])==0) {
diff --git a/atari/gui.c b/atari/gui.c
index 0d85eef..2528eff 100755
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -131,18 +131,22 @@ void gui_poll(bool active)
struct gui_window * g;
- for( g = window_list; g != NULL; g=g->next ) {
- if( browser_redraw_required( g ) ) {
- browser_redraw(g);
- }
- if(g->root->toolbar) {
- //if(g->root->toolbar->url.redraw ) {
- // TODO: implement toolbar redraw mechanism
- //tb_url_redraw( g );
- //}
- }
+ if(input_window->root->redraw_slots.areas_used > 0){
+ window_process_redraws(input_window->root);
}
+// for( g = window_list; g != NULL; g=g->next ) {
+// if( browser_redraw_required( g ) ) {
+// browser_redraw(g);
+// }
+// if(g->root->toolbar) {
+// //if(g->root->toolbar->url.redraw ) {
+// // TODO: implement toolbar redraw mechanism
+// //tb_url_redraw( g );
+// //}
+// }
+// }
+
if( !active ) {
/* this suits for stuff with lower priority */
/* TBD: really be spare on redraws??? */
@@ -179,6 +183,9 @@ void gui_poll(bool active)
}
} while ( gui_poll_repeat && !(active||rendering));
+ if(input_window->root->redraw_slots.areas_used > 0){
+ window_process_redraws(input_window->root);
+ }
}
@@ -313,6 +320,7 @@ void gui_window_set_title(struct gui_window *gw, const char *title)
gw->title = realloc(gw->title, l);
strncpy(gw->title, title, l);
}
+ gw->title[l] = 0;
if(input_window == gw)
window_set_title(gw->root, gw->title);
}
@@ -336,7 +344,7 @@ void gui_window_set_status(struct gui_window *w, const char *text)
w->status = realloc(w->status, l);
strncpy(w->status, text, l);
- w->status[l-1] = 0;
+ w->status[l] = 0;
if(input_window == w)
window_set_stauts(w->root, (char*)text);
@@ -534,7 +542,7 @@ void gui_window_set_url(struct gui_window *w, const char *url)
w->url = realloc(w->url, l);
}
strncpy(w->url, url, l);
-
+ w->url[l] = 0;
if(input_window == w->root->active_gui_window){
toolbar_set_url(w->root->toolbar, url);
}
diff --git a/atari/gui.h b/atari/gui.h
index c2f6b44..8860191 100755
--- a/atari/gui.h
+++ b/atari/gui.h
@@ -19,6 +19,7 @@
#ifndef NS_ATARI_GUI_H_
#define NS_ATARI_GUI_H_
+#include "atari/redrawslots.h"
#include "atari/gemtk/gemtk.h"
struct point_s {
@@ -104,6 +105,7 @@ struct s_gui_win_root
char * title;
struct bitmap * icon;
struct gui_window *active_gui_window;
+ struct s_redrw_slots redraw_slots;
/* current size of window on screen: */
GRECT loc;
};
diff --git a/atari/redrawslots.c b/atari/redrawslots.c
index 069e6cc..d2f74e4 100644
--- a/atari/redrawslots.c
+++ b/atari/redrawslots.c
@@ -23,10 +23,16 @@
void redraw_slots_init(struct s_redrw_slots * slots, short size)
{
+ // TODO: allocate slots dynamically!
slots->size = MIN( MAX_REDRW_SLOTS , size);
slots->areas_used = 0;
}
+void redraw_slots_free(struct s_redrw_slots * slots)
+{
+ // TOOD: free areas...
+}
+
static inline bool rect_intersect( struct rect * box1, struct rect * box2 )
{
@@ -44,10 +50,19 @@ static inline bool rect_intersect( struct rect * box1, struct rect * box2 )
return true;
}
+
+
+void redraw_slot_schedule_grect(struct s_redrw_slots * slots, GRECT *area)
+{
+ redraw_slot_schedule(slots, area->g_x, area->g_y,
+ area->g_x + area->g_w, area->g_y + area->g_h);
+}
+
/*
- schedule redraw coords, coords are relative.
+ schedule redraw coords.
*/
-void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0, short x1, short y1)
+void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0,
+ short x1, short y1)
{
int i;
struct rect area;
@@ -91,6 +106,15 @@ void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0, shor
slots->areas[slots->size-1].x1 = MAX(slots->areas[i].x1, x1);
slots->areas[slots->size-1].y1 = MAX(slots->areas[i].y1, y1);
}
-done:
+done:
return;
}
+
+void redraw_slots_remove_area(struct s_redrw_slots * slots, int i)
+{
+ int x;
+ for(x = i+1; i<slots->areas_used; x++){
+ slots->areas[x-1] = slots->areas[x];
+ }
+ slots->areas_used--;
+}
diff --git a/atari/redrawslots.h b/atari/redrawslots.h
index d1f0fc2..8558b7e 100644
--- a/atari/redrawslots.h
+++ b/atari/redrawslots.h
@@ -20,6 +20,10 @@
#ifndef ATARI_REDRAW_SLOTS_H
#define ATARI_REDRAW_SLOTS_H
+#include <mt_gem.h>
+#include "utils/types.h"
+
+
/*
MAX_REDRW_SLOTS
This is the number of redraw requests that the slotlist can store.
@@ -40,7 +44,10 @@ struct s_redrw_slots
};
void redraw_slots_init(struct s_redrw_slots * slots, short size);
-void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0, short x1, short y1);
-
+void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0,
+ short x1, short y1);
+void redraw_slot_schedule_grect(struct s_redrw_slots * slots, GRECT *area);
+void redraw_slots_remove_area(struct s_redrw_slots * slots, int i);
+void redraw_slots_free(struct s_redrw_slots * slots);
#endif
diff --git a/atari/rootwin.c b/atari/rootwin.c
index 68f1bc0..c0ad688 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -56,6 +56,7 @@
#include "atari/search.h"
#include "atari/osspec.h"
#include "atari/encoding.h"
+#include "atari/redrawslots.h"
#include "atari/toolbar.h"
#include "atari/gemtk/gemtk.h"
@@ -167,6 +168,7 @@ int window_create(struct gui_window * gw,
int err = 0;
bool tb, sb;
int flags;
+ short aes_handle;
tb = (inflags & WIDGET_TOOLBAR);
sb = (inflags & WIDGET_STATUSBAR);
@@ -188,10 +190,11 @@ int window_create(struct gui_window * gw,
memset( gw->root, 0, sizeof(struct s_gui_win_root) );
gw->root->title = malloc(atari_sysinfo.aes_max_win_title_len+1);
// TODO: use desk size
- short aes_handle = wind_create(flags, 40, 40, app.w, app.h);
+
+ aes_handle = wind_create(flags, 40, 40, app.w, app.h);
if(aes_handle<0) {
- free( gw->root->title );
- free( gw->root );
+ free(gw->root->title);
+ free(gw->root);
return( -1 );
}
gw->root->win = guiwin_add(aes_handle,
@@ -209,17 +212,20 @@ int window_create(struct gui_window * gw,
gw->browser = browser_create( gw, bw, NULL, CLT_HORIZONTAL, 1, 1 );
/* create statusbar component: */
- if( sb ) {
+ if(sb) {
gw->root->statusbar = sb_create( gw );
} else {
gw->root->statusbar = NULL;
}
+ // Setup some window defaults:
wind_set_str(aes_handle, WF_ICONTITLE, (char*)"NetSurf");
wind_set(aes_handle, WF_OPTS, 1, WO0_FULLREDRAW, 0, 0);
wind_set(aes_handle, WF_OPTS, 1, WO0_NOBLITW, 0, 0);
wind_set(aes_handle, WF_OPTS, 1, WO0_NOBLITH, 0, 0);
+ redraw_slots_init(&gw->root->redraw_slots, 8);
+
guiwin_set_toolbar(gw->root->win, get_tree(TOOLBAR), 0, 0);
struct rootwin_data_s * data = malloc(sizeof(struct rootwin_data_s));
data->rootwin = gw->root;
@@ -250,6 +256,7 @@ void window_unref_gui_window(ROOTWIN *rootwin, struct gui_window *gw)
}
if(input_window == NULL){
// the last gui window for this rootwin was removed:
+ redraw_slots_free(&rootwin->redraw_slots);
window_destroy(rootwin);
}
}
@@ -294,7 +301,7 @@ int window_destroy(ROOTWIN *rootwin)
void window_open(ROOTWIN *rootwin, GRECT pos)
{
- GRECT br;
+ GRECT br, g;
short aes_handle = guiwin_get_handle(rootwin->win);
wind_open(aes_handle, pos.g_x, pos.g_y, pos.g_w, pos.g_h );
@@ -304,6 +311,8 @@ void window_open(ROOTWIN *rootwin, GRECT pos)
if(rootwin->statusbar != NULL) {
sb_attach(rootwin->statusbar, rootwin->active_gui_window);
}
+ guiwin_get_grect(rootwin->win, GUIWIN_AREA_TOOLBAR, &g);
+ toolbar_set_dimensions(rootwin->toolbar, &g);
/*TBD: get already present content and set size? */
input_window = rootwin->active_gui_window;
window_set_focus(rootwin, BROWSER, rootwin->active_gui_window->browser);
@@ -465,6 +474,67 @@ void window_redraw_favicon(ROOTWIN *rootwin, GRECT *clip)
}
}
+void window_schedule_redraw_grect(ROOTWIN *rootwin, GRECT *area)
+{
+ GRECT work;
+
+ guiwin_get_grect(rootwin->win, GUIWIN_AREA_WORK, &work);
+ rc_intersect(area, &work);
+ redraw_slot_schedule_grect(&rootwin->redraw_slots, &work);
+}
+
+/*
+bool window_requires_redraw(ROOTWIN * rootwin)
+{
+ if (rootwin->redraw_slots.areas_used > 0)
+ return(true);
+
+ return(false);
+}
+*/
+
+void window_process_redraws(ROOTWIN * rootwin)
+{
+ GRECT work, visible_ro, tb_area = {0,0,0,0};
+ short aes_handle, i;
+ bool toolbar_rdrw_required;
+
+ aes_handle = guiwin_get_handle(rootwin->win);
+
+ guiwin_get_grect(rootwin->win, GUIWIN_AREA_TOOLBAR, &tb_area);
+
+ while(plot_lock() == false);
+
+ wind_get_grect(aes_handle, WF_FIRSTXYWH, &visible_ro);
+ while (visible_ro.g_w > 0 && visible_ro.g_h > 0) {
+
+ // TODO: optimze the rectangle list -
+ // remove rectangles which were completly inside the visible area.
+ // that way we don't have to loop over again...
+ for(i=0; i<rootwin->redraw_slots.areas_used; i++){
+
+ GRECT rdrw_area = {
+ rootwin->redraw_slots.areas[i].x0,
+ rootwin->redraw_slots.areas[i].y0,
+ rootwin->redraw_slots.areas[i].x1 +
+ rootwin->redraw_slots.areas[i].x0,
+ rootwin->redraw_slots.areas[i].y1 +
+ rootwin->redraw_slots.areas[i].y0
+ };
+ GRECT visible = visible_ro;
+
+ rc_intersect(&rdrw_area, &visible);
+ if (rc_intersect(&tb_area, &visible)) {
+ toolbar_redraw(rootwin->toolbar, &visible);
+ }
+ }
+ wind_get_grect(aes_handle, WF_NEXTXYWH, &visible_ro);
+ }
+ rootwin->redraw_slots.areas_used = 0;
+
+ plot_unlock();
+}
+
/* -------------------------------------------------------------------------- */
/* Event Handlers: */
@@ -632,54 +702,16 @@ static void redraw(GUIWIN *win, short msg[8])
GRECT clip = {msg[4], msg[5], msg[6], msg[7]};
window_redraw_favicon(rootwin, &clip);
} else {
- GRECT content_area, tb_area;
- short pxy[8];
-
- guiwin_get_grect(win, GUIWIN_AREA_CONTENT, &content_area);
- guiwin_get_grect(win, GUIWIN_AREA_TOOLBAR, &tb_area);
-
- if (rc_intersect(&tb_area, &clip)) {
- toolbar_set_dimensions(rootwin->toolbar, &tb_area);
- toolbar_redraw(rootwin->toolbar, clip);
- }
-
- CMP_BROWSER browser = rootwin->active_gui_window->browser;
- if (browser->reformat_pending == true) {
- browser_window_reformat(browser->bw, false, content_area.g_w,
- content_area.g_h );
- } else {
- if(rc_intersect(&content_area, &clip)){
-
- GRECT lclip = content_area;
-
- /* convert redraw coords to framebuffer coords: */
- lclip.g_x -= content_area.g_x;
- lclip.g_y -= content_area.g_y;
-
- if( lclip.g_x < 0 ) {
- lclip.g_w = content_area.g_w + lclip.g_x;
- lclip.g_x = 0;
- }
-
- if( lclip.g_y < 0 ) {
- lclip.g_h = content_area.g_h + lclip.g_y;
- lclip.g_y = 0;
- }
+ window_schedule_redraw_grect(rootwin, &clip);
- browser_schedule_redraw(rootwin->active_gui_window,
- lclip.g_x, lclip.g_y,
- lclip.g_x + lclip.g_w,
- lclip.g_y + lclip.g_h);
- }
- }
-
- //guiwin_clear(win);
+ // TODO: remove this call when browser redraw is implemented:
+ guiwin_clear(win);
}
}
static void resized(GUIWIN *win)
{
- short x,y,w,h;
+ GRECT g;
short handle;
struct gui_window *gw;
struct rootwin_data_s *data = guiwin_get_user_data(win);
@@ -700,22 +732,23 @@ static void resized(GUIWIN *win)
return;
//assert( gw != NULL );
- wind_get(handle, WF_CURRXYWH, &x, &y, &w, &h);
+ wind_get_grect(handle, WF_CURRXYWH, &g);
- if (rootwin->loc.g_w != w || rootwin->loc.g_h != h) {
+ if (rootwin->loc.g_w != g.g_w || rootwin->loc.g_h != g.g_h) {
if ( gw->browser->bw->current_content != NULL ) {
/* Reformat will happen when redraw is processed: */
+ // TODO: call reformat directly, this was introduced because
+ // of bad AES knowledge, it's ok to call it directly here...
rootwin->active_gui_window->browser->reformat_pending = true;
}
}
- if (rootwin->loc.g_x != x || rootwin->loc.g_y != y) {
- // moved
- }
+// if (rootwin->loc.g_x != g.g_x || rootwin->loc.g_y != g.g_y) {
+// // moved
+// }
- rootwin->loc.g_x = x;
- rootwin->loc.g_y = y;
- rootwin->loc.g_w = w;
- rootwin->loc.g_h = h;
+ rootwin->loc = g;
+ guiwin_get_grect(win, GUIWIN_AREA_TOOLBAR, &g);
+ toolbar_set_dimensions(rootwin->toolbar, &g);
}
static void __CDECL file_dropped(GUIWIN *win, short msg[8])
diff --git a/atari/rootwin.h b/atari/rootwin.h
index f7aa7c4..2fa3ec5 100755
--- a/atari/rootwin.h
+++ b/atari/rootwin.h
@@ -68,6 +68,8 @@ void window_set_stauts(struct s_gui_win_root * rootwin, char * text);
void window_set_title(struct s_gui_win_root * rootwin, char * text);
void window_set_icon(struct s_gui_win_root * rootwin, struct bitmap * bmp );
void window_set_active_gui_window(ROOTWIN *rootwin, struct gui_window *gw);
+void window_schedule_redraw_grect(ROOTWIN *rootwin, GRECT *area);
+void window_process_redraws(ROOTWIN * rootwin);
struct gui_window * window_get_active_gui_window(ROOTWIN * rootwin);
void window_redraw_favicon(struct s_gui_win_root * rootwin, GRECT *clip);
void window_unref_gui_window(ROOTWIN *rootwin, struct gui_window *gw);
diff --git a/atari/schedule.c b/atari/schedule.c
index 8040c80..a91c510 100755
--- a/atari/schedule.c
+++ b/atari/schedule.c
@@ -158,8 +158,8 @@ schedule_run(void)
prev_nscb = NULL;
nexttime = cur_nscb->timeout;
- while ( cur_nscb != NULL ) {
- if ( now > cur_nscb->timeout ) {
+ while (cur_nscb != NULL) {
+ if (now > cur_nscb->timeout) {
/* scheduled time */
/* remove callback */
@@ -194,7 +194,7 @@ schedule_run(void)
/* if the time to the event is sooner than the
* currently recorded soonest event record it
*/
- if( nexttime > cur_nscb->timeout ){
+ if (nexttime > cur_nscb->timeout) {
nexttime = cur_nscb->timeout;
}
/* move to next element */
diff --git a/atari/statusbar.c b/atari/statusbar.c
index c8f8688..d76cf63 100755
--- a/atari/statusbar.c
+++ b/atari/statusbar.c
@@ -38,7 +38,7 @@
#include "atari/gui.h"
#include "atari/statusbar.h"
-#include "atari/rootwin.h"
+#include "atari/rootwin.h"
#include "atari/misc.h"
#include "atari/global_evnt.h"
#include "atari/res/netsurf.rsh"
@@ -182,7 +182,7 @@ void sb_destroy( CMP_STATUSBAR s )
}
}
-void sb_set_text( CMP_STATUSBAR sb , char * text )
+void sb_set_text(CMP_STATUSBAR sb , const char * text)
{
LGRECT work;
@@ -221,11 +221,11 @@ void sb_destroy( CMP_STATUSBAR s )
void sb_attach(CMP_STATUSBAR sb, struct gui_window * gw)
{
- sb->aes_win = gw->root->handle->handle;
+ sb->aes_win = guiwin_get_handle(gw->root->win);
sb->attached = true;
}
-void sb_set_text(CMP_STATUSBAR sb, char * text )
+void sb_set_text(CMP_STATUSBAR sb, const char * text )
{
assert( sb != NULL );
strncpy(sb->text, text, STATUSBAR_MAX_SLEN);
diff --git a/atari/statusbar.h b/atari/statusbar.h
index fc6749e..7739c6f 100755
--- a/atari/statusbar.h
+++ b/atari/statusbar.h
@@ -36,6 +36,6 @@ struct s_statusbar
CMP_STATUSBAR sb_create( struct gui_window * gw );
void sb_destroy( CMP_STATUSBAR s );
-void sb_set_text( CMP_STATUSBAR sb , char * text );
+void sb_set_text( CMP_STATUSBAR sb , const char * text );
void sb_attach(CMP_STATUSBAR sb, struct gui_window * gw);
#endif
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 3902569..75d7abe 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -116,7 +116,8 @@ struct s_toolbar
bool hidden;
int btcnt;
int style;
- bool redraw;
+ bool redraw;
+ bool reflow;
};
extern char * option_homepage_url;
@@ -410,6 +411,8 @@ void toolbar_destroy(struct s_toolbar *tb)
static void toolbar_objc_reflow(struct s_toolbar *tb)
{
+
+ // position toolbar areas:
aes_toolbar->ob_x = tb->area.g_x;
aes_toolbar->ob_y = tb->area.g_y;
aes_toolbar->ob_width = tb->area.g_w;
@@ -421,13 +424,6 @@ static void toolbar_objc_reflow(struct s_toolbar *tb)
aes_toolbar[TOOLBAR_URL_AREA].ob_width = tb->area.g_w
- (aes_toolbar[TOOLBAR_NAVIGATION_AREA].ob_width
+ aes_toolbar[TOOLBAR_THROBBER_AREA].ob_width);
-}
-
-void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
-{
- // position toolbar areas:
- toolbar_objc_reflow(tb);
- objc_draw_grect(aes_toolbar,0,8,clip);
// position throbber image:
throbber_form[tb->throbber.index].ob_x = tb->area.g_x +
@@ -442,10 +438,17 @@ void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
((aes_toolbar[TOOLBAR_THROBBER_AREA].ob_height
- throbber_form[tb->throbber.index].ob_height) >> 1);
- printf("x pos: %d, y pos: %d\n", throbber_form[tb->throbber.index].ob_x,
- throbber_form[tb->throbber.index].ob_y);
- objc_draw_grect(&throbber_form[tb->throbber.index], 0, 1, clip);
+ tb->reflow = false;
+}
+
+void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
+{
+ if(tb->reflow == true)
+ toolbar_objc_reflow(tb);
+ objc_draw_grect(aes_toolbar,0,8,clip);
+
+ objc_draw_grect(&throbber_form[tb->throbber.index], 0, 1, clip);
}
@@ -459,9 +462,7 @@ void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
void toolbar_set_dimensions(struct s_toolbar *tb, GRECT *area)
{
tb->area = *area;
- if (img_toolbar != 0) {
- toolbar_reflow(tb);
- }
+ tb->reflow = true;
}
diff --git a/atari/toolbar.h b/atari/toolbar.h
index 7cc7b92..17cb16d 100644
--- a/atari/toolbar.h
+++ b/atari/toolbar.h
@@ -27,6 +27,7 @@ void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
void toolbar_get_grect(struct s_toolbar *tb, short which, short opt, GRECT *g);
struct text_area *toolbar_get_textarea(struct s_toolbar *tb,
enum toolbar_textarea which);
+void toolbar_redraw(struct s_toolbar *tb, GRECT *clip);
/* public events handlers: */
void toolbar_back_click(struct s_toolbar *tb);
void toolbar_reload_click(struct s_toolbar *tb);
-----------------------------------------------------------------------
Summary of changes:
atari/browser.c | 1 -
atari/gui.c | 32 +++++++----
atari/gui.h | 2 +
atari/redrawslots.c | 30 ++++++++++-
atari/redrawslots.h | 11 +++-
atari/rootwin.c | 145 +++++++++++++++++++++++++++++++--------------------
atari/rootwin.h | 2 +
atari/schedule.c | 6 +-
atari/statusbar.c | 8 ++--
atari/statusbar.h | 2 +-
atari/toolbar.c | 29 +++++-----
atari/toolbar.h | 1 +
12 files changed, 173 insertions(+), 96 deletions(-)
diff --git a/atari/browser.c b/atari/browser.c
index 1904722..d0337f5 100755
--- a/atari/browser.c
+++ b/atari/browser.c
@@ -858,7 +858,6 @@ void browser_redraw( struct gui_window * gw )
/* but because this is onscreen plotter, it doesn't */
/* make much sense anyway... */
}
-
}
if (wind_get(aes_handle, WF_NEXTXYWH,
&todo[0], &todo[1], &todo[2], &todo[3])==0) {
diff --git a/atari/gui.c b/atari/gui.c
index 0d85eef..2528eff 100755
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -131,18 +131,22 @@ void gui_poll(bool active)
struct gui_window * g;
- for( g = window_list; g != NULL; g=g->next ) {
- if( browser_redraw_required( g ) ) {
- browser_redraw(g);
- }
- if(g->root->toolbar) {
- //if(g->root->toolbar->url.redraw ) {
- // TODO: implement toolbar redraw mechanism
- //tb_url_redraw( g );
- //}
- }
+ if(input_window->root->redraw_slots.areas_used > 0){
+ window_process_redraws(input_window->root);
}
+// for( g = window_list; g != NULL; g=g->next ) {
+// if( browser_redraw_required( g ) ) {
+// browser_redraw(g);
+// }
+// if(g->root->toolbar) {
+// //if(g->root->toolbar->url.redraw ) {
+// // TODO: implement toolbar redraw mechanism
+// //tb_url_redraw( g );
+// //}
+// }
+// }
+
if( !active ) {
/* this suits for stuff with lower priority */
/* TBD: really be spare on redraws??? */
@@ -179,6 +183,9 @@ void gui_poll(bool active)
}
} while ( gui_poll_repeat && !(active||rendering));
+ if(input_window->root->redraw_slots.areas_used > 0){
+ window_process_redraws(input_window->root);
+ }
}
@@ -313,6 +320,7 @@ void gui_window_set_title(struct gui_window *gw, const char *title)
gw->title = realloc(gw->title, l);
strncpy(gw->title, title, l);
}
+ gw->title[l] = 0;
if(input_window == gw)
window_set_title(gw->root, gw->title);
}
@@ -336,7 +344,7 @@ void gui_window_set_status(struct gui_window *w, const char *text)
w->status = realloc(w->status, l);
strncpy(w->status, text, l);
- w->status[l-1] = 0;
+ w->status[l] = 0;
if(input_window == w)
window_set_stauts(w->root, (char*)text);
@@ -534,7 +542,7 @@ void gui_window_set_url(struct gui_window *w, const char *url)
w->url = realloc(w->url, l);
}
strncpy(w->url, url, l);
-
+ w->url[l] = 0;
if(input_window == w->root->active_gui_window){
toolbar_set_url(w->root->toolbar, url);
}
diff --git a/atari/gui.h b/atari/gui.h
index c2f6b44..8860191 100755
--- a/atari/gui.h
+++ b/atari/gui.h
@@ -19,6 +19,7 @@
#ifndef NS_ATARI_GUI_H_
#define NS_ATARI_GUI_H_
+#include "atari/redrawslots.h"
#include "atari/gemtk/gemtk.h"
struct point_s {
@@ -104,6 +105,7 @@ struct s_gui_win_root
char * title;
struct bitmap * icon;
struct gui_window *active_gui_window;
+ struct s_redrw_slots redraw_slots;
/* current size of window on screen: */
GRECT loc;
};
diff --git a/atari/redrawslots.c b/atari/redrawslots.c
index 069e6cc..d2f74e4 100644
--- a/atari/redrawslots.c
+++ b/atari/redrawslots.c
@@ -23,10 +23,16 @@
void redraw_slots_init(struct s_redrw_slots * slots, short size)
{
+ // TODO: allocate slots dynamically!
slots->size = MIN( MAX_REDRW_SLOTS , size);
slots->areas_used = 0;
}
+void redraw_slots_free(struct s_redrw_slots * slots)
+{
+ // TOOD: free areas...
+}
+
static inline bool rect_intersect( struct rect * box1, struct rect * box2 )
{
@@ -44,10 +50,19 @@ static inline bool rect_intersect( struct rect * box1, struct rect * box2 )
return true;
}
+
+
+void redraw_slot_schedule_grect(struct s_redrw_slots * slots, GRECT *area)
+{
+ redraw_slot_schedule(slots, area->g_x, area->g_y,
+ area->g_x + area->g_w, area->g_y + area->g_h);
+}
+
/*
- schedule redraw coords, coords are relative.
+ schedule redraw coords.
*/
-void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0, short x1, short y1)
+void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0,
+ short x1, short y1)
{
int i;
struct rect area;
@@ -91,6 +106,15 @@ void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0, shor
slots->areas[slots->size-1].x1 = MAX(slots->areas[i].x1, x1);
slots->areas[slots->size-1].y1 = MAX(slots->areas[i].y1, y1);
}
-done:
+done:
return;
}
+
+void redraw_slots_remove_area(struct s_redrw_slots * slots, int i)
+{
+ int x;
+ for(x = i+1; i<slots->areas_used; x++){
+ slots->areas[x-1] = slots->areas[x];
+ }
+ slots->areas_used--;
+}
diff --git a/atari/redrawslots.h b/atari/redrawslots.h
index d1f0fc2..8558b7e 100644
--- a/atari/redrawslots.h
+++ b/atari/redrawslots.h
@@ -20,6 +20,10 @@
#ifndef ATARI_REDRAW_SLOTS_H
#define ATARI_REDRAW_SLOTS_H
+#include <mt_gem.h>
+#include "utils/types.h"
+
+
/*
MAX_REDRW_SLOTS
This is the number of redraw requests that the slotlist can store.
@@ -40,7 +44,10 @@ struct s_redrw_slots
};
void redraw_slots_init(struct s_redrw_slots * slots, short size);
-void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0, short x1, short y1);
-
+void redraw_slot_schedule(struct s_redrw_slots * slots, short x0, short y0,
+ short x1, short y1);
+void redraw_slot_schedule_grect(struct s_redrw_slots * slots, GRECT *area);
+void redraw_slots_remove_area(struct s_redrw_slots * slots, int i);
+void redraw_slots_free(struct s_redrw_slots * slots);
#endif
diff --git a/atari/rootwin.c b/atari/rootwin.c
index 68f1bc0..c0ad688 100755
--- a/atari/rootwin.c
+++ b/atari/rootwin.c
@@ -56,6 +56,7 @@
#include "atari/search.h"
#include "atari/osspec.h"
#include "atari/encoding.h"
+#include "atari/redrawslots.h"
#include "atari/toolbar.h"
#include "atari/gemtk/gemtk.h"
@@ -167,6 +168,7 @@ int window_create(struct gui_window * gw,
int err = 0;
bool tb, sb;
int flags;
+ short aes_handle;
tb = (inflags & WIDGET_TOOLBAR);
sb = (inflags & WIDGET_STATUSBAR);
@@ -188,10 +190,11 @@ int window_create(struct gui_window * gw,
memset( gw->root, 0, sizeof(struct s_gui_win_root) );
gw->root->title = malloc(atari_sysinfo.aes_max_win_title_len+1);
// TODO: use desk size
- short aes_handle = wind_create(flags, 40, 40, app.w, app.h);
+
+ aes_handle = wind_create(flags, 40, 40, app.w, app.h);
if(aes_handle<0) {
- free( gw->root->title );
- free( gw->root );
+ free(gw->root->title);
+ free(gw->root);
return( -1 );
}
gw->root->win = guiwin_add(aes_handle,
@@ -209,17 +212,20 @@ int window_create(struct gui_window * gw,
gw->browser = browser_create( gw, bw, NULL, CLT_HORIZONTAL, 1, 1 );
/* create statusbar component: */
- if( sb ) {
+ if(sb) {
gw->root->statusbar = sb_create( gw );
} else {
gw->root->statusbar = NULL;
}
+ // Setup some window defaults:
wind_set_str(aes_handle, WF_ICONTITLE, (char*)"NetSurf");
wind_set(aes_handle, WF_OPTS, 1, WO0_FULLREDRAW, 0, 0);
wind_set(aes_handle, WF_OPTS, 1, WO0_NOBLITW, 0, 0);
wind_set(aes_handle, WF_OPTS, 1, WO0_NOBLITH, 0, 0);
+ redraw_slots_init(&gw->root->redraw_slots, 8);
+
guiwin_set_toolbar(gw->root->win, get_tree(TOOLBAR), 0, 0);
struct rootwin_data_s * data = malloc(sizeof(struct rootwin_data_s));
data->rootwin = gw->root;
@@ -250,6 +256,7 @@ void window_unref_gui_window(ROOTWIN *rootwin, struct gui_window *gw)
}
if(input_window == NULL){
// the last gui window for this rootwin was removed:
+ redraw_slots_free(&rootwin->redraw_slots);
window_destroy(rootwin);
}
}
@@ -294,7 +301,7 @@ int window_destroy(ROOTWIN *rootwin)
void window_open(ROOTWIN *rootwin, GRECT pos)
{
- GRECT br;
+ GRECT br, g;
short aes_handle = guiwin_get_handle(rootwin->win);
wind_open(aes_handle, pos.g_x, pos.g_y, pos.g_w, pos.g_h );
@@ -304,6 +311,8 @@ void window_open(ROOTWIN *rootwin, GRECT pos)
if(rootwin->statusbar != NULL) {
sb_attach(rootwin->statusbar, rootwin->active_gui_window);
}
+ guiwin_get_grect(rootwin->win, GUIWIN_AREA_TOOLBAR, &g);
+ toolbar_set_dimensions(rootwin->toolbar, &g);
/*TBD: get already present content and set size? */
input_window = rootwin->active_gui_window;
window_set_focus(rootwin, BROWSER, rootwin->active_gui_window->browser);
@@ -465,6 +474,67 @@ void window_redraw_favicon(ROOTWIN *rootwin, GRECT *clip)
}
}
+void window_schedule_redraw_grect(ROOTWIN *rootwin, GRECT *area)
+{
+ GRECT work;
+
+ guiwin_get_grect(rootwin->win, GUIWIN_AREA_WORK, &work);
+ rc_intersect(area, &work);
+ redraw_slot_schedule_grect(&rootwin->redraw_slots, &work);
+}
+
+/*
+bool window_requires_redraw(ROOTWIN * rootwin)
+{
+ if (rootwin->redraw_slots.areas_used > 0)
+ return(true);
+
+ return(false);
+}
+*/
+
+void window_process_redraws(ROOTWIN * rootwin)
+{
+ GRECT work, visible_ro, tb_area = {0,0,0,0};
+ short aes_handle, i;
+ bool toolbar_rdrw_required;
+
+ aes_handle = guiwin_get_handle(rootwin->win);
+
+ guiwin_get_grect(rootwin->win, GUIWIN_AREA_TOOLBAR, &tb_area);
+
+ while(plot_lock() == false);
+
+ wind_get_grect(aes_handle, WF_FIRSTXYWH, &visible_ro);
+ while (visible_ro.g_w > 0 && visible_ro.g_h > 0) {
+
+ // TODO: optimze the rectangle list -
+ // remove rectangles which were completly inside the visible area.
+ // that way we don't have to loop over again...
+ for(i=0; i<rootwin->redraw_slots.areas_used; i++){
+
+ GRECT rdrw_area = {
+ rootwin->redraw_slots.areas[i].x0,
+ rootwin->redraw_slots.areas[i].y0,
+ rootwin->redraw_slots.areas[i].x1 +
+ rootwin->redraw_slots.areas[i].x0,
+ rootwin->redraw_slots.areas[i].y1 +
+ rootwin->redraw_slots.areas[i].y0
+ };
+ GRECT visible = visible_ro;
+
+ rc_intersect(&rdrw_area, &visible);
+ if (rc_intersect(&tb_area, &visible)) {
+ toolbar_redraw(rootwin->toolbar, &visible);
+ }
+ }
+ wind_get_grect(aes_handle, WF_NEXTXYWH, &visible_ro);
+ }
+ rootwin->redraw_slots.areas_used = 0;
+
+ plot_unlock();
+}
+
/* -------------------------------------------------------------------------- */
/* Event Handlers: */
@@ -632,54 +702,16 @@ static void redraw(GUIWIN *win, short msg[8])
GRECT clip = {msg[4], msg[5], msg[6], msg[7]};
window_redraw_favicon(rootwin, &clip);
} else {
- GRECT content_area, tb_area;
- short pxy[8];
-
- guiwin_get_grect(win, GUIWIN_AREA_CONTENT, &content_area);
- guiwin_get_grect(win, GUIWIN_AREA_TOOLBAR, &tb_area);
-
- if (rc_intersect(&tb_area, &clip)) {
- toolbar_set_dimensions(rootwin->toolbar, &tb_area);
- toolbar_redraw(rootwin->toolbar, clip);
- }
-
- CMP_BROWSER browser = rootwin->active_gui_window->browser;
- if (browser->reformat_pending == true) {
- browser_window_reformat(browser->bw, false, content_area.g_w,
- content_area.g_h );
- } else {
- if(rc_intersect(&content_area, &clip)){
-
- GRECT lclip = content_area;
-
- /* convert redraw coords to framebuffer coords: */
- lclip.g_x -= content_area.g_x;
- lclip.g_y -= content_area.g_y;
-
- if( lclip.g_x < 0 ) {
- lclip.g_w = content_area.g_w + lclip.g_x;
- lclip.g_x = 0;
- }
-
- if( lclip.g_y < 0 ) {
- lclip.g_h = content_area.g_h + lclip.g_y;
- lclip.g_y = 0;
- }
+ window_schedule_redraw_grect(rootwin, &clip);
- browser_schedule_redraw(rootwin->active_gui_window,
- lclip.g_x, lclip.g_y,
- lclip.g_x + lclip.g_w,
- lclip.g_y + lclip.g_h);
- }
- }
-
- //guiwin_clear(win);
+ // TODO: remove this call when browser redraw is implemented:
+ guiwin_clear(win);
}
}
static void resized(GUIWIN *win)
{
- short x,y,w,h;
+ GRECT g;
short handle;
struct gui_window *gw;
struct rootwin_data_s *data = guiwin_get_user_data(win);
@@ -700,22 +732,23 @@ static void resized(GUIWIN *win)
return;
//assert( gw != NULL );
- wind_get(handle, WF_CURRXYWH, &x, &y, &w, &h);
+ wind_get_grect(handle, WF_CURRXYWH, &g);
- if (rootwin->loc.g_w != w || rootwin->loc.g_h != h) {
+ if (rootwin->loc.g_w != g.g_w || rootwin->loc.g_h != g.g_h) {
if ( gw->browser->bw->current_content != NULL ) {
/* Reformat will happen when redraw is processed: */
+ // TODO: call reformat directly, this was introduced because
+ // of bad AES knowledge, it's ok to call it directly here...
rootwin->active_gui_window->browser->reformat_pending = true;
}
}
- if (rootwin->loc.g_x != x || rootwin->loc.g_y != y) {
- // moved
- }
+// if (rootwin->loc.g_x != g.g_x || rootwin->loc.g_y != g.g_y) {
+// // moved
+// }
- rootwin->loc.g_x = x;
- rootwin->loc.g_y = y;
- rootwin->loc.g_w = w;
- rootwin->loc.g_h = h;
+ rootwin->loc = g;
+ guiwin_get_grect(win, GUIWIN_AREA_TOOLBAR, &g);
+ toolbar_set_dimensions(rootwin->toolbar, &g);
}
static void __CDECL file_dropped(GUIWIN *win, short msg[8])
diff --git a/atari/rootwin.h b/atari/rootwin.h
index f7aa7c4..2fa3ec5 100755
--- a/atari/rootwin.h
+++ b/atari/rootwin.h
@@ -68,6 +68,8 @@ void window_set_stauts(struct s_gui_win_root * rootwin, char * text);
void window_set_title(struct s_gui_win_root * rootwin, char * text);
void window_set_icon(struct s_gui_win_root * rootwin, struct bitmap * bmp );
void window_set_active_gui_window(ROOTWIN *rootwin, struct gui_window *gw);
+void window_schedule_redraw_grect(ROOTWIN *rootwin, GRECT *area);
+void window_process_redraws(ROOTWIN * rootwin);
struct gui_window * window_get_active_gui_window(ROOTWIN * rootwin);
void window_redraw_favicon(struct s_gui_win_root * rootwin, GRECT *clip);
void window_unref_gui_window(ROOTWIN *rootwin, struct gui_window *gw);
diff --git a/atari/schedule.c b/atari/schedule.c
index 8040c80..a91c510 100755
--- a/atari/schedule.c
+++ b/atari/schedule.c
@@ -158,8 +158,8 @@ schedule_run(void)
prev_nscb = NULL;
nexttime = cur_nscb->timeout;
- while ( cur_nscb != NULL ) {
- if ( now > cur_nscb->timeout ) {
+ while (cur_nscb != NULL) {
+ if (now > cur_nscb->timeout) {
/* scheduled time */
/* remove callback */
@@ -194,7 +194,7 @@ schedule_run(void)
/* if the time to the event is sooner than the
* currently recorded soonest event record it
*/
- if( nexttime > cur_nscb->timeout ){
+ if (nexttime > cur_nscb->timeout) {
nexttime = cur_nscb->timeout;
}
/* move to next element */
diff --git a/atari/statusbar.c b/atari/statusbar.c
index c8f8688..d76cf63 100755
--- a/atari/statusbar.c
+++ b/atari/statusbar.c
@@ -38,7 +38,7 @@
#include "atari/gui.h"
#include "atari/statusbar.h"
-#include "atari/rootwin.h"
+#include "atari/rootwin.h"
#include "atari/misc.h"
#include "atari/global_evnt.h"
#include "atari/res/netsurf.rsh"
@@ -182,7 +182,7 @@ void sb_destroy( CMP_STATUSBAR s )
}
}
-void sb_set_text( CMP_STATUSBAR sb , char * text )
+void sb_set_text(CMP_STATUSBAR sb , const char * text)
{
LGRECT work;
@@ -221,11 +221,11 @@ void sb_destroy( CMP_STATUSBAR s )
void sb_attach(CMP_STATUSBAR sb, struct gui_window * gw)
{
- sb->aes_win = gw->root->handle->handle;
+ sb->aes_win = guiwin_get_handle(gw->root->win);
sb->attached = true;
}
-void sb_set_text(CMP_STATUSBAR sb, char * text )
+void sb_set_text(CMP_STATUSBAR sb, const char * text )
{
assert( sb != NULL );
strncpy(sb->text, text, STATUSBAR_MAX_SLEN);
diff --git a/atari/statusbar.h b/atari/statusbar.h
index fc6749e..7739c6f 100755
--- a/atari/statusbar.h
+++ b/atari/statusbar.h
@@ -36,6 +36,6 @@ struct s_statusbar
CMP_STATUSBAR sb_create( struct gui_window * gw );
void sb_destroy( CMP_STATUSBAR s );
-void sb_set_text( CMP_STATUSBAR sb , char * text );
+void sb_set_text( CMP_STATUSBAR sb , const char * text );
void sb_attach(CMP_STATUSBAR sb, struct gui_window * gw);
#endif
diff --git a/atari/toolbar.c b/atari/toolbar.c
index 3902569..75d7abe 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -116,7 +116,8 @@ struct s_toolbar
bool hidden;
int btcnt;
int style;
- bool redraw;
+ bool redraw;
+ bool reflow;
};
extern char * option_homepage_url;
@@ -410,6 +411,8 @@ void toolbar_destroy(struct s_toolbar *tb)
static void toolbar_objc_reflow(struct s_toolbar *tb)
{
+
+ // position toolbar areas:
aes_toolbar->ob_x = tb->area.g_x;
aes_toolbar->ob_y = tb->area.g_y;
aes_toolbar->ob_width = tb->area.g_w;
@@ -421,13 +424,6 @@ static void toolbar_objc_reflow(struct s_toolbar *tb)
aes_toolbar[TOOLBAR_URL_AREA].ob_width = tb->area.g_w
- (aes_toolbar[TOOLBAR_NAVIGATION_AREA].ob_width
+ aes_toolbar[TOOLBAR_THROBBER_AREA].ob_width);
-}
-
-void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
-{
- // position toolbar areas:
- toolbar_objc_reflow(tb);
- objc_draw_grect(aes_toolbar,0,8,clip);
// position throbber image:
throbber_form[tb->throbber.index].ob_x = tb->area.g_x +
@@ -442,10 +438,17 @@ void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
((aes_toolbar[TOOLBAR_THROBBER_AREA].ob_height
- throbber_form[tb->throbber.index].ob_height) >> 1);
- printf("x pos: %d, y pos: %d\n", throbber_form[tb->throbber.index].ob_x,
- throbber_form[tb->throbber.index].ob_y);
- objc_draw_grect(&throbber_form[tb->throbber.index], 0, 1, clip);
+ tb->reflow = false;
+}
+
+void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
+{
+ if(tb->reflow == true)
+ toolbar_objc_reflow(tb);
+ objc_draw_grect(aes_toolbar,0,8,clip);
+
+ objc_draw_grect(&throbber_form[tb->throbber.index], 0, 1, clip);
}
@@ -459,9 +462,7 @@ void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
void toolbar_set_dimensions(struct s_toolbar *tb, GRECT *area)
{
tb->area = *area;
- if (img_toolbar != 0) {
- toolbar_reflow(tb);
- }
+ tb->reflow = true;
}
diff --git a/atari/toolbar.h b/atari/toolbar.h
index 7cc7b92..17cb16d 100644
--- a/atari/toolbar.h
+++ b/atari/toolbar.h
@@ -27,6 +27,7 @@ void toolbar_update_buttons(struct s_toolbar *tb, struct browser_window *bw,
void toolbar_get_grect(struct s_toolbar *tb, short which, short opt, GRECT *g);
struct text_area *toolbar_get_textarea(struct s_toolbar *tb,
enum toolbar_textarea which);
+void toolbar_redraw(struct s_toolbar *tb, GRECT *clip);
/* public events handlers: */
void toolbar_back_click(struct s_toolbar *tb);
void toolbar_reload_click(struct s_toolbar *tb);
--
NetSurf Browser
10 years, 2 months
netsurf: branch master updated. 2437ca84a877391f8988bb166cbdc82e281fe8d2
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/2437ca84a877391f8988b...
...commit http://git.netsurf-browser.org/netsurf.git/commit/2437ca84a877391f8988bb1...
...tree http://git.netsurf-browser.org/netsurf.git/tree/2437ca84a877391f8988bb166...
The branch, master has been updated
via 2437ca84a877391f8988bb166cbdc82e281fe8d2 (commit)
via 4e4bc9c13578ff496d09eb8fac063cb03510d837 (commit)
via 56d5e6963a42aad0e03886496923779ee65fa362 (commit)
via 09bc58f7c2926922e59542e8ca2de2f5941714df (commit)
from 56b521a1258f7b9657c9f7dda0878b789d39f59b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/2437ca84a877391f898...
commit 2437ca84a877391f8988bb166cbdc82e281fe8d2
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Hotlist toolbar needs to be ABOVE the tab bar
diff --git a/amiga/gui.c b/amiga/gui.c
index 5de64bb..064c49c 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2977,6 +2977,10 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
BEVEL_Style, BVS_SBAR_VERT,
BevelEnd,
CHILD_WeightedHeight, 0,
+ LAYOUT_AddChild, g->shared->objects[GID_HOTLISTLAYOUT] = HGroupObject,
+ LAYOUT_SpaceInner, FALSE,
+ LayoutEnd,
+ CHILD_WeightedHeight,0,
LAYOUT_AddChild, g->shared->objects[GID_TABLAYOUT] = HGroupObject,
LAYOUT_SpaceInner,FALSE,
addtabclosegadget, g->shared->objects[GID_CLOSETAB],
@@ -2991,10 +2995,6 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
- LAYOUT_AddChild, g->shared->objects[GID_HOTLISTLAYOUT] = HGroupObject,
- LAYOUT_SpaceInner, FALSE,
- LayoutEnd,
- CHILD_WeightedHeight,0,
LAYOUT_AddChild, g->shared->objects[GID_BROWSER] = SpaceObject,
GA_ID,GID_BROWSER,
SPACE_Transparent,TRUE,
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/4e4bc9c13578ff496d0...
commit 4e4bc9c13578ff496d09eb8fac063cb03510d837
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Don't force a redraw after adding the toolbar, because we (currently) only add it immediately at window creation.
diff --git a/amiga/gui.c b/amiga/gui.c
index 0cc0778..5de64bb 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2506,9 +2506,6 @@ void ami_gui_hotlist_toolbar_add(struct gui_window_2 *gwin)
RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
gwin->win, NULL, TRUE);
-
- gwin->redraw_required = true;
- gwin->bw->reformat_pending = true;
}
void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/56d5e6963a42aad0e03...
commit 56d5e6963a42aad0e03886496923779ee65fa362
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Actually show the toolbar. It looks awful.
diff --git a/amiga/gui.c b/amiga/gui.c
index 3a00435..0cc0778 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2501,6 +2501,14 @@ void ami_gui_hotlist_toolbar_add(struct gui_window_2 *gwin)
IDoMethod(gwin->objects[GID_HOTLISTLAYOUT], LM_ADDCHILD,
gwin->win, gwin->objects[GID_HOTLIST], NULL);
}
+
+ FlushLayoutDomainCache((struct Gadget *)gwin->objects[GID_MAIN]);
+
+ RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
+ gwin->win, NULL, TRUE);
+
+ gwin->redraw_required = true;
+ gwin->bw->reformat_pending = true;
}
void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/09bc58f7c2926922e59...
commit 09bc58f7c2926922e59542e8ca2de2f5941714df
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Create a toolbar from the "Toolbar" folder within the hotlist. Note: makes no attempt to either free the toolbar or make the toolbar work.
diff --git a/amiga/gui.c b/amiga/gui.c
index 2933792..3a00435 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -30,6 +30,7 @@
#include "desktop/selection.h"
#include "desktop/textinput.h"
#include "desktop/tree.h"
+#include "desktop/tree_url_node.h"
#include "image/ico.h"
#include "utils/log.h"
#include "utils/messages.h"
@@ -109,6 +110,7 @@
#include <proto/clicktab.h>
#include <proto/layout.h>
#include <proto/space.h>
+#include <proto/speedbar.h>
#include <proto/string.h>
#include <proto/window.h>
@@ -118,6 +120,7 @@
#include <gadgets/layout.h>
#include <gadgets/scroller.h>
#include <gadgets/space.h>
+#include <gadgets/speedbar.h>
#include <gadgets/string.h>
#include <images/bevel.h>
#include <images/bitmap.h>
@@ -1930,7 +1933,7 @@ void ami_handle_msg(void)
if(ami_menu_window_close)
{
- if(ami_menu_window_close == AMI_MENU_WINDOW_CLOSE_ALL)
+ if(ami_menu_window_close == (void *)AMI_MENU_WINDOW_CLOSE_ALL)
ami_quit_netsurf();
else
ami_close_all_tabs(ami_menu_window_close);
@@ -2425,6 +2428,81 @@ void ami_update_buttons(struct gui_window_2 *gwin)
}
}
+void ami_gui_hotlist_scan_2(struct tree *tree, struct node *root, WORD *gen, uint16 *item,
+ struct List *speed_button_list, struct gui_window_2 *gwin)
+{
+ struct node *tempnode;
+ struct node_element *element=NULL;
+ struct node *node;
+ struct Node *speed_button_node;
+
+ *gen = *gen + 1;
+
+ for (node = root; node; node = tree_node_get_next(node))
+ {
+ if((*gen == 1) && (*item < AMI_GUI_TOOLBAR_MAX)) /* Don't cascade into sub-dirs */
+ {
+ gwin->hotlist_toolbar_lab[*item] = ami_utf8_easy((char *)tree_url_node_get_title(node));
+
+ speed_button_node = AllocSpeedButtonNode(*item,
+ SBNA_Text, gwin->hotlist_toolbar_lab[*item],
+ SBNA_UserData, (void *)tree_url_node_get_url(node),
+ TAG_DONE);
+
+ AddTail(speed_button_list, speed_button_node);
+
+ *item = *item + 1;
+ }
+
+ /* Don't need this atm as it cascades into sub-dirs
+ if (tree_node_get_child(node))
+ {
+ ami_gui_hotlist_scan_2(tree, tree_node_get_child(node), gen);
+ }
+ */
+ }
+
+ *gen = *gen - 1;
+}
+
+int ami_gui_hotlist_scan(struct tree *tree, struct List *speed_button_list, struct gui_window_2 *gwin)
+{
+ struct node *root = tree_node_get_child(tree_get_root(tree));
+ struct node *node;
+ struct node_element *element;
+ static WORD gen = 0;
+ static uint16 item = 0;
+
+ for (node = root; node; node = tree_node_get_next(node))
+ {
+ element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
+ if(!element) element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
+ if(element && (strcmp(tree_node_element_get_text(element), "Toolbar") == 0))
+ {
+ ami_gui_hotlist_scan_2(tree, tree_node_get_child(node), &gen, &item, speed_button_list, gwin);
+ }
+ }
+
+ return item;
+}
+
+void ami_gui_hotlist_toolbar_add(struct gui_window_2 *gwin)
+{
+ NewList(&gwin->hotlist_toolbar_list);
+
+ if(ami_gui_hotlist_scan(ami_tree_get_tree(hotlist_window), &gwin->hotlist_toolbar_list, gwin) > 0) {
+ gwin->objects[GID_HOTLIST] =
+ SpeedBarObject,
+ GA_ID, GID_HOTLIST,
+ GA_RelVerify, TRUE,
+ SPEEDBAR_Buttons, &gwin->hotlist_toolbar_list,
+ SpeedBarEnd;
+
+ IDoMethod(gwin->objects[GID_HOTLISTLAYOUT], LM_ADDCHILD,
+ gwin->win, gwin->objects[GID_HOTLIST], NULL);
+ }
+}
+
void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
{
if(ClickTabBase->lib_Version < 53) return;
@@ -2908,6 +2986,10 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
+ LAYOUT_AddChild, g->shared->objects[GID_HOTLISTLAYOUT] = HGroupObject,
+ LAYOUT_SpaceInner, FALSE,
+ LayoutEnd,
+ CHILD_WeightedHeight,0,
LAYOUT_AddChild, g->shared->objects[GID_BROWSER] = SpaceObject,
GA_ID,GID_BROWSER,
SPACE_Transparent,TRUE,
@@ -3039,6 +3121,8 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
RefreshGadgets((APTR)g->shared->objects[GID_STATUS],
g->shared->win, NULL);
+
+ ami_gui_hotlist_toolbar_add(g->shared); /* is this the right place for this? */
}
else
{
diff --git a/amiga/gui.h b/amiga/gui.h
index 181bd4f..59c60f4 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -64,6 +64,8 @@ enum
GID_SHOWALL,
GID_CASE,
GID_TOOLBARLAYOUT,
+ GID_HOTLIST,
+ GID_HOTLISTLAYOUT,
GID_HSCROLL,
GID_LAST
};
@@ -71,6 +73,8 @@ enum
struct find_window;
struct history_window;
+#define AMI_GUI_TOOLBAR_MAX 20
+
struct gui_window_2 {
struct nsObject *node;
struct Window *win;
@@ -98,6 +102,8 @@ struct gui_window_2 {
UBYTE *menutype;
struct NewMenu *menu;
ULONG hotlist_items;
+ char *hotlist_toolbar_lab[AMI_GUI_TOOLBAR_MAX];
+ struct List hotlist_toolbar_list;
char *svbuffer;
char *status;
char *wintitle;
-----------------------------------------------------------------------
Summary of changes:
amiga/gui.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
amiga/gui.h | 6 ++++
2 files changed, 96 insertions(+), 1 deletions(-)
diff --git a/amiga/gui.c b/amiga/gui.c
index 2933792..064c49c 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -30,6 +30,7 @@
#include "desktop/selection.h"
#include "desktop/textinput.h"
#include "desktop/tree.h"
+#include "desktop/tree_url_node.h"
#include "image/ico.h"
#include "utils/log.h"
#include "utils/messages.h"
@@ -109,6 +110,7 @@
#include <proto/clicktab.h>
#include <proto/layout.h>
#include <proto/space.h>
+#include <proto/speedbar.h>
#include <proto/string.h>
#include <proto/window.h>
@@ -118,6 +120,7 @@
#include <gadgets/layout.h>
#include <gadgets/scroller.h>
#include <gadgets/space.h>
+#include <gadgets/speedbar.h>
#include <gadgets/string.h>
#include <images/bevel.h>
#include <images/bitmap.h>
@@ -1930,7 +1933,7 @@ void ami_handle_msg(void)
if(ami_menu_window_close)
{
- if(ami_menu_window_close == AMI_MENU_WINDOW_CLOSE_ALL)
+ if(ami_menu_window_close == (void *)AMI_MENU_WINDOW_CLOSE_ALL)
ami_quit_netsurf();
else
ami_close_all_tabs(ami_menu_window_close);
@@ -2425,6 +2428,86 @@ void ami_update_buttons(struct gui_window_2 *gwin)
}
}
+void ami_gui_hotlist_scan_2(struct tree *tree, struct node *root, WORD *gen, uint16 *item,
+ struct List *speed_button_list, struct gui_window_2 *gwin)
+{
+ struct node *tempnode;
+ struct node_element *element=NULL;
+ struct node *node;
+ struct Node *speed_button_node;
+
+ *gen = *gen + 1;
+
+ for (node = root; node; node = tree_node_get_next(node))
+ {
+ if((*gen == 1) && (*item < AMI_GUI_TOOLBAR_MAX)) /* Don't cascade into sub-dirs */
+ {
+ gwin->hotlist_toolbar_lab[*item] = ami_utf8_easy((char *)tree_url_node_get_title(node));
+
+ speed_button_node = AllocSpeedButtonNode(*item,
+ SBNA_Text, gwin->hotlist_toolbar_lab[*item],
+ SBNA_UserData, (void *)tree_url_node_get_url(node),
+ TAG_DONE);
+
+ AddTail(speed_button_list, speed_button_node);
+
+ *item = *item + 1;
+ }
+
+ /* Don't need this atm as it cascades into sub-dirs
+ if (tree_node_get_child(node))
+ {
+ ami_gui_hotlist_scan_2(tree, tree_node_get_child(node), gen);
+ }
+ */
+ }
+
+ *gen = *gen - 1;
+}
+
+int ami_gui_hotlist_scan(struct tree *tree, struct List *speed_button_list, struct gui_window_2 *gwin)
+{
+ struct node *root = tree_node_get_child(tree_get_root(tree));
+ struct node *node;
+ struct node_element *element;
+ static WORD gen = 0;
+ static uint16 item = 0;
+
+ for (node = root; node; node = tree_node_get_next(node))
+ {
+ element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
+ if(!element) element = tree_node_find_element(node, TREE_ELEMENT_TITLE, NULL);
+ if(element && (strcmp(tree_node_element_get_text(element), "Toolbar") == 0))
+ {
+ ami_gui_hotlist_scan_2(tree, tree_node_get_child(node), &gen, &item, speed_button_list, gwin);
+ }
+ }
+
+ return item;
+}
+
+void ami_gui_hotlist_toolbar_add(struct gui_window_2 *gwin)
+{
+ NewList(&gwin->hotlist_toolbar_list);
+
+ if(ami_gui_hotlist_scan(ami_tree_get_tree(hotlist_window), &gwin->hotlist_toolbar_list, gwin) > 0) {
+ gwin->objects[GID_HOTLIST] =
+ SpeedBarObject,
+ GA_ID, GID_HOTLIST,
+ GA_RelVerify, TRUE,
+ SPEEDBAR_Buttons, &gwin->hotlist_toolbar_list,
+ SpeedBarEnd;
+
+ IDoMethod(gwin->objects[GID_HOTLISTLAYOUT], LM_ADDCHILD,
+ gwin->win, gwin->objects[GID_HOTLIST], NULL);
+ }
+
+ FlushLayoutDomainCache((struct Gadget *)gwin->objects[GID_MAIN]);
+
+ RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
+ gwin->win, NULL, TRUE);
+}
+
void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
{
if(ClickTabBase->lib_Version < 53) return;
@@ -2894,6 +2977,10 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
BEVEL_Style, BVS_SBAR_VERT,
BevelEnd,
CHILD_WeightedHeight, 0,
+ LAYOUT_AddChild, g->shared->objects[GID_HOTLISTLAYOUT] = HGroupObject,
+ LAYOUT_SpaceInner, FALSE,
+ LayoutEnd,
+ CHILD_WeightedHeight,0,
LAYOUT_AddChild, g->shared->objects[GID_TABLAYOUT] = HGroupObject,
LAYOUT_SpaceInner,FALSE,
addtabclosegadget, g->shared->objects[GID_CLOSETAB],
@@ -3039,6 +3126,8 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
RefreshGadgets((APTR)g->shared->objects[GID_STATUS],
g->shared->win, NULL);
+
+ ami_gui_hotlist_toolbar_add(g->shared); /* is this the right place for this? */
}
else
{
diff --git a/amiga/gui.h b/amiga/gui.h
index 181bd4f..59c60f4 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -64,6 +64,8 @@ enum
GID_SHOWALL,
GID_CASE,
GID_TOOLBARLAYOUT,
+ GID_HOTLIST,
+ GID_HOTLISTLAYOUT,
GID_HSCROLL,
GID_LAST
};
@@ -71,6 +73,8 @@ enum
struct find_window;
struct history_window;
+#define AMI_GUI_TOOLBAR_MAX 20
+
struct gui_window_2 {
struct nsObject *node;
struct Window *win;
@@ -98,6 +102,8 @@ struct gui_window_2 {
UBYTE *menutype;
struct NewMenu *menu;
ULONG hotlist_items;
+ char *hotlist_toolbar_lab[AMI_GUI_TOOLBAR_MAX];
+ struct List hotlist_toolbar_list;
char *svbuffer;
char *status;
char *wintitle;
--
NetSurf Browser
10 years, 2 months
netsurf: branch master updated. 56b521a1258f7b9657c9f7dda0878b789d39f59b
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/56b521a1258f7b9657c9f...
...commit http://git.netsurf-browser.org/netsurf.git/commit/56b521a1258f7b9657c9f7d...
...tree http://git.netsurf-browser.org/netsurf.git/tree/56b521a1258f7b9657c9f7dda...
The branch, master has been updated
via 56b521a1258f7b9657c9f7dda0878b789d39f59b (commit)
from 68f359d1ec2212939f19a25dfb182d08cfa37afd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/56b521a1258f7b9657c...
commit 56b521a1258f7b9657c9f7dda0878b789d39f59b
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
make window load event delivery work
diff --git a/javascript/jsapi.c b/javascript/jsapi.c
index 2aa0f89..bec5653 100644
--- a/javascript/jsapi.c
+++ b/javascript/jsapi.c
@@ -150,6 +150,9 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen)
return false;
}
+dom_exception _dom_event_create(dom_document *doc, dom_event **evt);
+#define dom_event_create(d, e) _dom_event_create((dom_document *)(d), (dom_event **) (e))
+
bool js_fire_event(jscontext *ctx, const char *type, void *target)
{
JSContext *cx = (JSContext *)ctx;
@@ -173,8 +176,7 @@ bool js_fire_event(jscontext *ctx, const char *type, void *target)
return false;
}
-/* exc = dom_event_create(document, &event);*/
- exc = -1;
+ exc = dom_event_create(-1, &event);
if (exc != DOM_NO_ERR) {
return false;
}
diff --git a/javascript/jsapi/window.bnd b/javascript/jsapi/window.bnd
index 3f89304..610aa71 100644
--- a/javascript/jsapi/window.bnd
+++ b/javascript/jsapi/window.bnd
@@ -28,6 +28,7 @@ preamble %{
#include "javascript/jsapi.h"
#include "javascript/jsapi/binding.h"
+
%}
binding window {
@@ -227,26 +228,31 @@ operation dispatchEvent %{
if (event == JSVAL_VOID) {
jsret = JS_FALSE;
} else {
- dom_event *domevent;
- dom_string *type_dom;
+ struct {
+ dom_event *event;
+ } *event_private;
+ dom_string *type_dom = NULL;
dom_exception exc;
jsval eventval = JSVAL_VOID;
jsval event_argv[1];
jsval event_rval;
- domevent = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL);
- if (domevent == NULL) {
+ event_private = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL);
+ if (event_private->event == NULL) {
/** @todo type error? */
jsret = JS_FALSE;
} else {
- exc = dom_event_get_type(domevent, &type_dom);
- if (dom_string_isequal(type_dom, corestring_dom_load)) {
- JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval);
- }
+ exc = dom_event_get_type(event_private->event, &type_dom);
+ if (exc == DOM_NO_ERR) {
+
+ if (dom_string_isequal(type_dom, corestring_dom_load)) {
+ JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval);
+ }
- if (eventval != JSVAL_VOID) {
- event_argv[0] = event;
- jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval);
+ if (eventval != JSVAL_VOID) {
+ event_argv[0] = eventval;
+ jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval);
+ }
}
}
}
-----------------------------------------------------------------------
Summary of changes:
javascript/jsapi.c | 6 ++++--
javascript/jsapi/window.bnd | 28 +++++++++++++++++-----------
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/javascript/jsapi.c b/javascript/jsapi.c
index 2aa0f89..bec5653 100644
--- a/javascript/jsapi.c
+++ b/javascript/jsapi.c
@@ -150,6 +150,9 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen)
return false;
}
+dom_exception _dom_event_create(dom_document *doc, dom_event **evt);
+#define dom_event_create(d, e) _dom_event_create((dom_document *)(d), (dom_event **) (e))
+
bool js_fire_event(jscontext *ctx, const char *type, void *target)
{
JSContext *cx = (JSContext *)ctx;
@@ -173,8 +176,7 @@ bool js_fire_event(jscontext *ctx, const char *type, void *target)
return false;
}
-/* exc = dom_event_create(document, &event);*/
- exc = -1;
+ exc = dom_event_create(-1, &event);
if (exc != DOM_NO_ERR) {
return false;
}
diff --git a/javascript/jsapi/window.bnd b/javascript/jsapi/window.bnd
index 3f89304..610aa71 100644
--- a/javascript/jsapi/window.bnd
+++ b/javascript/jsapi/window.bnd
@@ -28,6 +28,7 @@ preamble %{
#include "javascript/jsapi.h"
#include "javascript/jsapi/binding.h"
+
%}
binding window {
@@ -227,26 +228,31 @@ operation dispatchEvent %{
if (event == JSVAL_VOID) {
jsret = JS_FALSE;
} else {
- dom_event *domevent;
- dom_string *type_dom;
+ struct {
+ dom_event *event;
+ } *event_private;
+ dom_string *type_dom = NULL;
dom_exception exc;
jsval eventval = JSVAL_VOID;
jsval event_argv[1];
jsval event_rval;
- domevent = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL);
- if (domevent == NULL) {
+ event_private = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL);
+ if (event_private->event == NULL) {
/** @todo type error? */
jsret = JS_FALSE;
} else {
- exc = dom_event_get_type(domevent, &type_dom);
- if (dom_string_isequal(type_dom, corestring_dom_load)) {
- JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval);
- }
+ exc = dom_event_get_type(event_private->event, &type_dom);
+ if (exc == DOM_NO_ERR) {
+
+ if (dom_string_isequal(type_dom, corestring_dom_load)) {
+ JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval);
+ }
- if (eventval != JSVAL_VOID) {
- event_argv[0] = event;
- jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval);
+ if (eventval != JSVAL_VOID) {
+ event_argv[0] = eventval;
+ jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval);
+ }
}
}
}
--
NetSurf Browser
10 years, 2 months
nsgenjsbind: branch master updated. 8c1dc149575cfab4f3fdac91d9fd3c41be9d75bc
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/nsgenjsbind.git/shortlog/8c1dc149575cfab4f...
...commit http://git.netsurf-browser.org/nsgenjsbind.git/commit/8c1dc149575cfab4f3f...
...tree http://git.netsurf-browser.org/nsgenjsbind.git/tree/8c1dc149575cfab4f3fda...
The branch, master has been updated
via 8c1dc149575cfab4f3fdac91d9fd3c41be9d75bc (commit)
from e0e92e4a68a87ebba0583f2a26514f619cc08a30 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/nsgenjsbind.git/commitdiff/8c1dc149575cfab...
commit 8c1dc149575cfab4f3fdac91d9fd3c41be9d75bc
Author: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
Commit: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
generate the correct type name for boolean parameters to operations
diff --git a/src/jsapi-libdom-operator.c b/src/jsapi-libdom-operator.c
index 9560019..f30bdb3 100644
--- a/src/jsapi-libdom-operator.c
+++ b/src/jsapi-libdom-operator.c
@@ -440,7 +440,7 @@ output_variable_definitions(struct binding *binding,
case WEBIDL_TYPE_BOOL:
/* JSBool */
fprintf(binding->outfile,
- "\tjsBool %s = JS_FALSE;\n",
+ "\tJSBool %s = JS_FALSE;\n",
webidl_node_gettext(arg_ident));
break;
-----------------------------------------------------------------------
Summary of changes:
src/jsapi-libdom-operator.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/jsapi-libdom-operator.c b/src/jsapi-libdom-operator.c
index 9560019..f30bdb3 100644
--- a/src/jsapi-libdom-operator.c
+++ b/src/jsapi-libdom-operator.c
@@ -440,7 +440,7 @@ output_variable_definitions(struct binding *binding,
case WEBIDL_TYPE_BOOL:
/* JSBool */
fprintf(binding->outfile,
- "\tjsBool %s = JS_FALSE;\n",
+ "\tJSBool %s = JS_FALSE;\n",
webidl_node_gettext(arg_ident));
break;
--
NetSurf Generator for JavaScript bindings
10 years, 2 months
netsurf: branch master updated. 68f359d1ec2212939f19a25dfb182d08cfa37afd
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/68f359d1ec2212939f19a...
...commit http://git.netsurf-browser.org/netsurf.git/commit/68f359d1ec2212939f19a25...
...tree http://git.netsurf-browser.org/netsurf.git/tree/68f359d1ec2212939f19a25df...
The branch, master has been updated
via 68f359d1ec2212939f19a25dfb182d08cfa37afd (commit)
via fb5d763d757719a552b8849cbdef9c2a1c1c2db0 (commit)
from fefc9ed6bea667d9ed2a8c02e8aafb2ab9e60e31 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/68f359d1ec2212939f1...
commit 68f359d1ec2212939f19a25dfb182d08cfa37afd
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
initial event fireing implementation
diff --git a/Makefile.sources.javascript b/Makefile.sources.javascript
index 2a33565..1ece3b6 100644
--- a/Makefile.sources.javascript
+++ b/Makefile.sources.javascript
@@ -21,6 +21,7 @@ JSAPI_BINDING_htmlcollection := javascript/jsapi/htmlcollection.bnd
JSAPI_BINDING_nodelist := javascript/jsapi/nodelist.bnd
JSAPI_BINDING_text := javascript/jsapi/text.bnd
JSAPI_BINDING_node := javascript/jsapi/node.bnd
+JSAPI_BINDING_event := javascript/jsapi/event.bnd
# 1: input file
# 2: output file
diff --git a/javascript/js.h b/javascript/js.h
index a6566f9..4dd8f15 100644
--- a/javascript/js.h
+++ b/javascript/js.h
@@ -51,4 +51,7 @@ jsobject *js_newcompartment(jscontext *ctx, void *win_priv, void *doc_priv);
/* execute some javascript in a context */
bool js_exec(jscontext *ctx, const char *txt, size_t txtlen);
+/* fire an event at a dom node */
+bool js_fire_event(jscontext *ctx, const char *type, void *target);
+
#endif /* _NETSURF_JAVASCRIPT_JS_H_ */
diff --git a/javascript/jsapi.c b/javascript/jsapi.c
index 35e3da3..2aa0f89 100644
--- a/javascript/jsapi.c
+++ b/javascript/jsapi.c
@@ -149,3 +149,59 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen)
return false;
}
+
+bool js_fire_event(jscontext *ctx, const char *type, void *target)
+{
+ JSContext *cx = (JSContext *)ctx;
+ dom_node *node = target;
+ JSObject *jsevent;
+ jsval rval;
+ jsval argv[1];
+ JSBool ret = JS_TRUE;
+ dom_exception exc;
+ dom_event *event;
+ dom_string *type_dom;
+
+ if (node == NULL) {
+ /* deliver to window */
+ if (cx == NULL) {
+ return false;
+ }
+
+ exc = dom_string_create((unsigned char*)type, strlen(type), &type_dom);
+ if (exc != DOM_NO_ERR) {
+ return false;
+ }
+
+/* exc = dom_event_create(document, &event);*/
+ exc = -1;
+ if (exc != DOM_NO_ERR) {
+ return false;
+ }
+
+ exc = dom_event_init(event, type_dom, false, false);
+ dom_string_unref(type_dom);
+ if (exc != DOM_NO_ERR) {
+ return false;
+ }
+
+ jsevent = jsapi_new_Event(cx, NULL, NULL, event);
+ if (jsevent == NULL) {
+ return false;
+ }
+
+ argv[0] = OBJECT_TO_JSVAL(jsevent);
+
+ ret = JS_CallFunctionName(cx,
+ JS_GetGlobalObject(cx),
+ "dispatchEvent",
+ 1,
+ argv,
+ &rval);
+ }
+
+ if (ret == JS_TRUE) {
+ return true;
+ }
+ return false;
+}
diff --git a/javascript/jsapi/binding.h b/javascript/jsapi/binding.h
index 6d069b9..f274935 100644
--- a/javascript/jsapi/binding.h
+++ b/javascript/jsapi/binding.h
@@ -149,4 +149,11 @@ JSObject *jsapi_new_Node(JSContext *cx,
JSObject *prototype,
JSObject *parent);
+extern JSClass JSClass_Event;
+JSObject *jsapi_InitClass_Event(JSContext *cx, JSObject *parent);
+JSObject *jsapi_new_Event(JSContext *cx,
+ JSObject *prototype,
+ JSObject *parent,
+ dom_event *event);
+
#endif
diff --git a/javascript/jsapi/event.bnd b/javascript/jsapi/event.bnd
new file mode 100644
index 0000000..cc03c92
--- /dev/null
+++ b/javascript/jsapi/event.bnd
@@ -0,0 +1,36 @@
+/* Binding to generate event interface
+ *
+ * Copyright 2012 Vincent Sanders <vince(a)netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * Released under the terms of the MIT License,
+ * http://www.opensource.org/licenses/mit-license
+ */
+
+webidlfile "dom.idl";
+
+hdrcomment "Copyright 2012 Vincent Sanders <vince(a)netsurf-browser.org>";
+hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
+hdrcomment "Released under the terms of the MIT License,";
+hdrcomment " http://www.opensource.org/licenses/mit-license";
+
+preamble %{
+
+#include <dom/dom.h>
+
+#include "utils/config.h"
+#include "utils/log.h"
+
+#include "javascript/jsapi.h"
+#include "javascript/jsapi/binding.h"
+
+%}
+
+binding node {
+ type js_libdom; /* the binding type */
+
+ interface Event; /* Web IDL interface to generate */
+
+ private "dom_event *" event;
+}
diff --git a/javascript/jsapi/window.bnd b/javascript/jsapi/window.bnd
index 7875ab4..3f89304 100644
--- a/javascript/jsapi/window.bnd
+++ b/javascript/jsapi/window.bnd
@@ -23,6 +23,7 @@ preamble %{
#include "utils/config.h"
#include "utils/log.h"
+#include "utils/corestrings.h"
#include "javascript/jsapi.h"
#include "javascript/jsapi/binding.h"
@@ -147,6 +148,11 @@ api init %{
return NULL;
}
+ user_proto = jsapi_InitClass_Event(cx, prototype);
+ if (user_proto == NULL) {
+ return NULL;
+ }
+
%}
api new %{
@@ -211,10 +217,51 @@ getter self %{
jsret = obj;
%}
+/* boolean dispatchEvent(Event event); */
+operation dispatchEvent %{
+ /* this implementation is unique to the window object as it is
+ * not a "real" dom node.
+ */
+
+ /* caution, this must match the struct generated from event.bnd */
+ if (event == JSVAL_VOID) {
+ jsret = JS_FALSE;
+ } else {
+ dom_event *domevent;
+ dom_string *type_dom;
+ dom_exception exc;
+ jsval eventval = JSVAL_VOID;
+ jsval event_argv[1];
+ jsval event_rval;
+
+ domevent = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL);
+ if (domevent == NULL) {
+ /** @todo type error? */
+ jsret = JS_FALSE;
+ } else {
+ exc = dom_event_get_type(domevent, &type_dom);
+ if (dom_string_isequal(type_dom, corestring_dom_load)) {
+ JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval);
+ }
+
+ if (eventval != JSVAL_VOID) {
+ event_argv[0] = event;
+ jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval);
+ }
+ }
+ }
+%}
+
getter EventHandler %{
+ /* this implementation is unique to the window object as it is
+ * not a dom node.
+ */
JSLOG("propname[%d] %s %s", tinyid , jsclass_properties[tinyid].name, JS_GetTypeName(cx, JS_TypeOfValue(cx, tinyid_jsval)));
%}
setter EventHandler %{
+ /* this implementation is unique to the window object as it is
+ * not a dom node.
+ */
JSLOG("propname[%d] %s %s", tinyid, jsclass_properties[tinyid].name, JS_GetTypeName(cx, JS_TypeOfValue(cx, tinyid_jsval)));
%}
diff --git a/javascript/none.c b/javascript/none.c
index b5cfc78..6354a12 100644
--- a/javascript/none.c
+++ b/javascript/none.c
@@ -53,3 +53,8 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen)
{
return true;
}
+
+bool js_fire_event(jscontext *ctx, const char *type, void *target)
+{
+ return true;
+}
diff --git a/render/html.c b/render/html.c
index 548295c..fc60843 100644
--- a/render/html.c
+++ b/render/html.c
@@ -331,6 +331,12 @@ void html_finish_conversion(html_content *c)
}
}
+ /* fire a simple event named load at the Document's Window
+ * object, but with its target set to the Document object (and
+ * the currentTarget set to the Window object)
+ */
+ js_fire_event(c->jscontext, "load", NULL);
+
/* convert dom tree to box tree */
LOG(("DOM to box (%p)", c));
content_set_status(&c->base, messages_get("Processing"));
commitdiff http://git.netsurf-browser.org/netsurf.git/commitdiff/fb5d763d757719a552b...
commit fb5d763d757719a552b8849cbdef9c2a1c1c2db0
Author: Vincent Sanders <vince(a)netsurf-browser.org>
Commit: Vincent Sanders <vince(a)netsurf-browser.org>
extend corestings with event types
diff --git a/utils/corestrings.c b/utils/corestrings.c
index 7697786..ee50757 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -115,45 +115,113 @@ lwc_string *corestring_lwc__top;
/* dom_string strings */
dom_string *corestring_dom_a;
+dom_string *corestring_dom_abort;
+dom_string *corestring_dom_afterprint;
dom_string *corestring_dom_align;
dom_string *corestring_dom_area;
dom_string *corestring_dom_async;
dom_string *corestring_dom_background;
+dom_string *corestring_dom_beforeprint;
+dom_string *corestring_dom_beforeunload;
dom_string *corestring_dom_bgcolor;
+dom_string *corestring_dom_blur;
dom_string *corestring_dom_border;
dom_string *corestring_dom_bordercolor;
+dom_string *corestring_dom_cancel;
+dom_string *corestring_dom_canplay;
+dom_string *corestring_dom_canplaythrough;
dom_string *corestring_dom_cellpadding;
dom_string *corestring_dom_cellspacing;
+dom_string *corestring_dom_change;
+dom_string *corestring_dom_click;
+dom_string *corestring_dom_close;
dom_string *corestring_dom_color;
dom_string *corestring_dom_cols;
dom_string *corestring_dom_content;
+dom_string *corestring_dom_contextmenu;
dom_string *corestring_dom_coords;
+dom_string *corestring_dom_cuechange;
+dom_string *corestring_dom_dblclick;
dom_string *corestring_dom_defer;
+dom_string *corestring_dom_drag;
+dom_string *corestring_dom_dragend;
+dom_string *corestring_dom_dragenter;
+dom_string *corestring_dom_dragleave;
+dom_string *corestring_dom_dragover;
+dom_string *corestring_dom_dragstart;
+dom_string *corestring_dom_drop;
+dom_string *corestring_dom_durationchange;
+dom_string *corestring_dom_emptied;
+dom_string *corestring_dom_ended;
+dom_string *corestring_dom_error;
+dom_string *corestring_dom_focus;
+dom_string *corestring_dom_hashchange;
dom_string *corestring_dom_height;
dom_string *corestring_dom_href;
dom_string *corestring_dom_hreflang;
dom_string *corestring_dom_hspace;
dom_string *corestring_dom_http_equiv;
dom_string *corestring_dom_id;
+dom_string *corestring_dom_input;
+dom_string *corestring_dom_invalid;
+dom_string *corestring_dom_keydown;
+dom_string *corestring_dom_keypress;
+dom_string *corestring_dom_keyup;
dom_string *corestring_dom_link;
+dom_string *corestring_dom_load;
+dom_string *corestring_dom_loadeddata;
+dom_string *corestring_dom_loadedmetadata;
+dom_string *corestring_dom_loadstart;
dom_string *corestring_dom_map;
dom_string *corestring_dom_media;
+dom_string *corestring_dom_message;
+dom_string *corestring_dom_mousedown;
+dom_string *corestring_dom_mousemove;
+dom_string *corestring_dom_mouseout;
+dom_string *corestring_dom_mouseover;
+dom_string *corestring_dom_mouseup;
+dom_string *corestring_dom_mousewheel;
dom_string *corestring_dom_name;
dom_string *corestring_dom_nohref;
+dom_string *corestring_dom_offline;
+dom_string *corestring_dom_online;
+dom_string *corestring_dom_pagehide;
+dom_string *corestring_dom_pageshow;
+dom_string *corestring_dom_pause;
+dom_string *corestring_dom_play;
+dom_string *corestring_dom_playing;
+dom_string *corestring_dom_popstate;
+dom_string *corestring_dom_progress;
+dom_string *corestring_dom_ratechange;
dom_string *corestring_dom_rect;
dom_string *corestring_dom_rel;
+dom_string *corestring_dom_reset;
+dom_string *corestring_dom_resize;
dom_string *corestring_dom_rows;
+dom_string *corestring_dom_scroll;
+dom_string *corestring_dom_seeked;
+dom_string *corestring_dom_seeking;
+dom_string *corestring_dom_select;
+dom_string *corestring_dom_shape;
+dom_string *corestring_dom_show;
dom_string *corestring_dom_size;
dom_string *corestring_dom_sizes;
-dom_string *corestring_dom_shape;
dom_string *corestring_dom_src;
+dom_string *corestring_dom_stalled;
+dom_string *corestring_dom_storage;
+dom_string *corestring_dom_submit;
+dom_string *corestring_dom_suspend;
dom_string *corestring_dom_target;
dom_string *corestring_dom_text;
dom_string *corestring_dom_text_javascript;
+dom_string *corestring_dom_timeupdate;
dom_string *corestring_dom_type;
+dom_string *corestring_dom_unload;
dom_string *corestring_dom_valign;
dom_string *corestring_dom_vlink;
+dom_string *corestring_dom_volumechange;
dom_string *corestring_dom_vspace;
+dom_string *corestring_dom_waiting;
dom_string *corestring_dom_width;
@@ -268,45 +336,113 @@ void corestrings_fini(void)
} while (0)
CSS_DOM_STRING_UNREF(a);
+ CSS_DOM_STRING_UNREF(abort);
+ CSS_DOM_STRING_UNREF(afterprint);
CSS_DOM_STRING_UNREF(align);
CSS_DOM_STRING_UNREF(area);
CSS_DOM_STRING_UNREF(async);
CSS_DOM_STRING_UNREF(background);
+ CSS_DOM_STRING_UNREF(beforeprint);
+ CSS_DOM_STRING_UNREF(beforeunload);
CSS_DOM_STRING_UNREF(bgcolor);
+ CSS_DOM_STRING_UNREF(blur);
CSS_DOM_STRING_UNREF(border);
CSS_DOM_STRING_UNREF(bordercolor);
+ CSS_DOM_STRING_UNREF(cancel);
+ CSS_DOM_STRING_UNREF(canplay);
+ CSS_DOM_STRING_UNREF(canplaythrough);
CSS_DOM_STRING_UNREF(cellpadding);
CSS_DOM_STRING_UNREF(cellspacing);
+ CSS_DOM_STRING_UNREF(change);
+ CSS_DOM_STRING_UNREF(click);
+ CSS_DOM_STRING_UNREF(close);
CSS_DOM_STRING_UNREF(color);
CSS_DOM_STRING_UNREF(cols);
CSS_DOM_STRING_UNREF(content);
+ CSS_DOM_STRING_UNREF(contextmenu);
CSS_DOM_STRING_UNREF(coords);
+ CSS_DOM_STRING_UNREF(cuechange);
+ CSS_DOM_STRING_UNREF(dblclick);
CSS_DOM_STRING_UNREF(defer);
+ CSS_DOM_STRING_UNREF(drag);
+ CSS_DOM_STRING_UNREF(dragend);
+ CSS_DOM_STRING_UNREF(dragenter);
+ CSS_DOM_STRING_UNREF(dragleave);
+ CSS_DOM_STRING_UNREF(dragover);
+ CSS_DOM_STRING_UNREF(dragstart);
+ CSS_DOM_STRING_UNREF(drop);
+ CSS_DOM_STRING_UNREF(durationchange);
+ CSS_DOM_STRING_UNREF(emptied);
+ CSS_DOM_STRING_UNREF(ended);
+ CSS_DOM_STRING_UNREF(error);
+ CSS_DOM_STRING_UNREF(focus);
+ CSS_DOM_STRING_UNREF(hashchange);
CSS_DOM_STRING_UNREF(height);
CSS_DOM_STRING_UNREF(href);
CSS_DOM_STRING_UNREF(hreflang);
CSS_DOM_STRING_UNREF(hspace);
CSS_DOM_STRING_UNREF(http_equiv);
CSS_DOM_STRING_UNREF(id);
+ CSS_DOM_STRING_UNREF(input);
+ CSS_DOM_STRING_UNREF(invalid);
+ CSS_DOM_STRING_UNREF(keydown);
+ CSS_DOM_STRING_UNREF(keypress);
+ CSS_DOM_STRING_UNREF(keyup);
CSS_DOM_STRING_UNREF(link);
+ CSS_DOM_STRING_UNREF(load);
+ CSS_DOM_STRING_UNREF(loadeddata);
+ CSS_DOM_STRING_UNREF(loadedmetadata);
+ CSS_DOM_STRING_UNREF(loadstart);
CSS_DOM_STRING_UNREF(map);
CSS_DOM_STRING_UNREF(media);
+ CSS_DOM_STRING_UNREF(message);
+ CSS_DOM_STRING_UNREF(mousedown);
+ CSS_DOM_STRING_UNREF(mousemove);
+ CSS_DOM_STRING_UNREF(mouseout);
+ CSS_DOM_STRING_UNREF(mouseover);
+ CSS_DOM_STRING_UNREF(mouseup);
+ CSS_DOM_STRING_UNREF(mousewheel);
CSS_DOM_STRING_UNREF(name);
CSS_DOM_STRING_UNREF(nohref);
+ CSS_DOM_STRING_UNREF(offline);
+ CSS_DOM_STRING_UNREF(online);
+ CSS_DOM_STRING_UNREF(pagehide);
+ CSS_DOM_STRING_UNREF(pageshow);
+ CSS_DOM_STRING_UNREF(pause);
+ CSS_DOM_STRING_UNREF(play);
+ CSS_DOM_STRING_UNREF(playing);
+ CSS_DOM_STRING_UNREF(popstate);
+ CSS_DOM_STRING_UNREF(progress);
+ CSS_DOM_STRING_UNREF(ratechange);
CSS_DOM_STRING_UNREF(rect);
CSS_DOM_STRING_UNREF(rel);
+ CSS_DOM_STRING_UNREF(reset);
+ CSS_DOM_STRING_UNREF(resize);
CSS_DOM_STRING_UNREF(rows);
+ CSS_DOM_STRING_UNREF(scroll);
+ CSS_DOM_STRING_UNREF(seeked);
+ CSS_DOM_STRING_UNREF(seeking);
+ CSS_DOM_STRING_UNREF(select);
+ CSS_DOM_STRING_UNREF(shape);
+ CSS_DOM_STRING_UNREF(show);
CSS_DOM_STRING_UNREF(size);
CSS_DOM_STRING_UNREF(sizes);
- CSS_DOM_STRING_UNREF(shape);
CSS_DOM_STRING_UNREF(src);
+ CSS_DOM_STRING_UNREF(stalled);
+ CSS_DOM_STRING_UNREF(storage);
+ CSS_DOM_STRING_UNREF(submit);
+ CSS_DOM_STRING_UNREF(suspend);
CSS_DOM_STRING_UNREF(target);
CSS_DOM_STRING_UNREF(text);
CSS_DOM_STRING_UNREF(text_javascript);
+ CSS_DOM_STRING_UNREF(timeupdate);
CSS_DOM_STRING_UNREF(type);
+ CSS_DOM_STRING_UNREF(unload);
CSS_DOM_STRING_UNREF(valign);
CSS_DOM_STRING_UNREF(vlink);
+ CSS_DOM_STRING_UNREF(volumechange);
CSS_DOM_STRING_UNREF(vspace);
+ CSS_DOM_STRING_UNREF(waiting);
CSS_DOM_STRING_UNREF(width);
#undef CSS_DOM_STRING_UNREF
}
@@ -452,43 +588,112 @@ nserror corestrings_init(void)
} while(0)
CSS_DOM_STRING_INTERN(a);
+ CSS_DOM_STRING_INTERN(abort);
+ CSS_DOM_STRING_INTERN(afterprint);
CSS_DOM_STRING_INTERN(align);
CSS_DOM_STRING_INTERN(area);
CSS_DOM_STRING_INTERN(async);
CSS_DOM_STRING_INTERN(background);
+ CSS_DOM_STRING_INTERN(beforeprint);
+ CSS_DOM_STRING_INTERN(beforeunload);
CSS_DOM_STRING_INTERN(bgcolor);
+ CSS_DOM_STRING_INTERN(blur);
CSS_DOM_STRING_INTERN(border);
CSS_DOM_STRING_INTERN(bordercolor);
+ CSS_DOM_STRING_INTERN(cancel);
+ CSS_DOM_STRING_INTERN(canplay);
+ CSS_DOM_STRING_INTERN(canplaythrough);
CSS_DOM_STRING_INTERN(cellpadding);
CSS_DOM_STRING_INTERN(cellspacing);
+ CSS_DOM_STRING_INTERN(change);
+ CSS_DOM_STRING_INTERN(click);
+ CSS_DOM_STRING_INTERN(close);
CSS_DOM_STRING_INTERN(color);
CSS_DOM_STRING_INTERN(cols);
CSS_DOM_STRING_INTERN(content);
+ CSS_DOM_STRING_INTERN(contextmenu);
CSS_DOM_STRING_INTERN(coords);
+ CSS_DOM_STRING_INTERN(cuechange);
+ CSS_DOM_STRING_INTERN(dblclick);
CSS_DOM_STRING_INTERN(defer);
+ CSS_DOM_STRING_INTERN(drag);
+ CSS_DOM_STRING_INTERN(dragend);
+ CSS_DOM_STRING_INTERN(dragenter);
+ CSS_DOM_STRING_INTERN(dragleave);
+ CSS_DOM_STRING_INTERN(dragover);
+ CSS_DOM_STRING_INTERN(dragstart);
+ CSS_DOM_STRING_INTERN(drop);
+ CSS_DOM_STRING_INTERN(durationchange);
+ CSS_DOM_STRING_INTERN(emptied);
+ CSS_DOM_STRING_INTERN(ended);
+ CSS_DOM_STRING_INTERN(error);
+ CSS_DOM_STRING_INTERN(focus);
+ CSS_DOM_STRING_INTERN(hashchange);
CSS_DOM_STRING_INTERN(height);
CSS_DOM_STRING_INTERN(href);
CSS_DOM_STRING_INTERN(hreflang);
CSS_DOM_STRING_INTERN(hspace);
+ CSS_DOM_STRING_INTERN(http_equiv);
CSS_DOM_STRING_INTERN(id);
+ CSS_DOM_STRING_INTERN(input);
+ CSS_DOM_STRING_INTERN(invalid);
+ CSS_DOM_STRING_INTERN(keydown);
+ CSS_DOM_STRING_INTERN(keypress);
+ CSS_DOM_STRING_INTERN(keyup);
CSS_DOM_STRING_INTERN(link);
+ CSS_DOM_STRING_INTERN(load);
+ CSS_DOM_STRING_INTERN(loadeddata);
+ CSS_DOM_STRING_INTERN(loadedmetadata);
+ CSS_DOM_STRING_INTERN(loadstart);
CSS_DOM_STRING_INTERN(map);
CSS_DOM_STRING_INTERN(media);
+ CSS_DOM_STRING_INTERN(message);
+ CSS_DOM_STRING_INTERN(mousedown);
+ CSS_DOM_STRING_INTERN(mousemove);
+ CSS_DOM_STRING_INTERN(mouseout);
+ CSS_DOM_STRING_INTERN(mouseover);
+ CSS_DOM_STRING_INTERN(mouseup);
+ CSS_DOM_STRING_INTERN(mousewheel);
CSS_DOM_STRING_INTERN(name);
CSS_DOM_STRING_INTERN(nohref);
+ CSS_DOM_STRING_INTERN(offline);
+ CSS_DOM_STRING_INTERN(online);
+ CSS_DOM_STRING_INTERN(pagehide);
+ CSS_DOM_STRING_INTERN(pageshow);
+ CSS_DOM_STRING_INTERN(pause);
+ CSS_DOM_STRING_INTERN(play);
+ CSS_DOM_STRING_INTERN(playing);
+ CSS_DOM_STRING_INTERN(popstate);
+ CSS_DOM_STRING_INTERN(progress);
+ CSS_DOM_STRING_INTERN(ratechange);
CSS_DOM_STRING_INTERN(rect);
CSS_DOM_STRING_INTERN(rel);
+ CSS_DOM_STRING_INTERN(reset);
+ CSS_DOM_STRING_INTERN(resize);
CSS_DOM_STRING_INTERN(rows);
+ CSS_DOM_STRING_INTERN(scroll);
+ CSS_DOM_STRING_INTERN(seeked);
+ CSS_DOM_STRING_INTERN(seeking);
+ CSS_DOM_STRING_INTERN(select);
+ CSS_DOM_STRING_INTERN(shape);
+ CSS_DOM_STRING_INTERN(show);
CSS_DOM_STRING_INTERN(size);
CSS_DOM_STRING_INTERN(sizes);
- CSS_DOM_STRING_INTERN(shape);
CSS_DOM_STRING_INTERN(src);
+ CSS_DOM_STRING_INTERN(stalled);
+ CSS_DOM_STRING_INTERN(storage);
+ CSS_DOM_STRING_INTERN(submit);
+ CSS_DOM_STRING_INTERN(suspend);
CSS_DOM_STRING_INTERN(target);
CSS_DOM_STRING_INTERN(text);
+ CSS_DOM_STRING_INTERN(timeupdate);
CSS_DOM_STRING_INTERN(type);
+ CSS_DOM_STRING_INTERN(unload);
CSS_DOM_STRING_INTERN(valign);
CSS_DOM_STRING_INTERN(vlink);
+ CSS_DOM_STRING_INTERN(volumechange);
CSS_DOM_STRING_INTERN(vspace);
+ CSS_DOM_STRING_INTERN(waiting);
CSS_DOM_STRING_INTERN(width);
#undef CSS_DOM_STRING_INTERN
diff --git a/utils/corestrings.h b/utils/corestrings.h
index b72c53e..e8c9b6f 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -121,45 +121,114 @@ struct dom_string;
/* dom_string strings */
extern struct dom_string *corestring_dom_a;
+extern struct dom_string *corestring_dom_abort;
+extern struct dom_string *corestring_dom_afterprint;
extern struct dom_string *corestring_dom_align;
extern struct dom_string *corestring_dom_area;
extern struct dom_string *corestring_dom_async;
extern struct dom_string *corestring_dom_background;
+extern struct dom_string *corestring_dom_beforeprint;
+extern struct dom_string *corestring_dom_beforeunload;
extern struct dom_string *corestring_dom_bgcolor;
+extern struct dom_string *corestring_dom_blur;
extern struct dom_string *corestring_dom_border;
extern struct dom_string *corestring_dom_bordercolor;
+extern struct dom_string *corestring_dom_cancel;
+extern struct dom_string *corestring_dom_canplay;
+extern struct dom_string *corestring_dom_canplaythrough;
extern struct dom_string *corestring_dom_cellpadding;
extern struct dom_string *corestring_dom_cellspacing;
+extern struct dom_string *corestring_dom_change;
+extern struct dom_string *corestring_dom_click;
+extern struct dom_string *corestring_dom_close;
extern struct dom_string *corestring_dom_color;
extern struct dom_string *corestring_dom_cols;
extern struct dom_string *corestring_dom_content;
+extern struct dom_string *corestring_dom_contextmenu;
extern struct dom_string *corestring_dom_coords;
+extern struct dom_string *corestring_dom_cuechange;
+extern struct dom_string *corestring_dom_dblclick;
extern struct dom_string *corestring_dom_defer;
+extern struct dom_string *corestring_dom_drag;
+extern struct dom_string *corestring_dom_dragend;
+extern struct dom_string *corestring_dom_dragenter;
+extern struct dom_string *corestring_dom_dragleave;
+extern struct dom_string *corestring_dom_dragover;
+extern struct dom_string *corestring_dom_dragstart;
+extern struct dom_string *corestring_dom_drop;
+extern struct dom_string *corestring_dom_durationchange;
+extern struct dom_string *corestring_dom_emptied;
+extern struct dom_string *corestring_dom_ended;
+extern struct dom_string *corestring_dom_error;
+extern struct dom_string *corestring_dom_focus;
+extern struct dom_string *corestring_dom_hashchange;
extern struct dom_string *corestring_dom_height;
extern struct dom_string *corestring_dom_href;
extern struct dom_string *corestring_dom_hreflang;
extern struct dom_string *corestring_dom_hspace;
extern struct dom_string *corestring_dom_http_equiv;
extern struct dom_string *corestring_dom_id;
+extern struct dom_string *corestring_dom_input;
+extern struct dom_string *corestring_dom_invalid;
+extern struct dom_string *corestring_dom_keydown;
+extern struct dom_string *corestring_dom_keypress;
+extern struct dom_string *corestring_dom_keyup;
extern struct dom_string *corestring_dom_link;
+extern struct dom_string *corestring_dom_load;
+extern struct dom_string *corestring_dom_loadeddata;
+extern struct dom_string *corestring_dom_loadedmetadata;
+extern struct dom_string *corestring_dom_loadstart;
extern struct dom_string *corestring_dom_map;
extern struct dom_string *corestring_dom_media;
+extern struct dom_string *corestring_dom_message;
+extern struct dom_string *corestring_dom_mousedown;
+extern struct dom_string *corestring_dom_mousemove;
+extern struct dom_string *corestring_dom_mouseout;
+extern struct dom_string *corestring_dom_mouseover;
+extern struct dom_string *corestring_dom_mouseup;
+extern struct dom_string *corestring_dom_mousewheel;
extern struct dom_string *corestring_dom_name;
extern struct dom_string *corestring_dom_nohref;
+extern struct dom_string *corestring_dom_offline;
+extern struct dom_string *corestring_dom_online;
+extern struct dom_string *corestring_dom_pagehide;
+extern struct dom_string *corestring_dom_pageshow;
+extern struct dom_string *corestring_dom_pause;
+extern struct dom_string *corestring_dom_play;
+extern struct dom_string *corestring_dom_playing;
+extern struct dom_string *corestring_dom_popstate;
+extern struct dom_string *corestring_dom_progress;
+extern struct dom_string *corestring_dom_ratechange;
extern struct dom_string *corestring_dom_rect;
extern struct dom_string *corestring_dom_rel;
+extern struct dom_string *corestring_dom_reset;
+extern struct dom_string *corestring_dom_resize;
extern struct dom_string *corestring_dom_rows;
+extern struct dom_string *corestring_dom_scroll;
+extern struct dom_string *corestring_dom_seeked;
+extern struct dom_string *corestring_dom_seeking;
+extern struct dom_string *corestring_dom_select;
+extern struct dom_string *corestring_dom_shape;
+extern struct dom_string *corestring_dom_show;
extern struct dom_string *corestring_dom_size;
extern struct dom_string *corestring_dom_sizes;
-extern struct dom_string *corestring_dom_shape;
extern struct dom_string *corestring_dom_src;
+extern struct dom_string *corestring_dom_stalled;
+extern struct dom_string *corestring_dom_storage;
+extern struct dom_string *corestring_dom_submit;
+extern struct dom_string *corestring_dom_suspend;
extern struct dom_string *corestring_dom_target;
extern struct dom_string *corestring_dom_text;
extern struct dom_string *corestring_dom_text_javascript;
+extern struct dom_string *corestring_dom_timeupdate;
extern struct dom_string *corestring_dom_type;
+extern struct dom_string *corestring_dom_unload;
extern struct dom_string *corestring_dom_valign;
extern struct dom_string *corestring_dom_vlink;
+extern struct dom_string *corestring_dom_volumechange;
extern struct dom_string *corestring_dom_vspace;
+extern struct dom_string *corestring_dom_waiting;
extern struct dom_string *corestring_dom_width;
+
#endif
-----------------------------------------------------------------------
Summary of changes:
Makefile.sources.javascript | 1 +
javascript/js.h | 3 +
javascript/jsapi.c | 56 ++++++++
javascript/jsapi/binding.h | 7 +
javascript/jsapi/{node.bnd => event.bnd} | 6 +-
javascript/jsapi/window.bnd | 47 +++++++
javascript/none.c | 5 +
render/html.c | 6 +
utils/corestrings.c | 211 +++++++++++++++++++++++++++++-
utils/corestrings.h | 71 ++++++++++-
10 files changed, 407 insertions(+), 6 deletions(-)
copy javascript/jsapi/{node.bnd => event.bnd} (85%)
diff --git a/Makefile.sources.javascript b/Makefile.sources.javascript
index 2a33565..1ece3b6 100644
--- a/Makefile.sources.javascript
+++ b/Makefile.sources.javascript
@@ -21,6 +21,7 @@ JSAPI_BINDING_htmlcollection := javascript/jsapi/htmlcollection.bnd
JSAPI_BINDING_nodelist := javascript/jsapi/nodelist.bnd
JSAPI_BINDING_text := javascript/jsapi/text.bnd
JSAPI_BINDING_node := javascript/jsapi/node.bnd
+JSAPI_BINDING_event := javascript/jsapi/event.bnd
# 1: input file
# 2: output file
diff --git a/javascript/js.h b/javascript/js.h
index a6566f9..4dd8f15 100644
--- a/javascript/js.h
+++ b/javascript/js.h
@@ -51,4 +51,7 @@ jsobject *js_newcompartment(jscontext *ctx, void *win_priv, void *doc_priv);
/* execute some javascript in a context */
bool js_exec(jscontext *ctx, const char *txt, size_t txtlen);
+/* fire an event at a dom node */
+bool js_fire_event(jscontext *ctx, const char *type, void *target);
+
#endif /* _NETSURF_JAVASCRIPT_JS_H_ */
diff --git a/javascript/jsapi.c b/javascript/jsapi.c
index 35e3da3..2aa0f89 100644
--- a/javascript/jsapi.c
+++ b/javascript/jsapi.c
@@ -149,3 +149,59 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen)
return false;
}
+
+bool js_fire_event(jscontext *ctx, const char *type, void *target)
+{
+ JSContext *cx = (JSContext *)ctx;
+ dom_node *node = target;
+ JSObject *jsevent;
+ jsval rval;
+ jsval argv[1];
+ JSBool ret = JS_TRUE;
+ dom_exception exc;
+ dom_event *event;
+ dom_string *type_dom;
+
+ if (node == NULL) {
+ /* deliver to window */
+ if (cx == NULL) {
+ return false;
+ }
+
+ exc = dom_string_create((unsigned char*)type, strlen(type), &type_dom);
+ if (exc != DOM_NO_ERR) {
+ return false;
+ }
+
+/* exc = dom_event_create(document, &event);*/
+ exc = -1;
+ if (exc != DOM_NO_ERR) {
+ return false;
+ }
+
+ exc = dom_event_init(event, type_dom, false, false);
+ dom_string_unref(type_dom);
+ if (exc != DOM_NO_ERR) {
+ return false;
+ }
+
+ jsevent = jsapi_new_Event(cx, NULL, NULL, event);
+ if (jsevent == NULL) {
+ return false;
+ }
+
+ argv[0] = OBJECT_TO_JSVAL(jsevent);
+
+ ret = JS_CallFunctionName(cx,
+ JS_GetGlobalObject(cx),
+ "dispatchEvent",
+ 1,
+ argv,
+ &rval);
+ }
+
+ if (ret == JS_TRUE) {
+ return true;
+ }
+ return false;
+}
diff --git a/javascript/jsapi/binding.h b/javascript/jsapi/binding.h
index 6d069b9..f274935 100644
--- a/javascript/jsapi/binding.h
+++ b/javascript/jsapi/binding.h
@@ -149,4 +149,11 @@ JSObject *jsapi_new_Node(JSContext *cx,
JSObject *prototype,
JSObject *parent);
+extern JSClass JSClass_Event;
+JSObject *jsapi_InitClass_Event(JSContext *cx, JSObject *parent);
+JSObject *jsapi_new_Event(JSContext *cx,
+ JSObject *prototype,
+ JSObject *parent,
+ dom_event *event);
+
#endif
diff --git a/javascript/jsapi/node.bnd b/javascript/jsapi/event.bnd
similarity index 85%
copy from javascript/jsapi/node.bnd
copy to javascript/jsapi/event.bnd
index bcf0ef7..cc03c92 100644
--- a/javascript/jsapi/node.bnd
+++ b/javascript/jsapi/event.bnd
@@ -1,4 +1,4 @@
-/* Binding to generate Node interface
+/* Binding to generate event interface
*
* Copyright 2012 Vincent Sanders <vince(a)netsurf-browser.org>
*
@@ -30,5 +30,7 @@ preamble %{
binding node {
type js_libdom; /* the binding type */
- interface Node; /* Web IDL interface to generate */
+ interface Event; /* Web IDL interface to generate */
+
+ private "dom_event *" event;
}
diff --git a/javascript/jsapi/window.bnd b/javascript/jsapi/window.bnd
index 7875ab4..3f89304 100644
--- a/javascript/jsapi/window.bnd
+++ b/javascript/jsapi/window.bnd
@@ -23,6 +23,7 @@ preamble %{
#include "utils/config.h"
#include "utils/log.h"
+#include "utils/corestrings.h"
#include "javascript/jsapi.h"
#include "javascript/jsapi/binding.h"
@@ -147,6 +148,11 @@ api init %{
return NULL;
}
+ user_proto = jsapi_InitClass_Event(cx, prototype);
+ if (user_proto == NULL) {
+ return NULL;
+ }
+
%}
api new %{
@@ -211,10 +217,51 @@ getter self %{
jsret = obj;
%}
+/* boolean dispatchEvent(Event event); */
+operation dispatchEvent %{
+ /* this implementation is unique to the window object as it is
+ * not a "real" dom node.
+ */
+
+ /* caution, this must match the struct generated from event.bnd */
+ if (event == JSVAL_VOID) {
+ jsret = JS_FALSE;
+ } else {
+ dom_event *domevent;
+ dom_string *type_dom;
+ dom_exception exc;
+ jsval eventval = JSVAL_VOID;
+ jsval event_argv[1];
+ jsval event_rval;
+
+ domevent = JS_GetInstancePrivate(cx, event, &JSClass_Event, NULL);
+ if (domevent == NULL) {
+ /** @todo type error? */
+ jsret = JS_FALSE;
+ } else {
+ exc = dom_event_get_type(domevent, &type_dom);
+ if (dom_string_isequal(type_dom, corestring_dom_load)) {
+ JS_GetProperty(cx, JSAPI_THIS_OBJECT(cx, vp), "onload", &eventval);
+ }
+
+ if (eventval != JSVAL_VOID) {
+ event_argv[0] = event;
+ jsret = JS_CallFunctionValue(cx, NULL, eventval, 1, event_argv, &event_rval);
+ }
+ }
+ }
+%}
+
getter EventHandler %{
+ /* this implementation is unique to the window object as it is
+ * not a dom node.
+ */
JSLOG("propname[%d] %s %s", tinyid , jsclass_properties[tinyid].name, JS_GetTypeName(cx, JS_TypeOfValue(cx, tinyid_jsval)));
%}
setter EventHandler %{
+ /* this implementation is unique to the window object as it is
+ * not a dom node.
+ */
JSLOG("propname[%d] %s %s", tinyid, jsclass_properties[tinyid].name, JS_GetTypeName(cx, JS_TypeOfValue(cx, tinyid_jsval)));
%}
diff --git a/javascript/none.c b/javascript/none.c
index b5cfc78..6354a12 100644
--- a/javascript/none.c
+++ b/javascript/none.c
@@ -53,3 +53,8 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen)
{
return true;
}
+
+bool js_fire_event(jscontext *ctx, const char *type, void *target)
+{
+ return true;
+}
diff --git a/render/html.c b/render/html.c
index 548295c..fc60843 100644
--- a/render/html.c
+++ b/render/html.c
@@ -331,6 +331,12 @@ void html_finish_conversion(html_content *c)
}
}
+ /* fire a simple event named load at the Document's Window
+ * object, but with its target set to the Document object (and
+ * the currentTarget set to the Window object)
+ */
+ js_fire_event(c->jscontext, "load", NULL);
+
/* convert dom tree to box tree */
LOG(("DOM to box (%p)", c));
content_set_status(&c->base, messages_get("Processing"));
diff --git a/utils/corestrings.c b/utils/corestrings.c
index 7697786..ee50757 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -115,45 +115,113 @@ lwc_string *corestring_lwc__top;
/* dom_string strings */
dom_string *corestring_dom_a;
+dom_string *corestring_dom_abort;
+dom_string *corestring_dom_afterprint;
dom_string *corestring_dom_align;
dom_string *corestring_dom_area;
dom_string *corestring_dom_async;
dom_string *corestring_dom_background;
+dom_string *corestring_dom_beforeprint;
+dom_string *corestring_dom_beforeunload;
dom_string *corestring_dom_bgcolor;
+dom_string *corestring_dom_blur;
dom_string *corestring_dom_border;
dom_string *corestring_dom_bordercolor;
+dom_string *corestring_dom_cancel;
+dom_string *corestring_dom_canplay;
+dom_string *corestring_dom_canplaythrough;
dom_string *corestring_dom_cellpadding;
dom_string *corestring_dom_cellspacing;
+dom_string *corestring_dom_change;
+dom_string *corestring_dom_click;
+dom_string *corestring_dom_close;
dom_string *corestring_dom_color;
dom_string *corestring_dom_cols;
dom_string *corestring_dom_content;
+dom_string *corestring_dom_contextmenu;
dom_string *corestring_dom_coords;
+dom_string *corestring_dom_cuechange;
+dom_string *corestring_dom_dblclick;
dom_string *corestring_dom_defer;
+dom_string *corestring_dom_drag;
+dom_string *corestring_dom_dragend;
+dom_string *corestring_dom_dragenter;
+dom_string *corestring_dom_dragleave;
+dom_string *corestring_dom_dragover;
+dom_string *corestring_dom_dragstart;
+dom_string *corestring_dom_drop;
+dom_string *corestring_dom_durationchange;
+dom_string *corestring_dom_emptied;
+dom_string *corestring_dom_ended;
+dom_string *corestring_dom_error;
+dom_string *corestring_dom_focus;
+dom_string *corestring_dom_hashchange;
dom_string *corestring_dom_height;
dom_string *corestring_dom_href;
dom_string *corestring_dom_hreflang;
dom_string *corestring_dom_hspace;
dom_string *corestring_dom_http_equiv;
dom_string *corestring_dom_id;
+dom_string *corestring_dom_input;
+dom_string *corestring_dom_invalid;
+dom_string *corestring_dom_keydown;
+dom_string *corestring_dom_keypress;
+dom_string *corestring_dom_keyup;
dom_string *corestring_dom_link;
+dom_string *corestring_dom_load;
+dom_string *corestring_dom_loadeddata;
+dom_string *corestring_dom_loadedmetadata;
+dom_string *corestring_dom_loadstart;
dom_string *corestring_dom_map;
dom_string *corestring_dom_media;
+dom_string *corestring_dom_message;
+dom_string *corestring_dom_mousedown;
+dom_string *corestring_dom_mousemove;
+dom_string *corestring_dom_mouseout;
+dom_string *corestring_dom_mouseover;
+dom_string *corestring_dom_mouseup;
+dom_string *corestring_dom_mousewheel;
dom_string *corestring_dom_name;
dom_string *corestring_dom_nohref;
+dom_string *corestring_dom_offline;
+dom_string *corestring_dom_online;
+dom_string *corestring_dom_pagehide;
+dom_string *corestring_dom_pageshow;
+dom_string *corestring_dom_pause;
+dom_string *corestring_dom_play;
+dom_string *corestring_dom_playing;
+dom_string *corestring_dom_popstate;
+dom_string *corestring_dom_progress;
+dom_string *corestring_dom_ratechange;
dom_string *corestring_dom_rect;
dom_string *corestring_dom_rel;
+dom_string *corestring_dom_reset;
+dom_string *corestring_dom_resize;
dom_string *corestring_dom_rows;
+dom_string *corestring_dom_scroll;
+dom_string *corestring_dom_seeked;
+dom_string *corestring_dom_seeking;
+dom_string *corestring_dom_select;
+dom_string *corestring_dom_shape;
+dom_string *corestring_dom_show;
dom_string *corestring_dom_size;
dom_string *corestring_dom_sizes;
-dom_string *corestring_dom_shape;
dom_string *corestring_dom_src;
+dom_string *corestring_dom_stalled;
+dom_string *corestring_dom_storage;
+dom_string *corestring_dom_submit;
+dom_string *corestring_dom_suspend;
dom_string *corestring_dom_target;
dom_string *corestring_dom_text;
dom_string *corestring_dom_text_javascript;
+dom_string *corestring_dom_timeupdate;
dom_string *corestring_dom_type;
+dom_string *corestring_dom_unload;
dom_string *corestring_dom_valign;
dom_string *corestring_dom_vlink;
+dom_string *corestring_dom_volumechange;
dom_string *corestring_dom_vspace;
+dom_string *corestring_dom_waiting;
dom_string *corestring_dom_width;
@@ -268,45 +336,113 @@ void corestrings_fini(void)
} while (0)
CSS_DOM_STRING_UNREF(a);
+ CSS_DOM_STRING_UNREF(abort);
+ CSS_DOM_STRING_UNREF(afterprint);
CSS_DOM_STRING_UNREF(align);
CSS_DOM_STRING_UNREF(area);
CSS_DOM_STRING_UNREF(async);
CSS_DOM_STRING_UNREF(background);
+ CSS_DOM_STRING_UNREF(beforeprint);
+ CSS_DOM_STRING_UNREF(beforeunload);
CSS_DOM_STRING_UNREF(bgcolor);
+ CSS_DOM_STRING_UNREF(blur);
CSS_DOM_STRING_UNREF(border);
CSS_DOM_STRING_UNREF(bordercolor);
+ CSS_DOM_STRING_UNREF(cancel);
+ CSS_DOM_STRING_UNREF(canplay);
+ CSS_DOM_STRING_UNREF(canplaythrough);
CSS_DOM_STRING_UNREF(cellpadding);
CSS_DOM_STRING_UNREF(cellspacing);
+ CSS_DOM_STRING_UNREF(change);
+ CSS_DOM_STRING_UNREF(click);
+ CSS_DOM_STRING_UNREF(close);
CSS_DOM_STRING_UNREF(color);
CSS_DOM_STRING_UNREF(cols);
CSS_DOM_STRING_UNREF(content);
+ CSS_DOM_STRING_UNREF(contextmenu);
CSS_DOM_STRING_UNREF(coords);
+ CSS_DOM_STRING_UNREF(cuechange);
+ CSS_DOM_STRING_UNREF(dblclick);
CSS_DOM_STRING_UNREF(defer);
+ CSS_DOM_STRING_UNREF(drag);
+ CSS_DOM_STRING_UNREF(dragend);
+ CSS_DOM_STRING_UNREF(dragenter);
+ CSS_DOM_STRING_UNREF(dragleave);
+ CSS_DOM_STRING_UNREF(dragover);
+ CSS_DOM_STRING_UNREF(dragstart);
+ CSS_DOM_STRING_UNREF(drop);
+ CSS_DOM_STRING_UNREF(durationchange);
+ CSS_DOM_STRING_UNREF(emptied);
+ CSS_DOM_STRING_UNREF(ended);
+ CSS_DOM_STRING_UNREF(error);
+ CSS_DOM_STRING_UNREF(focus);
+ CSS_DOM_STRING_UNREF(hashchange);
CSS_DOM_STRING_UNREF(height);
CSS_DOM_STRING_UNREF(href);
CSS_DOM_STRING_UNREF(hreflang);
CSS_DOM_STRING_UNREF(hspace);
CSS_DOM_STRING_UNREF(http_equiv);
CSS_DOM_STRING_UNREF(id);
+ CSS_DOM_STRING_UNREF(input);
+ CSS_DOM_STRING_UNREF(invalid);
+ CSS_DOM_STRING_UNREF(keydown);
+ CSS_DOM_STRING_UNREF(keypress);
+ CSS_DOM_STRING_UNREF(keyup);
CSS_DOM_STRING_UNREF(link);
+ CSS_DOM_STRING_UNREF(load);
+ CSS_DOM_STRING_UNREF(loadeddata);
+ CSS_DOM_STRING_UNREF(loadedmetadata);
+ CSS_DOM_STRING_UNREF(loadstart);
CSS_DOM_STRING_UNREF(map);
CSS_DOM_STRING_UNREF(media);
+ CSS_DOM_STRING_UNREF(message);
+ CSS_DOM_STRING_UNREF(mousedown);
+ CSS_DOM_STRING_UNREF(mousemove);
+ CSS_DOM_STRING_UNREF(mouseout);
+ CSS_DOM_STRING_UNREF(mouseover);
+ CSS_DOM_STRING_UNREF(mouseup);
+ CSS_DOM_STRING_UNREF(mousewheel);
CSS_DOM_STRING_UNREF(name);
CSS_DOM_STRING_UNREF(nohref);
+ CSS_DOM_STRING_UNREF(offline);
+ CSS_DOM_STRING_UNREF(online);
+ CSS_DOM_STRING_UNREF(pagehide);
+ CSS_DOM_STRING_UNREF(pageshow);
+ CSS_DOM_STRING_UNREF(pause);
+ CSS_DOM_STRING_UNREF(play);
+ CSS_DOM_STRING_UNREF(playing);
+ CSS_DOM_STRING_UNREF(popstate);
+ CSS_DOM_STRING_UNREF(progress);
+ CSS_DOM_STRING_UNREF(ratechange);
CSS_DOM_STRING_UNREF(rect);
CSS_DOM_STRING_UNREF(rel);
+ CSS_DOM_STRING_UNREF(reset);
+ CSS_DOM_STRING_UNREF(resize);
CSS_DOM_STRING_UNREF(rows);
+ CSS_DOM_STRING_UNREF(scroll);
+ CSS_DOM_STRING_UNREF(seeked);
+ CSS_DOM_STRING_UNREF(seeking);
+ CSS_DOM_STRING_UNREF(select);
+ CSS_DOM_STRING_UNREF(shape);
+ CSS_DOM_STRING_UNREF(show);
CSS_DOM_STRING_UNREF(size);
CSS_DOM_STRING_UNREF(sizes);
- CSS_DOM_STRING_UNREF(shape);
CSS_DOM_STRING_UNREF(src);
+ CSS_DOM_STRING_UNREF(stalled);
+ CSS_DOM_STRING_UNREF(storage);
+ CSS_DOM_STRING_UNREF(submit);
+ CSS_DOM_STRING_UNREF(suspend);
CSS_DOM_STRING_UNREF(target);
CSS_DOM_STRING_UNREF(text);
CSS_DOM_STRING_UNREF(text_javascript);
+ CSS_DOM_STRING_UNREF(timeupdate);
CSS_DOM_STRING_UNREF(type);
+ CSS_DOM_STRING_UNREF(unload);
CSS_DOM_STRING_UNREF(valign);
CSS_DOM_STRING_UNREF(vlink);
+ CSS_DOM_STRING_UNREF(volumechange);
CSS_DOM_STRING_UNREF(vspace);
+ CSS_DOM_STRING_UNREF(waiting);
CSS_DOM_STRING_UNREF(width);
#undef CSS_DOM_STRING_UNREF
}
@@ -452,43 +588,112 @@ nserror corestrings_init(void)
} while(0)
CSS_DOM_STRING_INTERN(a);
+ CSS_DOM_STRING_INTERN(abort);
+ CSS_DOM_STRING_INTERN(afterprint);
CSS_DOM_STRING_INTERN(align);
CSS_DOM_STRING_INTERN(area);
CSS_DOM_STRING_INTERN(async);
CSS_DOM_STRING_INTERN(background);
+ CSS_DOM_STRING_INTERN(beforeprint);
+ CSS_DOM_STRING_INTERN(beforeunload);
CSS_DOM_STRING_INTERN(bgcolor);
+ CSS_DOM_STRING_INTERN(blur);
CSS_DOM_STRING_INTERN(border);
CSS_DOM_STRING_INTERN(bordercolor);
+ CSS_DOM_STRING_INTERN(cancel);
+ CSS_DOM_STRING_INTERN(canplay);
+ CSS_DOM_STRING_INTERN(canplaythrough);
CSS_DOM_STRING_INTERN(cellpadding);
CSS_DOM_STRING_INTERN(cellspacing);
+ CSS_DOM_STRING_INTERN(change);
+ CSS_DOM_STRING_INTERN(click);
+ CSS_DOM_STRING_INTERN(close);
CSS_DOM_STRING_INTERN(color);
CSS_DOM_STRING_INTERN(cols);
CSS_DOM_STRING_INTERN(content);
+ CSS_DOM_STRING_INTERN(contextmenu);
CSS_DOM_STRING_INTERN(coords);
+ CSS_DOM_STRING_INTERN(cuechange);
+ CSS_DOM_STRING_INTERN(dblclick);
CSS_DOM_STRING_INTERN(defer);
+ CSS_DOM_STRING_INTERN(drag);
+ CSS_DOM_STRING_INTERN(dragend);
+ CSS_DOM_STRING_INTERN(dragenter);
+ CSS_DOM_STRING_INTERN(dragleave);
+ CSS_DOM_STRING_INTERN(dragover);
+ CSS_DOM_STRING_INTERN(dragstart);
+ CSS_DOM_STRING_INTERN(drop);
+ CSS_DOM_STRING_INTERN(durationchange);
+ CSS_DOM_STRING_INTERN(emptied);
+ CSS_DOM_STRING_INTERN(ended);
+ CSS_DOM_STRING_INTERN(error);
+ CSS_DOM_STRING_INTERN(focus);
+ CSS_DOM_STRING_INTERN(hashchange);
CSS_DOM_STRING_INTERN(height);
CSS_DOM_STRING_INTERN(href);
CSS_DOM_STRING_INTERN(hreflang);
CSS_DOM_STRING_INTERN(hspace);
+ CSS_DOM_STRING_INTERN(http_equiv);
CSS_DOM_STRING_INTERN(id);
+ CSS_DOM_STRING_INTERN(input);
+ CSS_DOM_STRING_INTERN(invalid);
+ CSS_DOM_STRING_INTERN(keydown);
+ CSS_DOM_STRING_INTERN(keypress);
+ CSS_DOM_STRING_INTERN(keyup);
CSS_DOM_STRING_INTERN(link);
+ CSS_DOM_STRING_INTERN(load);
+ CSS_DOM_STRING_INTERN(loadeddata);
+ CSS_DOM_STRING_INTERN(loadedmetadata);
+ CSS_DOM_STRING_INTERN(loadstart);
CSS_DOM_STRING_INTERN(map);
CSS_DOM_STRING_INTERN(media);
+ CSS_DOM_STRING_INTERN(message);
+ CSS_DOM_STRING_INTERN(mousedown);
+ CSS_DOM_STRING_INTERN(mousemove);
+ CSS_DOM_STRING_INTERN(mouseout);
+ CSS_DOM_STRING_INTERN(mouseover);
+ CSS_DOM_STRING_INTERN(mouseup);
+ CSS_DOM_STRING_INTERN(mousewheel);
CSS_DOM_STRING_INTERN(name);
CSS_DOM_STRING_INTERN(nohref);
+ CSS_DOM_STRING_INTERN(offline);
+ CSS_DOM_STRING_INTERN(online);
+ CSS_DOM_STRING_INTERN(pagehide);
+ CSS_DOM_STRING_INTERN(pageshow);
+ CSS_DOM_STRING_INTERN(pause);
+ CSS_DOM_STRING_INTERN(play);
+ CSS_DOM_STRING_INTERN(playing);
+ CSS_DOM_STRING_INTERN(popstate);
+ CSS_DOM_STRING_INTERN(progress);
+ CSS_DOM_STRING_INTERN(ratechange);
CSS_DOM_STRING_INTERN(rect);
CSS_DOM_STRING_INTERN(rel);
+ CSS_DOM_STRING_INTERN(reset);
+ CSS_DOM_STRING_INTERN(resize);
CSS_DOM_STRING_INTERN(rows);
+ CSS_DOM_STRING_INTERN(scroll);
+ CSS_DOM_STRING_INTERN(seeked);
+ CSS_DOM_STRING_INTERN(seeking);
+ CSS_DOM_STRING_INTERN(select);
+ CSS_DOM_STRING_INTERN(shape);
+ CSS_DOM_STRING_INTERN(show);
CSS_DOM_STRING_INTERN(size);
CSS_DOM_STRING_INTERN(sizes);
- CSS_DOM_STRING_INTERN(shape);
CSS_DOM_STRING_INTERN(src);
+ CSS_DOM_STRING_INTERN(stalled);
+ CSS_DOM_STRING_INTERN(storage);
+ CSS_DOM_STRING_INTERN(submit);
+ CSS_DOM_STRING_INTERN(suspend);
CSS_DOM_STRING_INTERN(target);
CSS_DOM_STRING_INTERN(text);
+ CSS_DOM_STRING_INTERN(timeupdate);
CSS_DOM_STRING_INTERN(type);
+ CSS_DOM_STRING_INTERN(unload);
CSS_DOM_STRING_INTERN(valign);
CSS_DOM_STRING_INTERN(vlink);
+ CSS_DOM_STRING_INTERN(volumechange);
CSS_DOM_STRING_INTERN(vspace);
+ CSS_DOM_STRING_INTERN(waiting);
CSS_DOM_STRING_INTERN(width);
#undef CSS_DOM_STRING_INTERN
diff --git a/utils/corestrings.h b/utils/corestrings.h
index b72c53e..e8c9b6f 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -121,45 +121,114 @@ struct dom_string;
/* dom_string strings */
extern struct dom_string *corestring_dom_a;
+extern struct dom_string *corestring_dom_abort;
+extern struct dom_string *corestring_dom_afterprint;
extern struct dom_string *corestring_dom_align;
extern struct dom_string *corestring_dom_area;
extern struct dom_string *corestring_dom_async;
extern struct dom_string *corestring_dom_background;
+extern struct dom_string *corestring_dom_beforeprint;
+extern struct dom_string *corestring_dom_beforeunload;
extern struct dom_string *corestring_dom_bgcolor;
+extern struct dom_string *corestring_dom_blur;
extern struct dom_string *corestring_dom_border;
extern struct dom_string *corestring_dom_bordercolor;
+extern struct dom_string *corestring_dom_cancel;
+extern struct dom_string *corestring_dom_canplay;
+extern struct dom_string *corestring_dom_canplaythrough;
extern struct dom_string *corestring_dom_cellpadding;
extern struct dom_string *corestring_dom_cellspacing;
+extern struct dom_string *corestring_dom_change;
+extern struct dom_string *corestring_dom_click;
+extern struct dom_string *corestring_dom_close;
extern struct dom_string *corestring_dom_color;
extern struct dom_string *corestring_dom_cols;
extern struct dom_string *corestring_dom_content;
+extern struct dom_string *corestring_dom_contextmenu;
extern struct dom_string *corestring_dom_coords;
+extern struct dom_string *corestring_dom_cuechange;
+extern struct dom_string *corestring_dom_dblclick;
extern struct dom_string *corestring_dom_defer;
+extern struct dom_string *corestring_dom_drag;
+extern struct dom_string *corestring_dom_dragend;
+extern struct dom_string *corestring_dom_dragenter;
+extern struct dom_string *corestring_dom_dragleave;
+extern struct dom_string *corestring_dom_dragover;
+extern struct dom_string *corestring_dom_dragstart;
+extern struct dom_string *corestring_dom_drop;
+extern struct dom_string *corestring_dom_durationchange;
+extern struct dom_string *corestring_dom_emptied;
+extern struct dom_string *corestring_dom_ended;
+extern struct dom_string *corestring_dom_error;
+extern struct dom_string *corestring_dom_focus;
+extern struct dom_string *corestring_dom_hashchange;
extern struct dom_string *corestring_dom_height;
extern struct dom_string *corestring_dom_href;
extern struct dom_string *corestring_dom_hreflang;
extern struct dom_string *corestring_dom_hspace;
extern struct dom_string *corestring_dom_http_equiv;
extern struct dom_string *corestring_dom_id;
+extern struct dom_string *corestring_dom_input;
+extern struct dom_string *corestring_dom_invalid;
+extern struct dom_string *corestring_dom_keydown;
+extern struct dom_string *corestring_dom_keypress;
+extern struct dom_string *corestring_dom_keyup;
extern struct dom_string *corestring_dom_link;
+extern struct dom_string *corestring_dom_load;
+extern struct dom_string *corestring_dom_loadeddata;
+extern struct dom_string *corestring_dom_loadedmetadata;
+extern struct dom_string *corestring_dom_loadstart;
extern struct dom_string *corestring_dom_map;
extern struct dom_string *corestring_dom_media;
+extern struct dom_string *corestring_dom_message;
+extern struct dom_string *corestring_dom_mousedown;
+extern struct dom_string *corestring_dom_mousemove;
+extern struct dom_string *corestring_dom_mouseout;
+extern struct dom_string *corestring_dom_mouseover;
+extern struct dom_string *corestring_dom_mouseup;
+extern struct dom_string *corestring_dom_mousewheel;
extern struct dom_string *corestring_dom_name;
extern struct dom_string *corestring_dom_nohref;
+extern struct dom_string *corestring_dom_offline;
+extern struct dom_string *corestring_dom_online;
+extern struct dom_string *corestring_dom_pagehide;
+extern struct dom_string *corestring_dom_pageshow;
+extern struct dom_string *corestring_dom_pause;
+extern struct dom_string *corestring_dom_play;
+extern struct dom_string *corestring_dom_playing;
+extern struct dom_string *corestring_dom_popstate;
+extern struct dom_string *corestring_dom_progress;
+extern struct dom_string *corestring_dom_ratechange;
extern struct dom_string *corestring_dom_rect;
extern struct dom_string *corestring_dom_rel;
+extern struct dom_string *corestring_dom_reset;
+extern struct dom_string *corestring_dom_resize;
extern struct dom_string *corestring_dom_rows;
+extern struct dom_string *corestring_dom_scroll;
+extern struct dom_string *corestring_dom_seeked;
+extern struct dom_string *corestring_dom_seeking;
+extern struct dom_string *corestring_dom_select;
+extern struct dom_string *corestring_dom_shape;
+extern struct dom_string *corestring_dom_show;
extern struct dom_string *corestring_dom_size;
extern struct dom_string *corestring_dom_sizes;
-extern struct dom_string *corestring_dom_shape;
extern struct dom_string *corestring_dom_src;
+extern struct dom_string *corestring_dom_stalled;
+extern struct dom_string *corestring_dom_storage;
+extern struct dom_string *corestring_dom_submit;
+extern struct dom_string *corestring_dom_suspend;
extern struct dom_string *corestring_dom_target;
extern struct dom_string *corestring_dom_text;
extern struct dom_string *corestring_dom_text_javascript;
+extern struct dom_string *corestring_dom_timeupdate;
extern struct dom_string *corestring_dom_type;
+extern struct dom_string *corestring_dom_unload;
extern struct dom_string *corestring_dom_valign;
extern struct dom_string *corestring_dom_vlink;
+extern struct dom_string *corestring_dom_volumechange;
extern struct dom_string *corestring_dom_vspace;
+extern struct dom_string *corestring_dom_waiting;
extern struct dom_string *corestring_dom_width;
+
#endif
--
NetSurf Browser
10 years, 2 months
libsvgtiny: branch master updated. 0f073d1103af4295b1aa9d2be2795f1d745f25e8
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/libsvgtiny.git/shortlog/0f073d1103af4295b1...
...commit http://git.netsurf-browser.org/libsvgtiny.git/commit/0f073d1103af4295b1aa...
...tree http://git.netsurf-browser.org/libsvgtiny.git/tree/0f073d1103af4295b1aa9d...
The branch, master has been updated
via 0f073d1103af4295b1aa9d2be2795f1d745f25e8 (commit)
from 461d400085eba848898d74c92a820b5e3e1d6c49 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/libsvgtiny.git/commitdiff/0f073d1103af4295...
commit 0f073d1103af4295b1aa9d2be2795f1d745f25e8
Author: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
Commit: Chris Young <chris(a)unsatisfactorysoftware.co.uk>
correct target name
diff --git a/Makefile b/Makefile
index ff41860..e4da493 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ WARNFLAGS := -Wall -W -Wundef -Wpointer-arith -Wcast-align \
-Wmissing-declarations -Wnested-externs -pedantic
# BeOS/Haiku/AmigaOS standard library headers create warnings
ifneq ($(TARGET),beos)
- ifneq ($(TARGET),AmigaOS)
+ ifneq ($(TARGET),amiga)
WARNFLAGS := $(WARNFLAGS) -Werror
endif
endif
-----------------------------------------------------------------------
Summary of changes:
Makefile | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/Makefile b/Makefile
index ff41860..e4da493 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ WARNFLAGS := -Wall -W -Wundef -Wpointer-arith -Wcast-align \
-Wmissing-declarations -Wnested-externs -pedantic
# BeOS/Haiku/AmigaOS standard library headers create warnings
ifneq ($(TARGET),beos)
- ifneq ($(TARGET),AmigaOS)
+ ifneq ($(TARGET),amiga)
WARNFLAGS := $(WARNFLAGS) -Werror
endif
endif
--
NetSurf SVG decoder
10 years, 2 months
nsgenjsbind: branch master updated. e0e92e4a68a87ebba0583f2a26514f619cc08a30
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/nsgenjsbind.git/shortlog/e0e92e4a68a87ebba...
...commit http://git.netsurf-browser.org/nsgenjsbind.git/commit/e0e92e4a68a87ebba05...
...tree http://git.netsurf-browser.org/nsgenjsbind.git/tree/e0e92e4a68a87ebba0583...
The branch, master has been updated
via e0e92e4a68a87ebba0583f2a26514f619cc08a30 (commit)
from b29ff13b599730bf3eaec8f142e584f23e78c1fb (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/nsgenjsbind.git/commitdiff/e0e92e4a68a87eb...
commit e0e92e4a68a87ebba0583f2a26514f619cc08a30
Author: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
Commit: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
ensure nullable type extension on strings is obeyed
diff --git a/src/jsapi-libdom-property.c b/src/jsapi-libdom-property.c
index 87cbc10..6bb695a 100644
--- a/src/jsapi-libdom-property.c
+++ b/src/jsapi-libdom-property.c
@@ -437,6 +437,7 @@ static int output_return(struct binding *binding,
{
struct webidl_node *type_node = NULL;
struct webidl_node *type_base = NULL;
+ struct webidl_node *type_nullable = NULL;
enum webidl_type webidl_arg_type;
type_node = webidl_node_find_type(webidl_node_getnode(node),
@@ -449,6 +450,10 @@ static int output_return(struct binding *binding,
webidl_arg_type = webidl_node_getint(type_base);
+ type_nullable = webidl_node_find_type(webidl_node_getnode(type_node),
+ NULL,
+ WEBIDL_NODE_TYPE_TYPE_NULLABLE);
+
switch (webidl_arg_type) {
case WEBIDL_TYPE_USER:
/* User type are represented with jsobject */
@@ -502,6 +507,14 @@ static int output_return(struct binding *binding,
case WEBIDL_TYPE_STRING:
/* JSString * */
+ if (type_nullable == NULL) {
+ /* entry is not nullable ensure it is set to a string */
+ fprintf(binding->outfile,
+ "\tif (%s == NULL) {\n"
+ "\t\t%s = JS_NewStringCopyN(cx, NULL, 0);\n"
+ "\t}\n",
+ ident, ident);
+ }
fprintf(binding->outfile,
"\tJSAPI_PROP_SET_RVAL(cx, vp, JSAPI_STRING_TO_JSVAL(%s));\n",
ident);
-----------------------------------------------------------------------
Summary of changes:
src/jsapi-libdom-property.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/src/jsapi-libdom-property.c b/src/jsapi-libdom-property.c
index 87cbc10..6bb695a 100644
--- a/src/jsapi-libdom-property.c
+++ b/src/jsapi-libdom-property.c
@@ -437,6 +437,7 @@ static int output_return(struct binding *binding,
{
struct webidl_node *type_node = NULL;
struct webidl_node *type_base = NULL;
+ struct webidl_node *type_nullable = NULL;
enum webidl_type webidl_arg_type;
type_node = webidl_node_find_type(webidl_node_getnode(node),
@@ -449,6 +450,10 @@ static int output_return(struct binding *binding,
webidl_arg_type = webidl_node_getint(type_base);
+ type_nullable = webidl_node_find_type(webidl_node_getnode(type_node),
+ NULL,
+ WEBIDL_NODE_TYPE_TYPE_NULLABLE);
+
switch (webidl_arg_type) {
case WEBIDL_TYPE_USER:
/* User type are represented with jsobject */
@@ -502,6 +507,14 @@ static int output_return(struct binding *binding,
case WEBIDL_TYPE_STRING:
/* JSString * */
+ if (type_nullable == NULL) {
+ /* entry is not nullable ensure it is set to a string */
+ fprintf(binding->outfile,
+ "\tif (%s == NULL) {\n"
+ "\t\t%s = JS_NewStringCopyN(cx, NULL, 0);\n"
+ "\t}\n",
+ ident, ident);
+ }
fprintf(binding->outfile,
"\tJSAPI_PROP_SET_RVAL(cx, vp, JSAPI_STRING_TO_JSVAL(%s));\n",
ident);
--
NetSurf Generator for JavaScript bindings
10 years, 2 months