diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.h | 284 |
1 files changed, 112 insertions, 172 deletions
diff --git a/src/xterm.h b/src/xterm.h index 439ae4d04c8..17dbfc817f7 100644 --- a/src/xterm.h +++ b/src/xterm.h | |||
| @@ -37,18 +37,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 37 | #include <X11/StringDefs.h> | 37 | #include <X11/StringDefs.h> |
| 38 | #endif | 38 | #endif |
| 39 | 39 | ||
| 40 | /* Define a queue for X-events. One such queue is used for mouse clicks. | 40 | /* The class of this X application. */ |
| 41 | Another is used for expose events. */ | 41 | #define EMACS_CLASS "Emacs" |
| 42 | 42 | ||
| 43 | #define EVENT_BUFFER_SIZE 64 | 43 | /* Bookkeeping to distinguish X versions. */ |
| 44 | |||
| 45 | /* Max and Min sizes in character columns. */ | ||
| 46 | #define MINWIDTH 10 | ||
| 47 | #define MINHEIGHT 10 | ||
| 48 | #define MAXWIDTH 300 | ||
| 49 | #define MAXHEIGHT 80 | ||
| 50 | |||
| 51 | #ifdef HAVE_X11 | ||
| 52 | 44 | ||
| 53 | /* HAVE_X11R4 is defined if we have the features of X11R4. It should | 45 | /* HAVE_X11R4 is defined if we have the features of X11R4. It should |
| 54 | be defined when we're using X11R5, since X11R5 has the features of | 46 | be defined when we're using X11R5, since X11R5 has the features of |
| @@ -90,48 +82,33 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 90 | #define HAVE_X11R4 | 82 | #define HAVE_X11R4 |
| 91 | #endif | 83 | #endif |
| 92 | #endif | 84 | #endif |
| 93 | 85 | ||
| 94 | #define PIX_TYPE unsigned long | 86 | #define BLACK_PIX_DEFAULT(f) BlackPixel (FRAME_X_DISPLAY (f), \ |
| 95 | #define XDISPLAY x_current_display, | 87 | XScreenNumberOfScreen (FRAME_X_SCREEN (f))) |
| 96 | #define XFlushQueue() XFlush(x_current_display) | 88 | #define WHITE_PIX_DEFAULT(f) WhitePixel (FRAME_X_DISPLAY (f), \ |
| 97 | #define BLACK_PIX_DEFAULT BlackPixel (x_current_display, \ | 89 | XScreenNumberOfScreen (FRAME_X_SCREEN (f))) |
| 98 | XDefaultScreen (x_current_display)) | ||
| 99 | #define WHITE_PIX_DEFAULT WhitePixel (x_current_display, \ | ||
| 100 | XDefaultScreen (x_current_display)) | ||
| 101 | #define DISPLAY_SCREEN_ARG x_current_display, \ | ||
| 102 | XDefaultScreen (x_current_display) | ||
| 103 | #define DISPLAY_CELLS DisplayCells (x_current_display, XDefaultScreen (x_current_display)) | ||
| 104 | #define ROOT_WINDOW RootWindow (x_current_display, DefaultScreen (x_current_display)) | ||
| 105 | #define FONT_TYPE XFontStruct | ||
| 106 | #define Color XColor | ||
| 107 | |||
| 108 | #define XExposeRegionEvent XExposeEvent | ||
| 109 | #define Bitmap Pixmap /* In X11, Bitmaps are a kind of | ||
| 110 | Pixmap. */ | ||
| 111 | #define WINDOWINFO_TYPE XWindowAttributes | ||
| 112 | #define XGetWindowInfo(w, i) XGetWindowAttributes (x_current_display, \ | ||
| 113 | (w), (i)) | ||
| 114 | #define XGetFont(f) XLoadQueryFont (x_current_display, (f)) | ||
| 115 | #define XLoseFont(f) XFreeFont (x_current_display, (f)) | ||
| 116 | #define XStuffPending() XPending (x_current_display) | ||
| 117 | #define XClear(w) XClearWindow (x_current_display, (w)) | ||
| 118 | #define XWarpMousePointer(w,x,y) XWarpPointer (x_current_display, None, w, \ | ||
| 119 | 0,0,0,0, x, y) | ||
| 120 | #define XHandleError XSetErrorHandler | ||
| 121 | #define XHandleIOError XSetIOErrorHandler | ||
| 122 | |||
| 123 | #define XChangeWindowSize(w,x,y) XResizeWindow(x_current_display,w,x,y) | ||
| 124 | 90 | ||
| 125 | #define FONT_WIDTH(f) ((f)->max_bounds.width) | 91 | #define FONT_WIDTH(f) ((f)->max_bounds.width) |
| 126 | #define FONT_HEIGHT(f) ((f)->ascent + (f)->descent) | 92 | #define FONT_HEIGHT(f) ((f)->ascent + (f)->descent) |
| 127 | #define FONT_BASE(f) ((f)->ascent) | 93 | #define FONT_BASE(f) ((f)->ascent) |
| 128 | 94 | ||
| 95 | #define CHECK_X_FRAME(f, frame) \ | ||
| 96 | if (NILP (frame)) \ | ||
| 97 | f = selected_frame; \ | ||
| 98 | else \ | ||
| 99 | { \ | ||
| 100 | CHECK_LIVE_FRAME (frame, 0); \ | ||
| 101 | f = XFRAME (frame); \ | ||
| 102 | } \ | ||
| 103 | if (! FRAME_X_P (f)) | ||
| 104 | |||
| 105 | |||
| 106 | |||
| 129 | /* The mask of events that text windows always want to receive. This | 107 | /* The mask of events that text windows always want to receive. This |
| 130 | does not include mouse movement events. It is used when the window | 108 | does not include mouse movement events. It is used when the window |
| 131 | is created (in x_window) and when we ask/unask for mouse movement | 109 | is created (in x_window) and and in selection processing. |
| 132 | events (in XTmouse_tracking_enable). | ||
| 133 | 110 | ||
| 134 | We do include ButtonReleases in this set because elisp isn't always | 111 | We do include ButtonReleases in this set because Emacs isn't always |
| 135 | fast enough to catch them when it wants them, and they're rare | 112 | fast enough to catch them when it wants them, and they're rare |
| 136 | enough that they don't use much processor time. */ | 113 | enough that they don't use much processor time. */ |
| 137 | 114 | ||
| @@ -148,51 +125,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |||
| 148 | | EnterWindowMask \ | 125 | | EnterWindowMask \ |
| 149 | | VisibilityChangeMask) | 126 | | VisibilityChangeMask) |
| 150 | 127 | ||
| 151 | #else /* X10 */ | ||
| 152 | |||
| 153 | #define ConnectionNumber(dpy) dpyno() | ||
| 154 | #define PIX_TYPE int | ||
| 155 | #define XDISPLAY | ||
| 156 | #define XFlushQueue() XFlush() | ||
| 157 | #define BLACK_PIX_DEFAULT BlackPixel | ||
| 158 | #define WHITE_PIX_DEFAULT WhitePixel | ||
| 159 | #define DISPLAY_SCREEN_ARG | ||
| 160 | #define DISPLAY_CELLS DisplayCells () | ||
| 161 | #define ROOT_WINDOW RootWindow | ||
| 162 | #define XFree free | ||
| 163 | #define FONT_TYPE FontInfo | ||
| 164 | |||
| 165 | #define WINDOWINFO_TYPE WindowInfo | ||
| 166 | #define XGetWindowInfo(w, i) XQueryWindow ((w), (i)) | ||
| 167 | #define XGetFont(f) XOpenFont ((f)) | ||
| 168 | #define XLoseFont(f) XCloseFont ((f)) | ||
| 169 | #define XStuffPending() XPending () | ||
| 170 | #define XWarpMousePointer(w,x,y) XWarpMouse (w,x,y) | ||
| 171 | #define XHandleError XErrorHandler | ||
| 172 | #define XHandleIOError XIOErrorHandler | ||
| 173 | |||
| 174 | #define FONT_WIDTH(f) ((f)->width) | ||
| 175 | #define FONT_HEIGHT(f) ((f)->height) | ||
| 176 | #define FONT_BASE(f) ((f)->base) | ||
| 177 | |||
| 178 | #define XChangeWindowSize(w,x,y) XChangeWindow(w,x,y) | ||
| 179 | |||
| 180 | #endif /* X10 */ | ||
| 181 | |||
| 182 | struct event_queue | ||
| 183 | { | ||
| 184 | int rindex; /* Index at which to fetch next. */ | ||
| 185 | int windex; /* Index at which to store next. */ | ||
| 186 | XEvent xrep[EVENT_BUFFER_SIZE]; | ||
| 187 | }; | ||
| 188 | |||
| 189 | /* Queue for mouse clicks. */ | ||
| 190 | extern struct event_queue x_mouse_queue; | ||
| 191 | |||
| 192 | /* This is the X connection that we are using. */ | ||
| 193 | |||
| 194 | extern Display *x_current_display; | ||
| 195 | |||
| 196 | /* This checks to make sure we have a display. */ | 128 | /* This checks to make sure we have a display. */ |
| 197 | extern void check_x (); | 129 | extern void check_x (); |
| 198 | 130 | ||
| @@ -208,46 +140,7 @@ extern struct frame *x_top_window_to_frame (); | |||
| 208 | 140 | ||
| 209 | extern struct frame *x_focus_frame; | 141 | extern struct frame *x_focus_frame; |
| 210 | 142 | ||
| 211 | #ifdef HAVE_X11 | 143 | extern Visual *select_visual (); |
| 212 | /* Variables associated with the X display screen this emacs is using. */ | ||
| 213 | |||
| 214 | /* How many screens this X display has. */ | ||
| 215 | extern int x_screen_count; | ||
| 216 | |||
| 217 | /* The vendor supporting this X server. */ | ||
| 218 | extern Lisp_Object Vx_vendor; | ||
| 219 | |||
| 220 | /* The vendor's release number for this X server. */ | ||
| 221 | extern int x_release; | ||
| 222 | |||
| 223 | /* Height of this X screen in pixels. */ | ||
| 224 | extern int x_screen_height; | ||
| 225 | |||
| 226 | /* Height of this X screen in millimeters. */ | ||
| 227 | extern int x_screen_height_mm; | ||
| 228 | |||
| 229 | /* Width of this X screen in pixels. */ | ||
| 230 | extern int x_screen_width; | ||
| 231 | |||
| 232 | /* Width of this X screen in millimeters. */ | ||
| 233 | extern int x_screen_width_mm; | ||
| 234 | |||
| 235 | /* Does this X screen do backing store? */ | ||
| 236 | extern Lisp_Object Vx_backing_store; | ||
| 237 | |||
| 238 | /* Does this X screen do save-unders? */ | ||
| 239 | extern int x_save_under; | ||
| 240 | |||
| 241 | /* Number of planes for this screen. */ | ||
| 242 | extern int x_screen_planes; | ||
| 243 | |||
| 244 | /* X Visual type of this screen. */ | ||
| 245 | extern Lisp_Object Vx_screen_visual; | ||
| 246 | |||
| 247 | /* Mask of which mouse buttons are currently held down. */ | ||
| 248 | extern unsigned int x_mouse_grabbed; | ||
| 249 | |||
| 250 | #endif /* HAVE_X11 */ | ||
| 251 | 144 | ||
| 252 | enum text_cursor_kinds { | 145 | enum text_cursor_kinds { |
| 253 | filled_box_cursor, hollow_box_cursor, bar_cursor | 146 | filled_box_cursor, hollow_box_cursor, bar_cursor |
| @@ -256,19 +149,90 @@ enum text_cursor_kinds { | |||
| 256 | /* For each X display, we have a structure that records | 149 | /* For each X display, we have a structure that records |
| 257 | information about it. */ | 150 | information about it. */ |
| 258 | 151 | ||
| 259 | struct x_screen | 152 | struct x_display_info |
| 260 | { | 153 | { |
| 261 | /* Chain of all x_display structures. */ | 154 | /* Chain of all x_display structures. */ |
| 262 | struct x_display *next; | 155 | struct x_display_info *next; |
| 156 | /* Connection number (normally a file descriptor number). */ | ||
| 157 | int connection; | ||
| 263 | /* This says how to access this display in Xlib. */ | 158 | /* This says how to access this display in Xlib. */ |
| 264 | Display *x_display_value; | 159 | Display *display; |
| 265 | /* This records previous values returned by x-list-fonts. */ | 160 | /* This records previous values returned by x-list-fonts. */ |
| 266 | Lisp_Object font_list_cache; | 161 | Lisp_Object font_list_cache; |
| 267 | /* The name of this display. */ | 162 | /* The name of this display. */ |
| 268 | Lisp_Object name; | 163 | Lisp_Object name; |
| 269 | /* Number of frames that are on this display. */ | 164 | /* Number of frames that are on this display. */ |
| 270 | int reference_count; | 165 | int reference_count; |
| 166 | /* The Screen this connection is connected to. */ | ||
| 167 | Screen *screen; | ||
| 168 | /* The Visual being used for this display. */ | ||
| 169 | Visual *visual; | ||
| 170 | /* Number of panes on this screen. */ | ||
| 171 | int n_planes; | ||
| 172 | /* Dimensions of this screen. */ | ||
| 173 | int height, width; | ||
| 174 | /* Mask of things that cause the mouse to be grabbed. */ | ||
| 175 | int grabbed; | ||
| 176 | /* Emacs bitmap-id of the default icon bitmap for this frame. | ||
| 177 | Or -1 if none has been allocated yet. */ | ||
| 178 | int icon_bitmap_id; | ||
| 179 | /* The root window of this screen. */ | ||
| 180 | Window root_window; | ||
| 181 | |||
| 182 | /* X Resource data base */ | ||
| 183 | XrmDatabase xrdb; | ||
| 184 | |||
| 185 | /* Which modifier keys are on which modifier bits? | ||
| 186 | |||
| 187 | With each keystroke, X returns eight bits indicating which modifier | ||
| 188 | keys were held down when the key was pressed. The interpretation | ||
| 189 | of the top five modifier bits depends on what keys are attached | ||
| 190 | to them. If the Meta_L and Meta_R keysyms are on mod5, then mod5 | ||
| 191 | is the meta bit. | ||
| 192 | |||
| 193 | meta_mod_mask is a mask containing the bits used for the meta key. | ||
| 194 | It may have more than one bit set, if more than one modifier bit | ||
| 195 | has meta keys on it. Basically, if EVENT is a KeyPress event, | ||
| 196 | the meta key is pressed if (EVENT.state & meta_mod_mask) != 0. | ||
| 197 | |||
| 198 | shift_lock_mask is LockMask if the XK_Shift_Lock keysym is on the | ||
| 199 | lock modifier bit, or zero otherwise. Non-alphabetic keys should | ||
| 200 | only be affected by the lock modifier bit if XK_Shift_Lock is in | ||
| 201 | use; XK_Caps_Lock should only affect alphabetic keys. With this | ||
| 202 | arrangement, the lock modifier should shift the character if | ||
| 203 | (EVENT.state & shift_lock_mask) != 0. */ | ||
| 204 | int meta_mod_mask, shift_lock_mask; | ||
| 205 | |||
| 206 | /* These are like meta_mod_mask, but for different modifiers. */ | ||
| 207 | int alt_mod_mask, super_mod_mask, hyper_mod_mask; | ||
| 208 | |||
| 209 | /* Communication with window managers. */ | ||
| 210 | Atom Xatom_wm_protocols; | ||
| 211 | /* Kinds of protocol things we may receive. */ | ||
| 212 | Atom Xatom_wm_take_focus; | ||
| 213 | Atom Xatom_wm_save_yourself; | ||
| 214 | Atom Xatom_wm_delete_window; | ||
| 215 | /* Atom for indicating window state to the window manager. */ | ||
| 216 | Atom Xatom_wm_change_state; | ||
| 217 | /* Other WM communication */ | ||
| 218 | Atom Xatom_wm_configure_denied; /* When our config request is denied */ | ||
| 219 | Atom Xatom_wm_window_moved; /* When the WM moves us. */ | ||
| 220 | /* EditRes protocol */ | ||
| 221 | Atom Xatom_editres; | ||
| 222 | |||
| 223 | /* More atoms, which are selection types. */ | ||
| 224 | Atom Xatom_CLIPBOARD, Xatom_TIMESTAMP, Xatom_TEXT, Xatom_DELETE, | ||
| 225 | Xatom_MULTIPLE, Xatom_INCR, Xatom_EMACS_TMP, Xatom_TARGETS, Xatom_NULL, | ||
| 226 | Xatom_ATOM_PAIR; | ||
| 271 | }; | 227 | }; |
| 228 | |||
| 229 | /* This is a chain of structures for all the X displays currently in use. */ | ||
| 230 | extern struct x_display_info *x_display_list; | ||
| 231 | |||
| 232 | extern struct x_display_info *x_display_info_for_display (); | ||
| 233 | extern struct x_display_info *x_display_info_for_name (); | ||
| 234 | |||
| 235 | extern struct x_display_info *x_term_init (); | ||
| 272 | 236 | ||
| 273 | /* Each X frame object points to its own struct x_display object | 237 | /* Each X frame object points to its own struct x_display object |
| 274 | in the display.x field. The x_display structure contains all | 238 | in the display.x field. The x_display structure contains all |
| @@ -333,16 +297,16 @@ struct x_display | |||
| 333 | icon. */ | 297 | icon. */ |
| 334 | int icon_bitmap; | 298 | int icon_bitmap; |
| 335 | 299 | ||
| 336 | FONT_TYPE *font; | 300 | XFontStruct *font; |
| 337 | 301 | ||
| 338 | /* Pixel values used for various purposes. | 302 | /* Pixel values used for various purposes. |
| 339 | border_pixel may be -1 meaning use a gray tile. */ | 303 | border_pixel may be -1 meaning use a gray tile. */ |
| 340 | PIX_TYPE background_pixel; | 304 | unsigned long background_pixel; |
| 341 | PIX_TYPE foreground_pixel; | 305 | unsigned long foreground_pixel; |
| 342 | PIX_TYPE cursor_pixel; | 306 | unsigned long cursor_pixel; |
| 343 | PIX_TYPE border_pixel; | 307 | unsigned long border_pixel; |
| 344 | PIX_TYPE mouse_pixel; | 308 | unsigned long mouse_pixel; |
| 345 | PIX_TYPE cursor_foreground_pixel; | 309 | unsigned long cursor_foreground_pixel; |
| 346 | 310 | ||
| 347 | /* Descriptor for the cursor in use for this window. */ | 311 | /* Descriptor for the cursor in use for this window. */ |
| 348 | #ifdef HAVE_X11 | 312 | #ifdef HAVE_X11 |
| @@ -409,7 +373,7 @@ struct x_display | |||
| 409 | int size_hint_flags; | 373 | int size_hint_flags; |
| 410 | 374 | ||
| 411 | /* This is the Emacs structure for the X display this frame is on. */ | 375 | /* This is the Emacs structure for the X display this frame is on. */ |
| 412 | struct x_screen *x_screen; | 376 | struct x_display_info *display_info; |
| 413 | }; | 377 | }; |
| 414 | 378 | ||
| 415 | /* Get at the computed faces of an X window frame. */ | 379 | /* Get at the computed faces of an X window frame. */ |
| @@ -431,10 +395,14 @@ struct x_display | |||
| 431 | #define FRAME_BACKGROUND_PIXEL(f) ((f)->display.x->background_pixel) | 395 | #define FRAME_BACKGROUND_PIXEL(f) ((f)->display.x->background_pixel) |
| 432 | #define FRAME_FONT(f) ((f)->display.x->font) | 396 | #define FRAME_FONT(f) ((f)->display.x->font) |
| 433 | 397 | ||
| 434 | #define FRAME_X_SCREEN(f) ((f)->display.x->x_screen) | 398 | /* This gives the x_display_info structure for the display F is on. */ |
| 399 | #define FRAME_X_DISPLAY_INFO(f) ((f)->display.x->display_info) | ||
| 435 | 400 | ||
| 436 | /* This is the `Display *' which frame F is on. */ | 401 | /* This is the `Display *' which frame F is on. */ |
| 437 | #define FRAME_X_DISPLAY(f) ((f)->display.x->x_screen->x_display_value) | 402 | #define FRAME_X_DISPLAY(f) (FRAME_X_DISPLAY_INFO (f)->display) |
| 403 | |||
| 404 | /* This is the `Screen *' which frame F is on. */ | ||
| 405 | #define FRAME_X_SCREEN(f) (FRAME_X_DISPLAY_INFO (f)->screen) | ||
| 438 | 406 | ||
| 439 | /* These two really ought to be called FRAME_PIXEL_{WIDTH,HEIGHT}. */ | 407 | /* These two really ought to be called FRAME_PIXEL_{WIDTH,HEIGHT}. */ |
| 440 | #define PIXEL_WIDTH(f) ((f)->display.x->pixel_width) | 408 | #define PIXEL_WIDTH(f) ((f)->display.x->pixel_width) |
| @@ -443,34 +411,6 @@ struct x_display | |||
| 443 | #define FRAME_DESIRED_CURSOR(f) ((f)->display.x->desired_cursor) | 411 | #define FRAME_DESIRED_CURSOR(f) ((f)->display.x->desired_cursor) |
| 444 | 412 | ||
| 445 | 413 | ||
| 446 | /* When X windows are used, a glyph may be a 16 bit unsigned datum. | ||
| 447 | The high order byte is the face number and is used as an index | ||
| 448 | in the face table. A face is a font plus: | ||
| 449 | 1) the unhighlighted foreground color, | ||
| 450 | 2) the unhighlighted background color. | ||
| 451 | For highlighting, the two colors are exchanged. | ||
| 452 | Face number 0 is unused. The low order byte of a glyph gives | ||
| 453 | the character within the font. All fonts are assumed to be | ||
| 454 | fixed width, and to have the same height and width. */ | ||
| 455 | |||
| 456 | #ifdef HAVE_X11 | ||
| 457 | |||
| 458 | /* Face declared in dispextern.h */ | ||
| 459 | |||
| 460 | #else /* X10 */ | ||
| 461 | |||
| 462 | struct face | ||
| 463 | { | ||
| 464 | FONT_TYPE *font; /* Font info for specified font. */ | ||
| 465 | int fg; /* Unhighlighted foreground. */ | ||
| 466 | int bg; /* Unhighlighted background. */ | ||
| 467 | }; | ||
| 468 | #endif /* X10 */ | ||
| 469 | |||
| 470 | #define MAX_FACES_AND_GLYPHS 256 | ||
| 471 | extern struct face *x_face_table[]; | ||
| 472 | |||
| 473 | |||
| 474 | /* X-specific scroll bar stuff. */ | 414 | /* X-specific scroll bar stuff. */ |
| 475 | 415 | ||
| 476 | /* We represent scroll bars as lisp vectors. This allows us to place | 416 | /* We represent scroll bars as lisp vectors. This allows us to place |