X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/a3c87d4e63e999a3ed18efe60d6b36da3a48a314..97f3b3d6e9f5524a01443f9352737013be4fc6ae:/src/xterm.h diff --git a/src/xterm.h b/src/xterm.h index b0744a0cfe..ebff567f1e 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -67,6 +67,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define HAVE_X11R4 #endif +#ifdef XlibSpecificationRelease +#if XlibSpecificationRelease >= 5 +#define HAVE_X11R5 +#endif +#endif + #define PIX_TYPE unsigned long #define XDISPLAY x_current_display, #define XFlushQueue() XFlush(x_current_display) @@ -165,27 +171,6 @@ struct event_queue /* Queue for mouse clicks. */ extern struct event_queue x_mouse_queue; -/* Mechanism for interlocking between main program level - and input interrupt level. */ - -/* Nonzero during a critical section. At such a time, an input interrupt - does nothing but set `x_pending_input'. */ -extern int x_input_blocked; - -/* Nonzero means an input interrupt has arrived - during the current critical section. */ -extern int x_pending_input; - -/* Begin critical section. */ -#define BLOCK_INPUT (x_input_blocked++) - -/* End critical section. */ -#define UNBLOCK_INPUT \ - (x_input_blocked--, (x_input_blocked < 0 ? (abort (), 0) : 0)) - -#define TOTALLY_UNBLOCK_INPUT (x_input_blocked = 0) -#define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT - /* This is the X connection that we are using. */ extern Display *x_current_display; @@ -195,7 +180,7 @@ extern struct frame *x_window_to_frame (); /* The frame (if any) which has the X window that has keyboard focus. Zero if none. This is examined by Ffocus_frame in xfns.c */ -struct frame *x_focus_frame; +extern struct frame *x_focus_frame; #ifdef HAVE_X11 /* Variables associated with the X display screen this emacs is using. */ @@ -295,6 +280,7 @@ struct x_display PIX_TYPE cursor_pixel; PIX_TYPE border_pixel; PIX_TYPE mouse_pixel; + PIX_TYPE cursor_foreground_pixel; /* Descriptor for the cursor in use for this window. */ #ifdef HAVE_X11 @@ -337,8 +323,35 @@ struct x_display /* The size of the extra width currently allotted for vertical scroll bars, in pixels. */ int vertical_scroll_bar_extra; + + /* Table of parameter faces for this frame. Any X resources (pixel + values, fonts) referred to here have been allocated explicitly + for this face, and should be freed if we change the face. */ + struct face **param_faces; + int n_param_faces; + + /* Table of computed faces for this frame. These are the faces + whose indexes go into the upper bits of a glyph, computed by + combining the parameter faces specified by overlays, text + properties, and what have you. The X resources mentioned here + are all shared with parameter faces. */ + struct face **computed_faces; + int n_computed_faces; /* How many are valid */ + int size_computed_faces; /* How many are allocated */ }; +/* Get at the computed faces of an X window frame. */ +#define FRAME_PARAM_FACES(f) ((f)->display.x->param_faces) +#define FRAME_N_PARAM_FACES(f) ((f)->display.x->n_param_faces) +#define FRAME_DEFAULT_PARAM_FACE(f) (FRAME_PARAM_FACES (f)[0]) +#define FRAME_MODE_LINE_PARAM_FACE(f) (FRAME_PARAM_FACES (f)[1]) + +#define FRAME_COMPUTED_FACES(f) ((f)->display.x->computed_faces) +#define FRAME_N_COMPUTED_FACES(f) ((f)->display.x->n_computed_faces) +#define FRAME_SIZE_COMPUTED_FACES(f) ((f)->display.x->size_computed_faces) +#define FRAME_DEFAULT_FACE(f) ((f)->display.x->computed_faces[0]) +#define FRAME_MODE_LINE_FACE(f) ((f)->display.x->computed_faces[1]) + /* Return the window associated with the frame F. */ #define FRAME_X_WINDOW(f) ((f)->display.x->window_desc) @@ -349,13 +362,13 @@ struct x_display #define FRAME_DESIRED_CURSOR(f) ((f)->display.x->desired_cursor) -/* When X windows are used, a glyf may be a 16 bit unsigned datum. +/* When X windows are used, a glyph may be a 16 bit unsigned datum. The high order byte is the face number and is used as an index in the face table. A face is a font plus: 1) the unhighlighted foreground color, 2) the unhighlighted background color. For highlighting, the two colors are exchanged. - Face number 0 is unused. The low order byte of a glyf gives + Face number 0 is unused. The low order byte of a glyph gives the character within the font. All fonts are assumed to be fixed width, and to have the same height and width. */ @@ -491,7 +504,7 @@ struct scroll_bar { (used when relating to the rest of the screen) and inside width (used when sizing and drawing the scroll bar window itself). - The handle moves up and down/back and forth in a rectange inset + The handle moves up and down/back and forth in a rectangle inset from the edges of the scroll bar. These are widths by which we inset the handle boundaries from the scroll bar edges. */ #define VERTICAL_SCROLL_BAR_LEFT_BORDER (2) @@ -529,10 +542,10 @@ struct scroll_bar { /* Return the row/column (zero-based) of the character cell containing the pixel on FRAME at ROW/COL. */ -#define PIXEL_TO_CHAR_ROW(frame, row) \ +#define PIXEL_TO_CHAR_ROW(f, row) \ (((row) - (f)->display.x->internal_border_width) \ / FONT_HEIGHT ((f)->display.x->font)) -#define PIXEL_TO_CHAR_COL(frame, col) \ +#define PIXEL_TO_CHAR_COL(f, col) \ (((col) - (f)->display.x->internal_border_width) \ / FONT_WIDTH ((f)->display.x->font)) @@ -545,3 +558,75 @@ struct scroll_bar { #define PIXEL_TO_CHAR_HEIGHT(f, height) \ (PIXEL_TO_CHAR_ROW (f, ((height) \ - (f)->display.x->internal_border_width))) + +/* If a struct input_event has a kind which is selection_request_event + or selection_clear_event, then its contents are really described + by this structure. */ + +/* For an event of kind selection_request_event, + this structure really describes the contents. */ +struct selection_input_event +{ + int kind; + Display *display; + Window requestor; + Atom selection, target, property; + Time time; +}; + +#define SELECTION_EVENT_DISPLAY(eventp) \ + (((struct selection_input_event *) (eventp))->display) +#define SELECTION_EVENT_REQUESTOR(eventp) \ + (((struct selection_input_event *) (eventp))->requestor) +#define SELECTION_EVENT_SELECTION(eventp) \ + (((struct selection_input_event *) (eventp))->selection) +#define SELECTION_EVENT_TARGET(eventp) \ + (((struct selection_input_event *) (eventp))->target) +#define SELECTION_EVENT_PROPERTY(eventp) \ + (((struct selection_input_event *) (eventp))->property) +#define SELECTION_EVENT_TIME(eventp) \ + (((struct selection_input_event *) (eventp))->time) + + +/* Interface to the face code functions. */ + +/* Create the first two computed faces for a frame -- the ones that + have GC's. */ +extern void init_frame_faces (/* FRAME_PTR */); + +/* Free the resources for the faces associated with a frame. */ +extern void free_frame_faces (/* FRAME_PTR */); + +/* Given a computed face, find or make an equivalent display face + in face_vector, and return a pointer to it. */ +extern struct face *intern_face (/* FRAME_PTR, struct face * */); + +/* Given a frame and a face name, return the face's ID number, or + zero if it isn't a recognized face name. */ +extern int face_name_id_number (/* FRAME_PTR, Lisp_Object */); + +/* Return non-zero if FONT1 and FONT2 have the same size bounding box. + We assume that they're both character-cell fonts. */ +extern int same_size_fonts (/* XFontStruct *, XFontStruct * */); + +/* Recompute the GC's for the default and modeline faces. + We call this after changing frame parameters on which those GC's + depend. */ +extern void recompute_basic_faces (/* FRAME_PTR */); + +/* Return the face ID associated with a buffer position POS. Store + into *ENDPTR the next position at which a different face is + needed. This does not take account of glyphs that specify their + own face codes. F is the frame in use for display, and W is a + window displaying the current buffer. + + REGION_BEG, REGION_END delimit the region, so it can be highlighted. */ +extern int compute_char_face (/* FRAME_PTR frame, + struct window *w, + int pos, + int region_beg, int region_end, + int *endptr */); +/* Return the face ID to use to display a special glyph which selects + FACE_CODE as the face ID, assuming that ordinarily the face would + be BASIC_FACE. F is the frame. */ +extern int compute_glyph_face (/* FRAME_PTR, int */);