X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b7a6f9f7919b7fc0871ae768b58f8e746aa7dd9f..51caf50203be08ba6f15e0d72b777f036d6bee72:/src/w32term.h diff --git a/src/w32term.h b/src/w32term.h index e85ee7790d..89008b7348 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -26,23 +26,8 @@ along with GNU Emacs. If not, see . */ #define BLACK_PIX_DEFAULT(f) PALETTERGB(0,0,0) #define WHITE_PIX_DEFAULT(f) PALETTERGB(255,255,255) -#define FONT_WIDTH(f) ((f)->max_width) -#define FONT_HEIGHT(f) ((f)->height) -#define FONT_BASE(f) ((f)->ascent) -#define FONT_DESCENT(f) ((f)->descent) - #define CP_DEFAULT 1004 -#define CHECK_W32_FRAME(f, frame) \ - if (NILP (frame)) \ - f = SELECTED_FRAME (); \ - else \ - { \ - CHECK_LIVE_FRAME (frame, 0); \ - f = XFRAME (frame); \ - } \ - if (! FRAME_W32_P (f)) - /* Indicates whether we are in the readsocket call and the message we are processing in the current loop */ @@ -71,6 +56,8 @@ struct w32_palette_entry { }; extern void w32_regenerate_palette (struct frame *f); +extern void w32_fullscreen_rect (HWND hwnd, int fsmode, RECT normal, + RECT *rect); /* For each display (currently only one on w32), we have a structure that @@ -84,8 +71,7 @@ struct w32_display_info /* The generic display parameters corresponding to this w32 display. */ struct terminal *terminal; - /* This is a cons cell of the form (NAME . FONT-LIST-CACHE). - The same cons cell also appears in x_display_name_list. */ + /* This is a cons cell of the form (NAME . FONT-LIST-CACHE). */ Lisp_Object name_list_element; /* Number of frames that are on this display. */ @@ -177,18 +163,43 @@ struct w32_display_info frame. It differs from w32_focus_frame when we're using a global minibuffer. */ struct frame *x_highlight_frame; + + /* The frame waiting to be auto-raised in w32_read_socket. */ + struct frame *w32_pending_autoraise_frame; + + /* The frame where the mouse was last time we reported a mouse event. */ + struct frame *last_mouse_frame; + + /* The frame where the mouse was last time we reported a mouse motion. */ + struct frame *last_mouse_motion_frame; + + /* The frame where the mouse was last time we reported a mouse position. */ + struct frame *last_mouse_glyph_frame; + + /* Position where the mouse was last time we reported a motion. + This is a position on last_mouse_motion_frame. */ + int last_mouse_motion_x; + int last_mouse_motion_y; + + /* Where the mouse was last time we reported a mouse position. + This is a rectangle on last_mouse_glyph_frame. */ + RECT last_mouse_glyph; + + /* The scroll bar in which the last motion event occurred. */ + struct scroll_bar *last_mouse_scroll_bar; + + /* Mouse position on the scroll bar above. + FIXME: shouldn't it be a member of struct scroll_bar? */ + int last_mouse_scroll_bar_pos; + + /* Time of last mouse movement. */ + Time last_mouse_movement_time; }; /* This is a chain of structures for all the displays currently in use. */ extern struct w32_display_info *x_display_list; extern struct w32_display_info one_w32_display_info; -/* This is a list of cons cells, each of the form (NAME . FONT-LIST-CACHE), - one for each element of w32_display_list and in the same order. - NAME is the name of the frame. - FONT-LIST-CACHE records previous values returned by x-list-fonts. */ -extern Lisp_Object w32_display_name_list; - extern struct frame *x_window_to_frame (struct w32_display_info *, HWND); struct w32_display_info *x_display_info_for_name (Lisp_Object); @@ -197,27 +208,22 @@ Lisp_Object display_x_get_resource (struct w32_display_info *, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); -extern void x_focus_on_frame (struct frame *f); - /* also defined in xterm.h XXX: factor out to common header */ extern struct w32_display_info *w32_term_init (Lisp_Object, char *, char *); -extern int w32_defined_color (FRAME_PTR f, const char *color, +extern int w32_defined_color (struct frame *f, const char *color, XColor *color_def, int alloc); extern void x_set_window_size (struct frame *f, int change_grav, - int cols, int rows); + int width, int height, bool pixelwise); extern int x_display_pixel_height (struct w32_display_info *); extern int x_display_pixel_width (struct w32_display_info *); -extern void x_sync (struct frame *); extern Lisp_Object x_get_focus_frame (struct frame *); extern void x_set_mouse_position (struct frame *f, int h, int v); extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y); extern void x_make_frame_visible (struct frame *f); extern void x_make_frame_invisible (struct frame *f); extern void x_iconify_frame (struct frame *f); -extern int x_pixel_width (struct frame *f); -extern int x_pixel_height (struct frame *f); extern void x_set_frame_alpha (struct frame *f); extern void x_set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object); extern void x_set_tool_bar_lines (struct frame *f, @@ -236,6 +242,10 @@ extern int w32_kbd_mods_to_emacs (DWORD mods, WORD key); extern Lisp_Object x_get_focus_frame (struct frame *); +/* w32console.c */ +extern void w32con_hide_cursor (void); +extern void w32con_show_cursor (void); + #define PIX_TYPE COLORREF @@ -324,6 +334,7 @@ struct w32_output Cursor hand_cursor; Cursor hourglass_cursor; Cursor horizontal_drag_cursor; + Cursor vertical_drag_cursor; /* Non-zero means hourglass cursor is currently displayed. */ unsigned hourglass_p : 1; @@ -351,7 +362,6 @@ struct w32_output { XGCValues *gc; unsigned long pixel; - int allocated_p; } black_relief, white_relief; @@ -362,7 +372,7 @@ struct w32_output /* Frame geometry and full-screen mode before it was resized by specifying the 'fullscreen' frame parameter. Used to restore the geometry when 'fullscreen' is reset to nil. */ - int normal_width, normal_height, normal_top, normal_left; + WINDOWPLACEMENT normal_placement; int prev_fsmode; }; @@ -380,27 +390,13 @@ extern struct w32_output w32term_display; #define FRAME_BASELINE_OFFSET(f) ((f)->output_data.w32->baseline_offset) /* This gives the w32_display_info structure for the display F is on. */ -#define FRAME_W32_DISPLAY_INFO(f) (&one_w32_display_info) -#define FRAME_X_DISPLAY_INFO(f) (&one_w32_display_info) +#define FRAME_DISPLAY_INFO(f) (&one_w32_display_info) /* This is the `Display *' which frame F is on. */ #define FRAME_X_DISPLAY(f) (0) -/* Value is the smallest width of any character in any font on frame F. */ - -#define FRAME_SMALLEST_CHAR_WIDTH(F) \ - FRAME_W32_DISPLAY_INFO(F)->smallest_char_width - -/* Value is the smallest height of any font on frame F. */ - -#define FRAME_SMALLEST_FONT_HEIGHT(F) \ - FRAME_W32_DISPLAY_INFO(F)->smallest_font_height - -#define FRAME_NORMAL_WIDTH(F) ((F)->output_data.w32->normal_width) -#define FRAME_NORMAL_HEIGHT(F) ((F)->output_data.w32->normal_height) -#define FRAME_NORMAL_TOP(F) ((F)->output_data.w32->normal_top) -#define FRAME_NORMAL_LEFT(F) ((F)->output_data.w32->normal_left) -#define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode) +#define FRAME_NORMAL_PLACEMENT(F) ((F)->output_data.w32->normal_placement) +#define FRAME_PREV_FSMODE(F) ((F)->output_data.w32->prev_fsmode) /* W32-specific scroll bar stuff. */ @@ -454,9 +450,11 @@ struct scroll_bar { being dragged, this is Qnil. */ Lisp_Object dragging; - /* t if the background of the fringe that is adjacent to a scroll + /* 1 if the background of the fringe that is adjacent to a scroll bar is extended to the gap between the fringe and the bar. */ - Lisp_Object fringe_extended_p; + /* Note: this could be a bit field, but we need to take its address + in ALLOCATE_PSEUDOVECTOR (see x_scroll_bar_create). */ + bool fringe_extended_p; }; /* Turning a lisp vector value into a pointer to a struct scroll_bar. */ @@ -488,21 +486,12 @@ struct scroll_bar { #define SET_SCROLL_BAR_W32_WINDOW(ptr, id) \ (SCROLL_BAR_UNPACK ((ptr)->w32_window_low, (ptr)->w32_window_high, (intptr_t) id)) -/* Extract the X widget of the scroll bar from a struct scroll_bar. */ -#define SCROLL_BAR_X_WIDGET(ptr) \ - ((Widget) SCROLL_BAR_PACK ((ptr)->x_widget_low, (ptr)->x_widget_high)) - -/* Store a widget id in a struct scroll_bar. */ -#define SET_SCROLL_BAR_X_WIDGET(ptr, w) \ - (SCROLL_BAR_UNPACK ((ptr)->x_widget_low, (ptr)->x_widget_high, (int) w)) - /* Return the inside width of a vertical scroll bar, given the outside width. */ #define VERTICAL_SCROLL_BAR_INSIDE_WIDTH(f,width) \ ((width) \ - VERTICAL_SCROLL_BAR_LEFT_BORDER \ - - VERTICAL_SCROLL_BAR_RIGHT_BORDER \ - - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2) + - VERTICAL_SCROLL_BAR_RIGHT_BORDER) /* Return the length of the rectangle within which the top of the handle must stay. This isn't equivalent to the inside height, @@ -539,11 +528,6 @@ struct scroll_bar { /* Minimum lengths for scroll bar handles, in pixels. */ #define VERTICAL_SCROLL_BAR_MIN_HANDLE (vertical_scroll_bar_min_handle) -/* Trimming off a few pixels from each side prevents - text from glomming up against the scroll bar */ -#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0) - - struct frame; /* from frame.h */ extern void w32_fill_rect (struct frame *, HDC, COLORREF, RECT *); @@ -682,9 +666,10 @@ extern DWORD notifications_size; extern void *notifications_desc; extern Lisp_Object w32_get_watch_object (void *); extern Lisp_Object lispy_file_action (DWORD); +extern int handle_file_notifications (struct input_event *); extern void w32_initialize_display_info (Lisp_Object); -extern void initialize_w32_display (struct terminal *); +extern void initialize_w32_display (struct terminal *, int *, int *); /* Keypad command key support. W32 doesn't have virtual keys defined for the function keys on the keypad (they are mapped to the standard @@ -739,7 +724,6 @@ struct image; struct face; XGCValues *XCreateGC (void *, Window, unsigned long, XGCValues *); -struct frame * check_x_frame (Lisp_Object); typedef DWORD (WINAPI * ClipboardSequence_Proc) (void); typedef BOOL (WINAPI * AppendMenuW_Proc) ( @@ -752,6 +736,9 @@ extern HWND w32_system_caret_hwnd; extern int w32_system_caret_height; extern int w32_system_caret_x; extern int w32_system_caret_y; +extern struct window *w32_system_caret_window; +extern int w32_system_caret_hdr_height; +extern int w32_system_caret_mode_height; #ifdef _MSC_VER #ifndef EnumSystemLocales @@ -790,6 +777,10 @@ typedef char guichar_t; #define GUI_SDATA(x) ((guichar_t*) SDATA (x)) +#if defined HAVE_DIALOGS +extern Lisp_Object w32_popup_dialog (struct frame *, Lisp_Object, Lisp_Object); +#endif + extern void syms_of_w32term (void); extern void syms_of_w32menu (void); extern void syms_of_w32fns (void);