void sdlinput_close(void) { if (sdlinput_cursor) pointer_free(-1,sdlinput_cursor); #ifdef CONFIG_SDLSKIN if (sdlinput_map) g_free(sdlinput_map); sdlinput_mapsize = 0; #endif }
static BOOL update_pointer_new(rdpContext* context, const POINTER_NEW_UPDATE* pointer_new) { rdpPointer* pointer; rdpCache* cache; if (!context || !pointer_new) return FALSE; cache = context->cache; pointer = Pointer_Alloc(context); if (!pointer) return FALSE; pointer->xorBpp = pointer_new->xorBpp; pointer->xPos = pointer_new->colorPtrAttr.xPos; pointer->yPos = pointer_new->colorPtrAttr.yPos; pointer->width = pointer_new->colorPtrAttr.width; pointer->height = pointer_new->colorPtrAttr.height; pointer->lengthAndMask = pointer_new->colorPtrAttr.lengthAndMask; pointer->lengthXorMask = pointer_new->colorPtrAttr.lengthXorMask; if (pointer->lengthAndMask) { pointer->andMaskData = (BYTE*) malloc(pointer->lengthAndMask); if (!pointer->andMaskData) goto out_fail; CopyMemory(pointer->andMaskData, pointer_new->colorPtrAttr.andMaskData, pointer->lengthAndMask); } if (pointer->lengthXorMask) { pointer->xorMaskData = (BYTE*) malloc(pointer->lengthXorMask); if (!pointer->xorMaskData) goto out_fail; CopyMemory(pointer->xorMaskData, pointer_new->colorPtrAttr.xorMaskData, pointer->lengthXorMask); } if (!pointer->New(context, pointer)) goto out_fail; if (!pointer_cache_put(cache->pointer, pointer_new->colorPtrAttr.cacheIndex, pointer)) goto out_fail; return pointer->Set(context, pointer); out_fail: pointer_free(context, pointer); return FALSE; }
static BOOL update_pointer_color(rdpContext* context, const POINTER_COLOR_UPDATE* pointer_color) { rdpPointer* pointer; rdpCache* cache = context->cache; pointer = Pointer_Alloc(context); if (pointer != NULL) { pointer->xorBpp = 24; pointer->xPos = pointer_color->xPos; pointer->yPos = pointer_color->yPos; pointer->width = pointer_color->width; pointer->height = pointer_color->height; pointer->lengthAndMask = pointer_color->lengthAndMask; pointer->lengthXorMask = pointer_color->lengthXorMask; if (pointer->lengthAndMask && pointer_color->xorMaskData) { pointer->andMaskData = (BYTE*) malloc(pointer->lengthAndMask); if (!pointer->andMaskData) goto out_fail; CopyMemory(pointer->andMaskData, pointer_color->andMaskData, pointer->lengthAndMask); } if (pointer->lengthXorMask && pointer_color->xorMaskData) { pointer->xorMaskData = (BYTE*) malloc(pointer->lengthXorMask); if (!pointer->xorMaskData) goto out_fail; CopyMemory(pointer->xorMaskData, pointer_color->xorMaskData, pointer->lengthXorMask); } if (!pointer->New(context, pointer)) goto out_fail; if (!pointer_cache_put(cache->pointer, pointer_color->cacheIndex, pointer)) goto out_fail; return pointer->Set(context, pointer); } return FALSE; out_fail: pointer_free(context, pointer); return FALSE; }
BOOL pointer_cache_put(rdpPointerCache* pointer_cache, UINT32 index, rdpPointer* pointer) { rdpPointer* prevPointer; if (index >= pointer_cache->cacheSize) { WLog_ERR(TAG, "invalid pointer index:%"PRIu32"", index); return FALSE; } prevPointer = pointer_cache->entries[index]; pointer_free(pointer_cache->update->context, prevPointer); pointer_cache->entries[index] = pointer; return TRUE; }
void pointer_cache_free(rdpPointerCache* pointer_cache) { if (pointer_cache != NULL) { UINT32 i; rdpPointer* pointer; for (i = 0; i < pointer_cache->cacheSize; i++) { pointer = pointer_cache->entries[i]; pointer_free(pointer_cache->update->context, pointer); } free(pointer_cache->entries); free(pointer_cache); } }
/*! Sets the underlying pointer to the specified value, freeing the * previous pointer and taking ownership of the specified one. */ void pointer_reset(T * p = NULL) noexcept { pointer_free(pointer); pointer = p; }