mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
Slight improvement to cursor blink timing: since the cursor doesn't
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. [originally from svn r4911]
This commit is contained in:
parent
02b0474f57
commit
92f3b101f5
@ -1042,7 +1042,7 @@ static void mac_activateterm(WindowPtr window, EventRecord *event)
|
||||
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);
|
||||
|
1
putty.h
1
putty.h
@ -664,6 +664,7 @@ void term_provide_resize_fn(Terminal *term,
|
||||
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.
|
||||
|
18
terminal.c
18
terminal.c
@ -1043,10 +1043,9 @@ static void seen_disp_event(Terminal *term)
|
||||
*/
|
||||
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 */
|
||||
@ -1059,10 +1058,9 @@ static void term_schedule_tblink(Terminal *term)
|
||||
*/
|
||||
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 */
|
||||
@ -6074,3 +6072,9 @@ void term_provide_logctx(Terminal *term, void *logctx)
|
||||
{
|
||||
term->logctx = logctx;
|
||||
}
|
||||
|
||||
void term_set_focus(Terminal *term, int has_focus)
|
||||
{
|
||||
term->has_focus = has_focus;
|
||||
term_schedule_cblink(term);
|
||||
}
|
||||
|
@ -1218,7 +1218,7 @@ void destroy(GtkWidget *widget, gpointer data)
|
||||
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;
|
||||
|
@ -770,7 +770,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
|
||||
logpal = NULL;
|
||||
init_palette();
|
||||
|
||||
term->has_focus = (GetForegroundWindow() == hwnd);
|
||||
term_set_focus(term, GetForegroundWindow() == hwnd);
|
||||
UpdateWindow(hwnd);
|
||||
|
||||
if (GetMessage(&msg, NULL, 0, 0) == 1) {
|
||||
@ -787,7 +787,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
|
||||
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();
|
||||
|
||||
@ -2317,7 +2317,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
|
||||
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 */
|
||||
@ -2326,7 +2326,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user