X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fframe.h;h=0a341c5e507f122371dcdbea23d4f328ca7b0df8;hb=09b372c3074a7cc339a61b2297583f2b9edefe86;hp=3af2ae4a8f6f474e9cd8d601cabbea39925f195c;hpb=6883ee56ec887c2c48abe5b06b5e66aa74031910;p=chise%2Fxemacs-chise.git.1 diff --git a/src/frame.h b/src/frame.h index 3af2ae4..0a341c5 100644 --- a/src/frame.h +++ b/src/frame.h @@ -20,12 +20,20 @@ Boston, MA 02111-1307, USA. */ /* Synched up with: FSF 19.30. */ -#ifndef _XEMACS_FRAME_H_ -#define _XEMACS_FRAME_H_ +#ifndef INCLUDED_frame_h_ +#define INCLUDED_frame_h_ +#ifdef HAVE_SCROLLBARS #include "scrollbar.h" +#endif + +#ifdef HAVE_TOOLBARS #include "toolbar.h" +#endif + #include "device.h" +#include "glyphs.h" +#include "redisplay.h" #define FRAME_TYPE_NAME(f) ((f)->framemeths->name) #define FRAME_TYPE(f) ((f)->framemeths->symbol) @@ -48,7 +56,7 @@ struct frame struct console_methods *framemeths; /* Size of text only area of this frame, excluding scrollbars, - toolbars and end of line glyphs. The size can be in charactes + toolbars and end of line glyphs. The size can be in characters or pixels, depending on units in which window system resizes its windows */ int height, width; @@ -60,7 +68,7 @@ struct frame /* Size of text-only are of the frame, in default font characters. This may be inaccurate due to rounding error */ int char_height, char_width; - + /* Size of the whole frame, including scrollbars, toolbars and end of line glyphs, in pixels */ int pixheight, pixwidth; @@ -70,6 +78,9 @@ struct frame int order_count; #endif + /* Current page number for a printer frame. */ + int page_number; + /* Width of the internal border. This is a line of background color just inside the window's border. It is normally only non-zero on X frames, but we put it here to avoid introducing window system @@ -83,6 +94,9 @@ struct frame int modiff; + struct expose_ignore* subwindow_exposures; + struct expose_ignore* subwindow_exposures_tail; + #ifdef HAVE_SCROLLBARS /* frame-local scrollbar information. See scrollbar.c. */ int scrollbar_y_offset; @@ -96,9 +110,18 @@ struct frame /* Size of toolbars as seen by redisplay. This is used to determine whether to re-layout windows by a call to change_frame_size early in redisplay_frame. */ - unsigned int current_toolbar_size[4]; + int current_toolbar_size[4]; #endif + /* Size of gutters as seen by redisplay. This is used to determine + whether to re-layout windows by a call to change_frame_size early + in redisplay_frame. */ + int current_gutter_bounds[4]; + + /* Dynamic arrays of display lines for gutters */ + display_line_dynarr *current_display_lines[4]; + display_line_dynarr *desired_display_lines[4]; + /* A structure of auxiliary data specific to the device type. struct x_frame is used for X window frames; defined in console-x.h */ void *frame_data; @@ -108,7 +131,7 @@ struct frame #include "frameslots.h" /* Nonzero if frame is currently displayed. - Mutally exclusive with iconfied + Mutually exclusive with iconified JV: This now a tristate flag: Value : Emacs meaning :f-v-p : X meaning 0 : not displayed : nil : unmapped @@ -119,6 +142,9 @@ Value : Emacs meaning :f-v-p : X meaning /* one-bit flags: */ + /* Is focusing onto this frame disabled? (Modal dialog boxes) */ + unsigned int disabled :1; + /* Are we finished initializing? */ unsigned int init_finished :1; @@ -150,6 +176,11 @@ Value : Emacs meaning :f-v-p : X meaning unsigned int bottom_toolbar_was_visible :1; unsigned int left_toolbar_was_visible :1; unsigned int right_toolbar_was_visible :1; + /* gutter visibility */ + unsigned int top_gutter_was_visible :1; + unsigned int bottom_gutter_was_visible :1; + unsigned int left_gutter_was_visible :1; + unsigned int right_gutter_was_visible :1; /* redisplay flags */ unsigned int buffers_changed :1; @@ -157,6 +188,10 @@ Value : Emacs meaning :f-v-p : X meaning unsigned int extents_changed :1; unsigned int faces_changed :1; unsigned int frame_changed :1; + unsigned int frame_layout_changed :1; /* The layout of frame + elements has changed. */ + unsigned int subwindows_changed :1; + unsigned int subwindows_state_changed :1; unsigned int glyphs_changed :1; unsigned int icon_changed :1; unsigned int menubar_changed :1; @@ -164,6 +199,7 @@ Value : Emacs meaning :f-v-p : X meaning unsigned int point_changed :1; unsigned int size_changed :1; unsigned int toolbar_changed :1; + unsigned int gutter_changed :1; unsigned int windows_changed :1; unsigned int windows_structure_changed :1; unsigned int window_face_cache_reset :1; /* used by expose handler */ @@ -187,6 +223,7 @@ EXFUN (Fraise_frame, 1); EXFUN (Fselect_frame, 1); EXFUN (Fset_frame_pointer, 2); EXFUN (Fset_frame_position, 3); +EXFUN (Fset_frame_properties, 2); EXFUN (Fset_frame_size, 4); extern Lisp_Object Qbackground_toolbar_color, Qbell_volume, Qborder_color; @@ -210,8 +247,8 @@ extern Lisp_Object Vmouse_motion_handler; DECLARE_LRECORD (frame, struct frame); #define XFRAME(x) XRECORD (x, frame, struct frame) #define XSETFRAME(x, p) XSETRECORD (x, p, frame) +#define wrap_frame(p) wrap_object (p) #define FRAMEP(x) RECORDP (x, frame) -#define GC_FRAMEP(x) GC_RECORDP (x, frame) #define CHECK_FRAME(x) CHECK_RECORD (x, frame) #define CONCHECK_FRAME(x) CONCHECK_RECORD (x, frame) @@ -229,16 +266,16 @@ DECLARE_LRECORD (frame, struct frame); #define FRAME_TYPE_P(f, type) EQ (FRAME_TYPE (f), Q##type) #ifdef ERROR_CHECK_TYPECHECK -INLINE struct frame * +INLINE_HEADER struct frame * error_check_frame_type (struct frame * f, Lisp_Object sym); -INLINE struct frame * +INLINE_HEADER struct frame * error_check_frame_type (struct frame * f, Lisp_Object sym) { assert (EQ (FRAME_TYPE (f), sym)); return f; } # define FRAME_TYPE_DATA(f, type) \ - ((struct type##_frame *) (error_check_frame_type (f, Q##type))->frame_data) + ((struct type##_frame *) error_check_frame_type (f, Q##type)->frame_data) #else # define FRAME_TYPE_DATA(f, type) \ ((struct type##_frame *) (f)->frame_data) @@ -259,6 +296,40 @@ error_check_frame_type (struct frame * f, Lisp_Object sym) (type##_console_methods->predicate_symbol, x); \ } while (0) +#define FRAME_DISPLAY_P(frm) \ + (DEVICE_DISPLAY_P (XDEVICE (FRAME_DEVICE (frm)))) + +#define CHECK_DISPLAY_FRAME(frm) \ + do { \ + CHECK_FRAME (frm); \ + CHECK_LIVE_FRAME (frm); \ + CHECK_DISPLAY_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ + } while (0) + +#define CONCHECK_DISPLAY_FRAME(frm) \ + do { \ + CONCHECK_FRAME (frm); \ + CONCHECK_LIVE_FRAME (frm); \ + CONCHECK_DISPLAY_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ + } while (0) + +#define FRAME_PRINTER_P(frm) \ + (DEVICE_PRINTER_P (XDEVICE (FRAME_DEVICE (frm)))) + +#define CHECK_PRINTER_FRAME(frm) \ + do { \ + CHECK_FRAME (frm); \ + CHECK_LIVE_FRAME (frm); \ + CHECK_PRINTER_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ + } while (0) + +#define CONCHECK_PRINTER_FRAME(frm) \ + do { \ + CONCHECK_FRAME (frm); \ + CONCHECK_LIVE_FRAME (frm); \ + CONCHECK_PRINTER_DEVICE (FRAME_DEVICE (XFRAME (frm))); \ + } while (0) + /* #### These should be in the frame-*.h files but there are too many places where the abstraction is broken. Need to fix. */ @@ -267,6 +338,10 @@ error_check_frame_type (struct frame * f, Lisp_Object sym) #define CHECK_X_FRAME(z) CHECK_FRAME_TYPE (z, x) #define CONCHECK_X_FRAME(z) CONCHECK_FRAME_TYPE (z, x) +#define FRAME_GTK_P(frm) CONSOLE_TYPESYM_GTK_P (FRAME_TYPE (frm)) +#define CHECK_GTK_FRAME(z) CHECK_FRAME_TYPE (z, gtk) +#define CONCHECK_GTK_FRAME(z) CONCHECK_FRAME_TYPE (z, gtk) + #define FRAME_TTY_P(frm) CONSOLE_TYPESYM_TTY_P (FRAME_TYPE (frm)) #define CHECK_TTY_FRAME(z) CHECK_FRAME_TYPE (z, tty) #define CONCHECK_TTY_FRAME(z) CONCHECK_FRAME_TYPE (z, tty) @@ -305,6 +380,32 @@ extern int frame_changed; glyphs_changed = 1; \ } while (0) +#define MARK_FRAME_SUBWINDOWS_CHANGED(f) do { \ + struct frame *mfgc_f = (f); \ + mfgc_f->subwindows_changed = 1; \ + mfgc_f->modiff++; \ + if (!NILP (mfgc_f->device)) \ + { \ + struct device *mfgc_d = XDEVICE (mfgc_f->device); \ + MARK_DEVICE_SUBWINDOWS_CHANGED (mfgc_d); \ + } \ + else \ + subwindows_changed = 1; \ +} while (0) + +#define MARK_FRAME_SUBWINDOWS_STATE_CHANGED(f) do { \ + struct frame *mfgc_f = (f); \ + mfgc_f->subwindows_state_changed = 1; \ + mfgc_f->modiff++; \ + if (!NILP (mfgc_f->device)) \ + { \ + struct device *mfgc_d = XDEVICE (mfgc_f->device); \ + MARK_DEVICE_SUBWINDOWS_STATE_CHANGED (mfgc_d); \ + } \ + else \ + subwindows_state_changed = 1; \ +} while (0) + #define MARK_FRAME_TOOLBARS_CHANGED(f) do { \ struct frame *mftc_f = (f); \ mftc_f->toolbar_changed = 1; \ @@ -318,6 +419,19 @@ extern int frame_changed; toolbar_changed = 1; \ } while (0) +#define MARK_FRAME_GUTTERS_CHANGED(f) do { \ + struct frame *mftc_f = (f); \ + mftc_f->gutter_changed = 1; \ + mftc_f->modiff++; \ + if (!NILP (mftc_f->device)) \ + { \ + struct device *mftc_d = XDEVICE (mftc_f->device); \ + MARK_DEVICE_GUTTERS_CHANGED (mftc_d); \ + } \ + else \ + gutter_changed = 1; \ +} while (0) + #define MARK_FRAME_SIZE_CHANGED(f) do { \ struct frame *mfsc_f = (f); \ mfsc_f->size_changed = 1; \ @@ -345,6 +459,19 @@ extern int frame_changed; frame_changed = 1; \ } while (0) +#define MARK_FRAME_LAYOUT_CHANGED(f) do { \ + struct frame *mfc_f = (f); \ + mfc_f->frame_layout_changed = 1; \ + mfc_f->modiff++; \ + if (!NILP (mfc_f->device)) \ + { \ + struct device *mfc_d = XDEVICE (mfc_f->device); \ + MARK_DEVICE_FRAME_LAYOUT_CHANGED (mfc_d); \ + } \ + else \ + frame_layout_changed = 1; \ +} while (0) + #define MARK_FRAME_WINDOWS_CHANGED(f) do { \ struct frame *mfwc_f = (f); \ mfwc_f->windows_changed = 1; \ @@ -397,13 +524,15 @@ extern int frame_changed; #define FRAME_MINIBUF_ONLY_P(f) \ EQ (FRAME_ROOT_WINDOW (f), FRAME_MINIBUF_WINDOW (f)) -#define FRAME_HAS_MINIBUF_P(f) ((f)->has_minibuffer) -#define FRAME_HEIGHT(f) ((f)->height) -#define FRAME_WIDTH(f) ((f)->width) -#define FRAME_CHARHEIGHT(f) ((f)->char_height) -#define FRAME_CHARWIDTH(f) ((f)->char_width) -#define FRAME_PIXHEIGHT(f) ((f)->pixheight) -#define FRAME_PIXWIDTH(f) ((f)->pixwidth) +#define FRAME_HAS_MINIBUF_P(f) ((f)->has_minibuffer) +#define FRAME_HEIGHT(f) ((f)->height) +#define FRAME_WIDTH(f) ((f)->width) +#define FRAME_CHARHEIGHT(f) ((f)->char_height) +#define FRAME_CHARWIDTH(f) ((f)->char_width) +#define FRAME_PIXHEIGHT(f) ((f)->pixheight) +#define FRAME_PIXWIDTH(f) ((f)->pixwidth) +#define FRAME_PAGENUMBER(f) ((f)->page_number + 0) +#define FRAME_SET_PAGENUMBER(f,x) (f)->page_number = (x); #ifdef HAVE_SCROLLBARS #define FRAME_SCROLLBAR_WIDTH(f) \ (NILP ((f)->vertical_scrollbar_visible_p) ? \ @@ -416,6 +545,11 @@ extern int frame_changed; #define FRAME_SCROLLBAR_HEIGHT(f) 0 #endif +#define FW_FRAME(obj) \ + (WINDOWP (obj) ? WINDOW_FRAME (XWINDOW (obj)) \ + : (FRAMEP (obj) ? obj \ + : Qnil)) + #define FRAME_NEW_HEIGHT(f) ((f)->new_height) #define FRAME_NEW_WIDTH(f) ((f)->new_width) #define FRAME_CURSOR_X(f) ((f)->cursor_x) @@ -433,6 +567,7 @@ extern int frame_changed; NON_LVALUE ((f)->last_nonminibuf_window) #define FRAME_SB_VCACHE(f) ((f)->sb_vcache) #define FRAME_SB_HCACHE(f) ((f)->sb_hcache) +#define FRAME_SUBWINDOW_CACHE(f) ((f)->subwindow_instance_cache) #if 0 /* FSFmacs */ @@ -509,7 +644,7 @@ extern int frame_changed; FRAME_THEORETICAL_TOOLBAR_SIZE (f, RIGHT_TOOLBAR) #define FRAME_THEORETICAL_TOOLBAR_BORDER_WIDTH(f, pos) \ - (FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE (f, pos) \ + (FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE (f, pos) \ ? FRAME_RAW_THEORETICAL_TOOLBAR_BORDER_WIDTH (f, pos) \ : 0) @@ -568,18 +703,18 @@ extern int frame_changed; if you encounter some odd toolbar behavior, you might want to look into this. --ben */ -#define FRAME_REAL_TOOLBAR_VISIBLE(f, pos) \ - ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ - && FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) > 0) \ - ? FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos) \ +#define FRAME_REAL_TOOLBAR_VISIBLE(f, pos) \ + ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ + && FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) > 0) \ + ? FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos) \ : 0) -#define FRAME_REAL_TOOLBAR_SIZE(f, pos) \ - ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ - && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos)) \ - ? FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) \ +#define FRAME_REAL_TOOLBAR_SIZE(f, pos) \ + ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ + && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos)) \ + ? FRAME_RAW_REAL_TOOLBAR_SIZE (f, pos) \ : 0) #define FRAME_REAL_TOOLBAR_BORDER_WIDTH(f, pos) \ - ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ + ((!NILP (FRAME_REAL_TOOLBAR (f, pos)) \ && FRAME_RAW_REAL_TOOLBAR_VISIBLE (f, pos)) \ ? FRAME_RAW_REAL_TOOLBAR_BORDER_WIDTH (f, pos) \ : 0) @@ -611,32 +746,32 @@ extern int frame_changed; #define FRAME_REAL_RIGHT_TOOLBAR_VISIBLE(f) \ FRAME_REAL_TOOLBAR_VISIBLE (f, RIGHT_TOOLBAR) -#define FRAME_TOP_BORDER_START(f) \ - (FRAME_REAL_TOP_TOOLBAR_HEIGHT (f) + \ +#define FRAME_TOP_BORDER_START(f) \ + (FRAME_REAL_TOP_TOOLBAR_HEIGHT (f) + \ 2 * FRAME_REAL_TOP_TOOLBAR_BORDER_WIDTH (f)) -#define FRAME_TOP_BORDER_END(f) \ +#define FRAME_TOP_BORDER_END(f) \ (FRAME_TOP_BORDER_START (f) + FRAME_BORDER_HEIGHT (f)) -#define FRAME_BOTTOM_BORDER_START(f) \ - (FRAME_PIXHEIGHT (f) - FRAME_BORDER_HEIGHT (f) - \ - FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) - \ +#define FRAME_BOTTOM_BORDER_START(f) \ + (FRAME_PIXHEIGHT (f) - FRAME_BORDER_HEIGHT (f) - \ + FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) - \ 2 * FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f)) -#define FRAME_BOTTOM_BORDER_END(f) \ - (FRAME_PIXHEIGHT (f) - FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) - \ +#define FRAME_BOTTOM_BORDER_END(f) \ + (FRAME_PIXHEIGHT (f) - FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f) - \ 2 * FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f)) -#define FRAME_LEFT_BORDER_START(f) \ - (FRAME_REAL_LEFT_TOOLBAR_WIDTH (f) + \ +#define FRAME_LEFT_BORDER_START(f) \ + (FRAME_REAL_LEFT_TOOLBAR_WIDTH (f) + \ 2 * FRAME_REAL_LEFT_TOOLBAR_BORDER_WIDTH (f)) -#define FRAME_LEFT_BORDER_END(f) \ +#define FRAME_LEFT_BORDER_END(f) \ (FRAME_LEFT_BORDER_START (f) + FRAME_BORDER_WIDTH (f)) -#define FRAME_RIGHT_BORDER_START(f) \ - (FRAME_PIXWIDTH (f) - FRAME_BORDER_WIDTH (f) - \ - FRAME_REAL_RIGHT_TOOLBAR_WIDTH(f) - \ +#define FRAME_RIGHT_BORDER_START(f) \ + (FRAME_PIXWIDTH (f) - FRAME_BORDER_WIDTH (f) - \ + FRAME_REAL_RIGHT_TOOLBAR_WIDTH(f) - \ 2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH (f)) -#define FRAME_RIGHT_BORDER_END(f) \ - (FRAME_PIXWIDTH (f) - FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f) - \ +#define FRAME_RIGHT_BORDER_END(f) \ + (FRAME_PIXWIDTH (f) - FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f) - \ 2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH(f)) /* Equivalent in FSF Emacs: @@ -656,13 +791,8 @@ extern int frame_changed; DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons))) void update_frame_title (struct frame *f); -Lisp_Object next_frame (Lisp_Object f, Lisp_Object frametype, - Lisp_Object console); -Lisp_Object prev_frame (Lisp_Object f, Lisp_Object frametype, - Lisp_Object console); -void store_in_alist (Lisp_Object *alistptr, - CONST char *propname, - Lisp_Object val); +Lisp_Object next_frame (Lisp_Object, Lisp_Object, Lisp_Object); +Lisp_Object previous_frame (Lisp_Object, Lisp_Object, Lisp_Object); void pixel_to_char_size (struct frame *f, int pixel_width, int pixel_height, int *char_width, int *char_height); void char_to_pixel_size (struct frame *f, int char_width, int char_height, @@ -698,8 +828,7 @@ void delete_frame_internal (struct frame *f, int force, void io_error_delete_frame (Lisp_Object frame); Lisp_Object find_some_frame (int (*predicate) (Lisp_Object, void *), void *closure); -int device_matches_console_spec (Lisp_Object frame, Lisp_Object device, - Lisp_Object console); +int device_matches_device_spec (Lisp_Object device, Lisp_Object device_spec); Lisp_Object frame_first_window (struct frame *f); int show_gc_cursor (struct frame *f, Lisp_Object cursor); void set_frame_selected_window (struct frame *f, Lisp_Object window); @@ -707,4 +836,6 @@ int is_surrogate_for_selected_frame (struct frame *f); void update_frame_icon (struct frame *f); void invalidate_vertical_divider_cache_in_frame (struct frame *f); -#endif /* _XEMACS_FRAME_H_ */ +void init_frame (void); + +#endif /* INCLUDED_frame_h_ */