# HG changeset patch # User Richard M. Stallman # Date 862451927 0 # Node ID 23baa4f48b6e3a72e29579035869f6ca4125dbdc # Parent 251e103f2d5393b591a26c484df00d59c43e79dd (x_own_selection, x_reply_selection_request) (x_get_foreign_selection): Save value of x_catch_errors and pass to x_uncatch_errors. diff -r 251e103f2d53 -r 23baa4f48b6e src/xselect.c --- 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)