summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-02-20 18:44:39 +0100
committerBram Moolenaar <Bram@vim.org>2016-02-20 18:44:39 +0100
commitfffd5560c6c8840be3233ef1c8da3c9e5dd424ea (patch)
tree6422a86a2a1b6ba8a845de9bb77942130aa564b4
parentddbe7d26b10c4374f406b807ae161826cf2096e1 (diff)
downloadvim-git-7.4.1371.tar.gz
patch 7.4.1371v7.4.1371
Problem: X11 GUI callbacks don't specify the part of the channel. Solution: Pass the fd instead of the channel ID.
-rw-r--r--src/channel.c44
-rw-r--r--src/version.c2
2 files changed, 15 insertions, 31 deletions
diff --git a/src/channel.c b/src/channel.c
index 1e26eae97..169db9cd3 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -329,39 +329,20 @@ channel_free(channel_T *channel)
vim_free(channel);
}
-#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)
- static channel_T *
-channel_from_id(int id)
-{
- channel_T *channel;
-
- for (channel = first_channel; channel != NULL; channel = channel->ch_next)
- if (channel->ch_id == id)
- return channel;
- return NULL;
-}
-#endif
-
#if defined(FEAT_GUI) || defined(PROTO)
#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)
static void
-channel_read_netbeans(int id)
+channel_read_fd(int fd)
{
- channel_T *channel = channel_from_id(id);
+ channel_T *channel;
int part;
+ channel = channel_fd2channel(fd, &part);
if (channel == NULL)
- ch_errorn(NULL, "Channel %d not found", id);
+ ch_errorn(NULL, "Channel for fd %d not found", fd);
else
- {
- /* TODO: check stderr */
- if (channel->CH_SOCK_FD != INVALID_FD)
- part = PART_SOCK;
- else
- part = PART_OUT;
channel_read(channel, part, "messageFromNetbeans");
- }
}
#endif
@@ -375,7 +356,7 @@ messageFromNetbeans(XtPointer clientData,
int *unused1 UNUSED,
XtInputId *unused2 UNUSED)
{
- channel_read_netbeans((int)(long)clientData);
+ channel_read_fd((int)(long)clientData);
}
#endif
@@ -385,7 +366,7 @@ messageFromNetbeans(gpointer clientData,
gint unused1 UNUSED,
GdkInputCondition unused2 UNUSED)
{
- channel_read_netbeans((int)(long)clientData);
+ channel_read_fd((int)(long)clientData);
}
#endif
@@ -401,7 +382,7 @@ channel_gui_register_one(channel_T *channel, int part)
channel->ch_part[part].ch_fd,
(XtPointer)(XtInputReadMask + XtInputExceptMask),
messageFromNetbeans,
- (XtPointer)(long)channel->ch_id);
+ (XtPointer)(long)channel->ch_part[part].ch_fd);
# else
# ifdef FEAT_GUI_GTK
/* Tell gdk we are interested in being called when there
@@ -412,7 +393,7 @@ channel_gui_register_one(channel_T *channel, int part)
(GdkInputCondition)
((int)GDK_INPUT_READ + (int)GDK_INPUT_EXCEPTION),
messageFromNetbeans,
- (gpointer)(long)channel->ch_id);
+ (gpointer)(long)channel->ch_part[part].ch_fd);
# else
# ifdef FEAT_GUI_W32
/* Tell Windows we are interested in receiving message when there
@@ -1812,13 +1793,14 @@ channel_read_json_block(channel_T *channel, int part, int id, typval_T **rettv)
return FAIL;
}
-# if defined(WIN32) || defined(PROTO)
+# if defined(WIN32) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) \
+ || defined(PROTO)
/*
- * Lookup the channel from the socket. Set "part" to the fd index.
+ * Lookup the channel from the socket. Set "partp" to the fd index.
* Returns NULL when the socket isn't found.
*/
channel_T *
-channel_fd2channel(sock_T fd, int *part)
+channel_fd2channel(sock_T fd, int *partp)
{
channel_T *channel;
int part;
@@ -1834,7 +1816,7 @@ channel_fd2channel(sock_T fd, int *part)
# endif
if (channel->ch_part[part].ch_fd == fd)
{
- *part = part;
+ *partp = part;
return channel;
}
}
diff --git a/src/version.c b/src/version.c
index 598d430bc..b39ac60f7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -748,6 +748,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1371,
+/**/
1370,
/**/
1369,