summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vdagent-x11.c10
-rw-r--r--src/vdagent-x11.h2
-rw-r--r--src/vdagent.c1
3 files changed, 13 insertions, 0 deletions
diff --git a/src/vdagent-x11.c b/src/vdagent-x11.c
index 4588b3d..5ce6000 100644
--- a/src/vdagent-x11.c
+++ b/src/vdagent-x11.c
@@ -1305,6 +1305,16 @@ void vdagent_x11_clipboard_release(struct vdagent_x11 *x11, uint8_t selection)
vdagent_x11_do_read(x11);
}
+void vdagent_x11_client_disconnected(struct vdagent_x11 *x11)
+{
+ int sel;
+
+ for (sel = 0; sel < VD_AGENT_CLIPBOARD_SELECTION_SECONDARY; sel++) {
+ if (x11->clipboard_owner[sel] == owner_client)
+ vdagent_x11_clipboard_release(x11, sel);
+ }
+}
+
/* Function used to determine the default location to save file-xfers,
xdg desktop dir or xdg download dir. We error on the save side and use a
whitelist approach, so any unknown desktops will end up with saving
diff --git a/src/vdagent-x11.h b/src/vdagent-x11.h
index a2a2485..d64a42a 100644
--- a/src/vdagent-x11.h
+++ b/src/vdagent-x11.h
@@ -46,6 +46,8 @@ void vdagent_x11_clipboard_data(struct vdagent_x11 *x11, uint8_t selection,
uint32_t type, uint8_t *data, uint32_t size);
void vdagent_x11_clipboard_release(struct vdagent_x11 *x11, uint8_t selection);
+void vdagent_x11_client_disconnected(struct vdagent_x11 *x11);
+
int vdagent_x11_has_icons_on_desktop(struct vdagent_x11 *x11);
#endif
diff --git a/src/vdagent.c b/src/vdagent.c
index f270615..d7f7aba 100644
--- a/src/vdagent.c
+++ b/src/vdagent.c
@@ -104,6 +104,7 @@ void daemon_read_complete(struct udscs_connection **connp,
free(data);
break;
case VDAGENTD_CLIENT_DISCONNECTED:
+ vdagent_x11_client_disconnected(x11);
vdagent_file_xfers_destroy(vdagent_file_xfers);
vdagent_file_xfers = vdagent_file_xfers_create(client, fx_dir,
fx_open_dir, debug);