[client,common] add FREERDP_TOUCH_CANCEL

* Add flag FREERDP_TOUCH_CANCEL
* Add function freerdp_handle_touch_cancel
This commit is contained in:
akallabeth
2026-01-25 07:55:37 +01:00
parent a8ca59e290
commit d4ae1a546f
2 changed files with 39 additions and 0 deletions

View File

@@ -1993,6 +1993,42 @@ static BOOL freerdp_handle_touch_motion(rdpClientContext* cctx, const FreeRDP_To
#endif
}
static BOOL freerdp_handle_touch_cancel(rdpClientContext* cctx, const FreeRDP_TouchContact* contact)
{
WINPR_ASSERT(cctx);
WINPR_ASSERT(contact);
#if defined(CHANNEL_RDPEI_CLIENT)
RdpeiClientContext* rdpei = cctx->rdpei;
if (!rdpei)
return freerdp_handle_touch_to_mouse(cctx, false, contact);
int contactId = 0;
if (rdpei->TouchRawEvent)
{
const UINT32 flags = RDPINPUT_CONTACT_FLAG_UPDATE | RDPINPUT_CONTACT_FLAG_CANCELED;
const UINT32 contactFlags = ((contact->flags & FREERDP_TOUCH_HAS_PRESSURE) != 0)
? CONTACT_DATA_PRESSURE_PRESENT
: 0;
rdpei->TouchRawEvent(rdpei, contact->id, contact->x, contact->y, &contactId, flags,
contactFlags, contact->pressure);
}
else
{
WINPR_ASSERT(rdpei->TouchUpdate);
rdpei->TouchEnd(rdpei, contact->id, contact->x, contact->y, &contactId);
}
return TRUE;
#else
WLog_WARN(TAG, "Touch event detected but RDPEI support not compiled in. Recompile with "
"-DCHANNEL_RDPEI_CLIENT=ON");
return freerdp_handle_touch_to_mouse(cctx, false, contact);
#endif
}
static BOOL freerdp_client_touch_update(rdpClientContext* cctx, UINT32 flags, INT32 touchId,
UINT32 pressure, INT32 x, INT32 y,
FreeRDP_TouchContact* pcontact)
@@ -2047,6 +2083,8 @@ BOOL freerdp_client_handle_touch(rdpClientContext* cctx, UINT32 flags, INT32 fin
return freerdp_handle_touch_up(cctx, &contact);
case FREERDP_TOUCH_MOTION:
return freerdp_handle_touch_motion(cctx, &contact);
case FREERDP_TOUCH_CANCEL:
return freerdp_handle_touch_cancel(cctx, &contact);
default:
WLog_WARN(TAG, "Unhandled FreeRDPTouchEventType %" PRIu32 ", ignoring", flags);
return FALSE;

View File

@@ -264,6 +264,7 @@ extern "C"
FREERDP_TOUCH_DOWN = 0x01,
FREERDP_TOUCH_UP = 0x02,
FREERDP_TOUCH_MOTION = 0x04,
FREERDP_TOUCH_CANCEL = 0x08, /** @since version 3.22.0 */
FREERDP_TOUCH_HAS_PRESSURE = 0x100
} FreeRDPTouchEventType;