add move_cursor

This commit is contained in:
Jay Sorg
2026-01-30 18:54:57 -08:00
parent 488c8c7d4d
commit 5637721f5a
8 changed files with 64 additions and 2 deletions
+19
View File
@@ -828,6 +828,25 @@ libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type)
return 0;
}
/*****************************************************************************/
int EXPORT_CC
libxrdp_send_pointer_position(struct xrdp_session *session, int x, int y)
{
struct stream *s;
make_stream(s);
init_stream(s, 8192);
xrdp_rdp_init_data(session->rdp, s);
out_uint16_le(s, TS_PTRMSGTYPE_POSITION);
out_uint16_le(s, 0); /* pad */
out_uint16_le(s, x);
out_uint16_le(s, y);
s_mark_end(s);
xrdp_rdp_send_data(session->rdp, s, PDUTYPE2_POINTER);
free_stream(s);
return 0;
}
/*****************************************************************************/
int EXPORT_CC
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
+2
View File
@@ -142,6 +142,8 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
int
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type);
int
libxrdp_send_pointer_position(struct xrdp_session *session, int x, int y);
int
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
char *data, char *mask, int x, int y, int bpp,
int width, int height);
+2
View File
@@ -168,6 +168,8 @@ xrdp_wm_pu(struct xrdp_wm *self, struct xrdp_bitmap *control);
int
xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type);
int
xrdp_wm_send_pointer_position(struct xrdp_wm *self, int x, int y);
int
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
char *data, char *mask, int x, int y, int bpp,
int width, int height);
+12
View File
@@ -4518,6 +4518,17 @@ server_set_pointer_system(struct xrdp_mod *mod, int pointer_type)
return 0;
}
/*****************************************************************************/
static int
server_set_pointer_position(struct xrdp_mod *mod, int x, int y)
{
struct xrdp_wm *wm;
wm = (struct xrdp_wm *)(mod->wm);
xrdp_wm_send_pointer_position(wm, x, y);
return 0;
}
/*****************************************************************************/
static int
server_set_pointer(struct xrdp_mod *mod, int x, int y,
@@ -5397,6 +5408,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
self->mod->server_set_pointer_large = server_set_pointer_large;
self->mod->server_paint_rects_ex = server_paint_rects_ex;
self->mod->server_set_pointer_system = server_set_pointer_system;
self->mod->server_set_pointer_position = server_set_pointer_position;
self->mod->si = &(self->wm->session->si);
}
}
+2 -1
View File
@@ -199,7 +199,8 @@ struct xrdp_mod
char *cmd, int cmd_bytes,
char *data, int data_bytes);
int (*server_set_pointer_system)(struct xrdp_mod *v, int pointer_type);
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
int (*server_set_pointer_position)(struct xrdp_mod *v, int x, int y);
tintptr server_dumby[100 - 53]; /* align, 100 minus the number of server
functions above */
/* common */
tintptr handle; /* pointer to self as int */
+7
View File
@@ -434,6 +434,13 @@ xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type)
return libxrdp_send_pointer_system(self->session, pointer_type);
}
/*****************************************************************************/
int
xrdp_wm_send_pointer_position(struct xrdp_wm *self, int x, int y)
{
return libxrdp_send_pointer_position(self->session, x, y);
}
/*****************************************************************************/
int
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
+18
View File
@@ -1623,6 +1623,21 @@ process_server_set_pointer_system(struct mod *amod, struct stream *s)
return rv;
}
/******************************************************************************/
/* return error */
static int
process_server_set_pointer_position(struct mod *amod, struct stream *s)
{
int rv;
int x;
int y;
in_uint16_le(s, x);
in_uint16_le(s, y);
rv = amod->server_set_pointer_position(amod, x, y);
return rv;
}
/******************************************************************************/
/* return error */
static int
@@ -1861,6 +1876,9 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
case 65: /* server_set_pointer_system */
rv = process_server_set_pointer_system(mod, s);
break;
case 66: /* server_set_pointer_position */
rv = process_server_set_pointer_position(mod, s);
break;
default:
LOG_DEVEL(LOG_LEVEL_WARNING,
"lib_mod_process_orders: unknown order type %d", type);
+2 -1
View File
@@ -191,7 +191,8 @@ struct mod
char *cmd, int cmd_bytes,
char *data, int data_bytes);
int (*server_set_pointer_system)(struct mod *v, int pointer_type);
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
int (*server_set_pointer_position)(struct mod *v, int x, int y);
tintptr server_dumby[100 - 53]; /* align, 100 minus the number of server
functions above */
/* common */
tintptr handle; /* pointer to self as long */