blink when the window doesn't have focus, we don't schedule blink
timers at that point either.
Infrastructure change: term->has_focus should now not be written
directly from outside terminal.c. Instead, use the function
term_set_focus, which will sort out the blink timers as well.
git-svn-id: svn://svn.tartarus.org/sgt/putty@4911
cda61777-01e9-0310-a592-
d414129be87e
Boolean active = (event->modifiers & activeFlag) != 0;
s = mac_windowsession(window);
- s->term->has_focus = active;
+ term_set_focus(s->term, active);
term_update(s->term);
if (active)
ShowControl(s->scrollbar);
void (*resize_fn)(void *, int, int),
void *resize_ctx);
void term_provide_logctx(Terminal *term, void *logctx);
+void term_set_focus(Terminal *term, int has_focus);
/*
* Exports from logging.c.
*/
static void term_schedule_tblink(Terminal *term)
{
- if (term->tblink_pending)
- return; /* already well in hand */
if (term->blink_is_real) {
- term->next_tblink = schedule_timer(TBLINK_DELAY, term_timer, term);
+ if (!term->tblink_pending)
+ term->next_tblink = schedule_timer(TBLINK_DELAY, term_timer, term);
term->tblink_pending = TRUE;
} else {
term->tblinker = 1; /* reset when not in use */
*/
static void term_schedule_cblink(Terminal *term)
{
- if (term->cblink_pending)
- return; /* already well in hand */
- if (term->cfg.blink_cur) {
- term->next_cblink = schedule_timer(CBLINK_DELAY, term_timer, term);
+ if (term->cfg.blink_cur && term->has_focus) {
+ if (!term->cblink_pending)
+ term->next_cblink = schedule_timer(CBLINK_DELAY, term_timer, term);
term->cblink_pending = TRUE;
} else {
term->cblinker = 1; /* reset when not in use */
{
term->logctx = logctx;
}
+
+void term_set_focus(Terminal *term, int has_focus)
+{
+ term->has_focus = has_focus;
+ term_schedule_cblink(term);
+}
gint focus_event(GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
struct gui_data *inst = (struct gui_data *)data;
- inst->term->has_focus = event->in;
+ term_set_focus(inst->term, event->in);
term_update(inst->term);
show_mouseptr(inst, 1);
return FALSE;
logpal = NULL;
init_palette();
- term->has_focus = (GetForegroundWindow() == hwnd);
+ term_set_focus(term, GetForegroundWindow() == hwnd);
UpdateWindow(hwnd);
if (GetMessage(&msg, NULL, 0, 0) == 1) {
continue;
/* The messages seem unreliable; especially if we're being tricky */
- term->has_focus = (GetForegroundWindow() == hwnd);
+ term_set_focus(term, GetForegroundWindow() == hwnd);
net_pending_errors();
net_pending_errors();
return 0;
case WM_SETFOCUS:
- term->has_focus = TRUE;
+ term_set_focus(term, TRUE);
CreateCaret(hwnd, caretbm, font_width, font_height);
ShowCaret(hwnd);
flash_window(0); /* stop */
break;
case WM_KILLFOCUS:
show_mouseptr(1);
- term->has_focus = FALSE;
+ term_set_focus(term, FALSE);
DestroyCaret();
caret_x = caret_y = -1; /* ensure caret is replaced next time */
term_update(term);