diff options
| author | Karoly Lorentey | 2006-10-14 16:56:21 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-10-14 16:56:21 +0000 |
| commit | 3f87f67ee215ffeecbd2f53bd7f342cdf03f47df (patch) | |
| tree | 16f2af9111af08a94d608d96a957f5c3ec5effcc /src/xselect.c | |
| parent | 350e4fb815d7413ef6d339dd664014706f742927 (diff) | |
| parent | 7a210b69c7f92650c524766d1b9d3f3eefdd67c7 (diff) | |
| download | emacs-3f87f67ee215ffeecbd2f53bd7f342cdf03f47df.tar.gz emacs-3f87f67ee215ffeecbd2f53bd7f342cdf03f47df.zip | |
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-371
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-372
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-373
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-374
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-375
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-376
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-377
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-378
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-379
Merge from erc--emacs--21
* emacs@sv.gnu.org/emacs--devo--0--patch-380
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-381
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-382
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-383
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-384
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-385
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-386
Update from erc--emacs--22
* emacs@sv.gnu.org/emacs--devo--0--patch-387
Fix ERC bug introduced in last patch
* emacs@sv.gnu.org/emacs--devo--0--patch-388
Update from erc--emacs--22
* emacs@sv.gnu.org/emacs--devo--0--patch-389
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-390
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-391
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-392
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-393
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-394
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-395
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-396
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-397
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-398
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-399
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-400
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-401
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-402
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-403
Rcirc update from Ryan Yeske
* emacs@sv.gnu.org/emacs--devo--0--patch-404
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-405
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-406
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-407
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-408
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-409
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-410
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-411
Miscellaneous tq-related fixes.
* emacs@sv.gnu.org/emacs--devo--0--patch-412
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-121
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-122
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-123
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-124
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-125
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-126
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-127
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-581
Diffstat (limited to 'src/xselect.c')
| -rw-r--r-- | src/xselect.c | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/src/xselect.c b/src/xselect.c index 211d207bac4..cd49e05171b 100644 --- a/src/xselect.c +++ b/src/xselect.c | |||
| @@ -2709,8 +2709,48 @@ If the value is 0 or the atom is not known, return the empty string. */) | |||
| 2709 | return ret; | 2709 | return ret; |
| 2710 | } | 2710 | } |
| 2711 | 2711 | ||
| 2712 | /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. | 2712 | DEFUN ("x-register-dnd-atom", Fx_register_dnd_atom, |
| 2713 | TODO: Check if this client event really is a DND event? */ | 2713 | Sx_register_dnd_atom, 1, 2, 0, |
| 2714 | doc: /* Request that dnd events are made for ClientMessages with ATOM. | ||
| 2715 | ATOM can be a symbol or a string. The ATOM is interned on the display that | ||
| 2716 | FRAME is on. If FRAME is nil, the selected frame is used. */) | ||
| 2717 | (atom, frame) | ||
| 2718 | Lisp_Object atom, frame; | ||
| 2719 | { | ||
| 2720 | Atom x_atom; | ||
| 2721 | struct frame *f = check_x_frame (frame); | ||
| 2722 | size_t i; | ||
| 2723 | struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); | ||
| 2724 | |||
| 2725 | |||
| 2726 | if (SYMBOLP (atom)) | ||
| 2727 | x_atom = symbol_to_x_atom (dpyinfo, FRAME_X_DISPLAY (f), atom); | ||
| 2728 | else if (STRINGP (atom)) | ||
| 2729 | { | ||
| 2730 | BLOCK_INPUT; | ||
| 2731 | x_atom = XInternAtom (FRAME_X_DISPLAY (f), (char *) SDATA (atom), False); | ||
| 2732 | UNBLOCK_INPUT; | ||
| 2733 | } | ||
| 2734 | else | ||
| 2735 | error ("ATOM must be a symbol or a string"); | ||
| 2736 | |||
| 2737 | for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i) | ||
| 2738 | if (dpyinfo->x_dnd_atoms[i] == x_atom) | ||
| 2739 | return Qnil; | ||
| 2740 | |||
| 2741 | if (dpyinfo->x_dnd_atoms_length == dpyinfo->x_dnd_atoms_size) | ||
| 2742 | { | ||
| 2743 | dpyinfo->x_dnd_atoms_size *= 2; | ||
| 2744 | dpyinfo->x_dnd_atoms = xrealloc (dpyinfo->x_dnd_atoms, | ||
| 2745 | sizeof (*dpyinfo->x_dnd_atoms) | ||
| 2746 | * dpyinfo->x_dnd_atoms_size); | ||
| 2747 | } | ||
| 2748 | |||
| 2749 | dpyinfo->x_dnd_atoms[dpyinfo->x_dnd_atoms_length++] = x_atom; | ||
| 2750 | return Qnil; | ||
| 2751 | } | ||
| 2752 | |||
| 2753 | /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. */ | ||
| 2714 | 2754 | ||
| 2715 | int | 2755 | int |
| 2716 | x_handle_dnd_message (f, event, dpyinfo, bufp) | 2756 | x_handle_dnd_message (f, event, dpyinfo, bufp) |
| @@ -2726,6 +2766,12 @@ x_handle_dnd_message (f, event, dpyinfo, bufp) | |||
| 2726 | int x, y; | 2766 | int x, y; |
| 2727 | unsigned char *data = (unsigned char *) event->data.b; | 2767 | unsigned char *data = (unsigned char *) event->data.b; |
| 2728 | int idata[5]; | 2768 | int idata[5]; |
| 2769 | size_t i; | ||
| 2770 | |||
| 2771 | for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i) | ||
| 2772 | if (dpyinfo->x_dnd_atoms[i] == event->message_type) break; | ||
| 2773 | |||
| 2774 | if (i == dpyinfo->x_dnd_atoms_length) return 0; | ||
| 2729 | 2775 | ||
| 2730 | XSETFRAME (frame, f); | 2776 | XSETFRAME (frame, f); |
| 2731 | 2777 | ||
| @@ -2899,6 +2945,7 @@ syms_of_xselect () | |||
| 2899 | 2945 | ||
| 2900 | defsubr (&Sx_get_atom_name); | 2946 | defsubr (&Sx_get_atom_name); |
| 2901 | defsubr (&Sx_send_client_message); | 2947 | defsubr (&Sx_send_client_message); |
| 2948 | defsubr (&Sx_register_dnd_atom); | ||
| 2902 | 2949 | ||
| 2903 | reading_selection_reply = Fcons (Qnil, Qnil); | 2950 | reading_selection_reply = Fcons (Qnil, Qnil); |
| 2904 | staticpro (&reading_selection_reply); | 2951 | staticpro (&reading_selection_reply); |