Skip to content

Commit aac4946

Browse files
authored
Merge pull request neutrinolabs#3469 from jsorg71/system_pointer
add system pointer
2 parents 7d8a267 + 522b575 commit aac4946

File tree

8 files changed

+64
-2
lines changed

8 files changed

+64
-2
lines changed

libxrdp/libxrdp.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,25 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
702702
return 0;
703703
}
704704

705+
/*****************************************************************************/
706+
int EXPORT_CC
707+
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type)
708+
{
709+
struct stream *s;
710+
711+
make_stream(s);
712+
init_stream(s, 8192);
713+
xrdp_rdp_init_data((struct xrdp_rdp *)(session->rdp), s);
714+
out_uint16_le(s, RDP_POINTER_SYSTEM);
715+
out_uint16_le(s, 0); /* pad */
716+
out_uint32_le(s, pointer_type);
717+
s_mark_end(s);
718+
xrdp_rdp_send_data((struct xrdp_rdp *)session->rdp, s,
719+
RDP_DATA_PDU_POINTER);
720+
free_stream(s);
721+
return 0;
722+
}
723+
705724
/*****************************************************************************/
706725
int EXPORT_CC
707726
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,

libxrdp/libxrdpinc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ int
122122
libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
123123
int bpp, char *data, int x, int y, int cx, int cy);
124124
int
125+
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type);
126+
int
125127
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
126128
char *data, char *mask, int x, int y, int bpp,
127129
int width, int height);

xrdp/xrdp.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags);
168168
int
169169
xrdp_wm_pu(struct xrdp_wm *self, struct xrdp_bitmap *control);
170170
int
171+
xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type);
172+
int
171173
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
172174
char *data, char *mask, int x, int y, int bpp,
173175
int width, int height);
@@ -568,6 +570,8 @@ server_paint_rects(struct xrdp_mod *mod, int num_drects, short *drects,
568570
char *data, int width, int height,
569571
int flags, int frame_id);
570572
int
573+
server_set_pointer_system(struct xrdp_mod *mod, int pointer_type);
574+
int
571575
server_set_pointer(struct xrdp_mod *mod, int x, int y,
572576
char *data, char *mask);
573577
int

xrdp/xrdp_mm.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
466466
self->mod->server_egfx_cmd = server_egfx_cmd;
467467
self->mod->server_set_pointer_large = server_set_pointer_large;
468468
self->mod->server_paint_rects_ex = server_paint_rects_ex;
469+
self->mod->server_set_pointer_system = server_set_pointer_system;
469470
self->mod->si = &(self->wm->session->si);
470471
}
471472
}
@@ -4457,6 +4458,17 @@ server_egfx_cmd(struct xrdp_mod *mod,
44574458
return 0;
44584459
}
44594460

4461+
/*****************************************************************************/
4462+
int
4463+
server_set_pointer_system(struct xrdp_mod *mod, int pointer_type)
4464+
{
4465+
struct xrdp_wm *wm;
4466+
4467+
wm = (struct xrdp_wm *)(mod->wm);
4468+
xrdp_wm_send_pointer_system(wm, pointer_type);
4469+
return 0;
4470+
}
4471+
44604472
/*****************************************************************************/
44614473
int
44624474
server_set_pointer(struct xrdp_mod *mod, int x, int y,

xrdp/xrdp_types.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ struct xrdp_mod
198198
int (*server_egfx_cmd)(struct xrdp_mod *v,
199199
char *cmd, int cmd_bytes,
200200
char *data, int data_bytes);
201-
tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server
201+
int (*server_set_pointer_system)(struct xrdp_mod *v, int pointer_type);
202+
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
202203
functions above */
203204
/* common */
204205
tintptr handle; /* pointer to self as int */

xrdp/xrdp_wm.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,13 @@ xrdp_wm_load_pointer(struct xrdp_wm *self, char *file_name, char *data,
418418
return 0;
419419
}
420420

421+
/*****************************************************************************/
422+
int
423+
xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type)
424+
{
425+
return libxrdp_send_pointer_system(self->session, pointer_type);
426+
}
427+
421428
/*****************************************************************************/
422429
int
423430
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,

xup/xup.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,6 +1553,19 @@ process_server_paint_rect_shmfd(struct mod *amod, struct stream *s)
15531553
return rv;
15541554
}
15551555

1556+
/******************************************************************************/
1557+
/* return error */
1558+
static int
1559+
process_server_set_pointer_system(struct mod *amod, struct stream *s)
1560+
{
1561+
int rv;
1562+
int pointer_type;
1563+
1564+
in_uint32_le(s, pointer_type);
1565+
rv = amod->server_set_pointer_system(amod, pointer_type);
1566+
return rv;
1567+
}
1568+
15561569
/******************************************************************************/
15571570
/* return error */
15581571
static int
@@ -1788,6 +1801,9 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
17881801
case 64: /* server_paint_rect_shmfd */
17891802
rv = process_server_paint_rect_shmfd(mod, s);
17901803
break;
1804+
case 65: /* server_set_pointer_system */
1805+
rv = process_server_set_pointer_system(mod, s);
1806+
break;
17911807
default:
17921808
LOG_DEVEL(LOG_LEVEL_WARNING,
17931809
"lib_mod_process_orders: unknown order type %d", type);

xup/xup.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,8 @@ struct mod
190190
int (*server_egfx_cmd)(struct mod *v,
191191
char *cmd, int cmd_bytes,
192192
char *data, int data_bytes);
193-
tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server
193+
int (*server_set_pointer_system)(struct mod *v, int pointer_type);
194+
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
194195
functions above */
195196
/* common */
196197
tintptr handle; /* pointer to self as long */

0 commit comments

Comments
 (0)