Patch 8.1.1975
Problem:    MS-Windows GUI responds slowly to timer.
Solution:   Break out of wait loop when timer was added or input is available.
            (closes #4893)
Files:      src/gui_w32.c


*** ../vim-8.1.1974/src/gui_w32.c       2019-05-28 23:32:42.942257480 +0200
--- src/gui_w32.c       2019-09-04 13:50:20.314125990 +0200
***************
*** 2074,2080 ****
      focus = gui.in_focus;
      while (!s_timed_out)
      {
!       /* Stop or start blinking when focus changes */
        if (gui.in_focus != focus)
        {
            if (gui.in_focus)
--- 2074,2080 ----
      focus = gui.in_focus;
      while (!s_timed_out)
      {
!       // Stop or start blinking when focus changes
        if (gui.in_focus != focus)
        {
            if (gui.in_focus)
***************
*** 2094,2122 ****
        did_add_timer = FALSE;
  #endif
  #ifdef MESSAGE_QUEUE
!       /* Check channel I/O while waiting for a message. */
        for (;;)
        {
            MSG msg;
  
            parse_queued_messages();
! 
            if (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
            {
                process_message();
                break;
            }
!           else if (MsgWaitForMultipleObjects(0, NULL, FALSE, 100, QS_ALLINPUT)
!                                                              != WAIT_TIMEOUT)
                break;
        }
  #else
!       /*
!        * Don't use gui_mch_update() because then we will spin-lock until a
!        * char arrives, instead we use GetMessage() to hang until an
!        * event arrives.  No need to check for input_buf_full because we are
!        * returning as soon as it contains a single char -- webb
!        */
        process_message();
  #endif
  
--- 2094,2124 ----
        did_add_timer = FALSE;
  #endif
  #ifdef MESSAGE_QUEUE
!       // Check channel I/O while waiting for a message.
        for (;;)
        {
            MSG msg;
  
            parse_queued_messages();
! #ifdef FEAT_TIMERS
!           if (did_add_timer)
!               break;
! #endif
            if (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
            {
                process_message();
                break;
            }
!           else if (input_available()
!                   || MsgWaitForMultipleObjects(0, NULL, FALSE, 100,
!                                                 QS_ALLINPUT) != WAIT_TIMEOUT)
                break;
        }
  #else
!       // Don't use gui_mch_update() because then we will spin-lock until a
!       // char arrives, instead we use GetMessage() to hang until an
!       // event arrives.  No need to check for input_buf_full because we are
!       // returning as soon as it contains a single char -- webb
        process_message();
  #endif
  
***************
*** 2125,2133 ****
            remove_any_timer();
            allow_scrollbar = FALSE;
  
!           /* Clear pending mouse button, the release event may have been
!            * taken by the dialog window.  But don't do this when getting
!            * focus, we need the mouse-up event then. */
            if (!s_getting_focus)
                s_button_pending = -1;
  
--- 2127,2135 ----
            remove_any_timer();
            allow_scrollbar = FALSE;
  
!           // Clear pending mouse button, the release event may have been
!           // taken by the dialog window.  But don't do this when getting
!           // focus, we need the mouse-up event then.
            if (!s_getting_focus)
                s_button_pending = -1;
  
***************
*** 2137,2143 ****
  #ifdef FEAT_TIMERS
        if (did_add_timer)
        {
!           /* Need to recompute the waiting time. */
            remove_any_timer();
            break;
        }
--- 2139,2145 ----
  #ifdef FEAT_TIMERS
        if (did_add_timer)
        {
!           // Need to recompute the waiting time.
            remove_any_timer();
            break;
        }
*** ../vim-8.1.1974/src/version.c       2019-09-04 13:21:22.602256970 +0200
--- src/version.c       2019-09-04 13:52:43.357479742 +0200
***************
*** 763,764 ****
--- 763,766 ----
  {   /* Add new patch number below this line */
+ /**/
+     1975,
  /**/

-- 
The CIA drives around in cars with the "Intel inside" logo.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201909041153.x84BrrAu031000%40masaka.moolenaar.net.

Raspunde prin e-mail lui