diff options
Diffstat (limited to 'src/os_unix.c')
-rw-r--r-- | src/os_unix.c | 70 |
1 files changed, 64 insertions, 6 deletions
diff --git a/src/os_unix.c b/src/os_unix.c index 5e11eea3f9..5059ab152c 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -220,7 +220,7 @@ typedef struct { SmcConn smcconn; /* The SM connection ID */ IceConn iceconn; /* The ICE connection ID */ - char *clientid; /* The client ID for the current smc session */ + char *clientid; /* The client ID for the current smc session */ Bool save_yourself; /* If we're in the middle of a save_yourself */ Bool shutdown; /* If we're in shutdown mode */ } xsmp_config_T; @@ -366,6 +366,12 @@ mch_inchar(buf, maxlen, wtime, tb_change_cnt) { int len; +#ifdef FEAT_NETBEANS_INTG + /* Process the queued netbeans messages. */ + if (usingNetbeans) + netbeans_parse_messages(); +#endif + /* Check if window changed size while we were busy, perhaps the ":set * columns=99" command was used. */ while (do_resize) @@ -378,6 +384,11 @@ mch_inchar(buf, maxlen, wtime, tb_change_cnt) if (!do_resize) /* return if not interrupted by resize */ return 0; handle_resize(); +#ifdef FEAT_NETBEANS_INTG + /* Process the queued netbeans messages. */ + if (usingNetbeans) + netbeans_parse_messages(); +#endif } } else /* wtime == -1 */ @@ -407,12 +418,22 @@ mch_inchar(buf, maxlen, wtime, tb_change_cnt) { while (do_resize) /* window changed size */ handle_resize(); + +#ifdef FEAT_NETBEANS_INTG + /* Process the queued netbeans messages. */ + if (usingNetbeans) + netbeans_parse_messages(); +#endif /* * we want to be interrupted by the winch signal + * or by an event on the monitored file descriptors */ - WaitForChar(-1L); - if (do_resize) /* interrupted by SIGWINCH signal */ - continue; + if (WaitForChar(-1L) == 0) + { + if (do_resize) /* interrupted by SIGWINCH signal */ + handle_resize(); + return 0; + } /* If input was put directly in typeahead buffer bail out here. */ if (typebuf_changed(tb_change_cnt)) @@ -1324,7 +1345,7 @@ catch_signals(func_deadly, func_other) * return TRUE * "when" == SIGNAL_BLOCK: Going to be busy, block signals * "when" == SIGNAL_UNBLOCK: Going to wait, unblock signals, use postponed - * signal + * signal * Returns TRUE when Vim should exit. */ int @@ -4766,6 +4787,9 @@ RealWaitForChar(fd, msec, check_for_gpm) int *check_for_gpm UNUSED; { int ret; +#ifdef FEAT_NETBEANS_INTG + int nb_fd = (usingNetbeans ? netbeans_filedesc() : -1); +#endif #if defined(FEAT_XCLIPBOARD) || defined(USE_XSMP) || defined(FEAT_MZSCHEME) static int busy = FALSE; @@ -4815,7 +4839,7 @@ RealWaitForChar(fd, msec, check_for_gpm) # endif #endif #ifndef HAVE_SELECT - struct pollfd fds[5]; + struct pollfd fds[6]; int nfd; # ifdef FEAT_XCLIPBOARD int xterm_idx = -1; @@ -4826,6 +4850,9 @@ RealWaitForChar(fd, msec, check_for_gpm) # ifdef USE_XSMP int xsmp_idx = -1; # endif +# ifdef FEAT_NETBEANS_INTG + int nb_idx = -1; +# endif int towait = (int)msec; # ifdef FEAT_MZSCHEME @@ -4876,6 +4903,15 @@ RealWaitForChar(fd, msec, check_for_gpm) nfd++; } # endif +#ifdef FEAT_NETBEANS_INTG + if (nb_fd != -1) + { + nb_idx = nfd; + fds[nfd].fd = nb_fd; + fds[nfd].events = POLLIN; + nfd++; + } +#endif ret = poll(fds, nfd, towait); # ifdef FEAT_MZSCHEME @@ -4929,6 +4965,13 @@ RealWaitForChar(fd, msec, check_for_gpm) finished = FALSE; /* Try again */ } # endif +#ifdef FEAT_NETBEANS_INTG + if (ret > 0 && nb_idx != -1 && fds[nb_idx].revents & POLLIN) + { + netbeans_read(); + --ret; + } +#endif #else /* HAVE_SELECT */ @@ -5010,6 +5053,14 @@ RealWaitForChar(fd, msec, check_for_gpm) maxfd = xsmp_icefd; } # endif +#ifdef FEAT_NETBEANS_INTG + if (nb_fd != -1) + { + FD_SET(nb_fd, &rfds); + if (maxfd < nb_fd) + maxfd = nb_fd; + } +#endif # ifdef OLD_VMS /* Old VMS as v6.2 and older have broken select(). It waits more than @@ -5087,6 +5138,13 @@ RealWaitForChar(fd, msec, check_for_gpm) } } # endif +#ifdef FEAT_NETBEANS_INTG + if (ret > 0 && nb_fd != -1 && FD_ISSET(nb_fd, &rfds)) + { + netbeans_read(); + --ret; + } +#endif #endif /* HAVE_SELECT */ |