BOOL shadow_client_refresh_rect(rdpShadowClient* client, BYTE count, RECTANGLE_16* areas) { wMessage message = { 0 }; SHADOW_MSG_IN_REFRESH_OUTPUT* wParam; wMessagePipe* MsgPipe = client->subsystem->MsgPipe; if (count && !areas) return FALSE; if (!(wParam = (SHADOW_MSG_IN_REFRESH_OUTPUT*) calloc(1, sizeof(SHADOW_MSG_IN_REFRESH_OUTPUT)))) return FALSE; wParam->numRects = (UINT32) count; if (wParam->numRects) { wParam->rects = (RECTANGLE_16*) calloc(wParam->numRects, sizeof(RECTANGLE_16)); if (!wParam->rects) { free (wParam); return FALSE; } shadow_client_convert_rects(client, wParam->rects, areas, wParam->numRects); } message.id = SHADOW_MSG_IN_REFRESH_OUTPUT_ID; message.wParam = (void*) wParam; message.lParam = NULL; message.context = (void*) client; message.Free = shadow_client_message_free; return MessageQueue_Dispatch(MsgPipe->In, &message); }
static BOOL shadow_client_refresh_rect(rdpShadowClient* client, BYTE count, RECTANGLE_16* areas) { RECTANGLE_16* rects; /* It is invalid if we have area count but no actual area */ if (count && !areas) return FALSE; if (count) { rects = (RECTANGLE_16*) calloc(count, sizeof(RECTANGLE_16)); if (!rects) { return FALSE; } shadow_client_convert_rects(client, rects, areas, count); shadow_client_mark_invalid(client, count, rects); free(rects); } else { shadow_client_mark_invalid(client, 0, NULL); } return shadow_client_refresh_request(client); }
static BOOL shadow_client_suppress_output(rdpShadowClient* client, BYTE allow, RECTANGLE_16* area) { RECTANGLE_16 region; client->suppressOutput = allow ? FALSE : TRUE; if (allow) { if (area) { shadow_client_convert_rects(client, ®ion, area, 1); shadow_client_mark_invalid(client, 1, ®ion); } else { shadow_client_mark_invalid(client, 0, NULL); } } return shadow_client_refresh_request(client); }
BOOL shadow_client_suppress_output(rdpShadowClient* client, BYTE allow, RECTANGLE_16* area) { wMessage message = { 0 }; SHADOW_MSG_IN_SUPPRESS_OUTPUT* wParam; wMessagePipe* MsgPipe = client->subsystem->MsgPipe; wParam = (SHADOW_MSG_IN_SUPPRESS_OUTPUT*) calloc(1, sizeof(SHADOW_MSG_IN_SUPPRESS_OUTPUT)); if (!wParam) return FALSE; wParam->allow = (UINT32) allow; if (area) shadow_client_convert_rects(client, &(wParam->rect), area, 1); message.id = SHADOW_MSG_IN_SUPPRESS_OUTPUT_ID; message.wParam = (void*) wParam; message.lParam = NULL; message.context = (void*) client; message.Free = shadow_client_message_free; return MessageQueue_Dispatch(MsgPipe->In, &message); }