mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[clients] add checks from #11804 to all clients
This commit is contained in:
@@ -1400,29 +1400,37 @@ BOOL mac_begin_paint(rdpContext *context)
|
||||
|
||||
BOOL mac_end_paint(rdpContext *context)
|
||||
{
|
||||
rdpGdi *gdi;
|
||||
HGDI_RGN invalid;
|
||||
NSRect newDrawRect;
|
||||
int ww, wh, dw, dh;
|
||||
mfContext *mfc = (mfContext *)context;
|
||||
MRDPView *view = (MRDPView *)mfc->view;
|
||||
gdi = context->gdi;
|
||||
|
||||
if (!gdi)
|
||||
return FALSE;
|
||||
|
||||
ww = mfc->client_width;
|
||||
wh = mfc->client_height;
|
||||
dw = freerdp_settings_get_uint32(mfc->common.context.settings, FreeRDP_DesktopWidth);
|
||||
dh = freerdp_settings_get_uint32(mfc->common.context.settings, FreeRDP_DesktopHeight);
|
||||
|
||||
if ((!context) || (!context->gdi))
|
||||
return FALSE;
|
||||
|
||||
if (context->gdi->primary->hdc->hwnd->invalid->null)
|
||||
mfContext *mfc = (mfContext *)context;
|
||||
MRDPView *view = (MRDPView *)mfc->view;
|
||||
WINPR_ASSERT(view);
|
||||
|
||||
rdpGdi *gdi = context->gdi;
|
||||
|
||||
if (!gdi)
|
||||
return FALSE;
|
||||
|
||||
const int ww = mfc->client_width;
|
||||
const int wh = mfc->client_height;
|
||||
const int dw = freerdp_settings_get_uint32(mfc->common.context.settings, FreeRDP_DesktopWidth);
|
||||
const int dh = freerdp_settings_get_uint32(mfc->common.context.settings, FreeRDP_DesktopHeight);
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
invalid = gdi->primary->hdc->hwnd->invalid;
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
|
||||
|
||||
if (hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
HGDI_RGN invalid = gdi->primary->hdc->hwnd->invalid;
|
||||
newDrawRect.origin.x = invalid->x;
|
||||
newDrawRect.origin.y = invalid->y;
|
||||
newDrawRect.size.width = invalid->w;
|
||||
|
||||
@@ -285,7 +285,6 @@ static int error_info_to_error(freerdp* instance, DWORD* pcode, char** msg, size
|
||||
* It can be used to reset invalidated areas. */
|
||||
static BOOL sdl_begin_paint(rdpContext* context)
|
||||
{
|
||||
rdpGdi* gdi = nullptr;
|
||||
auto sdl = get_context(context);
|
||||
|
||||
WINPR_ASSERT(sdl);
|
||||
@@ -301,14 +300,19 @@ static BOOL sdl_begin_paint(rdpContext* context)
|
||||
}
|
||||
sdl->update_complete.clear();
|
||||
|
||||
gdi = context->gdi;
|
||||
auto gdi = context->gdi;
|
||||
WINPR_ASSERT(gdi);
|
||||
WINPR_ASSERT(gdi->primary);
|
||||
WINPR_ASSERT(gdi->primary->hdc);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd->invalid);
|
||||
gdi->primary->hdc->hwnd->invalid->null = TRUE;
|
||||
gdi->primary->hdc->hwnd->ninvalid = 0;
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid);
|
||||
hwnd->invalid->null = TRUE;
|
||||
hwnd->ninvalid = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -437,24 +441,33 @@ static BOOL sdl_draw_to_window(SdlContext* sdl, std::map<Uint32, SdlWindow>& win
|
||||
|
||||
static BOOL sdl_end_paint_process(rdpContext* context)
|
||||
{
|
||||
rdpGdi* gdi = nullptr;
|
||||
auto sdl = get_context(context);
|
||||
|
||||
WINPR_ASSERT(context);
|
||||
|
||||
SdlEventUpdateTriggerGuard guard(sdl);
|
||||
|
||||
gdi = context->gdi;
|
||||
auto gdi = context->gdi;
|
||||
WINPR_ASSERT(gdi);
|
||||
WINPR_ASSERT(gdi->primary);
|
||||
WINPR_ASSERT(gdi->primary->hdc);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd->invalid);
|
||||
if (gdi->suppressOutput || gdi->primary->hdc->hwnd->invalid->null)
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
const INT32 ninvalid = gdi->primary->hdc->hwnd->ninvalid;
|
||||
const GDI_RGN* cinvalid = gdi->primary->hdc->hwnd->cinvalid;
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
|
||||
|
||||
if (hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
WINPR_ASSERT(hwnd->invalid);
|
||||
if (gdi->suppressOutput || hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
const INT32 ninvalid = hwnd->ninvalid;
|
||||
const GDI_RGN* cinvalid = hwnd->cinvalid;
|
||||
|
||||
if (ninvalid < 1)
|
||||
return TRUE;
|
||||
|
||||
@@ -285,11 +285,16 @@ static BOOL sdl_begin_paint(rdpContext* context)
|
||||
auto gdi = context->gdi;
|
||||
WINPR_ASSERT(gdi);
|
||||
WINPR_ASSERT(gdi->primary);
|
||||
WINPR_ASSERT(gdi->primary->hdc);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd->invalid);
|
||||
gdi->primary->hdc->hwnd->invalid->null = TRUE;
|
||||
gdi->primary->hdc->hwnd->ninvalid = 0;
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid);
|
||||
hwnd->invalid->null = TRUE;
|
||||
hwnd->ninvalid = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -377,14 +382,24 @@ static BOOL sdl_end_paint(rdpContext* context)
|
||||
auto gdi = context->gdi;
|
||||
WINPR_ASSERT(gdi);
|
||||
WINPR_ASSERT(gdi->primary);
|
||||
WINPR_ASSERT(gdi->primary->hdc);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd->invalid);
|
||||
if (gdi->suppressOutput || gdi->primary->hdc->hwnd->invalid->null)
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
const INT32 ninvalid = gdi->primary->hdc->hwnd->ninvalid;
|
||||
const GDI_RGN* cinvalid = gdi->primary->hdc->hwnd->cinvalid;
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
|
||||
|
||||
if (hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
WINPR_ASSERT(hwnd->invalid);
|
||||
if (gdi->suppressOutput || hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
const INT32 ninvalid = hwnd->ninvalid;
|
||||
const GDI_RGN* cinvalid = hwnd->cinvalid;
|
||||
|
||||
if (ninvalid < 1)
|
||||
return TRUE;
|
||||
|
||||
@@ -78,11 +78,16 @@ static BOOL tf_end_paint(rdpContext* context)
|
||||
gdi = context->gdi;
|
||||
WINPR_ASSERT(gdi);
|
||||
WINPR_ASSERT(gdi->primary);
|
||||
WINPR_ASSERT(gdi->primary->hdc);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd);
|
||||
WINPR_ASSERT(gdi->primary->hdc->hwnd->invalid);
|
||||
|
||||
if (gdi->primary->hdc->hwnd->invalid->null)
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
|
||||
|
||||
if (hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
return TRUE;
|
||||
|
||||
@@ -120,33 +120,33 @@ fail:
|
||||
|
||||
static BOOL wl_end_paint(rdpContext* context)
|
||||
{
|
||||
rdpGdi* gdi = NULL;
|
||||
wlfContext* context_w = NULL;
|
||||
INT32 x = 0;
|
||||
INT32 y = 0;
|
||||
INT32 w = 0;
|
||||
INT32 h = 0;
|
||||
|
||||
if (!context || !context->gdi || !context->gdi->primary)
|
||||
return FALSE;
|
||||
|
||||
gdi = context->gdi;
|
||||
|
||||
if (gdi->primary->hdc->hwnd->invalid->null)
|
||||
rdpGdi* gdi = context->gdi;
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
x = gdi->primary->hdc->hwnd->invalid->x;
|
||||
y = gdi->primary->hdc->hwnd->invalid->y;
|
||||
w = gdi->primary->hdc->hwnd->invalid->w;
|
||||
h = gdi->primary->hdc->hwnd->invalid->h;
|
||||
context_w = (wlfContext*)context;
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
|
||||
|
||||
if (hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
const INT32 x = hwnd->invalid->x;
|
||||
const INT32 y = hwnd->invalid->y;
|
||||
const INT32 w = hwnd->invalid->w;
|
||||
const INT32 h = hwnd->invalid->h;
|
||||
wlfContext* context_w = (wlfContext*)context;
|
||||
if (!wl_update_buffer(context_w, x, y, w, h))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gdi->primary->hdc->hwnd->invalid->null = TRUE;
|
||||
gdi->primary->hdc->hwnd->ninvalid = 0;
|
||||
hwnd->invalid->null = TRUE;
|
||||
hwnd->ninvalid = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -83,17 +83,30 @@ static BOOL wf_has_console(void)
|
||||
|
||||
static BOOL wf_end_paint(rdpContext* context)
|
||||
{
|
||||
rdpGdi* gdi;
|
||||
int ninvalid;
|
||||
RECT updateRect;
|
||||
HGDI_RGN cinvalid;
|
||||
REGION16 invalidRegion;
|
||||
RECTANGLE_16 invalidRect;
|
||||
const RECTANGLE_16* extents;
|
||||
RECT updateRect = { 0 };
|
||||
REGION16 invalidRegion = { 0 };
|
||||
RECTANGLE_16 invalidRect = { 0 };
|
||||
const RECTANGLE_16* extents = NULL;
|
||||
|
||||
WINPR_ASSERT(context);
|
||||
|
||||
wfContext* wfc = (wfContext*)context;
|
||||
gdi = context->gdi;
|
||||
ninvalid = gdi->primary->hdc->hwnd->ninvalid;
|
||||
cinvalid = gdi->primary->hdc->hwnd->cinvalid;
|
||||
rdpGdi* gdi = context->gdi;
|
||||
WINPR_ASSERT(gdi);
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
|
||||
|
||||
if (hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
const int ninvalid = hwnd->ninvalid;
|
||||
const HGDI_RGN cinvalid = hwnd->cinvalid;
|
||||
|
||||
if (ninvalid < 1)
|
||||
return TRUE;
|
||||
|
||||
@@ -129,20 +129,50 @@ DWORD ios_ui_verify_changed_certificate_ex(freerdp *instance, const char *host,
|
||||
|
||||
BOOL ios_ui_begin_paint(rdpContext *context)
|
||||
{
|
||||
WINPR_ASSERT(context);
|
||||
|
||||
rdpGdi *gdi = context->gdi;
|
||||
gdi->primary->hdc->hwnd->invalid->null = TRUE;
|
||||
WINPR_ASSERT(gdi);
|
||||
WINPR_ASSERT(gdi->primary);
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
if (!hwnd->invalid)
|
||||
return TRUE;
|
||||
hwnd->invalid->null = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL ios_ui_end_paint(rdpContext *context)
|
||||
{
|
||||
mfInfo *mfi = MFI_FROM_INSTANCE(context->instance);
|
||||
rdpGdi *gdi = context->gdi;
|
||||
CGRect dirty_rect =
|
||||
CGRectMake(gdi->primary->hdc->hwnd->invalid->x, gdi->primary->hdc->hwnd->invalid->y,
|
||||
gdi->primary->hdc->hwnd->invalid->w, gdi->primary->hdc->hwnd->invalid->h);
|
||||
WINPR_ASSERT(context);
|
||||
|
||||
if (!gdi->primary->hdc->hwnd->invalid->null)
|
||||
mfInfo *mfi = MFI_FROM_INSTANCE(context->instance);
|
||||
WINPR_ASSERT(mfi);
|
||||
|
||||
rdpGdi *gdi = context->gdi;
|
||||
WINPR_ASSERT(gdi);
|
||||
WINPR_ASSERT(gdi->primary);
|
||||
|
||||
HGDI_DC hdc = gdi->primary->hdc;
|
||||
WINPR_ASSERT(hdc);
|
||||
if (!hdc->hwnd)
|
||||
return TRUE;
|
||||
|
||||
HGDI_WND hwnd = hdc->hwnd;
|
||||
WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
|
||||
|
||||
if (hwnd->invalid->null)
|
||||
return TRUE;
|
||||
|
||||
CGRect dirty_rect =
|
||||
CGRectMake(hwnd->invalid->x, hwnd->invalid->y, hwnd->invalid->w, hwnd->invalid->h);
|
||||
|
||||
if (!hwnd->invalid->null)
|
||||
[mfi->session performSelectorOnMainThread:@selector(setNeedsDisplayInRectAsValue:)
|
||||
withObject:[NSValue valueWithCGRect:dirty_rect]
|
||||
waitUntilDone:NO];
|
||||
|
||||
Reference in New Issue
Block a user