changeset 5635:a01819fb6e2b v7.4.164

updated for version 7.4.164 Problem: Problem with event handling on Windows 8. Solution: Ignore duplicate WINDOW_BUFFER_SIZE_EVENTs. (Nobuhiro Takasaki)
author Bram Moolenaar <bram@vim.org>
date Wed, 05 Feb 2014 14:02:27 +0100
parents 020a1e8fee2a
children c47f55a5c7c4
files src/os_win32.c src/version.c
diffstat 2 files changed, 27 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -253,6 +253,9 @@ read_console_input(
     static DWORD s_dwIndex = 0;
     static DWORD s_dwMax = 0;
     DWORD dwEvents;
+    int head;
+    int tail;
+    int i;
 
     if (!win8_or_later)
     {
@@ -274,7 +277,29 @@ read_console_input(
 	    *lpEvents = 0;
 	    return TRUE;
 	}
+
+	if (s_dwMax > 1)
+	{
+	    head = 0;
+	    tail = s_dwMax - 1;
+	    while (head != tail)
+	    {
+		if (s_irCache[head].EventType == WINDOW_BUFFER_SIZE_EVENT
+			&& s_irCache[head + 1].EventType
+						  == WINDOW_BUFFER_SIZE_EVENT)
+		{
+		    /* Remove duplicate event to avoid flicker. */
+		    for (i = head; i < tail; ++i)
+			s_irCache[i] = s_irCache[i + 1];
+		    --tail;
+		    continue;
+		}
+		head++;
+	    }
+	    s_dwMax = tail + 1;
+	}
     }
+
     *lpBuffer = s_irCache[s_dwIndex];
     if (nLength != -1 && ++s_dwIndex >= s_dwMax)
 	s_dwMax = 0;
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    164,
+/**/
     163,
 /**/
     162,