Showing the changes to devwsys (4 of 4 files). Show all
Unified · Split
| @@ -53,7 +53,7 @@ drawnewclient(Draw *draw) · 52 unmodified lines | ||
| 53 | 53 | } |
| 54 | 54 | |
| 55 | 55 | void |
| 56 | −drawreplacescreenimage(Client *cl, Memimage *m) | |
| 56 | +drawreplacescreenimage(Window *w, Memimage *m) | |
| 57 | 57 | { |
| 58 | 58 | /* |
| 59 | 59 | * Replace the screen image because the screen |
| @@ -70,10 +70,10 @@ drawreplacescreenimage(Client *cl, Memimage *m) · 10 unmodified lines | ||
| 70 | 70 | Memimage *om; |
| 71 | 71 | Memimage *screenimage; |
| 72 | 72 | |
| 73 | − screenimage = cl->draw->screenimage; | |
| 73 | + screenimage = w->draw.screenimage; | |
| 74 | 74 | // qlock(&sdraw.lk); |
| 75 | 75 | om = screenimage; |
| 76 | − cl->draw->screenimage = m; | |
| 76 | + w->draw.screenimage = m; | |
| 77 | 77 | // m->screenref = 1; |
| 78 | 78 | // if(om && --om->screenref == 0){ |
| 79 | 79 | // freememimage(om); |
| @@ -288,6 +288,10 @@ drawfreedimage(Draw *draw, DImage *dimage) · 208 unmodified lines | ||
| 288 | 288 | Memimage *l; |
| 289 | 289 | DScreen *ds; |
| 290 | 290 | |
| 291 | +if(!dimage){ | |
| 292 | +print("XXX drawfreedimage on nil dimage\n"); | |
| 293 | +return; | |
| 294 | +} | |
| 291 | 295 | dimage->ref--; |
| 292 | 296 | if(dimage->ref < 0) |
| 293 | 297 | fprint(2, "negative ref in drawfreedimage\n"); |
| @@ -319,8 +323,12 @@ drawfreedimage(Draw *draw, DImage *dimage) · 25 unmodified lines | ||
| 319 | 323 | else |
| 320 | 324 | memlfree(l); |
| 321 | 325 | drawfreedscreen(draw, ds); |
| 322 | − }else | |
| 323 | − freememimage(dimage->image); | |
| 326 | + }else{ | |
| 327 | + // if(l->screenref==0) | |
| 328 | + xfreememimage(l); | |
| 329 | + // else if(--l->screenref==0) | |
| 330 | + // freememimage(l); | |
| 331 | + } | |
| 324 | 332 | Return: |
| 325 | 333 | free(dimage->fchar); |
| 326 | 334 | free(dimage); |
| @@ -849,7 +857,7 @@ drawmesg(Client *client, void *av, int n) · 522 unmodified lines | ||
| 849 | 857 | if(!repl) |
| 850 | 858 | rectclip(&i->clipr, r); |
| 851 | 859 | if(drawinstall(client, dstid, i, 0) == 0){ |
| 852 | − freememimage(i); | |
| 860 | + xfreememimage(i); | |
| 853 | 861 | goto Edrawmem; |
| 854 | 862 | } |
| 855 | 863 | memfillcolor(i, value); |
| @@ -26,6 +26,7 @@ void* nextreq(Reqbuf *reqs); · 25 unmodified lines | ||
| 26 | 26 | void deletewin(Window*); |
| 27 | 27 | Window* newwin(char*, char*); |
| 28 | 28 | int parsewinsize(char*, Rectangle*, int*); |
| 29 | +void drawreplacescreenimage(Window*, Memimage*); | |
| 29 | 30 | void setlabel(Window*, char*); |
| 30 | 31 | |
| 31 | 32 | /* Ixp */ |
| @@ -40,6 +41,7 @@ void xclose(void); · 8 unmodified lines | ||
| 40 | 41 | |
| 41 | 42 | /* X window */ |
| 42 | 43 | Memimage* xallocmemimage(Window*, Rectangle, ulong, int); |
| 44 | +void xfreememimage(Memimage*); | |
| 43 | 45 | void xattach(Window*, char*); |
| 44 | 46 | void xdeletewin(Window*); |
| 45 | 47 | void xflushmemscreen(Window*, Rectangle); |
| @@ -393,6 +393,7 @@ fs_read(Ixp9Req *r) { · 392 unmodified lines | ||
| 393 | 393 | return; |
| 394 | 394 | } |
| 395 | 395 | readrefresh(buf, r->ifcall.io.count, cl); |
| 396 | + ixp_srv_readbuf(r, buf, strlen(buf)); | |
| 396 | 397 | ixp_respond(r, nil); |
| 397 | 398 | return; |
| 398 | 399 | } |
| @@ -36,7 +36,7 @@ xallocmemimage(Window *w, Rectangle r, ulong chan, int pixmap) · 35 unmodified lines | ||
| 36 | 36 | |
| 37 | 37 | xm = mallocz(sizeof(Xmem), 1); |
| 38 | 38 | if(xm == nil){ |
| 39 | − freememimage(m); | |
| 39 | + xfreememimage(m); | |
| 40 | 40 | return nil; |
| 41 | 41 | } |
| 42 | 42 | |
| @@ -71,7 +71,7 @@ xallocmemimage(Window *w, Rectangle r, ulong chan, int pixmap) · 28 unmodified lines | ||
| 71 | 71 | ZPixmap, 0, (char*)m->data->bdata, Dx(r), Dy(r), |
| 72 | 72 | 32, m->width*sizeof(u32int)); |
| 73 | 73 | if(xi == nil){ |
| 74 | − freememimage(m); | |
| 74 | + xfreememimage(m); | |
| 75 | 75 | if(xm->pixmap != pixmap) |
| 76 | 76 | XFreePixmap(xconn.display, xm->pixmap); |
| 77 | 77 | return nil; |
| @@ -97,3 +97,24 @@ xallocmemimage(Window *w, Rectangle r, ulong chan, int pixmap) · 19 unmodified lines | ||
| 97 | 97 | // XXX! TODO m->X = xm; |
| 98 | 98 | return m; |
| 99 | 99 | } |
| 100 | + | |
| 101 | +void | |
| 102 | +xfreememimage(Memimage *m) | |
| 103 | +{ | |
| 104 | + Xmem *xm; | |
| 105 | + | |
| 106 | + if(m == nil) | |
| 107 | + return; | |
| 108 | + | |
| 109 | + xm = nil; // m->X; | |
| 110 | + if(xm && m->data->ref == 1){ | |
| 111 | + if(xm->xi){ | |
| 112 | + xm->xi->data = nil; | |
| 113 | + XFree(xm->xi); | |
| 114 | + } | |
| 115 | + XFreePixmap(xconn.display, xm->pixmap); | |
| 116 | + free(xm); | |
| 117 | + // m->X = nil; | |
| 118 | + } | |
| 119 | + freememimage(m); | |
| 120 | +} | |