wlt: terminal: handle keyboard events
Pass keyboard events straight through to the TSM handler. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
6ef6ab7aeb
commit
3ee5d58e4f
@ -30,6 +30,8 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <wayland-client.h>
|
||||||
|
#include <xkbcommon/xkbcommon.h>
|
||||||
#include "eloop.h"
|
#include "eloop.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "pty.h"
|
#include "pty.h"
|
||||||
@ -209,6 +211,21 @@ static void widget_resize(struct wlt_widget *widget, struct wlt_rect *alloc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void widget_key(struct wlt_widget *widget, unsigned int mask,
|
||||||
|
uint32_t sym, uint32_t state, void *data)
|
||||||
|
{
|
||||||
|
struct wlt_terminal *term = data;
|
||||||
|
uint32_t ucs4;
|
||||||
|
|
||||||
|
if (state != WL_KEYBOARD_KEY_STATE_PRESSED)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ucs4 = xkb_keysym_to_utf32(sym) ? : TSM_VTE_INVALID;
|
||||||
|
|
||||||
|
if (tsm_vte_handle_keyboard(term->vte, sym, mask, ucs4))
|
||||||
|
wlt_window_schedule_redraw(term->wnd);
|
||||||
|
}
|
||||||
|
|
||||||
static void vte_event(struct tsm_vte *vte, const char *u8, size_t len,
|
static void vte_event(struct tsm_vte *vte, const char *u8, size_t len,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
@ -286,6 +303,7 @@ int wlt_terminal_new(struct wlt_terminal **out, struct wlt_window *wnd)
|
|||||||
log_error("cannot create pty object");
|
log_error("cannot create pty object");
|
||||||
goto err_vte;
|
goto err_vte;
|
||||||
}
|
}
|
||||||
|
kmscon_pty_set_term(term->pty, "xterm-256color");
|
||||||
|
|
||||||
ret = ev_eloop_new_fd(term->eloop, &term->pty_fd,
|
ret = ev_eloop_new_fd(term->eloop, &term->pty_fd,
|
||||||
kmscon_pty_get_fd(term->pty),
|
kmscon_pty_get_fd(term->pty),
|
||||||
@ -302,6 +320,7 @@ int wlt_terminal_new(struct wlt_terminal **out, struct wlt_window *wnd)
|
|||||||
wlt_widget_set_destroy_cb(term->widget, widget_destroy);
|
wlt_widget_set_destroy_cb(term->widget, widget_destroy);
|
||||||
wlt_widget_set_redraw_cb(term->widget, widget_redraw);
|
wlt_widget_set_redraw_cb(term->widget, widget_redraw);
|
||||||
wlt_widget_set_resize_cb(term->widget, NULL, widget_resize);
|
wlt_widget_set_resize_cb(term->widget, NULL, widget_resize);
|
||||||
|
wlt_widget_set_keyboard_cb(term->widget, widget_key);
|
||||||
*out = term;
|
*out = term;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user