Mercurial > emacs
changeset 9670:a03e0a600f3f
Use XFlush, not XFlushQueue, throughout.
(Xatom_*): Variables deleted.
Use slots in x_display_info structure instead.
(symbol_to_x_atom, x_atom_to_symbol):
New arg dpyinfo. All callers changed.
(xatoms_of_xselect): Function deleted.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 23 Oct 1994 09:38:50 +0000 |
parents | 572b1f190d15 |
children | 5c7a3709e81a |
files | src/xselect.c |
diffstat | 1 files changed, 81 insertions(+), 81 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xselect.c Sun Oct 23 07:59:01 1994 +0000 +++ b/src/xselect.c Sun Oct 23 09:38:50 1994 +0000 @@ -38,10 +38,6 @@ #define CUT_BUFFER_SUPPORT -static Atom Xatom_CLIPBOARD, Xatom_TIMESTAMP, Xatom_TEXT, Xatom_DELETE, - Xatom_MULTIPLE, Xatom_INCR, Xatom_EMACS_TMP, Xatom_TARGETS, Xatom_NULL, - Xatom_ATOM_PAIR; - Lisp_Object QPRIMARY, QSECONDARY, QSTRING, QINTEGER, QCLIPBOARD, QTIMESTAMP, QTEXT, QDELETE, QMULTIPLE, QINCR, QEMACS_TMP, QTARGETS, QATOM, QNULL, QATOM_PAIR; @@ -110,7 +106,8 @@ roundtrip whenever possible. */ static Atom -symbol_to_x_atom (display, sym) +symbol_to_x_atom (dpyinfo, display, sym) + struct x_display_info *dpyinfo; Display *display; Lisp_Object sym; { @@ -121,15 +118,15 @@ if (EQ (sym, QSTRING)) return XA_STRING; if (EQ (sym, QINTEGER)) return XA_INTEGER; if (EQ (sym, QATOM)) return XA_ATOM; - if (EQ (sym, QCLIPBOARD)) return Xatom_CLIPBOARD; - if (EQ (sym, QTIMESTAMP)) return Xatom_TIMESTAMP; - if (EQ (sym, QTEXT)) return Xatom_TEXT; - if (EQ (sym, QDELETE)) return Xatom_DELETE; - if (EQ (sym, QMULTIPLE)) return Xatom_MULTIPLE; - if (EQ (sym, QINCR)) return Xatom_INCR; - if (EQ (sym, QEMACS_TMP)) return Xatom_EMACS_TMP; - if (EQ (sym, QTARGETS)) return Xatom_TARGETS; - if (EQ (sym, QNULL)) return Xatom_NULL; + if (EQ (sym, QCLIPBOARD)) return dpyinfo->Xatom_CLIPBOARD; + if (EQ (sym, QTIMESTAMP)) return dpyinfo->Xatom_TIMESTAMP; + if (EQ (sym, QTEXT)) return dpyinfo->Xatom_TEXT; + if (EQ (sym, QDELETE)) return dpyinfo->Xatom_DELETE; + if (EQ (sym, QMULTIPLE)) return dpyinfo->Xatom_MULTIPLE; + if (EQ (sym, QINCR)) return dpyinfo->Xatom_INCR; + if (EQ (sym, QEMACS_TMP)) return dpyinfo->Xatom_EMACS_TMP; + if (EQ (sym, QTARGETS)) return dpyinfo->Xatom_TARGETS; + if (EQ (sym, QNULL)) return dpyinfo->Xatom_NULL; #ifdef CUT_BUFFER_SUPPORT if (EQ (sym, QCUT_BUFFER0)) return XA_CUT_BUFFER0; if (EQ (sym, QCUT_BUFFER1)) return XA_CUT_BUFFER1; @@ -156,7 +153,8 @@ and calls to intern whenever possible. */ static Lisp_Object -x_atom_to_symbol (display, atom) +x_atom_to_symbol (dpyinfo, display, atom) + struct x_display_info *dpyinfo; Display *display; Atom atom; { @@ -195,23 +193,23 @@ #endif } - if (atom == Xatom_CLIPBOARD) + if (atom == dpyinfo->Xatom_CLIPBOARD) return QCLIPBOARD; - if (atom == Xatom_TIMESTAMP) + if (atom == dpyinfo->Xatom_TIMESTAMP) return QTIMESTAMP; - if (atom == Xatom_TEXT) + if (atom == dpyinfo->Xatom_TEXT) return QTEXT; - if (atom == Xatom_DELETE) + if (atom == dpyinfo->Xatom_DELETE) return QDELETE; - if (atom == Xatom_MULTIPLE) + if (atom == dpyinfo->Xatom_MULTIPLE) return QMULTIPLE; - if (atom == Xatom_INCR) + if (atom == dpyinfo->Xatom_INCR) return QINCR; - if (atom == Xatom_EMACS_TMP) + if (atom == dpyinfo->Xatom_EMACS_TMP) return QEMACS_TMP; - if (atom == Xatom_TARGETS) + if (atom == dpyinfo->Xatom_TARGETS) return QTARGETS; - if (atom == Xatom_NULL) + if (atom == dpyinfo->Xatom_NULL) return QNULL; BLOCK_INPUT; @@ -240,9 +238,10 @@ Display *display = FRAME_X_DISPLAY (selected_frame); Time time = last_event_timestamp; Atom selection_atom; + struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (selected_frame); CHECK_SYMBOL (selection_name, 0); - selection_atom = symbol_to_x_atom (display, selection_name); + selection_atom = symbol_to_x_atom (dpyinfo, display, selection_name); BLOCK_INPUT; x_catch_errors (selected_frame); @@ -415,7 +414,7 @@ BLOCK_INPUT; XSendEvent (reply.display, reply.requestor, False, 0L, (XEvent *) &reply); - XFlushQueue (); + XFlush (reply.display); UNBLOCK_INPUT; } @@ -485,6 +484,7 @@ int bytes_remaining; int format_bytes = format/8; int max_bytes = SELECTION_QUANTUM (display); + struct x_display_info *dpyinfo = x_display_info_for_display (display); if (max_bytes > MAX_SELECTION_QUANTUM) max_bytes = MAX_SELECTION_QUANTUM; @@ -516,7 +516,7 @@ PropModeReplace, data, size); /* At this point, the selection was successfully stored; ack it. */ XSendEvent (display, window, False, 0L, (XEvent *) &reply); - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; } else @@ -534,13 +534,13 @@ wait_object = expect_property_change (display, window, reply.property, PropertyDelete); - XChangeProperty (display, window, reply.property, Xatom_INCR, + XChangeProperty (display, window, reply.property, dpyinfo->Xatom_INCR, 32, PropModeReplace, (unsigned char *) &bytes_remaining, 1); XSelectInput (display, window, PropertyChangeMask); /* Tell 'em the INCR data is there... */ (void) XSendEvent (display, window, False, 0L, (XEvent *) &reply); - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; /* First, wait for the requestor to ack by deleting the property. @@ -566,7 +566,7 @@ PropModeAppend, data, i / format_bytes); bytes_remaining -= i; data += i; - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; /* Now wait for the requestor to ack this chunk by deleting the @@ -585,7 +585,7 @@ XChangeProperty (display, window, reply.property, type, format, PropModeReplace, data, 0); - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; } } @@ -605,6 +605,8 @@ Time local_selection_time; Lisp_Object successful_p; int count; + struct x_display_info *dpyinfo + = x_display_info_for_display (SELECTION_EVENT_DISPLAY (event)); local_selection_data = Qnil; target_symbol = Qnil; @@ -613,7 +615,8 @@ GCPRO3 (local_selection_data, converted_selection, target_symbol); - selection_symbol = x_atom_to_symbol (SELECTION_EVENT_DISPLAY (event), + selection_symbol = x_atom_to_symbol (dpyinfo, + SELECTION_EVENT_DISPLAY (event), SELECTION_EVENT_SELECTION (event)); local_selection_data = assq_no_quit (selection_symbol, Vselection_alist); @@ -643,7 +646,7 @@ x_selection_current_request = event; record_unwind_protect (x_selection_request_lisp_error, Qnil); - target_symbol = x_atom_to_symbol (SELECTION_EVENT_DISPLAY (event), + target_symbol = x_atom_to_symbol (dpyinfo, SELECTION_EVENT_DISPLAY (event), SELECTION_EVENT_TARGET (event)); #if 0 /* #### MULTIPLE doesn't work yet */ @@ -707,8 +710,9 @@ Lisp_Object selection_symbol, local_selection_data; Time local_selection_time; + struct x_display_info *dpyinfo = x_display_info_for_display (display); - selection_symbol = x_atom_to_symbol (display, selection); + selection_symbol = x_atom_to_symbol (dpyinfo, display, selection); local_selection_data = assq_no_quit (selection_symbol, Vselection_alist); @@ -935,7 +939,7 @@ #if 0 fprintf (stderr, "Saw expected prop-%s on %s\n", (event->state == PropertyDelete ? "delete" : "change"), - (char *) XSYMBOL (x_atom_to_symbol (event->display, + (char *) XSYMBOL (x_atom_to_symbol (dpyinfo, event->display, event->atom)) ->name->data); #endif @@ -960,7 +964,8 @@ #if 0 fprintf (stderr, "Saw UNexpected prop-%s on %s\n", (event->state == PropertyDelete ? "delete" : "change"), - (char *) XSYMBOL (x_atom_to_symbol (event->display, event->atom)) + (char *) XSYMBOL (x_atom_to_symbol (dpyinfo, + event->display, event->atom)) ->name->data); #endif } @@ -1031,22 +1036,23 @@ { Window requestor_window = FRAME_X_WINDOW (selected_frame); Display *display = FRAME_X_DISPLAY (selected_frame); + struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (selected_frame); Time requestor_time = last_event_timestamp; - Atom target_property = Xatom_EMACS_TMP; - Atom selection_atom = symbol_to_x_atom (display, selection_symbol); + Atom target_property = dpyinfo->Xatom_EMACS_TMP; + Atom selection_atom = symbol_to_x_atom (dpyinfo, display, selection_symbol); Atom type_atom; int secs, usecs; if (CONSP (target_type)) - type_atom = symbol_to_x_atom (display, XCONS (target_type)->car); + type_atom = symbol_to_x_atom (dpyinfo, display, XCONS (target_type)->car); else - type_atom = symbol_to_x_atom (display, target_type); + type_atom = symbol_to_x_atom (dpyinfo, display, target_type); BLOCK_INPUT; x_catch_errors (selected_frame); XConvertSelection (display, selection_atom, type_atom, target_property, requestor_window, requestor_time); - XFlushQueue (); + XFlush (display); /* Prepare to block until the reply has been read. */ reading_selection_window = requestor_window; @@ -1152,7 +1158,7 @@ xfree ((char *) tmp_data); } - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; *bytes_ret = offset; } @@ -1193,7 +1199,7 @@ XDeleteProperty (display, window, property); wait_object = expect_property_change (display, window, property, PropertyNewValue); - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; while (1) @@ -1225,7 +1231,7 @@ XDeleteProperty (display, window, property); wait_object = expect_property_change (display, window, property, PropertyNewValue); - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; #if 0 @@ -1265,6 +1271,7 @@ unsigned char *data = 0; int bytes = 0; Lisp_Object val; + struct x_display_info *dpyinfo = x_display_info_for_display (display); x_get_window_property (display, window, property, &data, &bytes, &actual_type, &actual_format, &actual_size, 1); @@ -1281,15 +1288,17 @@ Fcons (build_string ("selection owner couldn't convert"), actual_type ? Fcons (target_type, - Fcons (x_atom_to_symbol (display, actual_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 (display, selection_atom), + Fcons (x_atom_to_symbol (dpyinfo, display, + selection_atom), Qnil))); } - if (actual_type == Xatom_INCR) + if (actual_type == dpyinfo->Xatom_INCR) { /* That wasn't really the data, just the beginning. */ @@ -1305,7 +1314,7 @@ BLOCK_INPUT; XDeleteProperty (display, window, property); - XFlushQueue (); + XFlush (display); UNBLOCK_INPUT; /* It's been read. Now convert it to a lisp object in some semi-rational @@ -1351,8 +1360,9 @@ Atom type; int size, format; { + struct x_display_info *dpyinfo = x_display_info_for_display (display); - if (type == Xatom_NULL) + if (type == dpyinfo->Xatom_NULL) return QNULL; /* Convert any 8-bit data to a string, for compactness. */ @@ -1366,12 +1376,13 @@ { int i; if (size == sizeof (Atom)) - return x_atom_to_symbol (display, *((Atom *) data)); + return x_atom_to_symbol (dpyinfo, display, *((Atom *) data)); else { Lisp_Object v = Fmake_vector (size / sizeof (Atom), 0); for (i = 0; i < size / sizeof (Atom); i++) - Faset (v, i, x_atom_to_symbol (display, ((Atom *) data) [i])); + Faset (v, i, x_atom_to_symbol (dpyinfo, display, + ((Atom *) data) [i])); return v; } } @@ -1426,6 +1437,7 @@ int *nofree_ret; { Lisp_Object type = Qnil; + struct x_display_info *dpyinfo = x_display_info_for_display (display); *nofree_ret = 0; @@ -1458,7 +1470,7 @@ *size_ret = 1; *data_ret = (unsigned char *) xmalloc (sizeof (Atom) + 1); (*data_ret) [sizeof (Atom)] = 0; - (*(Atom **) data_ret) [0] = symbol_to_x_atom (display, obj); + (*(Atom **) data_ret) [0] = symbol_to_x_atom (dpyinfo, display, obj); if (NILP (type)) type = QATOM; } else if (INTEGERP (obj) @@ -1503,7 +1515,7 @@ for (i = 0; i < *size_ret; i++) if (SYMBOLP (XVECTOR (obj)->contents [i])) (*(Atom **) data_ret) [i] - = symbol_to_x_atom (display, XVECTOR (obj)->contents [i]); + = symbol_to_x_atom (dpyinfo, display, XVECTOR (obj)->contents [i]); else Fsignal (Qerror, /* Qselection_error */ Fcons (build_string @@ -1530,9 +1542,11 @@ Fcons (pair, Qnil))); (*(Atom **) data_ret) [i * 2] - = symbol_to_x_atom (display, XVECTOR (pair)->contents [0]); + = symbol_to_x_atom (dpyinfo, display, + XVECTOR (pair)->contents [0]); (*(Atom **) data_ret) [(i * 2) + 1] - = symbol_to_x_atom (display, XVECTOR (pair)->contents [1]); + = symbol_to_x_atom (dpyinfo, display, + XVECTOR (pair)->contents [1]); } else Fsignal (Qerror, @@ -1572,7 +1586,7 @@ Fcons (build_string ("unrecognised selection data"), Fcons (obj, Qnil))); - *type_ret = symbol_to_x_atom (display, type); + *type_ret = symbol_to_x_atom (dpyinfo, display, type); } static Lisp_Object @@ -1710,9 +1724,11 @@ Atom selection_atom; XSelectionClearEvent event; Display *display; + struct x_display_info *dpyinfo; check_x (); display = FRAME_X_DISPLAY (selected_frame); + dpyinfo = FRAME_X_DISPLAY_INFO (selected_frame); CHECK_SYMBOL (selection, 0); if (NILP (time)) timestamp = last_event_timestamp; @@ -1722,7 +1738,7 @@ if (NILP (assq_no_quit (selection, Vselection_alist))) return Qnil; /* Don't disown the selection when we're not the owner. */ - selection_atom = symbol_to_x_atom (display, selection); + selection_atom = symbol_to_x_atom (dpyinfo, display, selection); BLOCK_INPUT; XSetSelectionOwner (display, selection_atom, None, timestamp); @@ -1805,7 +1821,8 @@ return Qt; if (EQ (selection, Qnil)) selection = QPRIMARY; if (EQ (selection, Qt)) selection = QSECONDARY; - atom = symbol_to_x_atom (dpy, selection); + atom = symbol_to_x_atom (FRAME_X_DISPLAY_INFO (selected_frame), + dpy, selection); if (atom == 0) return Qnil; BLOCK_INPUT; @@ -1869,12 +1886,14 @@ unsigned long size; Lisp_Object ret; Display *display; + struct x_display_info *dpyinfo; check_x (); display = FRAME_X_DISPLAY (selected_frame); + dpyinfo = FRAME_X_DISPLAY_INFO (selected_frame); window = RootWindow (display, 0); /* Cut buffers are on screen 0 */ CHECK_CUT_BUFFER (buffer, 0); - buffer_atom = symbol_to_x_atom (display, buffer); + buffer_atom = symbol_to_x_atom (dpyinfo, display, buffer); x_get_window_property (display, window, buffer_atom, &data, &bytes, &type, &format, &size, 0); @@ -1883,7 +1902,7 @@ if (format != 8 || type != XA_STRING) Fsignal (Qerror, Fcons (build_string ("cut buffer doesn't contain 8-bit data"), - Fcons (x_atom_to_symbol (display, type), + Fcons (x_atom_to_symbol (dpyinfo, display, type), Fcons (make_number (format), Qnil)))); ret = (bytes ? make_string ((char *) data, bytes) : Qnil); @@ -1916,7 +1935,8 @@ CHECK_CUT_BUFFER (buffer, 0); CHECK_STRING (string, 0); - buffer_atom = symbol_to_x_atom (display, buffer); + buffer_atom = symbol_to_x_atom (FRAME_X_DISPLAY_INFO (selected_frame), + display, buffer); data = (unsigned char *) XSTRING (string)->data; bytes = XSTRING (string)->size; bytes_remaining = bytes; @@ -1984,26 +2004,6 @@ #endif void -Xatoms_of_xselect () -{ -#define ATOM(x) XInternAtom (x_current_display, (x), False) - - BLOCK_INPUT; - /* Non-predefined atoms that we might end up using a lot */ - Xatom_CLIPBOARD = ATOM ("CLIPBOARD"); - Xatom_TIMESTAMP = ATOM ("TIMESTAMP"); - Xatom_TEXT = ATOM ("TEXT"); - Xatom_DELETE = ATOM ("DELETE"); - Xatom_MULTIPLE = ATOM ("MULTIPLE"); - Xatom_INCR = ATOM ("INCR"); - Xatom_EMACS_TMP = ATOM ("_EMACS_TMP_"); - Xatom_TARGETS = ATOM ("TARGETS"); - Xatom_NULL = ATOM ("NULL"); - Xatom_ATOM_PAIR = ATOM ("ATOM_PAIR"); - UNBLOCK_INPUT; -} - -void syms_of_xselect () { defsubr (&Sx_get_selection_internal);