struct utf8_state_machine state_machine;
int margin;
int fullscreen;
- int focused;
struct color_scheme *color_scheme;
struct terminal_color color_table[256];
cairo_font_extents_t extents;
if ((attr.a & ATTRMASK_INVERSE) ||
decoded->attr.s ||
((terminal->mode & MODE_SHOW_CURSOR) &&
- terminal->focused && terminal->row == row &&
+ window_has_focus(terminal->window) && terminal->row == row &&
terminal->column == col)) {
foreground = attr.bg;
background = attr.fg;
attr.key = ~0;
glyph_run_flush(&run, attr);
- if ((terminal->mode & MODE_SHOW_CURSOR) && !terminal->focused) {
+ if ((terminal->mode & MODE_SHOW_CURSOR) &&
+ !window_has_focus(terminal->window)) {
d = 0.5;
cairo_set_line_width(cr, 1);
{
struct terminal *terminal = data;
- terminal->focused = (device != NULL);
window_schedule_redraw(terminal->window);
}
int resize_needed;
int type;
int transparent;
- struct input *keyboard_device;
+ int focus_count;
+
enum window_buffer_type buffer_type;
cairo_surface_t *cairo_surface;
}
}
+int
+window_has_focus(struct window *window)
+{
+ return window->focus_count > 0;
+}
+
void
window_flush(struct window *window)
{
cr = cairo_create(window->cairo_surface);
- if (window->keyboard_device)
+ if (window->focus_count)
flags |= THEME_FRAME_ACTIVE;
theme_render_frame(t, cr, widget->allocation.width,
widget->allocation.height, window->title, flags);
if (!window)
return;
- window->keyboard_device = NULL;
+ window->focus_count--;
if (window->keyboard_focus_handler)
(*window->keyboard_focus_handler)(window, NULL,
window->user_data);
input->keyboard_focus = wl_surface_get_user_data(surface);
window = input->keyboard_focus;
- window->keyboard_device = input;
+ window->focus_count++;
if (window->keyboard_focus_handler)
(*window->keyboard_focus_handler)(window,
- window->keyboard_device,
- window->user_data);
+ input, window->user_data);
}
static void
input->display->serial = serial;
code = key + 8;
- if (!window || window->keyboard_device != input || !input->xkb.state)
+ if (!window || !input->xkb.state)
return;
num_syms = xkb_key_get_syms(input->xkb.state, code, &syms);