Merge pull request #3469 from jsorg71/system_pointer

add system pointer
This commit is contained in:
jsorg71
2025-03-24 11:37:02 -07:00
committed by GitHub
8 changed files with 64 additions and 2 deletions
+19
View File
@@ -702,6 +702,25 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
return 0; return 0;
} }
/*****************************************************************************/
int EXPORT_CC
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type)
{
struct stream *s;
make_stream(s);
init_stream(s, 8192);
xrdp_rdp_init_data((struct xrdp_rdp *)(session->rdp), s);
out_uint16_le(s, RDP_POINTER_SYSTEM);
out_uint16_le(s, 0); /* pad */
out_uint32_le(s, pointer_type);
s_mark_end(s);
xrdp_rdp_send_data((struct xrdp_rdp *)session->rdp, s,
RDP_DATA_PDU_POINTER);
free_stream(s);
return 0;
}
/*****************************************************************************/ /*****************************************************************************/
int EXPORT_CC int EXPORT_CC
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx, libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
+2
View File
@@ -122,6 +122,8 @@ int
libxrdp_send_bitmap(struct xrdp_session *session, int width, int height, libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
int bpp, char *data, int x, int y, int cx, int cy); int bpp, char *data, int x, int y, int cx, int cy);
int int
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type);
int
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx, libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
char *data, char *mask, int x, int y, int bpp, char *data, char *mask, int x, int y, int bpp,
int width, int height); int width, int height);
+4
View File
@@ -168,6 +168,8 @@ xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags);
int int
xrdp_wm_pu(struct xrdp_wm *self, struct xrdp_bitmap *control); xrdp_wm_pu(struct xrdp_wm *self, struct xrdp_bitmap *control);
int int
xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type);
int
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx, xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
char *data, char *mask, int x, int y, int bpp, char *data, char *mask, int x, int y, int bpp,
int width, int height); int width, int height);
@@ -568,6 +570,8 @@ server_paint_rects(struct xrdp_mod *mod, int num_drects, short *drects,
char *data, int width, int height, char *data, int width, int height,
int flags, int frame_id); int flags, int frame_id);
int int
server_set_pointer_system(struct xrdp_mod *mod, int pointer_type);
int
server_set_pointer(struct xrdp_mod *mod, int x, int y, server_set_pointer(struct xrdp_mod *mod, int x, int y,
char *data, char *mask); char *data, char *mask);
int int
+12
View File
@@ -466,6 +466,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
self->mod->server_egfx_cmd = server_egfx_cmd; self->mod->server_egfx_cmd = server_egfx_cmd;
self->mod->server_set_pointer_large = server_set_pointer_large; self->mod->server_set_pointer_large = server_set_pointer_large;
self->mod->server_paint_rects_ex = server_paint_rects_ex; self->mod->server_paint_rects_ex = server_paint_rects_ex;
self->mod->server_set_pointer_system = server_set_pointer_system;
self->mod->si = &(self->wm->session->si); self->mod->si = &(self->wm->session->si);
} }
} }
@@ -4457,6 +4458,17 @@ server_egfx_cmd(struct xrdp_mod *mod,
return 0; return 0;
} }
/*****************************************************************************/
int
server_set_pointer_system(struct xrdp_mod *mod, int pointer_type)
{
struct xrdp_wm *wm;
wm = (struct xrdp_wm *)(mod->wm);
xrdp_wm_send_pointer_system(wm, pointer_type);
return 0;
}
/*****************************************************************************/ /*****************************************************************************/
int int
server_set_pointer(struct xrdp_mod *mod, int x, int y, server_set_pointer(struct xrdp_mod *mod, int x, int y,
+2 -1
View File
@@ -198,7 +198,8 @@ struct xrdp_mod
int (*server_egfx_cmd)(struct xrdp_mod *v, int (*server_egfx_cmd)(struct xrdp_mod *v,
char *cmd, int cmd_bytes, char *cmd, int cmd_bytes,
char *data, int data_bytes); char *data, int data_bytes);
tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server int (*server_set_pointer_system)(struct xrdp_mod *v, int pointer_type);
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
functions above */ functions above */
/* common */ /* common */
tintptr handle; /* pointer to self as int */ tintptr handle; /* pointer to self as int */
+7
View File
@@ -418,6 +418,13 @@ xrdp_wm_load_pointer(struct xrdp_wm *self, char *file_name, char *data,
return 0; return 0;
} }
/*****************************************************************************/
int
xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type)
{
return libxrdp_send_pointer_system(self->session, pointer_type);
}
/*****************************************************************************/ /*****************************************************************************/
int int
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx, xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
+16
View File
@@ -1553,6 +1553,19 @@ process_server_paint_rect_shmfd(struct mod *amod, struct stream *s)
return rv; return rv;
} }
/******************************************************************************/
/* return error */
static int
process_server_set_pointer_system(struct mod *amod, struct stream *s)
{
int rv;
int pointer_type;
in_uint32_le(s, pointer_type);
rv = amod->server_set_pointer_system(amod, pointer_type);
return rv;
}
/******************************************************************************/ /******************************************************************************/
/* return error */ /* return error */
static int static int
@@ -1788,6 +1801,9 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
case 64: /* server_paint_rect_shmfd */ case 64: /* server_paint_rect_shmfd */
rv = process_server_paint_rect_shmfd(mod, s); rv = process_server_paint_rect_shmfd(mod, s);
break; break;
case 65: /* server_set_pointer_system */
rv = process_server_set_pointer_system(mod, s);
break;
default: default:
LOG_DEVEL(LOG_LEVEL_WARNING, LOG_DEVEL(LOG_LEVEL_WARNING,
"lib_mod_process_orders: unknown order type %d", type); "lib_mod_process_orders: unknown order type %d", type);
+2 -1
View File
@@ -190,7 +190,8 @@ struct mod
int (*server_egfx_cmd)(struct mod *v, int (*server_egfx_cmd)(struct mod *v,
char *cmd, int cmd_bytes, char *cmd, int cmd_bytes,
char *data, int data_bytes); char *data, int data_bytes);
tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server int (*server_set_pointer_system)(struct mod *v, int pointer_type);
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
functions above */ functions above */
/* common */ /* common */
tintptr handle; /* pointer to self as long */ tintptr handle; /* pointer to self as long */