$B:dK\$G$9!#(B
>> >> Subject: [w3m-dev 00640] form -> submit -> back
>> >> CLEAR_BUF $B$,$i$_$NLdBj$G$9!#(B
>> >> form $B$N$"$k%Z!<%8$+$i(B submit $BEy$G$I$3$+$XHt$s$G(B(RET)$B$+$i(B
>> >> $BLa$C$F(B('B')$B$/$k$H(B form $B$K@_Dj$7$?>pJs$,A4$F>C$($^$9!#(B
>> >> $B$^$?!"(BCLEAR_BUF $B$H4X78$J$/(B resize $B$7$?;~$b(B form $B$K@_Dj$7$?>pJs$,(B
>> >> $BA4$F>C$($^$9!#(B
>> $BA0$N(B form $B>pJs$r$$$A$$$A%3%T!<$7$F$7$^$&>/!9%Y%?$JJ}K!$G$9$,!"(B
>> $B=$@5$7$^$7$?!#(B
$B$9$_$^$;$s!#>e5-$N=$@5$G$OMn$A$k$3$H$,$"$j$^$9!#(B
patch $B$r:9$7BX$($5$;$F$/$@$5$$!#(B
$B!t(B $B>/!9>iD9$J$b$N$N0BA4B&$K$7$F$"$j$^$9!#(B
-----------------------------------
$B:dK\(B $B9@B'(B <hsaka@mth.biglobe.ne.jp>
http://www2u.biglobe.ne.jp/~hsaka/
w3m-0.1.10 $B$^$G$KDY$;$kCn$ODY$7$F$7$^$*$&!*(B
$B:#EY$3$=!"DY$7$?$D$b$j!#(B
diff -u proto.h.orig proto.h
--- proto.h.orig Tue May 23 00:42:39 2000
+++ proto.h Tue May 23 00:17:26 2000
@@ -236,6 +236,7 @@
extern char *form2str(FormItemList * fi);
extern int formtype(char *typestr);
extern void form_recheck_radio(FormItemList * fi, void *data, void (*update_hook) (FormItemList *, void *));
+extern void formResetBuffer(Buffer * buf, AnchorList * formitem);
extern void formUpdateBuffer(Anchor * a, Buffer * buf, FormItemList * form);
extern Str textfieldrep(Str s, int width);
extern void input_textarea(FormItemList * fi);
diff -u buffer.c.orig buffer.c
--- buffer.c.orig Tue May 23 00:42:55 2000
+++ buffer.c Tue May 23 00:31:20 2000
@@ -423,6 +423,7 @@
{
URLFile f;
int linenum;
+ AnchorList *formitem;
if ((f.stream.f = fopen(buf->sourcefile, "r")) == NULL)
return;
@@ -442,8 +443,13 @@
buf->frameset = popFrameTree(&(buf->frameQ), NULL, NULL);
}
- buf->width = INIT_BUFFER_WIDTH;
+ formitem = buf->formitem;
buf->href = NULL;
+ buf->name = NULL;
+ buf->img = NULL;
+ buf->formitem = NULL;
+ buf->width = INIT_BUFFER_WIDTH;
+
loadHTMLstream(&f, buf, NULL);
buf->topLine = buf->firstLine;
@@ -452,6 +458,7 @@
buf->height = LASTLINE + 1;
gotoLine(buf, linenum);
arrangeCursor(buf);
+ formResetBuffer(buf, formitem);
f.close(f.stream);
}
diff -u display.c.orig display.c
--- display.c.orig Tue May 23 00:43:05 2000
+++ display.c Tue May 23 00:31:24 2000
@@ -182,10 +182,14 @@
Str msg = Strnew();
Anchor *aa;
#ifdef CLEAR_BUF
+ AnchorList *formitem;
+
if (buf->sourcefile != NULL && buf->topLine == NULL) {
+ formitem = buf->formitem;
reloadBuffer(buf);
gotoLine(buf,buf->currentLineNum);
arrangeCursor(buf);
+ formResetBuffer(buf, formitem);
mode = B_FORCE_REDRAW;
}
#endif
diff -u file.c.orig file.c
--- file.c.orig Tue May 23 00:43:12 2000
+++ file.c Tue May 23 00:30:18 2000
@@ -5606,6 +5606,9 @@
is_redisplay = TRUE;
buf->allLine = 0;
buf->href = NULL;
+ buf->name = NULL;
+ buf->img = NULL;
+ buf->formitem = NULL;
if (!strcasecmp(buf->type,"text/html"))
loadHTMLBuffer(&uf,buf);
else
diff -u form.c.orig form.c
--- form.c.orig Tue May 23 00:43:25 2000
+++ form.c Tue May 23 02:08:13 2000
@@ -225,13 +225,50 @@
}
void
+formResetBuffer(Buffer * buf, AnchorList * formitem)
+{
+ int i;
+ Anchor *a;
+ FormItemList *f1, *f2;
+
+ if (buf == NULL || buf->formitem == NULL || formitem == NULL)
+ return;
+ for (i = 0; i < buf->formitem->nanchor && i < formitem->nanchor; i++) {
+ a = &buf->formitem->anchors[i];
+ f1 = (FormItemList *) a->url;
+ f2 = (FormItemList *) formitem->anchors[i].url;
+ switch(f1->type) {
+ case FORM_INPUT_TEXT:
+ case FORM_INPUT_PASSWORD:
+ case FORM_INPUT_FILE:
+ case FORM_TEXTAREA:
+ f1->value = f2->value;
+ break;
+ case FORM_INPUT_CHECKBOX:
+ case FORM_INPUT_RADIO:
+ f1->checked = f2->checked;
+ break;
+ case FORM_SELECT:
+#ifdef MENU_SELECT
+ f1->select_option = f2->select_option;
+ f1->label = f2->label;
+#endif
+ break;
+ default:
+ continue;
+ }
+ formUpdateBuffer(a, buf, f1);
+ }
+}
+
+void
formUpdateBuffer(Anchor * a, Buffer * buf, FormItemList * form)
{
int i,
j,
c_type = PC_ASCII;
Buffer save;
- char *p = form->value->ptr;
+ char *p;
int spos,
epos;
@@ -262,15 +299,17 @@
else
buf->currentLine->lineBuf[spos + 1] = ' ';
break;
-#ifdef MENU_SELECT
- case FORM_SELECT:
- p = form->label->ptr;
- /* continue to the next label */
-#endif /* MENU_SELECT */
case FORM_INPUT_TEXT:
case FORM_INPUT_FILE:
case FORM_INPUT_PASSWORD:
case FORM_TEXTAREA:
+#ifdef MENU_SELECT
+ case FORM_SELECT:
+ if (form->type == FORM_SELECT)
+ p = form->label->ptr;
+ else
+#endif /* MENU_SELECT */
+ p = form->value->ptr;
j = 0;
for (i = spos + 1; i < epos; i++) {
if (p[j] == '\0')
This archive was generated by hypermail 2b29 : Wed Jul 19 2000 - 10:30:55 CDT