Mercurial > hg > xemacs-beta
annotate src/dragdrop.c @ 5925:08cfc8f77fb6 cygwin
make space for long ptr, and store as such, for frame in WINDOW data,
add a bit more debugging to debug-mswindow,
Vin Shelton patch to fix M-x shell
| author | Henry Thompson <ht@markup.co.uk> |
|---|---|
| date | Fri, 27 Feb 2015 17:41:20 +0000 |
| parents | 308d34e9f07d |
| children |
| rev | line source |
|---|---|
| 428 | 1 /* Drag'n'Drop definitions |
| 2 created 03-may-98 by Oliver Graf <ograf@fga.de> | |
| 3 Copyright (C) 1998 Oliver Graf <ograf@fga.de> | |
| 2367 | 4 Copyright (C) 2004 Ben Wing. |
| 428 | 5 |
| 6 This file is part of XEmacs. | |
| 7 | |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
8 XEmacs is free software: you can redistribute it and/or modify it |
| 428 | 9 under the terms of the GNU General Public License as published by the |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
10 Free Software Foundation, either version 3 of the License, or (at your |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
11 option) any later version. |
| 428 | 12 |
| 13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
| 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 16 for more details. | |
| 17 | |
| 18 You should have received a copy of the GNU General Public License | |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
4790
diff
changeset
|
19 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
| 428 | 20 |
| 21 /* Synched up with: Not in FSF. */ | |
| 22 | |
| 23 /* This file should be Mule-ized. */ | |
| 24 | |
| 25 /* A short introduction to the new Drag'n'Drop Model: | |
| 26 | |
| 27 A drop generates a extended misc-user-event, as defined in events.[ch]. | |
| 28 This event contains the same as a eval and a button event. | |
| 29 The function of a drop is set to 'dragdrop-drop-dispatch' which will be | |
| 30 defined in ../lisp/dragdrop.el. | |
| 31 The object of the misc-user-event has the following format: | |
| 32 ( TYPE . DATA ) | |
| 3025 | 33 TYPE is one of `dragdrop-MIME' and `dragdrop-URL' |
| 34 DATA - if TYPE is `dragdrop-URL', DATA is a list of valid URL strings. It | |
| 428 | 35 is always a list, also if only one URL string is within it. |
| 3025 | 36 - if TYPE is `dragdrop-MIME', DATA is a list of MIME elements. |
| 428 | 37 Each can be a string or a list. |
| 38 if it is a string it is the pure MIME data complete with header | |
| 39 and body. | |
| 40 if it is a list it should look like | |
| 41 ( MIME-TYPE MIME-ENCODING MIME-DATA ) | |
| 42 MIME-TYPE list of type and key.value conses. Same as in tm-view | |
| 43 MIME-ENC the same (a string in this case) | |
| 44 MIME-DATA is a string | |
| 45 */ | |
| 46 | |
| 47 #include <config.h> | |
| 48 #include "lisp.h" | |
| 49 #include "dragdrop.h" | |
| 50 | |
| 51 /* The supported protocol list */ | |
| 52 Lisp_Object Vdragdrop_protocols; | |
| 53 | |
| 54 /* Drag'n'Drop data types known by XEmacs */ | |
| 55 Lisp_Object Qdragdrop_MIME; | |
| 56 Lisp_Object Qdragdrop_URL; | |
| 57 | |
| 58 /* External defined functions to handle Drag'n'Drop */ | |
| 59 Lisp_Object Qdragdrop_drop_dispatch; | |
| 60 | |
| 61 /* from wget -- thanxx Hrvoje */ | |
| 62 /* A list of unsafe characters for encoding, as per RFC1738. '@' and | |
| 63 ':' (not listed in RFC) were added because of user/password | |
| 64 encoding, and \033 for safe printing. */ | |
| 65 | |
| 66 #define URL_UNSAFE " <>\"#%{}|\\^~[]`@:\033" | |
| 67 | |
| 68 /* HEX digit -> ASCII char */ | |
| 69 #define HEXD2ASC(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'A')) | |
| 70 | |
| 71 /* Encodes the unsafe characters (listed in URL_UNSAFE) in a given | |
| 72 string, returning a malloc-ed %XX encoded string. | |
| 73 if method is != NULL it is prepended to the string. */ | |
| 2367 | 74 Ibyte * |
| 75 dnd_url_hexify_string (const Ibyte *s, const Ibyte *m) | |
| 428 | 76 { |
| 2367 | 77 const Ibyte *b; |
| 78 Ibyte *p, *res; | |
| 79 Bytecount i; | |
| 428 | 80 |
| 81 b = s; | |
| 82 for (i = 0; *s; s++, i++) | |
| 83 if (strchr (URL_UNSAFE, *s)) | |
| 84 i += 2; /* Two more characters (hex digits) */ | |
| 85 if (m) | |
| 86 { | |
| 2367 | 87 res = xnew_ibytes (i + ITEXT_ZTERM_SIZE + qxestrlen (m)); |
| 88 qxestrcpy (res, m); | |
| 89 p = res + qxestrlen (m); | |
| 428 | 90 } |
| 91 else | |
| 92 { | |
| 2367 | 93 res = xnew_ibytes (i + ITEXT_ZTERM_SIZE); |
| 428 | 94 p = res; |
| 95 } | |
| 96 for (s = b; *s; s++) | |
| 97 if (strchr (URL_UNSAFE, *s)) | |
| 98 { | |
| 2367 | 99 const Ibyte c = *s; |
| 428 | 100 *p++ = '%'; |
| 101 *p++ = HEXD2ASC (c >> 4); | |
| 102 *p++ = HEXD2ASC (c & 0xf); | |
| 103 } | |
| 104 else | |
| 105 *p++ = *s; | |
| 106 *p = '\0'; | |
| 107 return res; | |
| 108 } | |
| 109 | |
| 110 void | |
| 111 syms_of_dragdrop (void) | |
| 112 { | |
| 563 | 113 DEFSYMBOL (Qdragdrop_MIME); |
| 114 DEFSYMBOL (Qdragdrop_URL); | |
| 115 DEFSYMBOL (Qdragdrop_drop_dispatch); | |
| 428 | 116 } |
| 117 | |
| 118 void | |
| 119 vars_of_dragdrop (void) | |
| 120 { | |
| 121 Fprovide (intern ("dragdrop-api")); | |
| 122 | |
| 123 DEFVAR_CONST_LISP ("dragdrop-protocols", &Vdragdrop_protocols /* | |
| 124 A list of supported Drag'n'drop protocols. | |
| 125 Each element is the feature symbol of the protocol. | |
| 126 */ ); | |
| 127 | |
| 128 Vdragdrop_protocols = Qnil; | |
| 129 | |
| 130 #ifdef HAVE_MS_WINDOWS | |
| 2367 | 131 Vdragdrop_protocols = Fcons (Qmswindows, Vdragdrop_protocols); |
| 428 | 132 #endif |
| 133 #ifdef HAVE_CDE | |
| 2367 | 134 Vdragdrop_protocols = Fcons (intern ("cde"), Vdragdrop_protocols); |
| 428 | 135 #endif |
| 462 | 136 #ifdef HAVE_GTK |
| 2367 | 137 Vdragdrop_protocols = Fcons (Qgtk, Vdragdrop_protocols); |
| 462 | 138 #endif |
| 428 | 139 } |
