X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0ed4adfc2c66da7f6711ae3f346e27c58288fa59..3da64ce8fc7efe6c8ae5b135a3d5215176662df6:/src/macselect.c diff --git a/src/macselect.c b/src/macselect.c index 49246f7edd..63221ba3a9 100644 --- a/src/macselect.c +++ b/src/macselect.c @@ -15,8 +15,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ #include @@ -98,8 +98,10 @@ static Lisp_Object Vselection_converter_alist; selection type with a scrap flavor type via `mac-ostype'. */ static Lisp_Object Qmac_scrap_name, Qmac_ostype; +#ifdef MAC_OSX /* Selection name for communication via Services menu. */ static Lisp_Object Vmac_services_selection; +#endif /* Get a reference to the scrap corresponding to the symbol SYM. The reference is set to *SCRAP, and it becomes NULL if there's no @@ -369,7 +371,7 @@ get_scrap_target_type_list (scrap) err = GetScrapFlavorCount (scrap, &count); if (err == noErr) flavor_info = xmalloc (sizeof (ScrapFlavorInfo) * count); - if (err == noErr && flavor_info) + if (flavor_info) { err = GetScrapFlavorInfoList (scrap, &count, flavor_info); if (err != noErr) @@ -378,6 +380,8 @@ get_scrap_target_type_list (scrap) flavor_info = NULL; } } + if (flavor_info == NULL) + count = 0; #endif for (rest = Vselection_converter_alist; CONSP (rest); rest = XCDR (rest)) { @@ -455,9 +459,11 @@ x_own_selection (selection_name, selection_value) value = call3 (handler_fn, selection_name, type, selection_value); - if (CONSP (value) - && EQ (XCAR (value), type) - && STRINGP (XCDR (value))) + if (STRINGP (value)) + err = put_scrap_string (scrap, type, value); + else if (CONSP (value) + && EQ (XCAR (value), type) + && STRINGP (XCDR (value))) err = put_scrap_string (scrap, type, XCDR (value)); } @@ -622,7 +628,8 @@ x_clear_frame_selections (f) hooks = Vx_lost_selection_functions; selection_symbol = Fcar (Fcar (Vselection_alist)); - if (!EQ (hooks, Qunbound)) + if (!EQ (hooks, Qunbound) + && !NILP (Fx_selection_owner_p (selection_symbol))) { for (; CONSP (hooks); hooks = Fcdr (hooks)) call1 (Fcar (hooks), selection_symbol); @@ -646,7 +653,8 @@ x_clear_frame_selections (f) hooks = Vx_lost_selection_functions; selection_symbol = Fcar (Fcar (XCDR (rest))); - if (!EQ (hooks, Qunbound)) + if (!EQ (hooks, Qunbound) + && !NILP (Fx_selection_owner_p (selection_symbol))) { for (; CONSP (hooks); hooks = Fcdr (hooks)) call1 (Fcar (hooks), selection_symbol); @@ -704,7 +712,7 @@ anything that the functions on `selection-converter-alist' know about. */) { check_mac (); CHECK_SYMBOL (selection_name); - if (NILP (selection_value)) error ("selection-value may not be nil"); + if (NILP (selection_value)) error ("SELECTION-VALUE may not be nil"); x_own_selection (selection_name, selection_value); return selection_value; } @@ -716,11 +724,11 @@ anything that the functions on `selection-converter-alist' know about. */) DEFUN ("x-get-selection-internal", Fx_get_selection_internal, Sx_get_selection_internal, 2, 3, 0, - doc: /* Return text selected from some Mac window. + doc: /* Return text selected from some Mac application. SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'. TYPE is the type of data desired, typically `STRING'. TIME_STAMP is ignored on Mac. */) - (selection_symbol, target_type, time_stamp) + (selection_symbol, target_type, time_stamp) Lisp_Object selection_symbol, target_type, time_stamp; { Lisp_Object val = Qnil; @@ -813,7 +821,7 @@ Disowning it means there is no such selection. */) DEFUN ("x-selection-owner-p", Fx_selection_owner_p, Sx_selection_owner_p, 0, 1, 0, - doc: /* Whether the current Emacs process owns the given Selection. + doc: /* Whether the current Emacs process owns the given SELECTION. The arg should be the name of the selection in question, typically one of the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'. For convenience, the symbol nil is the same as `PRIMARY', @@ -858,7 +866,7 @@ and t is the same as `SECONDARY'. */) DEFUN ("x-selection-exists-p", Fx_selection_exists_p, Sx_selection_exists_p, 0, 1, 0, - doc: /* Whether there is an owner for the given Selection. + doc: /* Whether there is an owner for the given SELECTION. The arg should be the name of the selection in question, typically one of the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'. For convenience, the symbol nil is the same as `PRIMARY', @@ -1069,7 +1077,7 @@ a desired type to which the selection should be converted; and the local selection value (whatever was given to `x-own-selection'). The function should return the value to send to the Scrap Manager -\(a string). A return value of nil +\(must be a string). A return value of nil means that the conversion could not be done. A return value which is the symbol `NULL' means that a side-effect was executed, @@ -1098,9 +1106,11 @@ next communication only. After the communication, this variable is set to nil. */); Vnext_selection_coding_system = Qnil; +#ifdef MAC_OSX DEFVAR_LISP ("mac-services-selection", &Vmac_services_selection, doc: /* Selection name for communication via Services menu. */); - Vmac_services_selection = intern ("CLIPBOARD"); + Vmac_services_selection = intern ("PRIMARY"); +#endif QPRIMARY = intern ("PRIMARY"); staticpro (&QPRIMARY); QSECONDARY = intern ("SECONDARY"); staticpro (&QSECONDARY);