Slight improvement to cursor blink timing: since the cursor doesn't
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 27 Nov 2004 19:34:45 +0000 (19:34 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 27 Nov 2004 19:34:45 +0000 (19:34 +0000)
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

mac/macterm.c
putty.h
terminal.c
unix/pterm.c
windows/window.c

index 5831cd2..f308808 100644 (file)
@@ -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);
diff --git a/putty.h b/putty.h
index b1043a6..4ad3124 100644 (file)
--- a/putty.h
+++ b/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.
index f070579..9003cc4 100644 (file)
@@ -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);
+}
index a374d50..59a99c1 100644 (file)
@@ -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;
index b460b53..6b7fc17 100644 (file)
@@ -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);