summaryrefslogtreecommitdiffstats
path: root/src/os_unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os_unix.c')
-rw-r--r--src/os_unix.c70
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 */