diff src/xselect.c @ 17608:23baa4f48b6e

(x_own_selection, x_reply_selection_request) (x_get_foreign_selection): Save value of x_catch_errors and pass to x_uncatch_errors.
author Richard M. Stallman <rms@gnu.org>
date Thu, 01 May 1997 01:58:47 +0000
parents 30720c688961
children da246ef7532c
line wrap: on
line diff
--- a/src/xselect.c	Thu May 01 01:57:25 1997 +0000
+++ b/src/xselect.c	Thu May 01 01:58:47 1997 +0000
@@ -236,15 +236,16 @@
   Time time = last_event_timestamp;
   Atom selection_atom;
   struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (selected_frame);
+  int count;
 
   CHECK_SYMBOL (selection_name, 0);
   selection_atom = symbol_to_x_atom (dpyinfo, display, selection_name);
 
   BLOCK_INPUT;
-  x_catch_errors (display);
+  count = x_catch_errors (display);
   XSetSelectionOwner (display, selection_atom, selecting_window, time);
   x_check_errors (display, "Can't set selection: %s");
-  x_uncatch_errors (display);
+  x_uncatch_errors (display, count);
   UNBLOCK_INPUT;
 
   /* Now update the local cache */
@@ -511,6 +512,7 @@
   int format_bytes = format/8;
   int max_bytes = SELECTION_QUANTUM (display);
   struct x_display_info *dpyinfo = x_display_info_for_display (display);
+  int count;
 
   if (max_bytes > MAX_SELECTION_QUANTUM)
     max_bytes = MAX_SELECTION_QUANTUM;
@@ -527,7 +529,7 @@
 
   /* #### XChangeProperty can generate BadAlloc, and we must handle it! */
   BLOCK_INPUT;
-  x_catch_errors (display);
+  x_catch_errors (display, count);
 
   /* Store the data on the requested property.
      If the selection is large, only store the first N bytes of it.
@@ -636,7 +638,7 @@
     }
 
   XFlush (display);
-  x_uncatch_errors (display);
+  x_uncatch_errors (display, count);
   UNBLOCK_INPUT;
 }
 
@@ -1109,7 +1111,7 @@
   Atom selection_atom = symbol_to_x_atom (dpyinfo, display, selection_symbol);
   Atom type_atom;
   int secs, usecs;
-  int count = specpdl_ptr - specpdl;
+  int count;
   Lisp_Object frame;
 
   if (CONSP (target_type))
@@ -1118,7 +1120,7 @@
     type_atom = symbol_to_x_atom (dpyinfo, display, target_type);
 
   BLOCK_INPUT;
-  x_catch_errors (display);
+  count = x_catch_errors (display);
   XConvertSelection (display, selection_atom, type_atom, target_property,
 		     requestor_window, requestor_time);
   XFlush (display);
@@ -1149,8 +1151,7 @@
 
   BLOCK_INPUT;
   x_check_errors (display, "Cannot get selection: %s");
-  x_uncatch_errors (display);
-  unbind_to (count, Qnil);
+  x_uncatch_errors (display, count);
   UNBLOCK_INPUT;
 
   if (NILP (XCONS (reading_selection_reply)->car))
@@ -1375,20 +1376,19 @@
       there_is_a_selection_owner
 	= XGetSelectionOwner (display, selection_atom);
       UNBLOCK_INPUT;
-      while (1) /* Note debugger can no longer return, so this is obsolete */
-	Fsignal (Qerror,
-		 there_is_a_selection_owner ?
-		 Fcons (build_string ("selection owner couldn't convert"),
+      Fsignal (Qerror,
+	       there_is_a_selection_owner
+	       ? Fcons (build_string ("selection owner couldn't convert"),
 			actual_type
 			? Fcons (target_type,
 				 Fcons (x_atom_to_symbol (dpyinfo, display,
 							  actual_type),
 					Qnil))
 			: Fcons (target_type, Qnil))
-		 : Fcons (build_string ("no selection"),
-			  Fcons (x_atom_to_symbol (dpyinfo, display,
-						   selection_atom),
-				 Qnil)));
+	       : Fcons (build_string ("no selection"),
+			Fcons (x_atom_to_symbol (dpyinfo, display,
+						 selection_atom),
+			       Qnil)));
     }
   
   if (actual_type == dpyinfo->Xatom_INCR)