0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 8.2.0694: Haiku: channel and terminal do not work

Problem:    Haiku: channel and terminal do not work.
Solution:   Close files when the job has finished. (Ozaki Kiichi,
            closes #6039)
This commit is contained in:
Bram Moolenaar
2020-05-03 22:57:32 +02:00
parent 2fd4cd755c
commit 80a8d3889b
5 changed files with 81 additions and 24 deletions

View File

@@ -1145,10 +1145,11 @@ VimFormView::FrameResized(float new_width, float new_height)
VimTextAreaView::VimTextAreaView(BRect frame):
BView(frame, "VimTextAreaView", B_FOLLOW_ALL_SIDES,
#ifdef FEAT_MBYTE_IME
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE | B_INPUT_METHOD_AWARE),
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE | B_INPUT_METHOD_AWARE
#else
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE),
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE
#endif
),
mouseDragEventCount(0)
{
#ifdef FEAT_MBYTE_IME
@@ -3093,7 +3094,7 @@ gui_haiku_process_event(bigtime_t timeout)
}
}
#else
add_to_input_buf_csi(string, len);
add_to_input_buf_csi(string, len);
#endif
else
add_to_input_buf(string, len);
@@ -4437,15 +4438,16 @@ gui_mch_wait_for_chars(
int wtime)
{
int focus;
bigtime_t until, timeout;
status_t st;
bigtime_t until, timeout;
status_t st;
if (wtime >= 0) {
if (wtime >= 0)
{
timeout = wtime * 1000;
until = system_time() + timeout;
} else {
timeout = B_INFINITE_TIMEOUT;
}
else
timeout = B_INFINITE_TIMEOUT;
focus = gui.in_focus;
for (;;)
@@ -4461,6 +4463,28 @@ gui_mch_wait_for_chars(
}
gui_mch_flush();
#ifdef MESSAGE_QUEUE
# ifdef FEAT_TIMERS
did_add_timer = FALSE;
# endif
parse_queued_messages();
# ifdef FEAT_TIMERS
if (did_add_timer)
// Need to recompute the waiting time.
break;
# endif
# ifdef FEAT_JOB_CHANNEL
if (has_any_channel())
{
if (wtime < 0 || timeout > 20000)
timeout = 20000;
}
else if (wtime < 0)
timeout = B_INFINITE_TIMEOUT;
# endif
#endif
/*
* Don't use gui_mch_update() because then we will spin-lock until a
* char arrives, instead we use gui_haiku_process_event() to hang until
@@ -4478,7 +4502,8 @@ gui_mch_wait_for_chars(
* Calculate how much longer we're willing to wait for the
* next event.
*/
if (wtime >= 0) {
if (wtime >= 0)
{
timeout = until - system_time();
if (timeout < 0)
break;