Patch 7.4.1371
Problem:    X11 GUI callbacks don't specify the part of the channel.
Solution:   Pass the fd instead of the channel ID.
Files:      src/channel.c


*** ../vim-7.4.1370/src/channel.c       2016-02-20 18:18:51.753033202 +0100
--- src/channel.c       2016-02-20 18:41:40.770605004 +0100
***************
*** 329,367 ****
      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_T *channel = channel_from_id(id);
      int               part;
  
      if (channel == NULL)
!       ch_errorn(NULL, "Channel %d not found", id);
      else
-     {
-       /* TODO: check stderr */
-       if (channel->CH_SOCK_FD != INVALID_FD)
-           part = PART_SOCK;
-       else
-           part = PART_OUT;
        channel_read(channel, part, "messageFromNetbeans");
-     }
  }
  #endif
  
--- 329,348 ----
      vim_free(channel);
  }
  
  #if defined(FEAT_GUI) || defined(PROTO)
  
  #if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)
      static void
! channel_read_fd(int fd)
  {
!     channel_T *channel;
      int               part;
  
+     channel = channel_fd2channel(fd, &part);
      if (channel == NULL)
!       ch_errorn(NULL, "Channel for fd %d not found", fd);
      else
        channel_read(channel, part, "messageFromNetbeans");
  }
  #endif
  
***************
*** 375,381 ****
                    int *unused1 UNUSED,
                    XtInputId *unused2 UNUSED)
  {
!     channel_read_netbeans((int)(long)clientData);
  }
  #endif
  
--- 356,362 ----
                    int *unused1 UNUSED,
                    XtInputId *unused2 UNUSED)
  {
!     channel_read_fd((int)(long)clientData);
  }
  #endif
  
***************
*** 385,391 ****
                    gint unused1 UNUSED,
                    GdkInputCondition unused2 UNUSED)
  {
!     channel_read_netbeans((int)(long)clientData);
  }
  #endif
  
--- 366,372 ----
                    gint unused1 UNUSED,
                    GdkInputCondition unused2 UNUSED)
  {
!     channel_read_fd((int)(long)clientData);
  }
  #endif
  
***************
*** 401,407 ****
                channel->ch_part[part].ch_fd,
                (XtPointer)(XtInputReadMask + XtInputExceptMask),
                messageFromNetbeans,
!               (XtPointer)(long)channel->ch_id);
  # else
  #  ifdef FEAT_GUI_GTK
      /* Tell gdk we are interested in being called when there
--- 382,388 ----
                channel->ch_part[part].ch_fd,
                (XtPointer)(XtInputReadMask + XtInputExceptMask),
                messageFromNetbeans,
!               (XtPointer)(long)channel->ch_part[part].ch_fd);
  # else
  #  ifdef FEAT_GUI_GTK
      /* Tell gdk we are interested in being called when there
***************
*** 412,418 ****
                (GdkInputCondition)
                             ((int)GDK_INPUT_READ + (int)GDK_INPUT_EXCEPTION),
                messageFromNetbeans,
!               (gpointer)(long)channel->ch_id);
  #  else
  #   ifdef FEAT_GUI_W32
      /* Tell Windows we are interested in receiving message when there
--- 393,399 ----
                (GdkInputCondition)
                             ((int)GDK_INPUT_READ + (int)GDK_INPUT_EXCEPTION),
                messageFromNetbeans,
!               (gpointer)(long)channel->ch_part[part].ch_fd);
  #  else
  #   ifdef FEAT_GUI_W32
      /* Tell Windows we are interested in receiving message when there
***************
*** 1812,1824 ****
      return FAIL;
  }
  
! # if defined(WIN32) || defined(PROTO)
  /*
!  * Lookup the channel from the socket.  Set "part" to the fd index.
   * Returns NULL when the socket isn't found.
   */
      channel_T *
! channel_fd2channel(sock_T fd, int *part)
  {
      channel_T *channel;
      int               part;
--- 1793,1806 ----
      return FAIL;
  }
  
! # if defined(WIN32) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) \
!       || defined(PROTO)
  /*
!  * 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 *partp)
  {
      channel_T *channel;
      int               part;
***************
*** 1834,1840 ****
  #  endif
                if (channel->ch_part[part].ch_fd == fd)
                {
!                   *part = part;
                    return channel;
                }
        }
--- 1816,1822 ----
  #  endif
                if (channel->ch_part[part].ch_fd == fd)
                {
!                   *partp = part;
                    return channel;
                }
        }
*** ../vim-7.4.1370/src/version.c       2016-02-20 18:26:43.664053539 +0100
--- src/version.c       2016-02-20 18:37:14.177410597 +0100
***************
*** 749,750 ****
--- 749,752 ----
  {   /* Add new patch number below this line */
+ /**/
+     1371,
  /**/

-- 
ARTHUR:    Well, it doesn't matter.  Will you go and tell your master that
           Arthur from the Court of Camelot is here.
GUARD #1:  Listen, in order to maintain air-speed velocity, a swallow
           needs to beat its wings 43 times every second, right?
ARTHUR:    Please!
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui