static void GrDestroyCursorWrapper(void *r) { nxDestroyCursorReq *req = r; GrDestroyCursor(req->cursorid); }
void GrMouseSetCursor(GrCursor *C) { if (!MOUINFO->displayed && C && (C != MSCURSOR) && COMPATIBLE(C)) { GrCursor *oldcursor = MSCURSOR; if (C->displayed) GrEraseCursor(C); MOUINFO->cursor = C; if (MOUINFO->owncursor) GrDestroyCursor(oldcursor); MOUINFO->owncursor = FALSE; } }
void _GrInitMouseCursor(void) { if (MSCURSOR && !COMPATIBLE(MSCURSOR)) { if (MOUINFO->owncursor) { GrCursor *obsolete = MSCURSOR; MOUINFO->cursor = NULL; MOUINFO->owncursor = FALSE; GrDestroyCursor(obsolete); } MOUINFO->cursor = NULL; } if (MSCURSOR == NULL) { GrMouseSetInternalCursor(GR_MCUR_TYPE_ARROW, GrAllocColor(255, 0, 0), GrBlack()); } if (MSCURSOR && MSCURSOR->displayed) { GrEraseCursor(MSCURSOR); } MOUINFO->cursmode = GR_M_CUR_NORMAL; MOUINFO->displayed = FALSE; MOUINFO->blockflag = 0; MOUINFO->docheck = FALSE; MOUINFO->block = block; MOUINFO->unblock = unblock; }
/* * Destroy windows and eventclient structures used by client. * Called by GsDropClient after a client has exited to clean * up resources. */ void GsDestroyClientResources(GR_CLIENT * client) { GR_WINDOW * wp, *nwp; GR_PIXMAP * pp, *npp; GR_GC * gp, *ngp; GR_REGION * rp, *nrp; GR_FONT * fp, *nfp; GR_CURSOR * cp, *ncp; GR_EVENT_CLIENT *ecp, *necp; GR_EVENT_CLIENT *pecp = NULL; GR_EVENT_LIST *evp; GR_GRABBED_KEY *kp, *nkp; #if MW_FEATURE_IMAGES GR_IMAGE * ip, *nip; #endif #if MW_FEATURE_TIMERS GR_TIMER * tp, *ntp; #endif DPRINTF("Destroy client %d resources\n", client->id); /* search window list, destroy windows owned by client*/ for(wp=listwp; wp; wp=nwp) { nwp = wp->next; /* * Remove eventclient structures for this client */ ecp = wp->eventclients; while (ecp) { necp = ecp->next; if (ecp->client == client) { DPRINTF( " Destroy window %d eventclient mask %08lx\n", wp->id, ecp->eventmask); if (ecp == wp->eventclients) wp->eventclients = ecp->next; else pecp->next = ecp->next; free(ecp); } else pecp = ecp; ecp = necp; } if (wp->owner == client) { DPRINTF(" Destroy window %d\n", wp->id); GrDestroyWindow(wp->id); } } /* search pixmap list, destroy pixmaps owned by client*/ for(pp=listpp; pp; pp=npp) { npp = pp->next; if (pp->owner == client) { DPRINTF(" Destroy pixmap %d\n", pp->id); GrDestroyWindow(pp->id); } } /* free gc's owned by client*/ for(gp=listgcp; gp; gp=ngp) { ngp = gp->next; if (gp->owner == client) { DPRINTF(" Destroy gc %d\n", gp->id); GrDestroyGC(gp->id); } } /* free fonts owned by client*/ for(fp=listfontp; fp; fp=nfp) { nfp = fp->next; if (fp->owner == client) { DPRINTF(" Destroy font %d\n", fp->id); GrDestroyFont(fp->id); } } /* free regions owned by client*/ for(rp=listregionp; rp; rp=nrp) { nrp = rp->next; if (rp->owner == client) { DPRINTF(" Destroy region %d\n", rp->id); GrDestroyRegion(rp->id); } } #if MW_FEATURE_IMAGES /* free images owned by client*/ for(ip=listimagep; ip; ip=nip) { nip = ip->next; if (ip->owner == client) { DPRINTF(" Destroy image %d\n", ip->id); GrFreeImage(ip->id); } } #endif #if MW_FEATURE_TIMERS /* free timers owned by client*/ for(tp=list_timer; tp; tp=ntp) { ntp = tp->next; if (tp->owner == client) { DPRINTF(" Destroy timer %d\n", tp->id); GrDestroyTimer(tp->id); } } #endif /* free cursors owned by client*/ for(cp=listcursorp; cp; cp=ncp) { ncp = cp->next; if (cp->owner == client) { DPRINTF(" Destroy cursor %d\n", cp->id); GrDestroyCursor(cp->id); } } /* Free key grabs associated with client*/ for (kp=list_grabbed_keys; kp; kp = nkp) { nkp = kp->next; if (kp->owner == curclient) { DPRINTF(" Destroy grabkey %d,%d\n", kp->wid, kp->key); GrUngrabKey(kp->wid, kp->key); } } /* Free events associated with client*/ evp = client->eventhead; while (evp) { DPRINTF(" Destroy event %d\n", evp->event.type); client->eventhead = evp->next; evp->next = eventfree; eventfree = evp; evp = client->eventhead; } }
/* * Destroy windows and eventclient structures used by client. * Called by GsDropClient after a client has exited to clean * up resources. */ void GsDestroyClientResources(GR_CLIENT * client) { GR_WINDOW * wp, *nwp; GR_PIXMAP * pp, *npp; GR_GC * gp, *ngp; GR_REGION * rp, *nrp; GR_FONT * fp, *nfp; GR_IMAGE * ip, *nip; GR_CURSOR * cp, *ncp; GR_EVENT_CLIENT *ecp, *necp; GR_EVENT_CLIENT *pecp = NULL; GR_EVENT_LIST *evp; printf("Destroy client %d resources\n", client->id); /* search window list, destroy windows owned by client*/ for(wp=listwp; wp; wp=nwp) { nwp = wp->next; /* * Remove eventclient structures for this client */ ecp = wp->eventclients; while (ecp) { necp = ecp->next; if (ecp->client == client) { printf( " Destroy window %d eventclient mask %08lx\n", wp->id, ecp->eventmask); if (ecp == wp->eventclients) wp->eventclients = ecp->next; else pecp->next = ecp->next; free(ecp); } else pecp = ecp; ecp = necp; } if (wp->owner == client) { printf(" Destroy window %d\n", wp->id); GrDestroyWindow(wp->id); } } /* search pixmap list, destroy pixmaps owned by client*/ for(pp=listpp; pp; pp=npp) { npp = pp->next; if (pp->owner == client) { printf(" Destroy pixmap %d\n", pp->id); GrDestroyWindow(pp->id); } } /* free gc's owned by client*/ for(gp=listgcp; gp; gp=ngp) { ngp = gp->next; if (gp->owner == client) { printf(" Destroy gc %d\n", gp->id); GrDestroyGC(gp->id); } } /* free fonts owned by client*/ for(fp=listfontp; fp; fp=nfp) { nfp = fp->next; if (fp->owner == client) { printf(" Destroy font %d\n", fp->id); GrDestroyFont(fp->id); } } /* free regions owned by client*/ for(rp=listregionp; rp; rp=nrp) { nrp = rp->next; if (rp->owner == client) { printf(" Destroy region %d\n", rp->id); GrDestroyRegion(rp->id); } } /* free images owned by client*/ for(ip=listimagep; ip; ip=nip) { nip = ip->next; if (ip->owner == client) { printf(" Destroy image %d\n", ip->id); GrFreeImage(ip->id); } } /* free cursors owned by client*/ for(cp=listcursorp; cp; cp=ncp) { ncp = cp->next; if (cp->owner == client) { printf(" Destroy cursor %d\n", cp->id); GrDestroyCursor(cp->id); } } /* Free events associated with client*/ evp = client->eventhead; while (evp) { printf(" Destroy event %d\n", evp->event.type); client->eventhead = evp->next; evp->next = eventfree; eventfree = evp; evp = client->eventhead; } }
/* kill cursor */ void ws_killcursor(ws_cursor *cursor) { GrDestroyCursor( (GrCursor *)cursor ); }
int XFreeCursor(Display * display, Cursor cursor) { GrDestroyCursor(cursor); return 1; }