changeset 109680:b6edc1ea12d7

Avoid restrictions when copying window selection. * src/keyboard.c (command_loop_1): * src/insdel.c (prepare_to_modify_buffer): Don't call validate_region.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 07 Aug 2010 16:26:55 -0400
parents 0e4b6259df92
children 232ba164887b
files src/ChangeLog src/insdel.c src/keyboard.c
diffstat 3 files changed, 19 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat Aug 07 16:10:30 2010 -0400
+++ b/src/ChangeLog	Sat Aug 07 16:26:55 2010 -0400
@@ -1,3 +1,8 @@
+2010-08-07  Chong Yidong  <cyd@stupidchicken.com>
+
+	* keyboard.c (command_loop_1):
+	* insdel.c (prepare_to_modify_buffer): Don't call validate_region.
+
 2010-08-07  Chong Yidong  <cyd@stupidchicken.com>
 
 	* insdel.c (prepare_to_modify_buffer): Save active region text to
--- a/src/insdel.c	Sat Aug 07 16:10:30 2010 -0400
+++ b/src/insdel.c	Sat Aug 07 16:26:55 2010 -0400
@@ -2055,13 +2055,12 @@
       && !NILP (Vtransient_mark_mode)
       && NILP (Vsaved_region_selection))
     {
-      Lisp_Object b = Fmarker_position (current_buffer->mark);
-      Lisp_Object e = make_number (PT);
-      if (NILP (Fequal (b, e)))
-	{
-	  validate_region (&b, &e);
-	  Vsaved_region_selection = make_buffer_string (XINT (b), XINT (e), 0);
-	}
+      int b = XINT (Fmarker_position (current_buffer->mark));
+      int e = XINT (make_number (PT));
+      if (b < e)
+	Vsaved_region_selection = make_buffer_string (b, e, 0);
+      else if (b > e)
+	Vsaved_region_selection = make_buffer_string (e, b, 0);
     }
 
   signal_before_change (start, end, preserve_ptr);
--- a/src/keyboard.c	Sat Aug 07 16:10:30 2010 -0400
+++ b/src/keyboard.c	Sat Aug 07 16:26:55 2010 -0400
@@ -1797,11 +1797,14 @@
 	    {
 	      /* Set window selection.  If `select-active-regions' is
 		 `lazy', only do it for temporarily active regions. */
-	      Lisp_Object beg = Fmarker_position (current_buffer->mark);
-	      Lisp_Object end = make_number (PT);
-	      validate_region (&beg, &end);
-	      call2 (Qx_set_selection, QPRIMARY,
-		     make_buffer_string (XINT (beg), XINT (end), 0));
+	      int beg = XINT (Fmarker_position (current_buffer->mark));
+	      int end = XINT (make_number (PT));
+	      if (beg < end)
+		call2 (Qx_set_selection, QPRIMARY,
+		       make_buffer_string (beg, end, 0));
+	      else if (beg > end)
+		call2 (Qx_set_selection, QPRIMARY,
+		       make_buffer_string (end, beg, 0));
 	    }
 
 	  if (!NILP (Vdeactivate_mark))