]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1594 v7.4.1594
authorBram Moolenaar <Bram@vim.org>
Sat, 19 Mar 2016 13:11:18 +0000 (14:11 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 19 Mar 2016 13:11:18 +0000 (14:11 +0100)
Problem:    Timers don't work on Unix.
Solution:   Add missing code.

src/os_unix.c
src/version.c

index f2ae513cf2aadee613c2b2376dd9fe107d5fe5be..a9c20c991ce1490a29ac52883395253bffe84bf0 100644 (file)
@@ -176,6 +176,7 @@ typedef int waitstatus;
 static pid_t wait4pid(pid_t, waitstatus *);
 
 static int  WaitForChar(long);
+static int  WaitForCharOrMouse(long);
 #if defined(__BEOS__) || defined(VMS)
 int  RealWaitForChar(int, long, int *);
 #else
@@ -5347,13 +5348,50 @@ mch_breakcheck(void)
 }
 
 /*
- * Wait "msec" msec until a character is available from the keyboard or from
- * inbuf[]. msec == -1 will block forever.
+ * Wait "msec" msec until a character is available from the mouse, keyboard,
+ * from inbuf[].
+ * "msec" == -1 will block forever.
+ * Invokes timer callbacks when needed.
  * When a GUI is being used, this will never get called -- webb
  */
     static int
 WaitForChar(long msec)
 {
+#ifdef FEAT_TIMERS
+    long    due_time;
+    long    remaining = msec;
+
+    /* When waiting very briefly don't trigger timers. */
+    if (msec >= 0 && msec < 10L)
+       return WaitForCharOrMouse(msec);
+
+    while (msec < 0 || remaining > 0)
+    {
+       /* Trigger timers and then get the time in msec until the next one is
+        * due.  Wait up to that time. */
+       due_time = check_due_timer();
+       if (due_time <= 0 || (msec > 0 && due_time > remaining))
+           due_time = remaining;
+       if (WaitForCharOrMouse(due_time))
+           return TRUE;
+       if (msec > 0)
+           remaining -= due_time;
+    }
+    return FALSE;
+#else
+    return WaitForCharOrMouse(msec);
+#endif
+}
+
+/*
+ * Wait "msec" msec until a character is available from the mouse or keyboard
+ * or from inbuf[].
+ * "msec" == -1 will block forever.
+ * When a GUI is being used, this will never get called -- webb
+ */
+    static int
+WaitForCharOrMouse(long msec)
+{
 #ifdef FEAT_MOUSE_GPM
     int                gpm_process_wanted;
 #endif
index 449c8f24ef541dbc81cafd85a3531d39f5436910..06cec58dd3a54ab197a0f0feb7d7470063d03046 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1594,
 /**/
     1593,
 /**/