X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/4787a496a05fdc03241850b45911dd283d4b06b8..51b59d794fe1d4a82fcd842b478657cc93f91595:/src/frame.h diff --git a/src/frame.h b/src/frame.h index 009cbd76da..be9e9a1c6a 100644 --- a/src/frame.h +++ b/src/frame.h @@ -1,6 +1,6 @@ /* Define frame-object for GNU Emacs. Copyright (C) 1993, 1994, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -24,6 +24,8 @@ along with GNU Emacs. If not, see . */ #ifndef EMACS_FRAME_H #define EMACS_FRAME_H +#include "dispextern.h" + /* Miscellanea. */ @@ -35,11 +37,6 @@ extern int frame_garbaged; extern int message_buf_print; -/* Nonzero means window system changes focus when moving the - mouse. */ - -extern int focus_follows_mouse; - /* The structure representing a frame. */ @@ -50,7 +47,8 @@ enum output_method output_x_window, output_msdos_raw, output_w32, - output_mac + output_mac, + output_ns }; enum vertical_scroll_bar_type @@ -72,12 +70,12 @@ enum text_cursor_kinds enum fullscreen_type { - /* Values used as a bit mask, BOTH == WIDTH | HEIGHT. */ - FULLSCREEN_NONE = 0, - FULLSCREEN_WIDTH = 1, - FULLSCREEN_HEIGHT = 2, - FULLSCREEN_BOTH = 3, - FULLSCREEN_WAIT = 4 + FULLSCREEN_NONE, + FULLSCREEN_WIDTH = 0x001, + FULLSCREEN_HEIGHT = 0x002, + FULLSCREEN_BOTH = 0x003, + FULLSCREEN_MAXIMIZED = 0x013, + FULLSCREEN_WAIT = 0x100 }; @@ -188,6 +186,10 @@ struct frame /* Desired and current tool-bar items. */ Lisp_Object tool_bar_items; + /* Where tool bar is, can be left, right, top or bottom. The native + tool bar only supports top. */ + Lisp_Object tool_bar_position; + /* Desired and current contents displayed in tool_bar_window. */ Lisp_Object desired_tool_bar_string, current_tool_bar_string; @@ -237,7 +239,7 @@ struct frame auto-resize-tool-bar is set to grow-only. */ unsigned minimize_tool_bar_window_p : 1; -#if defined (USE_GTK) || defined (MAC_OS) +#if defined (USE_GTK) || defined (HAVE_NS) /* Nonzero means using a tool bar that comes from the toolkit. */ int external_tool_bar; #endif @@ -303,7 +305,7 @@ struct frame /* Canonical X unit. Width of default font, in pixels. */ int column_width; - /* Widht of space glyph of default font, in pixels. */ + /* Width of space glyph of default font, in pixels. */ int space_width; /* Canonical Y unit. Height of a line, in pixels. */ @@ -326,7 +328,7 @@ struct frame struct tty_output *tty; /* termchar.h */ struct x_output *x; /* xterm.h */ struct w32_output *w32; /* w32term.h */ - struct mac_output *mac; /* macterm.h */ + struct ns_output *ns; /* nsterm.h */ EMACS_INT nothing; } output_data; @@ -353,8 +355,8 @@ struct frame /* Number of lines of menu bar. */ int menu_bar_lines; -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \ - || defined (USE_GTK) +#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) || defined (USE_GTK) /* Nonzero means using a menu bar that comes from the X toolkit. */ unsigned int external_menu_bar : 1; #endif @@ -437,6 +439,9 @@ struct frame since the last time we checked. */ unsigned char mouse_moved :1; + /* Nonzero means that the pointer is invisible. */ + unsigned char pointer_invisible :1; + /* If can_have_scroll_bars is non-zero, this is non-zero if we should actually display them on this frame. */ enum vertical_scroll_bar_type vertical_scroll_bar_type; @@ -477,6 +482,12 @@ struct frame /* The baud rate that was used to calculate costs for this frame. */ int cost_calculation_baud_rate; + /* frame opacity + alpha[0]: alpha transparency of the active frame + alpha[1]: alpha transparency of inactive frames + Negative values mean not to change alpha. */ + double alpha[2]; + /* Exponent for gamma correction of colors. 1/(VIEWING_GAMMA * SCREEN_GAMMA) where viewing_gamma is 0.4545 and SCREEN_GAMMA is a frame parameter. 0 means don't do gamma correction. */ @@ -490,11 +501,7 @@ struct frame unsigned long foreground_pixel; }; -#ifdef MULTI_KBOARD #define FRAME_KBOARD(f) ((f)->terminal->kboard) -#else -#define FRAME_KBOARD(f) (&the_only_kboard) -#endif /* Return a pointer to the image cache of frame F. */ #define FRAME_IMAGE_CACHE(F) ((F)->terminal->image_cache) @@ -514,6 +521,7 @@ typedef struct frame *FRAME_PTR; #define FRAME_W32_P(f) ((f)->output_method == output_w32) #define FRAME_MSDOS_P(f) ((f)->output_method == output_msdos_raw) #define FRAME_MAC_P(f) ((f)->output_method == output_mac) +#define FRAME_NS_P(f) ((f)->output_method == output_ns) /* FRAME_WINDOW_P tests whether the frame is a window, and is defined to be the predicate for the window system being used. */ @@ -524,13 +532,27 @@ typedef struct frame *FRAME_PTR; #ifdef HAVE_NTGUI #define FRAME_WINDOW_P(f) FRAME_W32_P (f) #endif -#ifdef MAC_OS -#define FRAME_WINDOW_P(f) FRAME_MAC_P (f) +#ifdef HAVE_NS +#define FRAME_WINDOW_P(f) FRAME_NS_P(f) #endif #ifndef FRAME_WINDOW_P #define FRAME_WINDOW_P(f) (0) #endif +/* Return a pointer to the structure holding information about the + region of text, if any, that is currently shown in mouse-face on + frame F. We need to define two versions because a TTY-only build + does not have FRAME_X_DISPLAY_INFO. */ +#ifdef HAVE_WINDOW_SYSTEM +# define MOUSE_HL_INFO(F) \ + (FRAME_WINDOW_P(F) \ + ? &(FRAME_X_DISPLAY_INFO(F)->mouse_highlight) \ + : &(((F)->output_data.tty->display_info)->mouse_highlight)) +#else +# define MOUSE_HL_INFO(F) \ + (&(((F)->output_data.tty->display_info)->mouse_highlight)) +#endif + /* Nonzero if frame F is still alive (not deleted). */ #define FRAME_LIVE_P(f) ((f)->terminal != 0) @@ -565,7 +587,7 @@ typedef struct frame *FRAME_PTR; /* Nonzero if this frame should display a tool bar in a way that does not use any text lines. */ -#if defined (USE_GTK) || defined (MAC_OS) +#if defined (USE_GTK) || defined (HAVE_NS) #define FRAME_EXTERNAL_TOOL_BAR(f) (f)->external_tool_bar #else #define FRAME_EXTERNAL_TOOL_BAR(f) 0 @@ -581,10 +603,15 @@ typedef struct frame *FRAME_PTR; #define FRAME_TOP_MARGIN(F) \ (FRAME_MENU_BAR_LINES (F) + FRAME_TOOL_BAR_LINES (F)) +/* Pixel height of the top margin above. */ + +#define FRAME_TOP_MARGIN_HEIGHT(f) \ + (FRAME_TOP_MARGIN (f) * FRAME_LINE_HEIGHT (f)) + /* Nonzero if this frame should display a menu bar in a way that does not use any text lines. */ -#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \ - || defined (USE_GTK) +#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ + || defined (HAVE_NS) || defined (USE_GTK) #define FRAME_EXTERNAL_MENU_BAR(f) (f)->external_menu_bar #else #define FRAME_EXTERNAL_MENU_BAR(f) 0 @@ -809,28 +836,27 @@ typedef struct frame *FRAME_PTR; extern Lisp_Object Qframep, Qframe_live_p; extern Lisp_Object Qtty, Qtty_type; +extern Lisp_Object Qtty_color_mode; extern Lisp_Object Qterminal, Qterminal_live_p; extern Lisp_Object Qnoelisp; extern struct frame *last_nonminibuf_frame; -extern struct frame *make_initial_frame P_ ((void)); -extern struct frame *make_terminal_frame P_ ((struct terminal *)); -extern struct frame *make_frame P_ ((int)); +extern struct frame *make_initial_frame (void); +extern struct frame *make_terminal_frame (struct terminal *); +extern struct frame *make_frame (int); #ifdef HAVE_WINDOW_SYSTEM -extern struct frame *make_minibuffer_frame P_ ((void)); -extern struct frame *make_frame_without_minibuffer P_ ((Lisp_Object, - struct kboard *, - Lisp_Object)); +extern struct frame *make_minibuffer_frame (void); +extern struct frame *make_frame_without_minibuffer (Lisp_Object, + struct kboard *, + Lisp_Object); #endif /* HAVE_WINDOW_SYSTEM */ -extern int other_visible_frames P_ ((struct frame *)); +extern int other_visible_frames (struct frame *); +extern void frame_make_pointer_invisible (void); +extern void frame_make_pointer_visible (void); +extern Lisp_Object delete_frame (Lisp_Object, Lisp_Object); extern Lisp_Object Vframe_list; -extern Lisp_Object Vdefault_frame_alist; - -extern Lisp_Object Vterminal_frame; - -extern Lisp_Object Vmouse_highlight; /* The currently selected frame. */ @@ -963,7 +989,7 @@ extern Lisp_Object selected_frame; at ROW/COL. */ #define FRAME_LINE_TO_PIXEL_Y(f, row) \ - (FRAME_INTERNAL_BORDER_WIDTH (f) \ + (((row) < FRAME_TOP_MARGIN (f) ? 0 : FRAME_INTERNAL_BORDER_WIDTH (f)) \ + (row) * FRAME_LINE_HEIGHT (f)) #define FRAME_COL_TO_PIXEL_X(f, col) \ @@ -980,15 +1006,21 @@ extern Lisp_Object selected_frame; + FRAME_INTERNAL_BORDER_WIDTH (f)) #define FRAME_TEXT_LINES_TO_PIXEL_HEIGHT(f, lines) \ - (FRAME_LINE_TO_PIXEL_Y (f, lines) \ - + FRAME_INTERNAL_BORDER_WIDTH (f)) + ((lines) * FRAME_LINE_HEIGHT (f) \ + + 2 * FRAME_INTERNAL_BORDER_WIDTH (f)) /* Return the row/column (zero-based) of the character cell containing the pixel on FRAME at Y/X. */ #define FRAME_PIXEL_Y_TO_LINE(f, y) \ - (((y) - FRAME_INTERNAL_BORDER_WIDTH (f)) \ + (((y) < FRAME_TOP_MARGIN_HEIGHT (f) \ + ? (y) \ + : ((y) < FRAME_TOP_MARGIN_HEIGHT (f) + FRAME_INTERNAL_BORDER_WIDTH (f) \ + ? (y) - (FRAME_TOP_MARGIN_HEIGHT (f) + FRAME_INTERNAL_BORDER_WIDTH (f) \ + /* Arrange for the division to round down. */ \ + + FRAME_LINE_HEIGHT (f) - 1) \ + : (y) - FRAME_INTERNAL_BORDER_WIDTH (f))) \ / FRAME_LINE_HEIGHT (f)) #define FRAME_PIXEL_X_TO_COL(f, x) \ @@ -1021,7 +1053,8 @@ extern Lisp_Object Qfont; extern Lisp_Object Qbackground_color, Qforeground_color; extern Lisp_Object Qicon, Qicon_name, Qicon_type, Qicon_left, Qicon_top; extern Lisp_Object Qinternal_border_width; -extern Lisp_Object Qmenu_bar_lines, Qtool_bar_lines; +extern Lisp_Object Qtooltip; +extern Lisp_Object Qmenu_bar_lines, Qtool_bar_lines, Qtool_bar_position; extern Lisp_Object Qmouse_color; extern Lisp_Object Qname, Qtitle; extern Lisp_Object Qparent_id; @@ -1032,22 +1065,26 @@ extern Lisp_Object Qscreen_gamma; extern Lisp_Object Qline_spacing; extern Lisp_Object Qwait_for_wm; extern Lisp_Object Qfullscreen; +extern Lisp_Object Qfullwidth, Qfullheight, Qfullboth, Qmaximized; +extern Lisp_Object Qsticky; extern Lisp_Object Qfont_backend; +extern Lisp_Object Qalpha; extern Lisp_Object Qleft_fringe, Qright_fringe; extern Lisp_Object Qheight, Qwidth; extern Lisp_Object Qminibuffer, Qmodeline; -extern Lisp_Object Qonly; -extern Lisp_Object Qx, Qw32, Qmac, Qpc; +extern Lisp_Object Qx, Qw32, Qmac, Qpc, Qns; extern Lisp_Object Qvisible; extern Lisp_Object Qdisplay_type; extern Lisp_Object Qbackground_mode; extern Lisp_Object Qx_resource_name; -extern Lisp_Object Qleft, Qright, Qtop, Qbox; +extern Lisp_Object Qleft, Qright, Qtop, Qbox, Qbottom; extern Lisp_Object Qdisplay; +extern Lisp_Object Qrun_hook_with_args; + #ifdef HAVE_WINDOW_SYSTEM /* The class of this X application. */ @@ -1055,54 +1092,57 @@ extern Lisp_Object Qdisplay; /* These are in xterm.c, w32term.c, etc. */ -extern void x_set_scroll_bar_default_width P_ ((struct frame *)); -extern void x_set_offset P_ ((struct frame *, int, int, int)); -extern void x_wm_set_icon_position P_ ((struct frame *, int, int)); - -extern Lisp_Object x_new_font P_ ((struct frame *, Lisp_Object, int)); - -/* These are in frame.c */ +extern void x_set_scroll_bar_default_width (struct frame *); +extern void x_set_offset (struct frame *, int, int, int); +extern void x_wm_set_icon_position (struct frame *, int, int); -extern Lisp_Object Vx_resource_name; -extern Lisp_Object Vx_resource_class; +extern Lisp_Object x_new_font (struct frame *, Lisp_Object, int); extern Lisp_Object Qface_set_after_frame_default; -extern void x_fullscreen_adjust P_ ((struct frame *f, int *, int *, - int *, int *)); - -extern void x_set_frame_parameters P_ ((struct frame *, Lisp_Object)); -extern void x_report_frame_params P_ ((struct frame *, Lisp_Object *)); - -extern void x_set_fullscreen P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_line_spacing P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_screen_gamma P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_font P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_font_backend P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_fringe_width P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_border_width P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_internal_border_width P_ ((struct frame *, Lisp_Object, - Lisp_Object)); -extern void x_set_visibility P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_autoraise P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_autolower P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_unsplittable P_ ((struct frame *, Lisp_Object, Lisp_Object)); -extern void x_set_vertical_scroll_bars P_ ((struct frame *, Lisp_Object, - Lisp_Object)); -extern void x_set_scroll_bar_width P_ ((struct frame *, Lisp_Object, - Lisp_Object)); - -extern Lisp_Object x_icon_type P_ ((struct frame *)); - -extern int x_figure_window_size P_ ((struct frame *, Lisp_Object, int)); - - -extern void validate_x_resource_name P_ ((void)); +extern void x_fullscreen_adjust (struct frame *f, int *, int *, + int *, int *); + +extern void x_set_frame_parameters (struct frame *, Lisp_Object); +extern void x_report_frame_params (struct frame *, Lisp_Object *); + +extern void x_set_fullscreen (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_line_spacing (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_screen_gamma (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_font (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_font_backend (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_fringe_width (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_border_width (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_internal_border_width (struct frame *, Lisp_Object, + Lisp_Object); +extern void x_set_visibility (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_autoraise (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_autolower (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_unsplittable (struct frame *, Lisp_Object, Lisp_Object); +extern void x_set_vertical_scroll_bars (struct frame *, Lisp_Object, + Lisp_Object); +extern void x_set_scroll_bar_width (struct frame *, Lisp_Object, + Lisp_Object); + +extern Lisp_Object x_icon_type (struct frame *); + +extern int x_figure_window_size (struct frame *, Lisp_Object, int); + +extern void x_set_alpha (struct frame *, Lisp_Object, Lisp_Object); + +extern void validate_x_resource_name (void); + +extern Lisp_Object display_x_get_resource (Display_Info *, + Lisp_Object attribute, + Lisp_Object class, + Lisp_Object component, + Lisp_Object subclass); + +/* In xmenu.c */ +extern void set_frame_menubar (FRAME_PTR, int, int); #endif /* HAVE_WINDOW_SYSTEM */ #endif /* not EMACS_FRAME_H */ -/* arch-tag: 0df048ee-e6bf-4f48-bd56-e3cd055dd8c4 - (do not change this comment) */