1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-09-30 03:26:23 -04:00

ecamscript: Delayed submit_given_form.

This probably fixes many bugs.
This commit is contained in:
Witold Filipczyk 2007-03-22 09:52:52 +01:00 committed by Witold Filipczyk
parent 8c30a2a6c7
commit 426e5f2b3b
4 changed files with 30 additions and 2 deletions

View File

@ -947,9 +947,16 @@ js_form_submit(struct SEE_interpreter *interp, struct SEE_object *self,
(struct js_form *)thisobj);
struct form_view *fv = js_form->fv;
struct form *form = find_form_by_form_view(doc_view->document, fv);
struct delayed_submit_form *dsf;
assert(form);
submit_given_form(ses, doc_view, form, 0);
dsf = mem_calloc(1, sizeof(*dsf));
if (dsf) {
dsf->ses = ses;
dsf->vs = vs;
dsf->form = form;
register_bottom_half(delayed_submit_given_form, dsf);
}
SEE_SET_BOOLEAN(res, 0);
}

View File

@ -1065,6 +1065,7 @@ form_submit(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
struct session *ses;
struct form_view *fv;
struct form *form;
struct delayed_submit_form *dsf;
if (!JS_InstanceOf(ctx, obj, (JSClass *) &form_class, argv)) return JS_FALSE;
parent_doc = JS_GetParent(ctx, obj);
@ -1081,7 +1082,13 @@ form_submit(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
form = find_form_by_form_view(doc_view->document, fv);
assert(form);
submit_given_form(ses, doc_view, form, 0);
dsf = mem_calloc(1, sizeof(*dsf));
if (dsf) {
dsf->ses = ses;
dsf->vs = vs;
dsf->form = form;
register_bottom_half(delayed_submit_given_form, dsf);
}
boolean_to_jsval(ctx, rval, 0);

View File

@ -1363,6 +1363,13 @@ submit_given_form(struct session *ses, struct document_view *doc_view,
}
}
void
delayed_submit_given_form(struct delayed_submit_form *dsf)
{
submit_given_form(dsf->ses, dsf->vs->doc_view, dsf->form, 0);
mem_free(dsf);
}
void
auto_submit_form(struct session *ses)
{

View File

@ -89,6 +89,12 @@ struct submitted_value {
int position;
};
struct delayed_submit_form {
struct session *ses;
struct view_state *vs;
struct form *form;
};
struct submitted_value *init_submitted_value(unsigned char *name, unsigned char *value, enum form_type type, struct form_control *fc, int position);
void done_submitted_value(struct submitted_value *sv);
void done_submitted_value_list(struct list_head *list);
@ -114,6 +120,7 @@ void draw_forms(struct terminal *term, struct document_view *doc_view);
enum frame_event_status reset_form(struct session *ses, struct document_view *doc_view, int a);
enum frame_event_status submit_form(struct session *ses, struct document_view *doc_view, int do_reload);
void submit_given_form(struct session *ses, struct document_view *doc_view, struct form *form, int do_reload);
void delayed_submit_given_form(struct delayed_submit_form *dsf);
void auto_submit_form(struct session *ses);
void do_reset_form(struct document_view *doc_view, struct form *form);