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