Mercurial > emacs
view src/blockinput.h @ 9655:93ccc7bbae8a
(struct x_display_info): Struct renamed from x_screen.
(x_display): x_screen field renamed to display_info.
(FRAME_X_DISPLAY): Use new name.
(FRAME_X_DISPLAY_INFO): Likewise; also renamed from FRAME_X_SCREEN.
(struct x_display_info): New fields *_mod_mask, icon_bitmap_id, connection,
xrdb, Xatom..., grabbed, height, width, screen, visual, n_planes.
(x_display_list): New variable.
(FRAME_X_SCREEN): New macro.
(WHITE_PIX_DEFAULT, BLACK_PIX_DEFAULT): Take arg f.
(EMACS_CLASS): Macro moved here.
(XExposeRegionEvent): Unused macro deleted.
(XGetWindowInfo, XGetFont, XLoseFont): Unused macros deleted.
(MINWIDTH, MINHEIGHT, MAXWIDTH, MAXHEIGHT): Unused macros deleted.
(MAX_FACES_AND_GLYPHS, Bitmap): Unused macros deleted.
(struct event_queue): Structure deleted (was unused).
(EVENT_BUFFER_SIZE): Macro deleted.
(XClear): Macro deleted. Callers use XClearWindow.
(XWarpMousePointer): Macro deleted. Callers use XWarpPointer.
(XStuffPending): Macro deleted. Callers use XPending.
(XHandleError, XHandleIOError): Macros deleted.
Callers use XSet...ErrorHandler.
(XChangeWindowSize): Macro deleted. Callers use XResizeWindow.
(Color): Macro deleted; replaced with XColor.
(FONT_TYPE): Macro deleted; replaced with XFontStruct.
(PIX_TYPE): Macro deleted; replaced with unsigned long.
(ROOT_WINDOW): Macro deleted.
(struct x_display_info): New field root_window. All uses changed.
(XDISPLAY): Macro deleted.
(XFlushQueue): Macro deleted. All callers changed.
(DISPLAY_SCREEN_ARG): Maco deleted.
(DISPLAY_CELLS): Macro deleted.
(WINDOWINFO_TYPE): Macro deleted.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Sat, 22 Oct 1994 04:39:30 +0000 |
| parents | ca5cb6cafc40 |
| children | ee40177f6c68 |
line wrap: on
line source
/* blockinput.h - interface to blocking complicated interrupt-driven input. Copyright (C) 1989, 1993 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs 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. GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* When Emacs is using signal-driven input, the processing of those input signals can get pretty hairy. For example, when Emacs is running under X windows, handling an input signal can entail retrieving events from the X event queue, or making other X calls. If an input signal occurs while Emacs is in the midst of some non-reentrant code, and the signal processing invokes that same code, we lose. For example, malloc and the Xlib functions aren't usually re-entrant, and both are used by the X input signal handler - if we try to process an input signal in the midst of executing any of these functions, we'll lose. To avoid this, we make the following requirements: * Everyone must evaluate BLOCK_INPUT before entering these functions, and then call UNBLOCK_INPUT after performing them. Calls BLOCK_INPUT and UNBLOCK_INPUT may be nested. * Any complicated interrupt handling code should test interrupt_input_blocked, and put off its work until later. * If the interrupt handling code wishes, it may set interrupt_input_pending to a non-zero value. If that flag is set when input becomes unblocked, UNBLOCK_INPUT will send a new SIGIO. */ extern int interrupt_input_blocked; /* Nonzero means an input interrupt has arrived during the current critical section. */ extern int interrupt_input_pending; /* Begin critical section. */ #define BLOCK_INPUT (interrupt_input_blocked++) /* End critical section. If doing signal-driven input, and a signal came in when input was blocked, reinvoke the signal handler now to deal with it. We used to have two possible definitions of this macro - one for when SIGIO was #defined, and one for when it wasn't; when SIGIO wasn't #defined, we wouldn't bother to check if we should re-invoke the signal handler. But that doesn't work very well; some of the files which use this macro don't #include the right files to get SIGIO. So, we always test interrupt_input_pending now; that's not too expensive, and it'll never get set if we don't need to resignal. */ #define UNBLOCK_INPUT \ (interrupt_input_blocked--, \ (interrupt_input_blocked < 0 ? (abort (), 0) : 0), \ ((interrupt_input_blocked == 0 && interrupt_input_pending != 0) \ ? (reinvoke_input_signal (), 0) \ : 0)) #define TOTALLY_UNBLOCK_INPUT (interrupt_input_blocked = 0) #define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT
