X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/9d35adc75f3a64f909530381c257f68439712ca1..40fb2103c2986cbb91add4afed635886c4f87ae5:/src/xterm.h?ds=sidebyside diff --git a/src/xterm.h b/src/xterm.h index 4b598f4809..cf2583981f 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -1,5 +1,5 @@ /* Definitions and headers for communication with X protocol. - Copyright (C) 1989, 1993, 1994, 1998, 1999, 2000, 2001, 2001 + Copyright (C) 1989, 1993, 1994, 1998, 1999, 2000,01,02,03,04 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -21,8 +21,13 @@ Boston, MA 02111-1307, USA. */ #include #include -#include + +/* Include Xutil.h after keysym.h to work around a bug that prevents + correct recognition of AltGr key in some X versions. */ + #include +#include + #include #include @@ -45,7 +50,9 @@ typedef Widget xt_or_gtk_widget; typedef GtkWidget *xt_or_gtk_widget; #define XtParent(x) (gtk_widget_get_parent (x)) #undef XSync -#define XSync(d, b) gdk_window_process_all_updates () +#define XSync(d, b) do { gdk_window_process_all_updates (); \ + XSync (d, b); } while (0) + #endif /* USE_GTK */ @@ -167,7 +174,7 @@ struct x_display_info /* 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. */ @@ -189,6 +196,11 @@ struct x_display_info /* 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; @@ -305,7 +317,7 @@ struct x_display_info /* 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; @@ -361,10 +373,22 @@ struct x_display_info XColor *color_cells; int ncolor_cells; - /* Bits and shifts to use to compose pixel values on Direct and TrueColor - visuals. */ + /* 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; }; #ifdef HAVE_X_I18N @@ -409,6 +433,9 @@ extern struct font_info *x_get_font_info P_ ((struct frame *f, int)); extern struct font_info *x_load_font P_ ((struct frame *, char *, int)); extern struct font_info *x_query_font P_ ((struct frame *, char *)); extern void x_find_ccl_program P_ ((struct font_info *)); +extern Lisp_Object x_get_font_repertory P_ ((struct frame *, + struct font_info *)); + /* Each X frame object points to its own struct x_output object in the output_data.x field. The x_output structure contains @@ -475,6 +502,8 @@ struct x_output 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; @@ -576,6 +605,7 @@ struct x_output XIC xic; XIMStyle xic_style; XFontSet xic_xfs; + char *xic_base_fontname; #endif /* Relief GCs, colors etc. */ @@ -611,6 +641,19 @@ struct x_output frame, or IMPLICIT if we received an EnterNotify. FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */ int focus_state; + + /* The latest move we made to FRAME_OUTER_WINDOW. Saved so we can + compensate for type A WMs (see wm_type in dpyinfo above). */ + int expected_top; + int expected_left; + + /* The offset we need to add to compensate for type A WMs. */ + int move_offset_top; + int move_offset_left; + + /* Nonzero if we have made a move and needs to check if the WM placed us + at the right position. */ + int check_expected_move; }; #define No_Cursor (None) @@ -697,6 +740,7 @@ enum #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. */ @@ -908,7 +952,6 @@ Lisp_Object display_x_get_resource P_ ((struct x_display_info *, 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. */ @@ -935,8 +978,6 @@ int x_alloc_nearest_color P_ ((struct frame *, Colormap, XColor *)); 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 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 *)); @@ -972,22 +1013,28 @@ extern int x_dispatch_event P_ ((XEvent *, Display *)); 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 int x_create_bitmap_mask P_ ((struct frame * , int)); #ifdef USE_GTK extern int xg_set_icon P_ ((struct frame *, Lisp_Object)); @@ -1000,6 +1047,7 @@ 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 *, 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)); @@ -1026,9 +1074,12 @@ extern void x_free_dpy_colors P_ ((Display *, Screen *, Colormap, /* 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 */ @@ -1039,8 +1090,7 @@ extern void widget_store_internal_border P_ ((Widget)); /* 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, - int *numchars)); +extern int x_session_check_input P_ ((struct input_event *bufp)); extern int x_session_have_connection P_ ((void)); #endif @@ -1062,3 +1112,6 @@ extern int x_session_have_connection P_ ((void)); (nr).y = (ry), \ (nr).width = (rwidth), \ (nr).height = (rheight)) + +/* arch-tag: 78a7972a-b18f-4694-861a-0780c4b3090e + (do not change this comment) */