diff options
author | Jay Sorg <jay.sorg@gmail.com> | 2012-10-14 22:13:22 -0700 |
---|---|---|
committer | Jay Sorg <jay.sorg@gmail.com> | 2012-10-14 22:13:22 -0700 |
commit | 453a101ab32bd851963866714f5aa2416d0d89ed (patch) | |
tree | 49e95c5fdc31153114e567881f8a1e02c3c55642 | |
parent | faec53b7f3baa543a1111cd0d201c70cc23dacc7 (diff) | |
download | xrdp-proprietary-453a101ab32bd851963866714f5aa2416d0d89ed.tar.gz xrdp-proprietary-453a101ab32bd851963866714f5aa2416d0d89ed.zip |
chansrv: work on clipboard
-rw-r--r-- | sesman/chansrv/clipboard.c | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/sesman/chansrv/clipboard.c b/sesman/chansrv/clipboard.c index 58b80cad..610b84d8 100644 --- a/sesman/chansrv/clipboard.c +++ b/sesman/chansrv/clipboard.c @@ -644,30 +644,29 @@ static int APP_CC clipboard_send_data_response(int xrdp_clip_type, char *data, int data_size) { LLOGLN(10, ("clipboard_send_data_response:")); - if (g_last_clip_data != 0) + if (data != 0) { - if (g_last_xrdp_clip_type == XRDP_CB_FILE) + if (xrdp_clip_type == XRDP_CB_FILE) { return clipboard_send_data_response_for_file(data, data_size); } - else if (g_last_xrdp_clip_type == XRDP_CB_BITMAP) + else if (xrdp_clip_type == XRDP_CB_BITMAP) { return clipboard_send_data_response_for_image(data, data_size); } - else if (g_last_xrdp_clip_type == XRDP_CB_TEXT) + else if (xrdp_clip_type == XRDP_CB_TEXT) { return clipboard_send_data_response_for_text(data, data_size); } else { LLOGLN(0, ("clipboard_send_data_response: unknown " - "g_last_xrdp_clip_type %d", g_last_xrdp_clip_type)); + "xrdp_clip_type %d", xrdp_clip_type)); } } else { - LLOGLN(0, ("clipboard_send_data_response: g_last_clip_data " - "is nil")); + LLOGLN(0, ("clipboard_send_data_response: data is nil")); } return 0; } @@ -885,8 +884,8 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status, { LLOGLN(10, ("clipboard_process_data_request: CB_FORMAT_FILE, " "sending last data tdiff %d", tdiff)); - clipboard_send_data_response_for_file(g_last_clip_data, - g_last_clip_size); + clipboard_send_data_response(XRDP_CB_FILE, g_last_clip_data, + g_last_clip_size); } else { @@ -905,8 +904,8 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status, { LLOGLN(10, ("clipboard_process_data_request: CB_FORMAT_DIB, " "sending last data tdiff %d", tdiff)); - clipboard_send_data_response_for_image(g_last_clip_data, - g_last_clip_size); + clipboard_send_data_response(XRDP_CB_BITMAP, g_last_clip_data, + g_last_clip_size); } else { @@ -923,8 +922,8 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status, { LLOGLN(10, ("clipboard_process_data_request: CB_FORMAT_UNICODETEXT, " "sending last data tdiff %d", tdiff)); - clipboard_send_data_response_for_image(g_last_clip_data, - g_last_clip_size); + clipboard_send_data_response(XRDP_CB_TEXT, g_last_clip_data, + g_last_clip_size); } else { @@ -941,8 +940,6 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status, clipboard_send_data_response_failed(); break; } - //g_sleep(100); /* ? this seems to prevent case where XConvertSelection does not - // yeild a SelectionNotify */ return 0; } @@ -1373,7 +1370,15 @@ clipboard_get_window_property(Window wnd, Atom prop, Atom *type, int *fmt, return 1; } - lxdata_size = (lfmt / 8) * ln_items; + if (lfmt == 32) + { + /* 32 implies long */ + lxdata_size = sizeof(long) * ln_items; + } + else + { + lxdata_size = (lfmt / 8) * ln_items; + } if (lxdata_size < 1) { @@ -1460,7 +1465,7 @@ clipboard_event_selection_notify(XEvent *xevent) int got_bmp_image; int got_file; int send_format_announce; - int atom; + Atom atom; Atom *atoms; Atom type; @@ -1523,7 +1528,7 @@ clipboard_event_selection_notify(XEvent *xevent) { if (lxevent->target == g_targets_atom) { - /* on a 64 bit machine, actual_format_return of 32 implies long */ + /* 32 implies long */ if ((type == XA_ATOM) && (fmt == 32)) { atoms = (Atom *)data; @@ -1937,12 +1942,14 @@ clipboard_event_property_notify(XEvent *xevent) AnyPropertyType, &actual_type_return, &actual_format_return, &nitems_returned, &bytes_left, (unsigned char **) &data); - format_in_bytes = actual_format_return / 8; - - if ((actual_format_return == 32) && (sizeof(long) == 8)) + if (actual_format_return == 32) + { + /* 32 implies long */ + format_in_bytes = sizeof(long); + } + else { - /* on a 64 bit machine, actual_format_return of 32 implies long */ - format_in_bytes = 8; + format_in_bytes = actual_format_return / 8; } new_data_len = nitems_returned * format_in_bytes; |