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)
{
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);
}
int
+input_receive_drag_data_to_fd(struct input *input,
+ const char *mime_type, int fd)
+{
+ if (input->drag_offer)
+ wl_data_offer_receive(input->drag_offer->offer, mime_type, fd);
+
+ return 0;
+}
+
+int
input_receive_selection_data(struct input *input, const char *mime_type,
data_func_t func, void *data)
{
void
input_receive_drag_data(struct input *input, const char *mime_type,
data_func_t func, void *user_data);
+int
+input_receive_drag_data_to_fd(struct input *input,
+ const char *mime_type, int fd);
int
input_receive_selection_data(struct input *input, const char *mime_type,