annotate src/libinterface.h @ 1268:fffe735e63ee

[xemacs-hg @ 2003-02-07 11:50:50 by ben] fixes for menu crashes + better preemption behavior This contains two related changes: (1) Fix problems with reentrant calling of lwlib and associated crashes when selecting menu items. (2) Improve redisplay handling of preemption. Turn on lazy lock and hold down page-down or page-up and you'll see what I mean. They are related because they both touch on the code that retrieves events and handles the internal queues. console-msw.h, event-msw.c, event-stream.c, events.h, menubar-msw.c, menubar-x.c, menubar.h: mswindows_protect_modal_loop() has been generalized to event_stream_protect_modal_loop(), and moved to event-stream.c. mswindows_in_modal_loop ->in_modal_loop likewise. Changes in event-msw.c and menubar-msw.c for the new names and calling format (use structures instead of static variables in menubar-msw.c). Delete former in_menu_callback and use in_modal_loop in its place. Remove emacs_mswindows_quit_check_disallowed_p(), superseded by in_modal_loop. Use event_stream_protect_modal_loop() in pre_activate_callback() so that we get no lwlib reentrancy. Rearrange some of the code in event-msw.c to be grouped better. Make mswindows_drain_windows_queue() respect in_modal_loop and do nothing if so. cmdloop.c, event-stream.c: Don't conditionalize on LWLIB_MENUBARS_LUCID when giving error when in_modal_loop, and give better error. event-Xt.c, event-gtk.c: If in_modal_loop, only retrieve process and timeout events. Don't retrieve any X events because processing them can lead to reentrancy in lwlib -> death. event-stream.c: Remove unused parameter to check_event_stream_ok() and change all callers. lisp.h, event-stream.c: Rearrange some functions for increased clarity -- in particular, group all the input-pending/QUIT-related stuff together, and put right next to next-event stuff, to which it's related. Add the concept of "HOW_MANY" -- when asking whether user input is pending, you can ask if at least HOW_MANY events are pending, not just if any are. Add parameter to detect_input_pending() for this. Change recursive_sit_for from a Lisp_Object (which could only be Qt or Qnil) to an int, like it should be. event-Xt.c, event-gtk.c, event-xlike-inc.c: New file. Abstract out similar code in event_{Xt/gtk}_pending_p() and write only once, using include-file tricks. Rewrite this function to implement HOW_MANY and only process events when not in_modal_loop. event-msw.c: Implement HOW_MANY and only process events when not in_modal_loop. event-tty.c: Implement HOW_MANY. redisplay.c: Add var `max-preempts' to control maximum number of preempts. (#### perhaps not useful) Rewrite preemption check so that, rather than preempting when any user events are available, only preempt when a certain number (currently 4) of them are backed up. This effectively allows redisplay to proceed to completion in the presence of a fast auto-repeat (usually the auto-repeating is generated dynamically as necessary), and you get much better display behavior with lazy-lock active. event-unixoid.c: Comment changes. event-stream.c: Rewrite discard-input much more simply and safely using the drain-queue functions. I think the old version might loop forever if called when in_modal_loop. SEMI-UNRELATED CHANGES: ----------------------- event-stream.c: Turn QUIT-checking back on when running the pre-idle hook so it can be quit out of. indent.c: Document exact functioning of `vertical-motion' better, and its differences from GNU Emacs.
author ben
date Fri, 07 Feb 2003 11:50:54 +0000
parents 26a2f3423141
children 543769b89fed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
870
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
1 /* Define prototypes for graphics library interface functions.
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
2 Copyright (C) 2002 Ben Wing.
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
3
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
4 This file is part of XEmacs.
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
5
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
9 later version.
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
10
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
14 for more details.
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
15
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
20
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
22
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
23 #ifndef INCLUDED_libinterface_h_
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
24 #define INCLUDED_libinterface_h_
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
25
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
26 #ifdef HAVE_GIF
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
27 #include "gifrlib.h"
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
28 #endif /* HAVE_GIF */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
29
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
30 #ifdef HAVE_PNG
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
31 #ifdef __cplusplus
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
32 extern "C" {
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
33 #endif
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
34 #define message message_ /* Yuck */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
35 /* See comment in libinterface.c for the following */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
36 #define PNG_EXPORT(type, symbol) type XCDECL symbol
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
37 #define ZEXPORT XCDECL
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
38 #define ZEXPORTVA XCDECL
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
39 #include <png.h>
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
40 #undef message
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
41 #ifdef __cplusplus
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
42 }
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
43 #endif
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
44 #endif /* HAVE_PNG */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
45
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
46 /* #### WARNING: Utterly random magic here to prevent namespace conflicts
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
47 when no one bothers to be the least bit namespace-clean. Potential
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
48 problems: INT32, FAR. DONT_NEED_JPEG avoids the problem with FAR in
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
49 glyphs-msw.c. For some reason, putting the XPM code after this fixes
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
50 other problems; don't move it before. --ben */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
51 #if defined (HAVE_JPEG) && !defined (DONT_NEED_JPEG)
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
52 #ifdef __cplusplus
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
53 extern "C" {
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
54 #endif
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
55 #ifdef _MSC_VER
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
56 # ifndef XMD_H
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
57 /* Yuck! This tricks jpeglib.h into not defining INT32, which is defined
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
58 in VC98/INCLUDE/basetsd.h */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
59 # define UNDEF_XMD_H_ME_HARDER
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
60 # define XMD_H
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
61 # endif
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
62 #endif /* _MSC_VER */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
63 #include <jpeglib.h>
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
64 #ifdef UNDEF_XMD_H_ME_HARDER
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
65 # undef XMD_H
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
66 #endif
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
67 #include <jerror.h>
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
68 #ifdef __cplusplus
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
69 }
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
70 #endif
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
71
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
72 boolean XCDECL qxe_jpeg_finish_decompress (j_decompress_ptr cinfo);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
73 boolean XCDECL qxe_jpeg_start_decompress (j_decompress_ptr cinfo);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
74 JDIMENSION XCDECL qxe_jpeg_read_scanlines (j_decompress_ptr cinfo,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
75 JSAMPARRAY scanlines,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
76 JDIMENSION max_lines);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
77 int XCDECL qxe_jpeg_read_header (j_decompress_ptr cinfo, boolean require_image);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
78 #define qxe_jpeg_create_decompress(cinfo) \
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
79 qxe_jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
80 (size_t) sizeof(struct jpeg_decompress_struct))
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
81 void XCDECL qxe_jpeg_CreateDecompress (j_decompress_ptr cinfo, int version,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
82 size_t structsize);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
83 struct jpeg_error_mgr * XCDECL qxe_jpeg_std_error (struct jpeg_error_mgr *err);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
84 void XCDECL qxe_jpeg_destroy_decompress (j_decompress_ptr cinfo);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
85 boolean XCDECL qxe_jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
86
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
87 #endif /* defined (HAVE_JPEG) && !defined (DONT_NEED_JPEG) */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
88
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
89 #ifdef HAVE_XPM
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
90
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
91 #ifndef HAVE_GTK /* #### ????????????????????? No comprendo ni un poco.
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
92 This was here before, in a different file. --ben */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
93 #include <X11/xpm.h>
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
94 #endif
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
95
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
96 void XCDECL qxe_XpmFreeXpmImage (XpmImage *image);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
97 void XCDECL qxe_XpmFreeXpmInfo (XpmInfo *info);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
98 int XCDECL qxe_XpmCreateXpmImageFromBuffer (char *buffer, XpmImage *image,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
99 XpmInfo *info);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
100 void XCDECL qxe_XpmFree (void *ptr);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
101 int XCDECL qxe_XpmReadFileToData (char *filename, char ***data_return);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
102
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
103 #endif /* HAVE_XPM */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
104
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
105 #ifdef HAVE_TIFF
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
106 #include "tiffio.h"
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
107
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
108 tdata_t XCDECL qxe_TIFFmalloc (tsize_t x1);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
109 void XCDECL qxe_TIFFfree (tdata_t x1);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
110 void XCDECL qxe_TIFFClose (TIFF *x1);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
111 int XCDECL qxe_TIFFGetField (TIFF *x1, ttag_t x2, uint32 *x3);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
112 TIFF * XCDECL qxe_TIFFClientOpen (const char *x1, const char *x2,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
113 thandle_t x3, TIFFReadWriteProc x4,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
114 TIFFReadWriteProc x5, TIFFSeekProc x6,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
115 TIFFCloseProc x7, TIFFSizeProc x8,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
116 TIFFMapFileProc x9, TIFFUnmapFileProc x10);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
117 TIFFErrorHandler XCDECL qxe_TIFFSetErrorHandler (TIFFErrorHandler x1);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
118 TIFFErrorHandler XCDECL qxe_TIFFSetWarningHandler (TIFFErrorHandler x1);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
119 int XCDECL qxe_TIFFReadRGBAImage (TIFF *x1, uint32 x2, uint32 x3, uint32 *x4,
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
120 int x5);
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
121
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
122 #endif /* HAVE_TIFF */
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
123
26a2f3423141 [xemacs-hg @ 2002-06-10 12:43:41 by ben]
ben
parents:
diff changeset
124 #endif /* INCLUDED_libinterface_h_ */