Show
Ignore:
Timestamp:
2006年08月18日 08時35分31秒 (2 years ago)
Author:
miyoshi
Message:

Sync up with Emacs CVS HEAD.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/xselect.c

    r4131 r4148  
    26782678} 
    26792679 
    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?  */ 
     2680DEFUN ("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. 
     2683ATOM can be a symbol or a string.  The ATOM is interned on the display that 
     2684FRAME 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.  */ 
    26822722 
    26832723int 
     
    26952735  unsigned char *data = (unsigned char *) event->data.b; 
    26962736  int idata[5]; 
     2737  size_t i; 
     2738 
     2739  for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i)  
     2740    if (dpyinfo->x_dnd_atoms[i] == event->message_type) break; 
     2741 
     2742  if (i == dpyinfo->x_dnd_atoms_length) return 0; 
    26972743 
    26982744  XSETFRAME (frame, f); 
     
    28682914  defsubr (&Sx_get_atom_name); 
    28692915  defsubr (&Sx_send_client_message); 
     2916  defsubr (&Sx_register_dnd_atom); 
    28702917 
    28712918  reading_selection_reply = Fcons (Qnil, Qnil);