mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
[core,update] split update_send_new_or_existing_window
This commit is contained in:
parent
0aab574bbf
commit
1bfc9c7c1a
@ -2563,6 +2563,132 @@ static UINT16 update_calculate_new_or_existing_window(const WINDOW_ORDER_INFO* o
|
||||
return orderSize;
|
||||
}
|
||||
|
||||
static BOOL update_write_order_field_flags(UINT32 fieldFlags, const WINDOW_STATE_ORDER* stateOrder,
|
||||
wStream* s)
|
||||
{
|
||||
WINPR_ASSERT(stateOrder);
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_OWNER) != 0)
|
||||
Stream_Write_UINT32(s, stateOrder->ownerWindowId);
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_STYLE) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->style);
|
||||
Stream_Write_UINT32(s, stateOrder->extendedStyle);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_SHOW) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, WINPR_ASSERTING_INT_CAST(uint8_t, stateOrder->showState));
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_TITLE) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, stateOrder->titleInfo.length);
|
||||
Stream_Write(s, stateOrder->titleInfo.string, stateOrder->titleInfo.length);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_CLIENT_AREA_OFFSET) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->clientOffsetX);
|
||||
Stream_Write_INT32(s, stateOrder->clientOffsetY);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_CLIENT_AREA_SIZE) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->clientAreaWidth);
|
||||
Stream_Write_UINT32(s, stateOrder->clientAreaHeight);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_RESIZE_MARGIN_X) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginLeft);
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginRight);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_RESIZE_MARGIN_Y) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginTop);
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginBottom);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_RP_CONTENT) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, WINPR_ASSERTING_INT_CAST(uint8_t, stateOrder->RPContent));
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_ROOT_PARENT) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->rootParentHandle);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_WND_OFFSET) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->windowOffsetX);
|
||||
Stream_Write_INT32(s, stateOrder->windowOffsetY);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_WND_CLIENT_DELTA) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->windowClientDeltaX);
|
||||
Stream_Write_INT32(s, stateOrder->windowClientDeltaY);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_WND_SIZE) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->windowWidth);
|
||||
Stream_Write_UINT32(s, stateOrder->windowHeight);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_WND_RECTS) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, WINPR_ASSERTING_INT_CAST(uint16_t, stateOrder->numWindowRects));
|
||||
Stream_Write(s, stateOrder->windowRects, stateOrder->numWindowRects * sizeof(RECTANGLE_16));
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_VIS_OFFSET) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->visibleOffsetX);
|
||||
Stream_Write_INT32(s, stateOrder->visibleOffsetY);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_VISIBILITY) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, WINPR_ASSERTING_INT_CAST(uint16_t, stateOrder->numVisibilityRects));
|
||||
Stream_Write(s, stateOrder->visibilityRects,
|
||||
stateOrder->numVisibilityRects * sizeof(RECTANGLE_16));
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_OVERLAY_DESCRIPTION) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, stateOrder->OverlayDescription.length);
|
||||
Stream_Write(s, stateOrder->OverlayDescription.string,
|
||||
stateOrder->OverlayDescription.length);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_TASKBAR_BUTTON) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->TaskbarButton);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_ENFORCE_SERVER_ZORDER) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->EnforceServerZOrder);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_APPBAR_STATE) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->AppBarState);
|
||||
}
|
||||
|
||||
if ((fieldFlags & WINDOW_ORDER_FIELD_APPBAR_EDGE) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->AppBarEdge);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL update_send_new_or_existing_window(rdpContext* context,
|
||||
const WINDOW_ORDER_INFO* orderInfo,
|
||||
const WINDOW_STATE_ORDER* stateOrder)
|
||||
@ -2592,123 +2718,8 @@ static BOOL update_send_new_or_existing_window(rdpContext* context,
|
||||
Stream_Write_UINT32(s, orderInfo->fieldFlags); /* FieldsPresentFlags (4 bytes) */
|
||||
Stream_Write_UINT32(s, orderInfo->windowId); /* WindowID (4 bytes) */
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_OWNER) != 0)
|
||||
Stream_Write_UINT32(s, stateOrder->ownerWindowId);
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_STYLE) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->style);
|
||||
Stream_Write_UINT32(s, stateOrder->extendedStyle);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_SHOW) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, WINPR_ASSERTING_INT_CAST(uint8_t, stateOrder->showState));
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_TITLE) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, stateOrder->titleInfo.length);
|
||||
Stream_Write(s, stateOrder->titleInfo.string, stateOrder->titleInfo.length);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_CLIENT_AREA_OFFSET) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->clientOffsetX);
|
||||
Stream_Write_INT32(s, stateOrder->clientOffsetY);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_CLIENT_AREA_SIZE) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->clientAreaWidth);
|
||||
Stream_Write_UINT32(s, stateOrder->clientAreaHeight);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_RESIZE_MARGIN_X) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginLeft);
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginRight);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_RESIZE_MARGIN_Y) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginTop);
|
||||
Stream_Write_UINT32(s, stateOrder->resizeMarginBottom);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_RP_CONTENT) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, WINPR_ASSERTING_INT_CAST(uint8_t, stateOrder->RPContent));
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_ROOT_PARENT) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->rootParentHandle);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_WND_OFFSET) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->windowOffsetX);
|
||||
Stream_Write_INT32(s, stateOrder->windowOffsetY);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_WND_CLIENT_DELTA) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->windowClientDeltaX);
|
||||
Stream_Write_INT32(s, stateOrder->windowClientDeltaY);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_WND_SIZE) != 0)
|
||||
{
|
||||
Stream_Write_UINT32(s, stateOrder->windowWidth);
|
||||
Stream_Write_UINT32(s, stateOrder->windowHeight);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_WND_RECTS) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, WINPR_ASSERTING_INT_CAST(uint16_t, stateOrder->numWindowRects));
|
||||
Stream_Write(s, stateOrder->windowRects, stateOrder->numWindowRects * sizeof(RECTANGLE_16));
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_VIS_OFFSET) != 0)
|
||||
{
|
||||
Stream_Write_INT32(s, stateOrder->visibleOffsetX);
|
||||
Stream_Write_INT32(s, stateOrder->visibleOffsetY);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_VISIBILITY) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, WINPR_ASSERTING_INT_CAST(uint16_t, stateOrder->numVisibilityRects));
|
||||
Stream_Write(s, stateOrder->visibilityRects,
|
||||
stateOrder->numVisibilityRects * sizeof(RECTANGLE_16));
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_OVERLAY_DESCRIPTION) != 0)
|
||||
{
|
||||
Stream_Write_UINT16(s, stateOrder->OverlayDescription.length);
|
||||
Stream_Write(s, stateOrder->OverlayDescription.string,
|
||||
stateOrder->OverlayDescription.length);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_TASKBAR_BUTTON) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->TaskbarButton);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_ENFORCE_SERVER_ZORDER) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->EnforceServerZOrder);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_APPBAR_STATE) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->AppBarState);
|
||||
}
|
||||
|
||||
if ((orderInfo->fieldFlags & WINDOW_ORDER_FIELD_APPBAR_EDGE) != 0)
|
||||
{
|
||||
Stream_Write_UINT8(s, stateOrder->AppBarEdge);
|
||||
}
|
||||
if (!update_write_order_field_flags(orderInfo->fieldFlags, stateOrder, s))
|
||||
return FALSE;
|
||||
|
||||
update->numberOrders++;
|
||||
return TRUE;
|
||||
|
Loading…
Reference in New Issue
Block a user