diff src/keyboard.c @ 109965:aa6b00b4471c

Avoid clobbering primary selection when switching frames (Bug#6872). * lisp/mouse.el (mouse-yank-primary): Avoid setting primary when deactivating the mark (Bug#6872). * src/keyboard.c (command_loop_1): Don't set primary selection during handle-switch-frame (Bug#6872).
author Chong Yidong <cyd@stupidchicken.com>
date Tue, 24 Aug 2010 11:48:14 -0400
parents 083f3bd6ac6e
children c837e7372468
line wrap: on
line diff
--- a/src/keyboard.c	Mon Aug 23 15:57:55 2010 +0200
+++ b/src/keyboard.c	Tue Aug 24 11:48:14 2010 -0400
@@ -368,7 +368,7 @@
    Used by the `select-active-regions' feature.  */
 Lisp_Object Vsaved_region_selection;
 
-Lisp_Object Qx_set_selection, QPRIMARY;
+Lisp_Object Qx_set_selection, QPRIMARY, Qhandle_switch_frame;
 
 Lisp_Object Qself_insert_command;
 Lisp_Object Qforward_char;
@@ -1799,10 +1799,11 @@
 	    {
 	      /* Even if not deactivating the mark, set PRIMARY if
 		 `select-active-regions' is non-nil.  */
-	      if (EQ (Vselect_active_regions, Qonly)
-		  ? EQ (CAR_SAFE (Vtransient_mark_mode), Qonly)
-		  : (!NILP (Vselect_active_regions)
-		     && !NILP (Vtransient_mark_mode)))
+	      if ((EQ (Vselect_active_regions, Qonly)
+		   ? EQ (CAR_SAFE (Vtransient_mark_mode), Qonly)
+		   : (!NILP (Vselect_active_regions)
+		      && !NILP (Vtransient_mark_mode)))
+		  && !EQ (Vthis_command, Qhandle_switch_frame))
 		{
 		  int beg = XINT (Fmarker_position (current_buffer->mark));
 		  int end = XINT (make_number (PT));
@@ -11702,6 +11703,8 @@
   staticpro (&Qx_set_selection);
   QPRIMARY = intern_c_string ("PRIMARY");
   staticpro (&QPRIMARY);
+  Qhandle_switch_frame = intern_c_string ("handle-switch-frame");
+  staticpro (&Qhandle_switch_frame);
 
   Qinput_method_exit_on_first_char = intern_c_string ("input-method-exit-on-first-char");
   staticpro (&Qinput_method_exit_on_first_char);