/* Definitions and headers for communication with X protocol.
- Copyright (C) 1989, 1993, 1994, 1998, 1999, 2000
- Free Software Foundation, Inc.
+ Copyright (C) 1989, 1993, 1994, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Emacs.
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, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
#include <X11/Xlib.h>
#include <X11/cursorfont.h>
-#include <X11/Xutil.h>
+
+/* Include Xutil.h after keysym.h to work around a bug that prevents
+ correct recognition of AltGr key in some X versions. */
+
#include <X11/keysym.h>
+#include <X11/Xutil.h>
+
#include <X11/Xatom.h>
#include <X11/Xresource.h>
#include <X11/StringDefs.h>
#include <X11/IntrinsicP.h> /* CoreP.h needs this */
#include <X11/CoreP.h> /* foul, but we need this to use our own
- window inside a widget instead of one
+ window inside a widget instead of one
that Xt creates... */
#include <X11/StringDefs.h>
+
+typedef Widget xt_or_gtk_widget;
#endif
-/* The class of this X application. */
-#define EMACS_CLASS "Emacs"
+#ifdef USE_GTK
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+/* Some definitions to reduce conditionals. */
+typedef GtkWidget *xt_or_gtk_widget;
+#define XtParent(x) (gtk_widget_get_parent (x))
+#undef XSync
+#define XSync(d, b) do { gdk_window_process_all_updates (); \
+ XSync (d, b); } while (0)
+
+
+#endif /* USE_GTK */
+
\f
/* Bookkeeping to distinguish X versions. */
#ifdef PBaseSize
/* AIX 3.1's X is somewhere between X11R3 and X11R4. It has
PBaseSize, but not XWithdrawWindow, XSetWMName, XSetWMNormalHints,
- XSetWMIconName.
+ XSetWMIconName.
AIX 3.2 is at least X11R4. */
#if (!defined AIX) || (defined AIX3_2)
#define HAVE_X11R4
#define FONT_WIDTH(f) ((f)->max_bounds.width)
#define FONT_HEIGHT(f) ((f)->ascent + (f)->descent)
#define FONT_BASE(f) ((f)->ascent)
+#define FONT_DESCENT(f) ((f)->descent)
/* The mask of events that text windows always want to receive. This
includes mouse movement events, since handling the mouse-font text property
| EnterWindowMask \
| VisibilityChangeMask)
-enum text_cursor_kinds
-{
- NO_CURSOR = -1,
- FILLED_BOX_CURSOR,
- HOLLOW_BOX_CURSOR,
- BAR_CURSOR
-};
-
/* Structure recording X pixmap and reference count.
If REFCOUNT is 0 then this record is free to be reused. */
struct x_bitmap_record
{
Pixmap pixmap;
+ int have_mask;
+ Pixmap mask;
char *file;
int refcount;
/* Record some info about this pixmap. */
{
/* Chain of all x_display_info structures. */
struct x_display_info *next;
-
+
/* Connection number (normally a file descriptor number). */
int connection;
-
+
/* This says how to access this display in Xlib. */
Display *display;
-
+
/* This is a cons cell of the form (NAME . FONT-LIST-CACHE).
The same cons cell also appears in x_display_name_list. */
Lisp_Object name_list_element;
-
+
/* Number of frames that are on this display. */
int reference_count;
-
+
/* The Screen this connection is connected to. */
Screen *screen;
/* Dots per inch of the screen. */
double resx, resy;
-
+
/* The Visual being used for this display. */
Visual *visual;
- /* THe colormap being used. */
+ /* The colormap being used. */
Colormap cmap;
-
- /* Number of panes on this screen. */
+
+ /* Number of planes on this screen. */
int n_planes;
-
+
/* Dimensions of this screen. */
int height, width;
-
+
/* Mask of things that cause the mouse to be grabbed. */
int grabbed;
-
+
/* Emacs bitmap-id of the default icon bitmap for this frame.
Or -1 if none has been allocated yet. */
int icon_bitmap_id;
-
+
/* The root window of this screen. */
Window root_window;
-
+
+ /* Client leader window. */
+ Window client_leader_window;
+
/* The cursor to use for vertical scroll bars. */
Cursor vertical_scroll_bar_cursor;
-
+
+#ifdef USE_GTK
+ /* The GDK cursor for scroll bars and popup menus. */
+ GdkCursor *xg_cursor;
+#endif
+
/* X Resource data base */
XrmDatabase xrdb;
int mouse_face_past_end;
Lisp_Object mouse_face_window;
int mouse_face_face_id;
+ Lisp_Object mouse_face_overlay;
/* 1 if a mouse motion event came and we didn't handle it right away because
gc was in progress. */
/* Nonzero means defer mouse-motion highlighting. */
int mouse_face_defer;
+ /* Nonzero means that the mouse highlight should not be shown. */
+ int mouse_face_hidden;
+
int mouse_face_image_state;
char *x_id_name;
/* Communication with window managers. */
Atom Xatom_wm_protocols;
-
+
/* Kinds of protocol things we may receive. */
Atom Xatom_wm_take_focus;
Atom Xatom_wm_save_yourself;
Atom Xatom_wm_delete_window;
-
+
/* Atom for indicating window state to the window manager. */
Atom Xatom_wm_change_state;
-
+
/* Other WM communication */
Atom Xatom_wm_configure_denied; /* When our config request is denied */
Atom Xatom_wm_window_moved; /* When the WM moves us. */
-
+ Atom Xatom_wm_client_leader; /* Id of client leader window. */
+
/* EditRes protocol */
Atom Xatom_editres;
/* More atoms, which are selection types. */
Atom Xatom_CLIPBOARD, Xatom_TIMESTAMP, Xatom_TEXT, Xatom_DELETE,
- Xatom_COMPOUND_TEXT,
+ Xatom_COMPOUND_TEXT, Xatom_UTF8_STRING,
Xatom_MULTIPLE, Xatom_INCR, Xatom_EMACS_TMP, Xatom_TARGETS, Xatom_NULL,
Xatom_ATOM_PAIR;
/* More atoms for font properties. The last three are private
properties, see the comments in src/fontset.h. */
- Atom Xatom_PIXEL_SIZE,
+ Atom Xatom_PIXEL_SIZE, Xatom_AVERAGE_WIDTH,
Xatom_MULE_BASELINE_OFFSET, Xatom_MULE_RELATIVE_COMPOSE,
Xatom_MULE_DEFAULT_ASCENT;
use this directly, call x_color_cells instead. */
XColor *color_cells;
int ncolor_cells;
+
+ /* Bits and shifts to use to compose pixel values on TrueColor visuals. */
+ int red_bits, blue_bits, green_bits;
+ int red_offset, blue_offset, green_offset;
+
+ /* The type of window manager we have. If we move FRAME_OUTER_WINDOW
+ to x/y 0/0, some window managers (type A) puts the window manager
+ decorations outside the screen and FRAME_OUTER_WINDOW exactly at 0/0.
+ Other window managers (type B) puts the window including decorations
+ at 0/0, so FRAME_OUTER_WINDOW is a bit below 0/0.
+ Record the type of WM in use so we can compensate for type A WMs. */
+ enum
+ {
+ X_WMTYPE_UNKNOWN,
+ X_WMTYPE_A,
+ X_WMTYPE_B
+ } wm_type;
+
+
+ /* Atoms that are drag and drop atoms */
+ Atom *x_dnd_atoms;
+ size_t x_dnd_atoms_size;
+ size_t x_dnd_atoms_length;
+
+ /* Extended window manager hints, Atoms supported by the window manager */
+ Atom *net_supported_atoms;
+ int nr_net_supported_atoms;
+ Window net_supported_window;
};
+#ifdef HAVE_X_I18N
+/* Whether or not to use XIM if we have it. */
+extern int use_xim;
+#endif
+
/* This checks to make sure we have a display. */
extern void check_x P_ ((void));
extern struct frame *x_window_to_frame P_ ((struct x_display_info *, int));
-#ifdef USE_X_TOOLKIT
+#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
extern struct frame *x_any_window_to_frame P_ ((struct x_display_info *, int));
extern struct frame *x_non_menubar_window_to_frame P_ ((struct x_display_info *, int));
extern struct frame *x_top_window_to_frame P_ ((struct x_display_info *, int));
/* Regexp matching a font name whose width is the same as `PIXEL_SIZE'. */
extern Lisp_Object Vx_pixel_size_width_font_regexp;
-/* A flag to control how to display unibyte 8-bit character. */
-extern int unibyte_display_via_language_environment;
-
extern struct x_display_info *x_display_info_for_display P_ ((Display *));
extern struct x_display_info *x_display_info_for_name P_ ((Lisp_Object));
extern struct x_display_info *x_term_init P_ ((Lisp_Object, char *, char *));
+extern int x_display_ok P_ ((const char *));
extern Lisp_Object x_list_fonts P_ ((struct frame *, Lisp_Object, int, int));
extern void select_visual P_ ((struct x_display_info *));
struct x_output
{
- /* Position of the X window (x and y offsets in root window). */
- int left_pos;
- int top_pos;
-
- /* Border width of the X window as known by the X window system. */
- int border_width;
-
- /* Size of the X window in pixels. */
- int pixel_height, pixel_width;
-
/* Height of menu bar widget, in pixels.
Zero if not using the X toolkit.
When using the toolkit, this value is not meaningful
if the menubar is turned off. */
int menubar_height;
- /* Height of a line, in pixels. */
- int line_height;
+ /* Height of tool bar widget, in pixels.
+ Zero if not using an external tool bar. */
+ int toolbar_height;
/* The tiled border used when the mouse is out of the frame. */
Pixmap border_tile;
GC reverse_gc; /* Reverse video */
GC cursor_gc; /* cursor drawing */
- /* Width of the internal border. This is a line of background color
- just inside the window's border. When the frame is selected,
- a highlighting is displayed inside the internal border. */
- int internal_border_width;
-
/* The X window used for this frame.
May be zero while the frame object is being created
and the X window has not yet been created. */
Widget menubar_widget;
#endif
+#ifdef USE_GTK
+ /* The widget of this screen. This is the window of a top widget. */
+ GtkWidget *widget;
+ /* The widget of the edit portion of this screen; the window in
+ "window_desc" is inside of this. */
+ GtkWidget *edit_widget;
+ /* The widget used for laying out widgets vertically. */
+ GtkWidget *vbox_widget;
+ /* The menubar in this frame. */
+ GtkWidget *menubar_widget;
+ /* The tool bar in this frame */
+ GtkWidget *toolbar_widget;
+ /* The handle box that makes the tool bar detachable. */
+ GtkWidget *handlebox_widget;
+ /* Non-zero if the tool bar is detached. */
+ int toolbar_detached;
+
+ /* The last size hints set. */
+ GdkGeometry size_hints;
+ long hint_flags;
+#endif
+
/* If >=0, a bitmap index. The indicated bitmap is used for the
icon. */
int icon_bitmap;
/* Foreground color for scroll bars. A value of -1 means use the
default (black for non-toolkit scroll bars). */
unsigned long scroll_bar_foreground_pixel;
-
+
/* Background color for scroll bars. A value of -1 means use the
default (background color of the frame for non-toolkit scroll
bars). */
unsigned long scroll_bar_background_pixel;
+ /* Top and bottom shadow colors for 3d toolkit scrollbars. -1 means
+ let the scroll compute them itself. */
+ unsigned long scroll_bar_top_shadow_pixel;
+ unsigned long scroll_bar_bottom_shadow_pixel;
+
/* Descriptor for the cursor in use for this window. */
Cursor text_cursor;
Cursor nontext_cursor;
Cursor modeline_cursor;
- Cursor cross_cursor;
- Cursor busy_cursor;
+ Cursor hand_cursor;
+ Cursor hourglass_cursor;
Cursor horizontal_drag_cursor;
- /* Window whose cursor is busy_cursor. This window is temporarily
- mapped to display a busy-cursor. */
- Window busy_window;
-
- /* Non-zero means busy cursor is currently displayed. */
- unsigned busy_p : 1;
+ /* Window whose cursor is hourglass_cursor. This window is temporarily
+ mapped to display an hourglass cursor. */
+ Window hourglass_window;
+
+ /* Non-zero means hourglass cursor is currently displayed. */
+ unsigned hourglass_p : 1;
/* Flag to set when the X window needs to be completely repainted. */
int needs_exposure;
- /* What kind of text cursor is drawn in this window right now?
- (If there is no cursor (phys_cursor_x < 0), then this means nothing.) */
- enum text_cursor_kinds current_cursor;
-
- /* What kind of text cursor should we draw in the future?
- This should always be filled_box_cursor or bar_cursor. */
- enum text_cursor_kinds desired_cursor;
-
- /* Width of bar cursor (if we are using that). */
- int cursor_width;
-
/* These are the current window manager hints. It seems that
XSetWMHints, when presented with an unset bit in the `flags'
member of the hints structure, does not leave the corresponding
to the mask as we go. */
XWMHints wm_hints;
- /* The size of the extra width currently allotted for vertical
- scroll bars, in pixels. */
- int vertical_scroll_bar_extra;
-
- /* The extra width currently allotted for the areas in which
- truncation marks, continuation marks, and overlay arrows are
- displayed. */
- int flags_areas_extra;
-
- /* This is the gravity value for the specified window position. */
- int win_gravity;
-
- /* The geometry flags for this window. */
- int size_hint_flags;
-
/* This is the Emacs structure for the X display this frame is on. */
struct x_display_info *display_info;
XIC xic;
XIMStyle xic_style;
XFontSet xic_xfs;
+ char *xic_base_fontname;
#endif
/* Relief GCs, colors etc. */
/* The background for which the above relief GCs were set up.
They are changed only when a different background is involved. */
unsigned long relief_background;
+
+ /* Xt waits for a ConfigureNotify event from the window manager in
+ EmacsFrameSetCharSize when the shell widget is resized. For some
+ window managers like fvwm2 2.2.5 and KDE 2.1 this event doesn't
+ arrive for an unknown reason and Emacs hangs in Xt. If this is
+ zero, tell Xt not to wait. */
+ int wait_for_wm;
+
+ /* As x_pixels_diff, but to FRAME_OUTER_WINDOW. For some reason the
+ two might differ by a pixel, depending on WM */
+ int x_pixels_outer_diff;
+
+ /* As y_pixels_diff, but to FRAME_OUTER_WINDOW. In the toolkit version,
+ these may differ because this does not take into account possible
+ menubar. y_pixels_diff is with menubar height included */
+ int y_pixels_outer_diff;
+
+ /* Keep track of focus. May be EXPLICIT if we received a FocusIn for this
+ frame, or IMPLICIT if we received an EnterNotify.
+ FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
+ int focus_state;
+
+ /* The offset we need to add to compensate for type A WMs. */
+ int move_offset_top;
+ int move_offset_left;
+
+ /* The frame's left/top offsets before we call XMoveWindow. See
+ x_check_expected_move. */
+ int left_before_move;
+ int top_before_move;
+};
+
+#define No_Cursor (None)
+
+enum
+{
+ /* Values for focus_state, used as bit mask.
+ EXPLICIT means we received a FocusIn for the frame and know it has
+ the focus. IMPLICIT means we recevied an EnterNotify and the frame
+ may have the focus if no window manager is running.
+ FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
+ FOCUS_NONE = 0,
+ FOCUS_IMPLICIT = 1,
+ FOCUS_EXPLICIT = 2
};
+
+/* Return the X output data for frame F. */
+#define FRAME_X_OUTPUT(f) ((f)->output_data.x)
+
/* Return the X window used for displaying data in frame F. */
#define FRAME_X_WINDOW(f) ((f)->output_data.x->window_desc)
/* Return the outermost X window associated with the frame F. */
#ifdef USE_X_TOOLKIT
-#define FRAME_OUTER_WINDOW(f) (XtWindow ((f)->output_data.x->widget))
+#define FRAME_OUTER_WINDOW(f) ((f)->output_data.x->widget ? \
+ XtWindow ((f)->output_data.x->widget) : \
+ FRAME_X_WINDOW (f))
#else
+#ifdef USE_GTK
+#define GTK_WIDGET_TO_X_WIN(w) \
+ ((w) && (w)->window ? GDK_WINDOW_XWINDOW ((w)->window) : 0)
+
+#define FRAME_GTK_OUTER_WIDGET(f) ((f)->output_data.x->widget)
+#define FRAME_GTK_WIDGET(f) ((f)->output_data.x->edit_widget)
+#define FRAME_OUTER_WINDOW(f) \
+ (FRAME_GTK_OUTER_WIDGET (f) ? \
+ GTK_WIDGET_TO_X_WIN (FRAME_GTK_OUTER_WIDGET (f)) : \
+ FRAME_X_WINDOW (f))
+
+#else /* !USE_GTK */
#define FRAME_OUTER_WINDOW(f) (FRAME_X_WINDOW (f))
+#endif /* !USE_GTK */
#endif
+
#define FRAME_FONT(f) ((f)->output_data.x->font)
#define FRAME_FONTSET(f) ((f)->output_data.x->fontset)
-#define FRAME_INTERNAL_BORDER_WIDTH(f) ((f)->output_data.x->internal_border_width)
#define FRAME_MENUBAR_HEIGHT(f) ((f)->output_data.x->menubar_height)
-#define FRAME_LINE_HEIGHT(f) ((f)->output_data.x->line_height)
-
-/* Width of the default font of frame F. Must be defined by each
- terminal specific header. */
-#define FRAME_DEFAULT_FONT_WIDTH(F) FONT_WIDTH (FRAME_FONT (F))
+#define FRAME_TOOLBAR_HEIGHT(f) ((f)->output_data.x->toolbar_height)
+#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.x->baseline_offset)
/* This gives the x_display_info structure for the display F is on. */
#define FRAME_X_DISPLAY_INFO(f) ((f)->output_data.x->display_info)
/* This is the `Screen *' which frame F is on. */
#define FRAME_X_SCREEN(f) (FRAME_X_DISPLAY_INFO (f)->screen)
+#define FRAME_X_SCREEN_NUMBER(f) XScreenNumberOfScreen (FRAME_X_SCREEN (f))
/* This is the Visual which frame F is on. */
#define FRAME_X_VISUAL(f) FRAME_X_DISPLAY_INFO (f)->visual
/* This is the 'font_info *' which frame F has. */
#define FRAME_X_FONT_TABLE(f) (FRAME_X_DISPLAY_INFO (f)->font_table)
-/* These two really ought to be called FRAME_PIXEL_{WIDTH,HEIGHT}. */
-#define PIXEL_WIDTH(f) ((f)->output_data.x->pixel_width)
-#define PIXEL_HEIGHT(f) ((f)->output_data.x->pixel_height)
+/* The difference in pixels between the top left corner of the
+ Emacs window (including possible window manager decorations)
+ and FRAME_X_WINDOW (f). */
+#define FRAME_OUTER_TO_INNER_DIFF_X(f) \
+ ((f)->output_data.x->x_pixels_outer_diff)
+#define FRAME_OUTER_TO_INNER_DIFF_Y(f) \
+ ((f)->output_data.x->y_pixels_outer_diff \
+ + FRAME_MENUBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f))
-#define FRAME_DESIRED_CURSOR(f) ((f)->output_data.x->desired_cursor)
#define FRAME_XIC(f) ((f)->output_data.x->xic)
#define FRAME_X_XIM(f) (FRAME_X_DISPLAY_INFO (f)->xim)
#define FRAME_X_XIM_STYLES(f) (FRAME_X_DISPLAY_INFO (f)->xim_styles)
#define FRAME_XIC_STYLE(f) ((f)->output_data.x->xic_style)
#define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs)
+#define FRAME_XIC_BASE_FONTNAME(f) ((f)->output_data.x->xic_base_fontname)
/* Value is the smallest width of any character in any font on frame F. */
#define FRAME_X_IMAGE_CACHE(F) FRAME_X_DISPLAY_INFO ((F))->image_cache
-\f
-/* Pixel width of the bitmaps drawn to indicate truncation,
- continuation etc. */
-
-#define FRAME_FLAGS_BITMAP_WIDTH(f) 8
-#define FRAME_FLAGS_BITMAP_HEIGHT(f) 8
-
-/* Total width of a areas reserved for drawing truncation bitmaps,
- continuation bitmaps and alike. The width is in canonical char
- units of the frame. This must currently be the case because window
- sizes aren't pixel values. If it weren't the case, we wouldn't be
- able to split windows horizontally nicely. */
-
-#define FRAME_X_FLAGS_AREA_COLS(F) \
- ((2 * FRAME_FLAGS_BITMAP_WIDTH ((F)) + CANON_X_UNIT ((F)) - 1) \
- / CANON_X_UNIT ((F)))
-
-/* Total width of flags areas in pixels. */
-
-#define FRAME_X_FLAGS_AREA_WIDTH(F) \
- (FRAME_X_FLAGS_AREA_COLS ((F)) * CANON_X_UNIT ((F)))
-
-/* Pixel-width of the left flags area. */
-
-#define FRAME_X_LEFT_FLAGS_AREA_WIDTH(F) \
- (FRAME_X_FLAGS_AREA_WIDTH (F) / 2)
-
-/* Pixel-width of the right flags area. Note that we are doing
- integer arithmetic here, so don't loose a pixel if the total
- width is an odd number. */
-
-#define FRAME_X_RIGHT_FLAGS_AREA_WIDTH(F) \
- (FRAME_X_FLAGS_AREA_WIDTH (F) - FRAME_X_FLAGS_AREA_WIDTH (F) / 2)
-
-
\f
/* X-specific scroll bar stuff. */
/* Return the length of the rectangle within which the top of the
handle must stay. This isn't equivalent to the inside height,
- because the scroll bar handle has a minimum height.
+ because the scroll bar handle has a minimum height.
This is the real range of motion for the scroll bar, so when we're
scaling buffer positions to scroll bar positions, we use this, not
#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0)
\f
-/* Manipulating pixel sizes and character sizes.
- Knowledge of which factors affect the overall size of the window should
- be hidden in these macros, if that's possible.
-
- Return the upper/left pixel position of the character cell on frame F
- at ROW/COL. */
-#define CHAR_TO_PIXEL_ROW(f, row) \
- ((f)->output_data.x->internal_border_width \
- + (row) * (f)->output_data.x->line_height)
-#define CHAR_TO_PIXEL_COL(f, col) \
- ((f)->output_data.x->internal_border_width \
- + (col) * FONT_WIDTH ((f)->output_data.x->font))
-
-/* Return the pixel width/height of frame F if it has
- WIDTH columns/HEIGHT rows. */
-#define CHAR_TO_PIXEL_WIDTH(f, width) \
- (CHAR_TO_PIXEL_COL (f, width) \
- + (f)->output_data.x->vertical_scroll_bar_extra \
- + (f)->output_data.x->flags_areas_extra \
- + (f)->output_data.x->internal_border_width)
-#define CHAR_TO_PIXEL_HEIGHT(f, height) \
- (CHAR_TO_PIXEL_ROW (f, height) \
- + (f)->output_data.x->internal_border_width)
-
-
-/* Return the row/column (zero-based) of the character cell containing
- the pixel on FRAME at ROW/COL. */
-#define PIXEL_TO_CHAR_ROW(f, row) \
- (((row) - (f)->output_data.x->internal_border_width) \
- / (f)->output_data.x->line_height)
-#define PIXEL_TO_CHAR_COL(f, col) \
- (((col) - (f)->output_data.x->internal_border_width) \
- / FONT_WIDTH ((f)->output_data.x->font))
-
-/* How many columns/rows of text can we fit in WIDTH/HEIGHT pixels on
- frame F? */
-#define PIXEL_TO_CHAR_WIDTH(f, width) \
- (PIXEL_TO_CHAR_COL (f, ((width) \
- - (f)->output_data.x->internal_border_width \
- - (f)->output_data.x->flags_areas_extra \
- - (f)->output_data.x->vertical_scroll_bar_extra)))
-#define PIXEL_TO_CHAR_HEIGHT(f, height) \
- (PIXEL_TO_CHAR_ROW (f, ((height) \
- - (f)->output_data.x->internal_border_width)))
-
-\f
-/* If a struct input_event has a kind which is selection_request_event
- or selection_clear_event, then its contents are really described
+/* 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,
+/* For an event of kind SELECTION_REQUEST_EVENT,
this structure really describes the contents.
**Don't make this struct longer!**
If it overlaps the frame_or_window field of struct input_event,
struct frame *check_x_frame P_ ((Lisp_Object));
EXFUN (Fx_display_color_p, 1);
EXFUN (Fx_display_grayscale_p, 1);
-int image_ascent P_ ((struct image *, struct face *));
extern void x_free_gcs P_ ((struct frame *));
/* From xrdb.c. */
-char *x_get_string_resource P_ ((XrmDatabase, char *, char *));
char *x_get_customization_string P_ ((XrmDatabase, char *, char *));
XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
int x_get_resource P_ ((XrmDatabase, char *, char *,
void x_make_frame_visible P_ ((struct frame *));
void x_iconify_frame P_ ((struct frame *));
void x_wm_set_size_hint P_ ((struct frame *, long, int));
-void x_set_offset P_ ((struct frame *, int, int, int));
-void x_wm_set_icon_position P_ ((struct frame *, int, int));
-int x_catch_errors P_ ((Display *));
-int x_had_errors_p P_ ((Display *));
-void x_uncatch_errors P_ ((Display *, int));
-void x_check_errors P_ ((Display *, char *));
int x_text_icon P_ ((struct frame *, char *));
int x_bitmap_icon P_ ((struct frame *, Lisp_Object));
void x_set_window_size P_ ((struct frame *, int, int, int));
void x_wm_set_window_state P_ ((struct frame *, int));
int x_alloc_nearest_color P_ ((struct frame *, Colormap, XColor *));
-extern void pixel_to_glyph_coords P_ ((struct frame *, int, int,
- int *, int *, XRectangle *, int));
-
/* Defined in xterm.c */
-extern void clear_mouse_face P_ ((struct x_display_info *));
extern void cancel_mouse_face P_ ((struct frame *));
extern void x_scroll_bar_clear P_ ((struct frame *));
-extern void x_start_queuing_selection_requests P_ ((Display *));
-extern void x_stop_queuing_selection_requests P_ ((Display *));
-extern void x_update_cursor P_ ((struct frame *, int));
extern int x_text_icon P_ ((struct frame *, char *));
extern int x_bitmap_icon P_ ((struct frame *, Lisp_Object));
-extern int x_catch_errors P_ ((Display *));
+extern void x_catch_errors P_ ((Display *));
extern void x_check_errors P_ ((Display *, char *));
extern int x_had_errors_p P_ ((Display *));
-extern void x_uncatch_errors P_ ((Display *, int));
-extern Lisp_Object x_new_font P_ ((struct frame *, char *));
-extern Lisp_Object x_new_fontset P_ ((struct frame *, char *));
-extern void x_set_offset P_ ((struct frame *, int, int, int));
+extern int x_catching_errors P_ ((void));
+extern void x_uncatch_errors P_ ((void));
+extern void x_clear_errors P_ ((Display *));
+extern void x_fully_uncatch_errors P_ ((void));
extern void x_set_window_size P_ ((struct frame *, int, int, int));
extern void x_set_mouse_position P_ ((struct frame *, int, int));
extern void x_set_mouse_pixel_position P_ ((struct frame *, int, int));
extern void x_make_frame_visible P_ ((struct frame *));
extern void x_make_frame_invisible P_ ((struct frame *));
extern void x_iconify_frame P_ ((struct frame *));
+extern void x_free_frame_resources P_ ((struct frame *));
extern void x_destroy_window P_ ((struct frame *));
extern void x_wm_set_size_hint P_ ((struct frame *, long, int));
extern void x_wm_set_window_state P_ ((struct frame *, int));
extern void x_wm_set_icon_pixmap P_ ((struct frame *, int));
-extern void x_wm_set_icon_position P_ ((struct frame *, int, int));
extern void x_delete_display P_ ((struct x_display_info *));
extern void x_initialize P_ ((void));
-extern void x_display_cursor P_ ((struct window *, int, int, int, int, int));
-extern void x_update_cursor P_ ((struct frame *, int));
extern unsigned long x_copy_color P_ ((struct frame *, unsigned long));
#ifdef USE_X_TOOLKIT
extern XtAppContext Xt_app_con;
+extern int x_alloc_lighter_color_for_widget __P ((Widget, Display*, Colormap,
+ unsigned long *,
+ double, int));
+extern void x_activate_timeout_atimer P_ ((void));
#endif
extern void x_query_colors P_ ((struct frame *f, XColor *, int));
extern void x_query_color P_ ((struct frame *f, XColor *));
+extern void x_clear_area P_ ((Display *, Window, int, int, int, int, int));
+extern void set_vertical_scroll_bar P_ ((struct window *));
+
+extern int x_dispatch_event P_ ((XEvent *, Display *));
+extern unsigned int x_x_to_emacs_modifiers P_ ((struct x_display_info *,
+ unsigned));
/* Defined in xselect.c */
extern void x_handle_property_notify P_ ((XPropertyEvent *));
extern void x_handle_selection_notify P_ ((XSelectionEvent *));
-extern void x_handle_selection_request P_ ((struct input_event *));
-extern void x_handle_selection_clear P_ ((struct input_event *));
+extern void x_handle_selection_event P_ ((struct input_event *));
extern void x_clear_frame_selections P_ ((struct frame *));
+extern int x_handle_dnd_message P_ ((struct frame *,
+ XClientMessageEvent *,
+ struct x_display_info *,
+ struct input_event *bufp));
+extern int x_check_property_data P_ ((Lisp_Object));
+extern void x_fill_property_data P_ ((Display *,
+ Lisp_Object,
+ void *,
+ int));
+extern Lisp_Object x_property_data_to_lisp P_ ((struct frame *,
+ unsigned char *,
+ Atom,
+ int,
+ unsigned long));
+
/* Defined in xfns.c */
+extern struct x_display_info * check_x_display_info P_ ((Lisp_Object frame));
extern int have_menus_p P_ ((void));
-extern int x_bitmap_height P_ ((struct frame *, int));
-extern int x_bitmap_width P_ ((struct frame *, int));
-extern int x_bitmap_pixmap P_ ((struct frame *, int));
-extern void x_reference_bitmap P_ ((struct frame *, int));
-extern int x_create_bitmap_from_data P_ ((struct frame *, char *,
- unsigned int, unsigned int));
-extern int x_create_bitmap_from_file P_ ((struct frame *, Lisp_Object));
-extern void x_destroy_bitmap P_ ((struct frame *, int));
-extern void x_set_frame_parameters P_ ((struct frame *, Lisp_Object));
+
+#ifdef USE_GTK
+extern int xg_set_icon P_ ((struct frame *, Lisp_Object));
+extern int xg_set_icon_from_xpm_data P_ ((struct frame *, char**));
+#endif /* USE_GTK */
+
extern void x_real_positions P_ ((struct frame *, int *, int *));
-extern void x_report_frame_params P_ ((struct frame *, Lisp_Object *));
extern int defined_color P_ ((struct frame *, char *, XColor *, int));
extern void x_set_border_pixel P_ ((struct frame *, int));
extern void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
-extern unsigned char * x_encode_text P_ ((Lisp_Object, Lisp_Object,
- int *, int *));
extern void x_implicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object));
+extern void xic_free_xfontset P_ ((struct frame *));
extern void create_frame_xic P_ ((struct frame *));
extern void destroy_frame_xic P_ ((struct frame *));
extern void xic_set_preeditarea P_ ((struct window *, int, int));
extern int x_char_height P_ ((struct frame *));
extern int x_screen_planes P_ ((struct frame *));
extern void x_sync P_ ((struct frame *));
-extern enum text_cursor_kinds x_specified_cursor_type P_ ((Lisp_Object, int *));
extern int x_defined_color P_ ((struct frame *, char *, XColor *, int));
#ifdef HAVE_X_I18N
extern void free_frame_xic P_ ((struct frame *));
/* Defined in xfaces.c */
-extern int frame_update_line_height P_ ((struct frame *));
extern int compute_glyph_face P_ ((struct frame *, int, int));
extern int compute_glyph_face_1 P_ ((struct frame *, Lisp_Object, int));
+extern void x_free_dpy_colors P_ ((Display *, Screen *, Colormap,
+ unsigned long *, int));
/* Defined in xmenu.c */
+extern void x_menu_set_in_use P_ ((int));
+extern void x_menu_wait_for_event P_ ((void *data));
extern void x_activate_menubar P_ ((struct frame *));
extern int popup_activated P_ ((void));
extern void initialize_frame_menubar P_ ((struct frame *));
+extern void free_frame_menubar P_ ((struct frame *));
/* Defined in widget.c */
#ifdef USE_X_TOOLKIT
extern void widget_store_internal_border P_ ((Widget));
#endif
+
+/* Defined in xsmfns.c */
+#ifdef HAVE_X_SM
+extern void x_session_initialize P_ ((struct x_display_info *dpyinfo));
+extern int x_session_check_input P_ ((struct input_event *bufp));
+extern int x_session_have_connection P_ ((void));
+#endif
+
+#define FONT_TYPE_FOR_UNIBYTE(font, ch) 0
+#define FONT_TYPE_FOR_MULTIBYTE(font, ch) 0
+
+#define STORE_XCHAR2B(chp, b1, b2) \
+ ((chp)->byte1 = (b1), (chp)->byte2 = (b2))
+
+#define XCHAR2B_BYTE1(chp) \
+ ((chp)->byte1)
+
+#define XCHAR2B_BYTE2(chp) \
+ ((chp)->byte2)
+
+
+#define STORE_NATIVE_RECT(nr,rx,ry,rwidth,rheight) \
+ ((nr).x = (rx), \
+ (nr).y = (ry), \
+ (nr).width = (rwidth), \
+ (nr).height = (rheight))
+
+/* arch-tag: 78a7972a-b18f-4694-861a-0780c4b3090e
+ (do not change this comment) */