Cursor position, selection highlights and mouse clicks are now all
[u/mdw/putty] / terminal.h
index 9bc1312..606d793 100644 (file)
@@ -65,6 +65,12 @@ struct termline {
     struct termchar *chars;
 };
 
+struct bidi_cache_entry {
+    int width;
+    struct termchar *chars;
+    int *forward, *backward;          /* the permutations of line positions */
+};
+
 struct terminal_tag {
 
     int compatibility_level;
@@ -112,7 +118,7 @@ struct terminal_tag {
     int cursor_on;                    /* cursor enabled flag */
     int reset_132;                    /* Flag ESC c resets to 80 cols */
     int use_bce;                      /* Use Background coloured erase */
-    int blinker;                      /* When blinking is the cursor on ? */
+    int cblinker;                     /* When blinking is the cursor on ? */
     int tblinker;                     /* When the blinking text is on */
     int blink_is_real;                /* Actually blink blinking text */
     int term_echoing;                 /* Does terminal want local echo? */
@@ -131,15 +137,12 @@ struct terminal_tag {
     int rows, cols, savelines;
     int has_focus;
     int in_vbell;
-    unsigned long vbell_startpoint;
+    long vbell_end;
     int app_cursor_keys, app_keypad_keys, vt52_mode;
     int repeat_off, cr_lf_return;
     int seen_disp_event;
     int big_cursor;
 
-    long last_blink;                  /* used for real blinking control */
-    long last_tblink;
-
     int xterm_mouse;                  /* send mouse messages to app */
     int mouse_is_down;                /* used while tracking mouse buttons */
 
@@ -241,13 +244,26 @@ struct terminal_tag {
     int in_term_out;
 
     /*
+     * We schedule a window update shortly after receiving terminal
+     * data. This tracks whether one is currently pending.
+     */
+    int window_update_pending;
+    long next_update;
+
+    /*
+     * Track pending blinks and tblinks.
+     */
+    int tblink_pending, cblink_pending;
+    long next_tblink, next_cblink;
+
+    /*
      * These are buffers used by the bidi and Arabic shaping code.
      */
     termchar *ltemp;
     int ltemp_size;
     bidi_char *wcFrom, *wcTo;
     int wcFromTo_size;
-    termchar **pre_bidi_cache, **post_bidi_cache;
+    struct bidi_cache_entry *pre_bidi_cache, *post_bidi_cache;
     int bidi_cache_size;
 };