[vim/f19] - patchlevel 856

Karsten Hopp karsten at fedoraproject.org
Mon Apr 15 15:05:45 UTC 2013


commit 9644463c847473505024ab45c432cdced69fc347
Author: Karsten Hopp <karsten at redhat.com>
Date:   Mon Apr 15 17:02:18 2013 +0200

    - patchlevel 856

 7.3.856 |  311 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 311 insertions(+), 0 deletions(-)
---
diff --git a/7.3.856 b/7.3.856
new file mode 100644
index 0000000..b9f28a4
--- /dev/null
+++ b/7.3.856
@@ -0,0 +1,311 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.856
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.856
+Problem:    When calling system() multi-byte clipboard contents is garbled.
+Solution:   Save and restore the clipboard contents.  (Yukihiro Nakadaira)
+Files:	    src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro, src/ops.c,
+	    src/proto/ops.pro, src/os_unix.c, src/proto/ui.pro, src/ui.c
+
+
+*** ../vim-7.3.855/src/gui_gtk_x11.c	2013-02-14 22:11:31.000000000 +0100
+--- src/gui_gtk_x11.c	2013-03-13 17:28:00.000000000 +0100
+***************
+*** 5674,5685 ****
+      void
+  clip_mch_lose_selection(VimClipboard *cbd UNUSED)
+  {
+!     /* WEIRD: when using NULL to actually disown the selection, we lose the
+!      * selection the first time we own it. */
+!     /*
+!     gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, (guint32)GDK_CURRENT_TIME);
+      gui_mch_update();
+-      */
+  }
+  
+  /*
+--- 5674,5681 ----
+      void
+  clip_mch_lose_selection(VimClipboard *cbd UNUSED)
+  {
+!     gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, gui.event_time);
+      gui_mch_update();
+  }
+  
+  /*
+***************
+*** 5705,5710 ****
+--- 5701,5712 ----
+  {
+  }
+  
++     int
++ clip_gtk_owner_exists(VimClipboard *cbd)
++ {
++     return gdk_selection_owner_get(cbd->gtk_sel_atom) != NULL;
++ }
++ 
+  
+  #if defined(FEAT_MENU) || defined(PROTO)
+  /*
+*** ../vim-7.3.855/src/proto/gui_gtk_x11.pro	2012-05-18 17:03:14.000000000 +0200
+--- src/proto/gui_gtk_x11.pro	2013-03-13 17:35:17.000000000 +0100
+***************
+*** 59,64 ****
+--- 59,65 ----
+  void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+  int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+  void clip_mch_set_selection __ARGS((VimClipboard *cbd));
++ int clip_gtk_owner_exists __ARGS((VimClipboard *cbd));
+  void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+  void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+  void gui_mch_draw_menubar __ARGS((void));
+*** ../vim-7.3.855/src/ops.c	2013-03-07 18:50:52.000000000 +0100
+--- src/ops.c	2013-03-13 17:30:50.000000000 +0100
+***************
+*** 1017,1022 ****
+--- 1017,1035 ----
+      may_set_selection();
+  # endif
+  }
++ 
++     void
++ free_register(reg)
++     void	*reg;
++ {
++     struct yankreg tmp;
++ 
++     tmp = *y_current;
++     *y_current = *(struct yankreg *)reg;
++     free_yank_all();
++     vim_free(reg);
++     *y_current = tmp;
++ }
+  #endif
+  
+  #if defined(FEAT_MOUSE) || defined(PROTO)
+*** ../vim-7.3.855/src/proto/ops.pro	2012-06-06 16:12:54.000000000 +0200
+--- src/proto/ops.pro	2013-03-13 17:35:04.000000000 +0100
+***************
+*** 15,20 ****
+--- 15,21 ----
+  int may_get_selection __ARGS((int regname));
+  void *get_register __ARGS((int name, int copy));
+  void put_register __ARGS((int name, void *reg));
++ void free_register __ARGS((void *reg));
+  int yank_register_mline __ARGS((int regname));
+  int do_record __ARGS((int c));
+  int do_execreg __ARGS((int regname, int colon, int addcr, int silent));
+*** ../vim-7.3.855/src/os_unix.c	2013-02-26 14:56:24.000000000 +0100
+--- src/os_unix.c	2013-03-13 17:33:00.000000000 +0100
+***************
+*** 1138,1143 ****
+--- 1138,1148 ----
+  
+  # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+  static void loose_clipboard __ARGS((void));
++ static void save_clipboard __ARGS((void));
++ static void restore_clipboard __ARGS((void));
++ 
++ static void *clip_star_save = NULL;
++ static void *clip_plus_save = NULL;
+  
+  /*
+   * Called when Vim is going to sleep or execute a shell command.
+***************
+*** 1158,1163 ****
+--- 1163,1204 ----
+  	    XFlush(x11_display);
+      }
+  }
++ 
++ /*
++  * Save clipboard text to restore later.
++  */
++     static void
++ save_clipboard()
++ {
++     if (clip_star.owned)
++ 	clip_star_save = get_register('*', TRUE);
++     if (clip_plus.owned)
++ 	clip_plus_save = get_register('+', TRUE);
++ }
++ 
++ /*
++  * Restore clipboard text if no one own the X selection.
++  */
++     static void
++ restore_clipboard()
++ {
++     if (clip_star_save != NULL)
++     {
++ 	if (!clip_gen_owner_exists(&clip_star))
++ 	    put_register('*', clip_star_save);
++ 	else
++ 	    free_register(clip_star_save);
++ 	clip_star_save = NULL;
++     }
++     if (clip_plus_save != NULL)
++     {
++ 	if (!clip_gen_owner_exists(&clip_plus))
++ 	    put_register('+', clip_plus_save);
++ 	else
++ 	    free_register(clip_plus_save);
++ 	clip_plus_save = NULL;
++     }
++ }
+  #endif
+  
+  /*
+***************
+*** 3844,3849 ****
+--- 3885,3891 ----
+  	settmode(TMODE_COOK);	    /* set to normal mode */
+  
+  # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++     save_clipboard();
+      loose_clipboard();
+  # endif
+  
+***************
+*** 3917,3922 ****
+--- 3959,3967 ----
+  # ifdef FEAT_TITLE
+      resettitle();
+  # endif
++ # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++     restore_clipboard();
++ # endif
+      return x;
+  
+  #else /* USE_SYSTEM */	    /* don't use system(), use fork()/exec() */
+***************
+*** 3965,3970 ****
+--- 4010,4018 ----
+  	settmode(TMODE_COOK);		/* set to normal mode */
+  
+  # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++     /* Disown the clipboard, because is the executed command tries to obtain a
++      * selection and we own it we get a deadlock. */
++     save_clipboard();
+      loose_clipboard();
+  # endif
+  
+***************
+*** 4836,4841 ****
+--- 4884,4892 ----
+  # ifdef FEAT_TITLE
+      resettitle();
+  # endif
++ # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++     restore_clipboard();
++ # endif
+      vim_free(newcmd);
+  
+      return retval;
+*** ../vim-7.3.855/src/proto/ui.pro	2012-07-10 16:49:08.000000000 +0200
+--- src/proto/ui.pro	2013-03-13 17:35:08.000000000 +0100
+***************
+*** 29,34 ****
+--- 29,35 ----
+  void clip_gen_lose_selection __ARGS((VimClipboard *cbd));
+  void clip_gen_set_selection __ARGS((VimClipboard *cbd));
+  void clip_gen_request_selection __ARGS((VimClipboard *cbd));
++ int clip_gen_owner_exists __ARGS((VimClipboard *cbd));
+  int vim_is_input_buf_full __ARGS((void));
+  int vim_is_input_buf_empty __ARGS((void));
+  int vim_free_in_input_buf __ARGS((void));
+***************
+*** 52,57 ****
+--- 53,59 ----
+  void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
+  int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
+  void clip_x11_set_selection __ARGS((VimClipboard *cbd));
++ int clip_x11_owner_exists __ARGS((VimClipboard *cbd));
+  void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd));
+  int jump_to_mouse __ARGS((int flags, int *inclusive, int which_button));
+  int mouse_comp_pos __ARGS((win_T *win, int *rowp, int *colp, linenr_T *lnump));
+*** ../vim-7.3.855/src/ui.c	2013-03-07 18:02:27.000000000 +0100
+--- src/ui.c	2013-03-13 17:31:31.000000000 +0100
+***************
+*** 1456,1461 ****
+--- 1456,1476 ----
+  #endif
+  }
+  
++     int
++ clip_gen_owner_exists(cbd)
++     VimClipboard	*cbd;
++ {
++ #ifdef FEAT_XCLIPBOARD
++ # ifdef FEAT_GUI_GTK
++     if (gui.in_use)
++ 	return clip_gtk_owner_exists(cbd);
++     else
++ # endif
++ 	return clip_x11_owner_exists(cbd);
++ #endif
++     return TRUE;
++ }
++ 
+  #endif /* FEAT_CLIPBOARD */
+  
+  /*****************************************************************************
+***************
+*** 2398,2404 ****
+      Widget		myShell;
+      VimClipboard	*cbd;
+  {
+!     XtDisownSelection(myShell, cbd->sel_atom, CurrentTime);
+  }
+  
+      int
+--- 2413,2420 ----
+      Widget		myShell;
+      VimClipboard	*cbd;
+  {
+!     XtDisownSelection(myShell, cbd->sel_atom,
+! 				XtLastTimestampProcessed(XtDisplay(myShell)));
+  }
+  
+      int
+***************
+*** 2440,2445 ****
+--- 2456,2468 ----
+      VimClipboard *cbd UNUSED;
+  {
+  }
++ 
++     int
++ clip_x11_owner_exists(cbd)
++     VimClipboard	*cbd;
++ {
++     return XGetSelectionOwner(X_DISPLAY, cbd->sel_atom) != None;
++ }
+  #endif
+  
+  #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \
+*** ../vim-7.3.855/src/version.c	2013-03-13 17:01:47.000000000 +0100
+--- src/version.c	2013-03-13 17:45:25.000000000 +0100
+***************
+*** 730,731 ****
+--- 730,733 ----
+  {   /* Add new patch number below this line */
++ /**/
++     856,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+39. You move into a new house and decide to Netscape before you landscape.
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- 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    ///


More information about the scm-commits mailing list