terminal: Accept utf-8 text drop
diff --git a/clients/terminal.c b/clients/terminal.c
index e298f9e..c3bb1b0 100644
--- a/clients/terminal.c
+++ b/clients/terminal.c
@@ -2128,6 +2128,37 @@
 	data_source_cancelled
 };
 
+static const char text_mime_type[] = "text/plain;charset=utf-8";
+
+static void
+data_handler(struct window *window,
+	     struct input *input,
+	     float x, float y, const char **types, void *data)
+{
+	int i, has_text = 0;
+
+	if (!types)
+		return;
+	for (i = 0; types[i]; i++)
+		if (strcmp(types[i], text_mime_type) == 0)
+			has_text = 1;
+
+	if (!has_text) {
+		input_accept(input, NULL);
+	} else {
+		input_accept(input, text_mime_type);
+	}
+}
+
+static void
+drop_handler(struct window *window, struct input *input,
+	     int32_t x, int32_t y, void *data)
+{
+	struct terminal *terminal = data;
+
+	input_receive_drag_data_to_fd(input, text_mime_type, terminal->master);
+}
+
 static void
 fullscreen_handler(struct window *window, void *data)
 {
@@ -2630,6 +2661,9 @@
 	window_set_output_handler(terminal->window, output_handler);
 	window_set_close_handler(terminal->window, close_handler);
 
+	window_set_data_handler(terminal->window, data_handler);
+	window_set_drop_handler(terminal->window, drop_handler);
+
 	widget_set_redraw_handler(terminal->widget, redraw_handler);
 	widget_set_resize_handler(terminal->widget, resize_handler);
 	widget_set_button_handler(terminal->widget, button_handler);