diff options
| author | Jim Blandy | 1991-05-10 13:43:14 +0000 |
|---|---|---|
| committer | Jim Blandy | 1991-05-10 13:43:14 +0000 |
| commit | 3f930d20267859c0e2f8ce82afb779bcae9f00c9 (patch) | |
| tree | f047bd26fb70b88da5b654cc240f2253b56c628d /src | |
| parent | f9f9507e1d3202408b73b0c32a6e504502a70d5e (diff) | |
| download | emacs-3f930d20267859c0e2f8ce82afb779bcae9f00c9.tar.gz emacs-3f930d20267859c0e2f8ce82afb779bcae9f00c9.zip | |
Initial revision
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.h | 352 |
1 files changed, 352 insertions, 0 deletions
diff --git a/src/xterm.h b/src/xterm.h new file mode 100644 index 00000000000..dd367cfe7dd --- /dev/null +++ b/src/xterm.h | |||
| @@ -0,0 +1,352 @@ | |||
| 1 | /* Definitions and headers for communication with X protocol. | ||
| 2 | Copyright (C) 1989 Free Software Foundation, Inc. | ||
| 3 | |||
| 4 | This file is part of GNU Emacs. | ||
| 5 | |||
| 6 | GNU Emacs is free software; you can redistribute it and/or modify | ||
| 7 | it under the terms of the GNU General Public License as published by | ||
| 8 | the Free Software Foundation; either version 1, or (at your option) | ||
| 9 | any later version. | ||
| 10 | |||
| 11 | GNU Emacs is distributed in the hope that it will be useful, | ||
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | GNU General Public License for more details. | ||
| 15 | |||
| 16 | You should have received a copy of the GNU General Public License | ||
| 17 | along with GNU Emacs; see the file COPYING. If not, write to | ||
| 18 | the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | ||
| 19 | |||
| 20 | #ifdef HAVE_X11 | ||
| 21 | #include <X11/Xlib.h> | ||
| 22 | #include <X11/cursorfont.h> | ||
| 23 | #include <X11/Xutil.h> | ||
| 24 | #include <X11/keysym.h> | ||
| 25 | #include <X11/Xatom.h> | ||
| 26 | #include <X11/Xresource.h> | ||
| 27 | #else | ||
| 28 | #include <X/Xlib.h> | ||
| 29 | #endif /* HAVE_X11 */ | ||
| 30 | |||
| 31 | /* Define a queue for X-events. One such queue is used for mouse clicks. | ||
| 32 | Another is used for expose events. */ | ||
| 33 | |||
| 34 | #define EVENT_BUFFER_SIZE 64 | ||
| 35 | |||
| 36 | #define RES_CLASS "emacs" | ||
| 37 | |||
| 38 | /* Max and Min sizes in character columns. */ | ||
| 39 | #define MINWIDTH 10 | ||
| 40 | #define MINHEIGHT 10 | ||
| 41 | #define MAXWIDTH 300 | ||
| 42 | #define MAXHEIGHT 80 | ||
| 43 | |||
| 44 | #ifdef HAVE_X11 | ||
| 45 | #define PIX_TYPE unsigned long | ||
| 46 | #define XDISPLAY x_current_display, | ||
| 47 | #define XFlushQueue() XFlush(x_current_display) | ||
| 48 | #define BLACK_PIX_DEFAULT BlackPixel (x_current_display, \ | ||
| 49 | XDefaultScreen (x_current_display)) | ||
| 50 | #define WHITE_PIX_DEFAULT WhitePixel (x_current_display, \ | ||
| 51 | XDefaultScreen (x_current_display)) | ||
| 52 | #define DISPLAY_SCREEN_ARG x_current_display, \ | ||
| 53 | XDefaultScreen (x_current_display) | ||
| 54 | #define DISPLAY_CELLS DisplayCells (x_current_display, XDefaultScreen (x_current_display)) | ||
| 55 | #define ROOT_WINDOW RootWindow (x_current_display, XDefaultScreen (x_current_display)) | ||
| 56 | #define FONT_TYPE XFontStruct | ||
| 57 | #define Color XColor | ||
| 58 | |||
| 59 | #define XExposeRegionEvent XExposeEvent | ||
| 60 | #define Bitmap Pixmap /* In X11, Bitmaps are are kind of | ||
| 61 | Pixmap. */ | ||
| 62 | #define WINDOWINFO_TYPE XWindowAttributes | ||
| 63 | #define XGetWindowInfo(w, i) XGetWindowAttributes (x_current_display, \ | ||
| 64 | (w), (i)) | ||
| 65 | #define XGetFont(f) XLoadQueryFont (x_current_display, (f)) | ||
| 66 | #define XLoseFont(f) XFreeFont (x_current_display, (f)) | ||
| 67 | #define XStuffPending() XPending (x_current_display) | ||
| 68 | #define XClear(w) XClearWindow (x_current_display, (w)) | ||
| 69 | #define XWarpMousePointer(w,x,y) XWarpPointer (x_current_display, None, w, \ | ||
| 70 | 0,0,0,0, x, y) | ||
| 71 | #define XHandleError XSetErrorHandler | ||
| 72 | #define XHandleIOError XSetIOErrorHandler | ||
| 73 | |||
| 74 | #define XChangeWindowSize(w,x,y) XResizeWindow(x_current_display,w,x,y) | ||
| 75 | |||
| 76 | #define FONT_WIDTH(f) ((f)->max_bounds.width) | ||
| 77 | #define FONT_HEIGHT(f) ((f)->ascent + (f)->descent) | ||
| 78 | #define FONT_BASE(f) ((f)->ascent) | ||
| 79 | |||
| 80 | /* GC values used for drawing non-standard (other face) text. */ | ||
| 81 | extern XGCValues face_gc_values; | ||
| 82 | |||
| 83 | /* The mask of events that text windows always want to receive. This | ||
| 84 | does not include mouse movement events or button release events. | ||
| 85 | It is used when the window is created (in x_window) and when we | ||
| 86 | ask/unask for mouse movement events (in XTmouse_tracking_enable). | ||
| 87 | */ | ||
| 88 | |||
| 89 | #define STANDARD_EVENT_SET \ | ||
| 90 | (KeyPressMask \ | ||
| 91 | | ExposureMask \ | ||
| 92 | | ButtonPressMask \ | ||
| 93 | | StructureNotifyMask \ | ||
| 94 | | FocusChangeMask \ | ||
| 95 | | LeaveWindowMask \ | ||
| 96 | | EnterWindowMask \ | ||
| 97 | | VisibilityChangeMask) | ||
| 98 | |||
| 99 | #else /* X10 */ | ||
| 100 | |||
| 101 | #define ConnectionNumber(dpy) dpyno() | ||
| 102 | #define PIX_TYPE int | ||
| 103 | #define XDISPLAY | ||
| 104 | #define XFlushQueue() XFlush() | ||
| 105 | #define BLACK_PIX_DEFAULT BlackPixel | ||
| 106 | #define WHITE_PIX_DEFAULT WhitePixel | ||
| 107 | #define DISPLAY_SCREEN_ARG | ||
| 108 | #define DISPLAY_CELLS DisplayCells () | ||
| 109 | #define ROOT_WINDOW RootWindow | ||
| 110 | #define XFree free | ||
| 111 | #define FONT_TYPE FontInfo | ||
| 112 | |||
| 113 | #define WINDOWINFO_TYPE WindowInfo | ||
| 114 | #define XGetWindowInfo(w, i) XQueryWindow ((w), (i)) | ||
| 115 | #define XGetFont(f) XOpenFont ((f)) | ||
| 116 | #define XLoseFont(f) XCloseFont ((f)) | ||
| 117 | #define XStuffPending() XPending () | ||
| 118 | #define XWarpMousePointer(w,x,y) XWarpMouse (w,x,y) | ||
| 119 | #define XHandleError XErrorHandler | ||
| 120 | #define XHandleIOError XIOErrorHandler | ||
| 121 | |||
| 122 | #define FONT_WIDTH(f) ((f)->width) | ||
| 123 | #define FONT_HEIGHT(f) ((f)->height) | ||
| 124 | #define FONT_BASE(f) ((f)->base) | ||
| 125 | |||
| 126 | #define XChangeWindowSize(w,x,y) XChangeWindow(w,x,y) | ||
| 127 | |||
| 128 | #endif /* X10 */ | ||
| 129 | |||
| 130 | struct event_queue | ||
| 131 | { | ||
| 132 | int rindex; /* Index at which to fetch next. */ | ||
| 133 | int windex; /* Index at which to store next. */ | ||
| 134 | XEvent xrep[EVENT_BUFFER_SIZE]; | ||
| 135 | }; | ||
| 136 | |||
| 137 | /* Queue for mouse clicks. */ | ||
| 138 | extern struct event_queue x_mouse_queue; | ||
| 139 | |||
| 140 | /* Mechanism for interlocking between main program level | ||
| 141 | and input interrupt level. */ | ||
| 142 | |||
| 143 | /* Nonzero during a critical section. At such a time, an input interrupt | ||
| 144 | does nothing but set `x_pending_input'. */ | ||
| 145 | extern int x_input_blocked; | ||
| 146 | |||
| 147 | /* Nonzero means an input interrupt has arrived | ||
| 148 | during the current critical section. */ | ||
| 149 | extern int x_pending_input; | ||
| 150 | |||
| 151 | #ifndef sigmask | ||
| 152 | #define sigmask(no) (1L << ((no) - 1)) | ||
| 153 | #endif | ||
| 154 | |||
| 155 | /* Begin critical section. */ | ||
| 156 | #define BLOCK_INPUT (x_input_blocked++) | ||
| 157 | |||
| 158 | /* End critical section. */ | ||
| 159 | #define UNBLOCK_INPUT (x_input_blocked--, (x_input_blocked < 0 ? abort () : 0)) | ||
| 160 | |||
| 161 | #define TOTALLY_UNBLOCK_INPUT (x_input_blocked = 0) | ||
| 162 | #define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT | ||
| 163 | |||
| 164 | /* This is the X connection that we are using. */ | ||
| 165 | |||
| 166 | extern Display *x_current_display; | ||
| 167 | |||
| 168 | extern struct screen *x_window_to_screen (); | ||
| 169 | |||
| 170 | /* The screen (if any) which has the X window that has keyboard focus. | ||
| 171 | Zero if none. This is examined by Ffocus_screen in xfns.c */ | ||
| 172 | |||
| 173 | struct screen *x_focus_screen; | ||
| 174 | |||
| 175 | #ifdef HAVE_X11 | ||
| 176 | /* Variables associated with the X display screen this emacs is using. */ | ||
| 177 | |||
| 178 | /* How many screens this X display has. */ | ||
| 179 | extern Lisp_Object x_screen_count; | ||
| 180 | |||
| 181 | /* The vendor supporting this X server. */ | ||
| 182 | extern Lisp_Object Vx_vendor; | ||
| 183 | |||
| 184 | /* The vendor's release number for this X server. */ | ||
| 185 | extern Lisp_Object x_release; | ||
| 186 | |||
| 187 | /* Height of this X screen in pixels. */ | ||
| 188 | extern Lisp_Object x_screen_height; | ||
| 189 | |||
| 190 | /* Height of this X screen in millimeters. */ | ||
| 191 | extern Lisp_Object x_screen_height_mm; | ||
| 192 | |||
| 193 | /* Width of this X screen in pixels. */ | ||
| 194 | extern Lisp_Object x_screen_width; | ||
| 195 | |||
| 196 | /* Width of this X screen in millimeters. */ | ||
| 197 | extern Lisp_Object x_screen_width_mm; | ||
| 198 | |||
| 199 | /* Does this X screen do backing store? */ | ||
| 200 | extern Lisp_Object Vx_backing_store; | ||
| 201 | |||
| 202 | /* Does this X screen do save-unders? */ | ||
| 203 | extern Lisp_Object x_save_under; | ||
| 204 | |||
| 205 | /* Number of planes for this screen. */ | ||
| 206 | extern Lisp_Object x_screen_planes; | ||
| 207 | |||
| 208 | /* X Visual type of this screen. */ | ||
| 209 | extern Lisp_Object Vx_screen_visual; | ||
| 210 | |||
| 211 | #endif /* HAVE_X11 */ | ||
| 212 | |||
| 213 | enum text_cursor_kinds { | ||
| 214 | filled_box_cursor, hollow_box_cursor, bar_cursor | ||
| 215 | }; | ||
| 216 | |||
| 217 | #define PIXEL_WIDTH(s) ((s)->display.x->pixel_width) | ||
| 218 | #define PIXEL_HEIGHT(s) ((s)->display.x->pixel_height) | ||
| 219 | |||
| 220 | /* Each X screen object points to its own struct x_display object | ||
| 221 | in the display.x field. The x_display structure contains all | ||
| 222 | the information that is specific to X windows. */ | ||
| 223 | |||
| 224 | struct x_display | ||
| 225 | { | ||
| 226 | /* Position of the X window (x and y offsets in root window). */ | ||
| 227 | int left_pos; | ||
| 228 | int top_pos; | ||
| 229 | |||
| 230 | /* Border width of the X window as known by the X window system. */ | ||
| 231 | int border_width; | ||
| 232 | |||
| 233 | /* Size of the X window in pixels. */ | ||
| 234 | int pixel_height, pixel_width; | ||
| 235 | |||
| 236 | #ifdef HAVE_X11 | ||
| 237 | /* The tiled border used when the mouse is out of the screen. */ | ||
| 238 | Pixmap border_tile; | ||
| 239 | |||
| 240 | /* Here are the Graphics Contexts for the default font. */ | ||
| 241 | GC normal_gc; /* Normal video */ | ||
| 242 | GC reverse_gc; /* Reverse video */ | ||
| 243 | GC cursor_gc; /* cursor drawing */ | ||
| 244 | #endif /* HAVE_X11 */ | ||
| 245 | |||
| 246 | /* Width of the internal border. This is a line of background color | ||
| 247 | just inside the window's border. When the screen is selected, | ||
| 248 | a highlighting is displayed inside the internal border. */ | ||
| 249 | int internal_border_width; | ||
| 250 | |||
| 251 | /* The X window used for this screen. | ||
| 252 | May be zero while the screen object is being created | ||
| 253 | and the X window has not yet been created. */ | ||
| 254 | Window window_desc; | ||
| 255 | |||
| 256 | /* The X window used for the bitmap icon; | ||
| 257 | or 0 if we don't have a bitmap icon. */ | ||
| 258 | Window icon_desc; | ||
| 259 | |||
| 260 | /* The X window that is the parent of this X window. | ||
| 261 | Usually but not always RootWindow. */ | ||
| 262 | Window parent_desc; | ||
| 263 | |||
| 264 | /* 1 for bitmap icon, 0 for text icon. */ | ||
| 265 | int icon_bitmap_flag; | ||
| 266 | |||
| 267 | FONT_TYPE *font; | ||
| 268 | |||
| 269 | /* Pixel values used for various purposes. | ||
| 270 | border_pixel may be -1 meaning use a gray tile. */ | ||
| 271 | PIX_TYPE background_pixel; | ||
| 272 | PIX_TYPE foreground_pixel; | ||
| 273 | PIX_TYPE cursor_pixel; | ||
| 274 | PIX_TYPE border_pixel; | ||
| 275 | PIX_TYPE mouse_pixel; | ||
| 276 | |||
| 277 | /* Windows for scrollbars */ | ||
| 278 | Window v_scrollbar; | ||
| 279 | Window v_thumbup; | ||
| 280 | Window v_thumbdown; | ||
| 281 | Window v_slider; | ||
| 282 | |||
| 283 | Window h_scrollbar; | ||
| 284 | Window h_thumbleft; | ||
| 285 | Window h_thumbright; | ||
| 286 | Window h_slider; | ||
| 287 | |||
| 288 | /* Scrollbar info */ | ||
| 289 | |||
| 290 | int v_scrollbar_width; | ||
| 291 | int h_scrollbar_height; | ||
| 292 | |||
| 293 | /* Descriptor for the cursor in use for this window. */ | ||
| 294 | #ifdef HAVE_X11 | ||
| 295 | Cursor text_cursor; | ||
| 296 | Cursor nontext_cursor; | ||
| 297 | Cursor modeline_cursor; | ||
| 298 | #else | ||
| 299 | Cursor cursor; | ||
| 300 | #endif | ||
| 301 | |||
| 302 | /* The name that was associated with the icon, the last time | ||
| 303 | it was refreshed. Usually the same as the name of the | ||
| 304 | buffer in the currently selected window in the screen */ | ||
| 305 | char *icon_label; | ||
| 306 | |||
| 307 | /* Flag to set when the X window needs to be completely repainted. */ | ||
| 308 | int needs_exposure; | ||
| 309 | |||
| 310 | /* What kind of text cursor is drawn in this window right now? (If | ||
| 311 | there is no cursor (phys_cursor_x < 0), then this means nothing. */ | ||
| 312 | enum text_cursor_kinds text_cursor_kind; | ||
| 313 | }; | ||
| 314 | |||
| 315 | /* When X windows are used, a glyf may be a 16 bit unsigned datum. | ||
| 316 | The high order byte is the face number and is used as an index | ||
| 317 | in the face table. A face is a font plus: | ||
| 318 | 1) the unhighlighted foreground color, | ||
| 319 | 2) the unhighlighted background color. | ||
| 320 | For highlighting, the two colors are exchanged. | ||
| 321 | Face number 0 is unused. The low order byte of a glyf gives | ||
| 322 | the character within the font. All fonts are assumed to be | ||
| 323 | fixed width, and to have the same height and width. */ | ||
| 324 | |||
| 325 | #ifdef HAVE_X11 | ||
| 326 | /* Table of GC's used for this screen. */ | ||
| 327 | GC *gc_table; | ||
| 328 | |||
| 329 | /* How many GCs are in the table. */ | ||
| 330 | int gcs_in_use; | ||
| 331 | |||
| 332 | struct face | ||
| 333 | { | ||
| 334 | GC face_gc; | ||
| 335 | unsigned int foreground; | ||
| 336 | unsigned int background; | ||
| 337 | Pixmap stipple; | ||
| 338 | XFontStruct *font; | ||
| 339 | }; | ||
| 340 | |||
| 341 | #else /* X10 */ | ||
| 342 | |||
| 343 | struct face | ||
| 344 | { | ||
| 345 | FONT_TYPE *font; /* Font info for specified font. */ | ||
| 346 | int fg; /* Unhighlighted foreground. */ | ||
| 347 | int bg; /* Unhighlighted background. */ | ||
| 348 | }; | ||
| 349 | #endif /* X10 */ | ||
| 350 | |||
| 351 | #define MAX_FACES_AND_GLYPHS 256 | ||
| 352 | extern struct face *x_face_table[]; | ||