| 2680 | | /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. |
|---|
| 2681 | | TODO: Check if this client event really is a DND event? */ |
|---|
| | 2680 | DEFUN ("x-register-dnd-atom", Fx_register_dnd_atom, |
|---|
| | 2681 | Sx_register_dnd_atom, 1, 2, 0, |
|---|
| | 2682 | doc: /* Request that dnd events are made for ClientMessages with ATOM. |
|---|
| | 2683 | ATOM can be a symbol or a string. The ATOM is interned on the display that |
|---|
| | 2684 | FRAME is on. If FRAME is nil, the selected frame is used. */) |
|---|
| | 2685 | (atom, frame) |
|---|
| | 2686 | Lisp_Object atom, frame; |
|---|
| | 2687 | { |
|---|
| | 2688 | Atom x_atom; |
|---|
| | 2689 | struct frame *f = check_x_frame (frame); |
|---|
| | 2690 | size_t i; |
|---|
| | 2691 | struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
|---|
| | 2692 | |
|---|
| | 2693 | |
|---|
| | 2694 | if (SYMBOLP (atom)) |
|---|
| | 2695 | x_atom = symbol_to_x_atom (dpyinfo, FRAME_X_DISPLAY (f), atom); |
|---|
| | 2696 | else if (STRINGP (atom)) |
|---|
| | 2697 | { |
|---|
| | 2698 | BLOCK_INPUT; |
|---|
| | 2699 | x_atom = XInternAtom (FRAME_X_DISPLAY (f), (char *) SDATA (atom), False); |
|---|
| | 2700 | UNBLOCK_INPUT; |
|---|
| | 2701 | } |
|---|
| | 2702 | else |
|---|
| | 2703 | error ("ATOM must be a symbol or a string"); |
|---|
| | 2704 | |
|---|
| | 2705 | for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i) |
|---|
| | 2706 | if (dpyinfo->x_dnd_atoms[i] == x_atom) |
|---|
| | 2707 | return Qnil; |
|---|
| | 2708 | |
|---|
| | 2709 | if (dpyinfo->x_dnd_atoms_length == dpyinfo->x_dnd_atoms_size) |
|---|
| | 2710 | { |
|---|
| | 2711 | dpyinfo->x_dnd_atoms_size *= 2; |
|---|
| | 2712 | dpyinfo->x_dnd_atoms = xrealloc (dpyinfo->x_dnd_atoms, |
|---|
| | 2713 | sizeof (*dpyinfo->x_dnd_atoms) |
|---|
| | 2714 | * dpyinfo->x_dnd_atoms_size); |
|---|
| | 2715 | } |
|---|
| | 2716 | |
|---|
| | 2717 | dpyinfo->x_dnd_atoms[dpyinfo->x_dnd_atoms_length++] = x_atom; |
|---|
| | 2718 | return Qnil; |
|---|
| | 2719 | } |
|---|
| | 2720 | |
|---|
| | 2721 | /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. */ |
|---|