diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2011-01-21 16:23:09 -0500 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2011-01-21 16:26:28 -0500 |
commit | 6bccebee2334aae4926cb17f479ce51a2d6a4574 (patch) | |
tree | 9ec473a15317933ad3c7e29570abd55d8f155b9c /clients/terminal.c | |
parent | 31cce0533faa1032f065d730cab3dd1c4fa31d81 (diff) |
terminal: Just send the pty master fd to receive the selection.
LOL!!1
Diffstat (limited to 'clients/terminal.c')
-rw-r--r-- | clients/terminal.c | 37 |
1 files changed, 5 insertions, 32 deletions
diff --git a/clients/terminal.c b/clients/terminal.c index 1b36ba9..9254907 100644 --- a/clients/terminal.c +++ b/clients/terminal.c @@ -391,7 +391,6 @@ struct terminal { cairo_font_extents_t extents; cairo_scaled_font_t *font_normal, *font_bold; - uint32_t tag; struct wl_selection *selection; struct wl_selection_offer *selection_offer; uint32_t selection_offer_has_text; @@ -1978,34 +1977,11 @@ static const struct wl_selection_listener selection_listener = { selection_listener_cancelled }; -static gboolean -selection_io_func(GIOChannel *source, GIOCondition condition, gpointer data) -{ - struct terminal *terminal = data; - char buffer[256]; - unsigned int len; - int fd; - - fd = g_io_channel_unix_get_fd(source); - len = read(fd, buffer, sizeof buffer); - - write(terminal->master, buffer, len); - - close(fd); - g_source_remove(terminal->tag); - - g_io_channel_unref(source); - - return TRUE; -} - static int handle_bound_key(struct terminal *terminal, struct input *input, uint32_t sym, uint32_t time) { struct wl_shell *shell; - GIOChannel *channel; - int fd; switch (sym) { case XK_C: @@ -2019,14 +1995,11 @@ handle_bound_key(struct terminal *terminal, return 1; case XK_V: - if (input_offers_mime_type(input, "text/plain")) { - fd = input_receive_mime_type(input, "text/plain"); - channel = g_io_channel_unix_new(fd); - terminal->tag = g_io_add_watch(channel, G_IO_IN, - selection_io_func, - terminal); - } - + /* Just pass the master fd of the pty to receive the + * selection. */ + if (input_offers_mime_type(input, "text/plain")) + input_receive_mime_type(input, "text/plain", + terminal->master); return 1; case XK_X: /* cut selection; terminal doesn't do cut */ |