diff --git a/proto.h b/proto.h index da65a94..29cc294 100644 --- a/proto.h +++ b/proto.h @@ -282,17 +282,18 @@ void ui_seamless_restack_window(unsigned long id, unsigned long behind, unsigned void ui_seamless_settitle(unsigned long id, const char *title, unsigned long flags); void ui_seamless_setstate(unsigned long id, unsigned int state, unsigned long flags); void ui_seamless_syncbegin(unsigned long flags); +void ui_seamless_ack(unsigned int serial); /* lspci.c */ BOOL lspci_init(void); /* seamless.c */ BOOL seamless_init(void); -void seamless_send_sync(void); -void seamless_send_state(unsigned long id, unsigned int state, unsigned long flags); -void seamless_send_position(unsigned long id, int x, int y, int width, int height, - unsigned long flags); +unsigned int seamless_send_sync(void); +unsigned int seamless_send_state(unsigned long id, unsigned int state, unsigned long flags); +unsigned int seamless_send_position(unsigned long id, int x, int y, int width, int height, + unsigned long flags); void seamless_select_timeout(struct timeval *tv); -void seamless_send_zchange(unsigned long id, unsigned long below, unsigned long flags); -void seamless_send_focus(unsigned long id, unsigned long flags); +unsigned int seamless_send_zchange(unsigned long id, unsigned long below, unsigned long flags); +unsigned int seamless_send_focus(unsigned long id, unsigned long flags); /* *INDENT-OFF* */ #ifdef __cplusplus diff --git a/seamless.c b/seamless.c index afe11f1..4a54c53 100644 --- a/seamless.c +++ b/seamless.c @@ -242,6 +242,16 @@ seamless_process_line(const char *line, void *data) ui_seamless_begin(); } + else if (!strcmp("ACK", tok1)) + { + unsigned int serial; + + serial = strtoul(tok3, &endptr, 0); + if (*endptr) + return False; + + ui_seamless_ack(serial); + } xfree(l); @@ -297,7 +307,7 @@ seamless_init(void) } -static void +static unsigned int seamless_send(const char *command, const char *format, ...) { STREAM s; @@ -323,8 +333,6 @@ seamless_send(const char *command, const char *format, ...) s = channel_init(seamless_channel, len); out_uint8p(s, buf, len) s_mark_end(s); - seamless_serial++; - DEBUG_SEAMLESS(("SeamlessRDP sending:%s", buf)); #if 0 @@ -333,33 +341,36 @@ seamless_send(const char *command, const char *format, ...) #endif channel_send(s, seamless_channel); + + return seamless_serial++; } -void +unsigned int seamless_send_sync() { if (!g_seamless_rdp) - return; + return (unsigned int) -1; - seamless_send("SYNC", ""); + return seamless_send("SYNC", ""); } -void +unsigned int seamless_send_state(unsigned long id, unsigned int state, unsigned long flags) { if (!g_seamless_rdp) - return; + return (unsigned int) -1; - seamless_send("STATE", "0x%08lx,0x%x,0x%lx", id, state, flags); + return seamless_send("STATE", "0x%08lx,0x%x,0x%lx", id, state, flags); } -void +unsigned int seamless_send_position(unsigned long id, int x, int y, int width, int height, unsigned long flags) { - seamless_send("POSITION", "0x%08lx,%d,%d,%d,%d,0x%lx", id, x, y, width, height, flags); + return seamless_send("POSITION", "0x%08lx,%d,%d,%d,%d,0x%lx", id, x, y, width, height, + flags); } @@ -379,21 +390,21 @@ seamless_select_timeout(struct timeval *tv) } } -void +unsigned int seamless_send_zchange(unsigned long id, unsigned long below, unsigned long flags) { if (!g_seamless_rdp) - return; + return (unsigned int) -1; - seamless_send("ZCHANGE", "0x%08lx,0x%08lx,0x%lx", id, below, flags); + return seamless_send("ZCHANGE", "0x%08lx,0x%08lx,0x%lx", id, below, flags); } -void +unsigned int seamless_send_focus(unsigned long id, unsigned long flags) { if (!g_seamless_rdp) - return; + return (unsigned int) -1; - seamless_send("FOCUS", "0x%08lx,0x%lx", id, flags); + return seamless_send("FOCUS", "0x%08lx,0x%lx", id, flags); } diff --git a/xwin.c b/xwin.c index 46c4a60..2491321 100644 --- a/xwin.c +++ b/xwin.c @@ -3480,3 +3480,8 @@ ui_seamless_syncbegin(unsigned long flags) seamless_remove_window(g_seamless_windows); } } + +void +ui_seamless_ack(unsigned int serial) +{ +}