mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-02 09:01:39 -05:00
Paint terminal cursor hollow when focus is lost.
This commit is contained in:
parent
0208ed4c79
commit
3c248cc9b6
3 changed files with 59 additions and 6 deletions
33
terminal.c
33
terminal.c
|
|
@ -67,6 +67,7 @@ struct terminal {
|
|||
int state;
|
||||
int margin;
|
||||
int fullscreen;
|
||||
int focused;
|
||||
};
|
||||
|
||||
static char *
|
||||
|
|
@ -131,6 +132,7 @@ terminal_draw_contents(struct terminal *terminal)
|
|||
cairo_t *cr;
|
||||
cairo_font_extents_t extents;
|
||||
int i, top_margin, side_margin;
|
||||
double d;
|
||||
|
||||
window_get_child_rectangle(terminal->window, &rectangle);
|
||||
|
||||
|
|
@ -158,13 +160,20 @@ terminal_draw_contents(struct terminal *terminal)
|
|||
cairo_show_text(cr, terminal_get_row(terminal, i));
|
||||
}
|
||||
|
||||
cairo_move_to(cr, side_margin + terminal->column * extents.max_x_advance,
|
||||
top_margin + terminal->row * extents.height);
|
||||
cairo_rel_line_to(cr, extents.max_x_advance, 0);
|
||||
cairo_rel_line_to(cr, 0, extents.height);
|
||||
cairo_rel_line_to(cr, -extents.max_x_advance, 0);
|
||||
d = terminal->focused ? 0 : 0.5;
|
||||
|
||||
cairo_set_line_width(cr, 1);
|
||||
cairo_move_to(cr, side_margin + terminal->column * extents.max_x_advance + d,
|
||||
top_margin + terminal->row * extents.height + d);
|
||||
cairo_rel_line_to(cr, extents.max_x_advance - 2 * d, 0);
|
||||
cairo_rel_line_to(cr, 0, extents.height - 2 * d);
|
||||
cairo_rel_line_to(cr, -extents.max_x_advance + 2 * d, 0);
|
||||
cairo_close_path(cr);
|
||||
cairo_fill(cr);
|
||||
|
||||
if (terminal->focused)
|
||||
cairo_fill(cr);
|
||||
else
|
||||
cairo_stroke(cr);
|
||||
|
||||
cairo_destroy(cr);
|
||||
|
||||
|
|
@ -449,6 +458,16 @@ key_handler(struct window *window, uint32_t key, uint32_t unicode,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
keyboard_focus_handler(struct window *window,
|
||||
struct wl_input_device *device, void *data)
|
||||
{
|
||||
struct terminal *terminal = data;
|
||||
|
||||
terminal->focused = (device != NULL);
|
||||
terminal_schedule_redraw(terminal);
|
||||
}
|
||||
|
||||
static struct terminal *
|
||||
terminal_create(struct display *display, int fullscreen)
|
||||
{
|
||||
|
|
@ -474,6 +493,8 @@ terminal_create(struct display *display, int fullscreen)
|
|||
&compositor_listener, terminal);
|
||||
|
||||
window_set_key_handler(terminal->window, key_handler, terminal);
|
||||
window_set_keyboard_focus_handler(terminal->window,
|
||||
keyboard_focus_handler, terminal);
|
||||
|
||||
terminal_draw(terminal);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue