patch 9.2.0548: GTK4: terminal and pty job output is not processed

Problem:  GTK4: terminal and pty job output is not processed
Solution: When there is at least one channel with the keep_open flag,
          arm a 20ms timer that calls channel_handle_events() and
          parse_queued_messages(), matching the behaviour of the GTK2/3
          backend (Foxe Chen).

fixes:  #20345
closes: #20350

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Foxe Chen
2026-05-28 19:29:55 +00:00
committed by Christian Brabandt
parent 44dcad20f2
commit af8845e3af
2 changed files with 28 additions and 0 deletions
+26
View File
@@ -2132,6 +2132,18 @@ gui_mch_update(void)
g_main_context_iteration(NULL, TRUE);
}
#ifdef FEAT_JOB_CHANNEL
static timeout_cb_type
channel_poll_cb(gpointer data UNUSED)
{
// Using an event handler for a channel that may be disconnected does
// not work, it hangs. Instead poll for messages.
channel_handle_events(TRUE);
parse_queued_messages();
return TRUE; // Keep repeating
}
#endif
int
gui_mch_wait_for_chars(long wtime)
{
@@ -2139,6 +2151,9 @@ gui_mch_wait_for_chars(long wtime)
guint timer;
static int timed_out;
int retval = FAIL;
#ifdef FEAT_JOB_CHANNEL
guint channel_timer = 0;
#endif
timed_out = FALSE;
@@ -2148,6 +2163,13 @@ gui_mch_wait_for_chars(long wtime)
else
timer = 0;
#ifdef FEAT_JOB_CHANNEL
// If there is a channel with the keep_open flag we need to poll for input
// on them.
if (channel_any_keep_open())
channel_timer = timeout_add(20, channel_poll_cb, NULL);
#endif
focus = gui.in_focus;
do
@@ -2203,6 +2225,10 @@ gui_mch_wait_for_chars(long wtime)
theend:
if (timer != 0 && !timed_out)
timeout_remove(timer);
#ifdef FEAT_JOB_CHANNEL
if (channel_timer != 0)
timeout_remove(channel_timer);
#endif
return retval;
}
+2
View File
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
548,
/**/
547,
/**/