add system pointer
This commit is contained in:
@@ -702,6 +702,25 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
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
|
||||
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
|
||||
|
||||
@@ -122,6 +122,8 @@ int
|
||||
libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
int bpp, char *data, int x, int y, int cx, int cy);
|
||||
int
|
||||
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type);
|
||||
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);
|
||||
|
||||
@@ -168,6 +168,8 @@ xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags);
|
||||
int
|
||||
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(struct xrdp_wm *self, int cache_idx,
|
||||
char *data, char *mask, int x, int y, int bpp,
|
||||
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,
|
||||
int flags, int frame_id);
|
||||
int
|
||||
server_set_pointer_system(struct xrdp_mod *mod, int pointer_type);
|
||||
int
|
||||
server_set_pointer(struct xrdp_mod *mod, int x, int y,
|
||||
char *data, char *mask);
|
||||
int
|
||||
|
||||
@@ -466,6 +466,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
|
||||
self->mod->server_egfx_cmd = server_egfx_cmd;
|
||||
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->si = &(self->wm->session->si);
|
||||
}
|
||||
}
|
||||
@@ -4457,6 +4458,17 @@ server_egfx_cmd(struct xrdp_mod *mod,
|
||||
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
|
||||
server_set_pointer(struct xrdp_mod *mod, int x, int y,
|
||||
|
||||
+2
-1
@@ -198,7 +198,8 @@ struct xrdp_mod
|
||||
int (*server_egfx_cmd)(struct xrdp_mod *v,
|
||||
char *cmd, int cmd_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 */
|
||||
/* common */
|
||||
tintptr handle; /* pointer to self as int */
|
||||
|
||||
@@ -418,6 +418,13 @@ xrdp_wm_load_pointer(struct xrdp_wm *self, char *file_name, char *data,
|
||||
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
|
||||
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
|
||||
|
||||
@@ -1553,6 +1553,19 @@ process_server_paint_rect_shmfd(struct mod *amod, struct stream *s)
|
||||
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 */
|
||||
static int
|
||||
@@ -1788,6 +1801,9 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
|
||||
case 64: /* server_paint_rect_shmfd */
|
||||
rv = process_server_paint_rect_shmfd(mod, s);
|
||||
break;
|
||||
case 65: /* server_set_pointer_system */
|
||||
rv = process_server_set_pointer_system(mod, s);
|
||||
break;
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_WARNING,
|
||||
"lib_mod_process_orders: unknown order type %d", type);
|
||||
|
||||
@@ -190,7 +190,8 @@ struct mod
|
||||
int (*server_egfx_cmd)(struct mod *v,
|
||||
char *cmd, int cmd_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 */
|
||||
/* common */
|
||||
tintptr handle; /* pointer to self as long */
|
||||
|
||||
Reference in New Issue
Block a user