Mercurial > hg > xemacs-beta
view src/dragdrop.c @ 4917:fce43cb76a1c
xlike cleanup, documentation
-------------------- ChangeLog entries follow: --------------------
man/ChangeLog addition:
2010-02-03 Ben Wing <ben@xemacs.org>
* internals/internals.texi (Top):
* internals/internals.texi (Evaluation; Stack Frames; Bindings):
* internals/internals.texi (Ben's README):
* internals/internals.texi (Consoles; Devices; Frames; Windows):
* internals/internals.texi (Window Hierarchy):
* internals/internals.texi (The Window Object):
* internals/internals.texi (Modules for the Basic Displayable Lisp Objects):
* internals/internals.texi (Window-System Support):
* internals/internals.texi (Creating a Window-System Type):
* internals/internals.texi (Discussion -- Garbage Collection):
Update the part at the top about how to maintain the file with
more tips.
Add a chapter on "window-system support" describing in a general
way how the support for different window systems/device types
works, including the separation between device-independent and
device-dependent parts, device methods, the specific device types
and the "xlike" pseudo-type.
src/ChangeLog addition:
2010-02-03 Ben Wing <ben@xemacs.org>
* Makefile.in.in:
* Makefile.in.in (x_objs):
* Makefile.in.in (gtk_gui_objs):
* console-xlike-inc.h:
* depend:
* device-x.c:
* emacs.c:
* gccache-gtk.h:
* gccache-gtk.h (gc_cache_lookup):
* gccache-x.c:
* gccache-x.c (GCCACHE_HASH):
* gccache-x.h:
* toolbar-gtk.c:
* toolbar-gtk.c (gtk_initialize_frame_toolbars):
* toolbar-x.c:
* toolbar-x.c (x_initialize_frame_toolbars):
* toolbar-xlike.c:
* toolbar-xlike.c (xlike_draw_blank_toolbar_button):
* toolbar-xlike.c (xlike_output_toolbar_button):
* toolbar-xlike.c (xlike_get_button_size):
* toolbar-xlike.c (XLIKE_OUTPUT_BUTTONS_LOOP):
* toolbar-xlike.c (xlike_output_toolbar):
* toolbar-xlike.c (xlike_clear_toolbar):
* toolbar-xlike.c (xlike_output_frame_toolbars):
* toolbar-xlike.c (xlike_clear_frame_toolbars):
* toolbar-xlike.c (xlike_redraw_exposed_toolbar):
* toolbar-xlike.c (xlike_redraw_exposed_toolbars):
* toolbar-xlike.c (xlike_redraw_frame_toolbars):
* toolbar-xlike.h:
* toolbar-xlike.h (xlike_clear_frame_toolbars):
Rename some files to make them consistent with general naming rules:
xgccache.c -> gccache-x.c
xgccache.h -> gccache-x.h
toolbar-common.c -> toolbar-xlike.c
toolbar-common.h -> toolbar-xlike.h
Fix include-file references. Also change the names of functions
in now-named toolbar-xlike.c to be xlike_foo() instead of common_foo().
Add a longish comment in console-xlike-inc.h describing the "xlike"
system, how it works and what the various files are used for.
| author | Ben Wing <ben@xemacs.org> |
|---|---|
| date | Wed, 03 Feb 2010 02:46:50 -0600 |
| parents | bc4f2511bbea |
| children | 308d34e9f07d |
line wrap: on
line source
/* Drag'n'Drop definitions created 03-may-98 by Oliver Graf <ograf@fga.de> Copyright (C) 1998 Oliver Graf <ograf@fga.de> Copyright (C) 2004 Ben Wing. This file is part of XEmacs. XEmacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. XEmacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with XEmacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Synched up with: Not in FSF. */ /* This file should be Mule-ized. */ /* A short introduction to the new Drag'n'Drop Model: A drop generates a extended misc-user-event, as defined in events.[ch]. This event contains the same as a eval and a button event. The function of a drop is set to 'dragdrop-drop-dispatch' which will be defined in ../lisp/dragdrop.el. The object of the misc-user-event has the following format: ( TYPE . DATA ) TYPE is one of `dragdrop-MIME' and `dragdrop-URL' DATA - if TYPE is `dragdrop-URL', DATA is a list of valid URL strings. It is always a list, also if only one URL string is within it. - if TYPE is `dragdrop-MIME', DATA is a list of MIME elements. Each can be a string or a list. if it is a string it is the pure MIME data complete with header and body. if it is a list it should look like ( MIME-TYPE MIME-ENCODING MIME-DATA ) MIME-TYPE list of type and key.value conses. Same as in tm-view MIME-ENC the same (a string in this case) MIME-DATA is a string */ #include <config.h> #include "lisp.h" #include "dragdrop.h" /* The supported protocol list */ Lisp_Object Vdragdrop_protocols; /* Drag'n'Drop data types known by XEmacs */ Lisp_Object Qdragdrop_MIME; Lisp_Object Qdragdrop_URL; /* External defined functions to handle Drag'n'Drop */ Lisp_Object Qdragdrop_drop_dispatch; /* from wget -- thanxx Hrvoje */ /* A list of unsafe characters for encoding, as per RFC1738. '@' and ':' (not listed in RFC) were added because of user/password encoding, and \033 for safe printing. */ #define URL_UNSAFE " <>\"#%{}|\\^~[]`@:\033" /* HEX digit -> ASCII char */ #define HEXD2ASC(x) (((x) < 10) ? ((x) + '0') : ((x) - 10 + 'A')) /* Encodes the unsafe characters (listed in URL_UNSAFE) in a given string, returning a malloc-ed %XX encoded string. if method is != NULL it is prepended to the string. */ Ibyte * dnd_url_hexify_string (const Ibyte *s, const Ibyte *m) { const Ibyte *b; Ibyte *p, *res; Bytecount i; b = s; for (i = 0; *s; s++, i++) if (strchr (URL_UNSAFE, *s)) i += 2; /* Two more characters (hex digits) */ if (m) { res = xnew_ibytes (i + ITEXT_ZTERM_SIZE + qxestrlen (m)); qxestrcpy (res, m); p = res + qxestrlen (m); } else { res = xnew_ibytes (i + ITEXT_ZTERM_SIZE); p = res; } for (s = b; *s; s++) if (strchr (URL_UNSAFE, *s)) { const Ibyte c = *s; *p++ = '%'; *p++ = HEXD2ASC (c >> 4); *p++ = HEXD2ASC (c & 0xf); } else *p++ = *s; *p = '\0'; return res; } void syms_of_dragdrop (void) { DEFSYMBOL (Qdragdrop_MIME); DEFSYMBOL (Qdragdrop_URL); DEFSYMBOL (Qdragdrop_drop_dispatch); } void vars_of_dragdrop (void) { Fprovide (intern ("dragdrop-api")); DEFVAR_CONST_LISP ("dragdrop-protocols", &Vdragdrop_protocols /* A list of supported Drag'n'drop protocols. Each element is the feature symbol of the protocol. */ ); Vdragdrop_protocols = Qnil; #ifdef HAVE_MS_WINDOWS Vdragdrop_protocols = Fcons (Qmswindows, Vdragdrop_protocols); #endif #ifdef HAVE_CDE Vdragdrop_protocols = Fcons (intern ("cde"), Vdragdrop_protocols); #endif #ifdef HAVE_GTK Vdragdrop_protocols = Fcons (Qgtk, Vdragdrop_protocols); #endif }
