16 wininit(Window *w, Window *, Rectangle r)
27 r1.max.y = r1.min.y + font->height;
28 textinit(&w->tag, screen, r1, font, tagcols);
30 r1.min.y = r1.max.y++;
31 draw(screen, r1, tagcols[BORD], nil, ZP);
32 br.min = w->tag.scrollr.min;
33 br.max.x = br.min.x + Dx(button->r);
34 br.max.y = br.min.y + Dy(button->r);
35 draw(screen, br, button, nil, button->r.min);
37 r1.max.y += font->height;
38 textinit(&w->url, screen, r1, font, tagcols);
40 r1.min.y = r1.max.y++;
41 draw(screen, r1, tagcols[BORD], nil, ZP);
43 r1.max.y = r.max.y - font->height - 1;
46 draw(screen, r1, display->white, nil, ZP);
47 r1.min.y = r1.max.y++;
48 draw(screen, r1, tagcols[BORD], nil, ZP);
50 r1.max.y += font->height;
51 textinit(&w->status, screen, r1, font, tagcols);
52 w->status.what = Statustag;
56 winresize(Window *w, Rectangle r, int safe)
62 r1.max.y = r1.min.y + font->height;
63 if(!safe || !eqrect(w->tag.r, r1)){
64 textresize(&w->tag, screen, r1);
65 br.min = w->tag.scrollr.min;
66 br.max.x = r1.min.x + Dx(button->r);
67 br.max.y = r1.min.y + Dy(button->r);
68 draw(screen, br, button, nil, button->r.min);
69 r1.min.y = r1.max.y++;
70 draw(screen, r1, tagcols[BORD], nil, ZP);
72 r1.max.y += font->height;
73 textresize(&w->url, screen, r1);
74 r1.min.y = r1.max.y++;
75 draw(screen, r1, tagcols[BORD], nil, ZP);
78 r1.max.y = r.max.y - font->height - 1;
80 if(!safe || !eqrect(w->page.all, r1)){
85 w->r.max.y = r1.min.y;
88 draw(screen, r1, display->white, nil, ZP);
91 r1.min.y = r1.max.y++;
92 draw(screen, r1, tagcols[BORD], nil, ZP);
95 textresize(&w->status, screen, r1);
108 textclose(&w->status);
110 for(i=0; i<w->history.nurl; i++)
111 urlfree(w->history.url[i]);
112 free(w->history.url);
126 winlock(Window *w, int owner)
142 winsettag1(Window *w)
151 memset(&old, 0, sizeof(Runestr));
152 copyrunestr(&old, &w->tag.rs);
153 for(i=0; i<w->tag.rs.nr; i++)
154 if(old.r[i]==' ' || old.r[i]=='\t')
157 if(runestreq(old, w->page.title) == FALSE){
158 textdelete(&w->tag, 0, i);
159 textinsert(&w->tag, 0, w->page.title.r, w->page.title.nr);
161 copyrunestr(&old, &w->tag.rs);
163 new = runemalloc(w->page.title.nr+100);
165 runemove(new+i, L" Del Snarf", 10);
168 if(w->history.cid > 0){
169 runemove(new+i, L" Back", 5);
172 if(w->history.cid < w->history.nurl-1){
173 runemove(new+i, L" Next", 5);
177 runemove(new+i, L" Stop", 5);
181 runemove(new+i, L" Get", 4);
183 runemove(new+i, L" | ", 3);
185 runemove(new+i, w->page.title.r, w->page.title.nr);
186 i += w->page.title.nr;
188 r = runestrchr(old.r, '|');
195 runemove(new+i, L" Look ", 6);
201 if(runeeq(new, i, old.r, k) == FALSE){
206 if(old.r[j] != new[j])
210 textdelete(&w->tag, j, k);
211 textinsert(&w->tag, j, new+j, i-j);
212 /* try to preserve user selection */
213 r = runestrchr(old.r, '|');
217 bar = (runestrchr(new, '|')-new)-bar;
230 textsetselect(&w->tag, w->tag.q0, w->tag.q1);
232 br.min = w->tag.scrollr.min;
233 br.max.x = br.min.x + Dx(b->r);
234 br.max.y = br.min.y + Dy(b->r);
235 draw(screen, br, b, nil, b->r.min);
242 if(w->col && w->col->safe)
249 if(w->page.url && runestreq(w->url.rs, w->page.url->act)==FALSE)
250 textset(&w->url, w->page.url->act.r, w->page.url->act.nr);
254 winsetstatus(Window *w, Rune *r)
256 if(w->col && w->col->safe)
257 textset(&w->status, r, runestrlen(r));
261 winaddhist(Window *w, Url *u)
266 url = w->history.url;
268 cid = w->history.cid;
270 for(i=cid+1; i<n; i++)
274 w->history.url = erealloc(w->history.url, ++n*sizeof(Url *));
275 w->history.url[n-1] = u;
276 w->history.cid = u->id = n-1;
282 wingohist(Window *w, int isnext)
299 if(n==0 || id<0 || id==n)
302 incref(w->history.url[id]);
303 pageload(p, w->history.url[id], FALSE);
308 wintext(Window *w, Point xy)
311 if(ptinrect(xy, w->tag.all))
313 if(ptinrect(xy, w->url.all))
315 if(ptinrect(xy, w->status.all))
317 if(ptinrect(xy, w->page.all))
324 wintype(Window *w, Point xy, Rune r)
329 if(t && !ptinrect(xy, t->scrollr))
332 pagetype(&w->page, r, xy);
338 winmouse(Window *w, Point xy, int but)
346 pagemouse(&w->page, xy, but);
352 winmousebut(Window *w)
354 moveto(mousectl, divpt(addpt(w->tag.scrollr.min, w->tag.scrollr.max), 2));
358 winclean(Window *, int)
370 fprint(2, "title:\t%S\n", p->title.r);
371 fprint(2, "url:\t%.*S\n",w->url.rs.nr, w->url.rs.r);
372 fprint(2, "aborting:\t%s\n", istrue(p->aborting));
373 fprint(2, "changed:\t%s\n", istrue(p->changed));
374 fprint(2, "loading:\t%s\n", istrue(p->loading));
375 fprint(2, "status:\t%S\n", p->status);
376 fprint(2, "HISTORY:\n");
377 for(i=0; i<w->history.nurl; i++)
378 fprint(2, "url[%d]: %S\n", i, w->history.url[i]->act.r);
381 fprint(2, "name: %S\n", p->kidinfo->name);