summaryrefslogtreecommitdiff
path: root/src/frame.c
Commit message (Collapse)AuthorAgeFilesLines
* Make frames record when their selected window was the mini-windowAlan Mackenzie2021-05-311-1/+11
| | | | | | | | | | | | | | | | | | | | When a frame in this state is selected again by Fselect_frame (but not by Fselect_window), the mini-window rather than the frame's currently selected window, is chosen for selection, should there still be an active minibuffer in it. This fixes bug #48674. * src/frame.h (struct frame): Add new boolean field select_mini_window_flag. * src/frame.c (make_frame): Initialize select_mini_window_flag to false. (do_switch_frame): Set the new flag appropriately for the old frame, and process the new frame's setting of this flag, before setting it to false. * src/window.c (select_window): Set f->select_mini_window_flag to false. (Fset_frame_selected_window, Fdelete_other_windows_internal) (Fdelete_window_internal): Add comments clarifying that there is no clearing of f->select_mini_window_flag in these functions.
* Handle Bug#24526 without breaking Emacs on tiling WMs (Bug#48268)Martin Rudalics2021-05-121-0/+13
| | | | | | | | | | | | | | | | | | | | | | | Since tiling window managers may react allergically to resize requests immediately following MapNotify events on X, make sure that such requests are issued only when a new frame should not become visible and a size has been explicitly requested for it. * lisp/faces.el (x-create-frame-with-faces): Mark frame as 'was-invisible' if it should be initially invisible or iconified and has its size specified explicitly. * src/frame.c (make_frame): Initialize new frame's was_invisible flag. (Fframe__set_was_invisible): New internal function. * src/frame.h (struct frame): Specify size of new_size_p slot. New flag was_invisible. * src/w32fns.c (Fx_create_frame) * src/nsfns.m (Fx_create_frame) * src/xfns.c (Fx_create_frame): Set new frame's was_invisible flag. * src/xterm.c (handle_one_xevent): Call xg_frame_set_char_size after a PropertyNotify or MapNotify event only if F's was_invisible flag was set.
* Fix wrong handling of minibuffers when frames get iconified/made invisibleAlan Mackenzie2021-05-061-57/+5
| | | | | | | | | | | | | | | | | This should fix bug #47766. * lisp/window.el (window-deletable-p): Add a quote where it was missing from minibuffer-follows-selected-frame. * src/frame.c (check_minibuf_window): Delete the function. (delete_frame): In place of calling check_minibuf_window, call move_minibuffers_onto_frame, possibly to move minibuffers onto the new current frame. (Fmake_frame_invisible, Ficonify_frame): Remove calls to check_minibuf_window. * src/minibuf.c (Factive_minibuffer_window): Search the frames for the active minibuffer rather than just assuming minibuf_window has been correctly updated.
* Fix setting of 'width' and 'height' frame parametersMartin Rudalics2021-05-051-3/+6
| | | | | * src/frame.c (Fframe_parameters): Fix bogus setting of 'height' and 'width' parameters.
* Add two changes announced but not included in previous commitMartin Rudalics2021-05-021-18/+14
| | | | | | * src/frame.c (adjust_frame_size): Remove extra inhibit_horizontal/_vertical checks. Improve the implied resize check when INHIBIT equals 2.
* Make adjust_frame_size set up frame's new_width/_height too (Bug#17120)Martin Rudalics2021-05-021-6/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | The purpose of this change is to have implied frame size changes pick up sizes requested by previous explicit size changes not only after they have been confirmed by the WM but already when they are initially passed to adjust_frame_size (Bug#17120). * src/dispextern.h (delayed_size_change): Remove extern. * src/dispnew.c (delayed_size_change): Make static again. (do_pending_window_change): Call change_frame_size only if F's new_size_p flag is set. (change_frame_size_1): Set/reset F's new_size_p flag * src/frame.c (adjust_frame_size): Remove extra inhibit_horizontal/_vertical checks. Improve the implied resizes check with INHIBIT equals 2. Set F's new_width and new_height and reset F's new_size_p flag when we run set_window_size_hook with INHIBIT 0 or 1. * src/frame.h (struct frame): New bit slot new_size_p. * src/gtkutil.c (xg_frame_resized): Use F's new_size_p flag instead of delayed_size_change to decide whether to call change_frame_size. (xg_frame_set_char_size): Call frame_size_history_extra before waiting for the ConfigureNotify event. * src/xterm.c (handle_one_xevent): Use F's new_size_p flag instead of delayed_size_change to decide whether to call change_frame_size.
* Major rewrite of adjust_frame_sizeMartin Rudalics2021-04-271-336/+396
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Have adjust_frame_size pass native frame sizes to backends instead of text sizes. Expand frame size history management. Drop PIXELWISE argument from change_frame_size and convert native to text sizes only when calling adjust_frame_size. Use convention in arguments that -1 instead of 0 means that no size change is required. When adjusting frame sizes pick up delayed size changes (Bug#46827). * lisp/frame.el (frame-notice-user-settings, make-frame): Don't set frame size history. (frame--size-history): Rewrite doc-string. Handle new formats of `frame-size-history' entries. * src/dispextern.h (delayed_size_change): Extern it. (change_frame_size): Drop last argument from extern. * src/dispnew.c (delayed_size_change): Make it global. (handle_window_change_signal): Reformat. Drop last argument from change_frame_size call. (do_pending_window_change, init_display_interactive): Drop last argument from change_frame_size call. (change_frame_size_1): NEW_WIDTH and NEW_HEIGHT now specify native sizes. Drop last argument PIXELWISE. Queue a change when it either differs from F's current pixel sizes or F's previously queued sizes. Inject frame_size_history_extra call when queuing. Adopt convention that for queued sizes -1 means that no size change is required. Convert from native to text sizes when calling adjust_frame_size. (change_frame_size): Drop last argument PIXELWISE and drop it also in change_frame_size_1 calls. * src/frame.c (frame_size_history_add): Remove. (frame_inhibit_resize): Remove call to frame_size_history_add. (set_menu_bar_lines, set_tab_bar_lines): Simplify. Drop last argument from change_frame_size call. (frame_windows_min_size): No more static. (keep_ratio): Minor rewrite using macros. (frame_size_history_adjust, frame_size_history_plain) (frame_size_history_extra): New functions. (adjust_frame_size): Major rewrite. Adopt new convention that negative values for new sizes mean no change. Pick up delayed size changes from F's new_width and new_height slots (Bug#46827). Call set_window_size_hook with native instead of text sizes. Do not sanitize window sizes any more. Call frame_size_history_adjust instead of frame_size_history_add. Always set F's resized_p slot to true. (make_frame): Initialize new_width and new_height slots to -1. Simplify setup of initial sizes and an adjust_frame_size call. (Fframe_parameters): Drop processing F's new_pixelwise slot. (check_frame_pixels): Reorder to make declarations appear first. (Fset_frame_height, Fset_frame_width, Fset_frame_size): Pass explicit width and height values to adjust_frame_size instead of -1. (gui_set_frame_parameters): Minor rewrite making sure that explicit sizes and the corresponding parameter are passed to adjust_frame_size. Remove frame_size_history_add call. (gui_figure_window_size): Drop last two arguments. Simplify assignment of initial size. Set new_height and new_width slots to -1. Use adjust_frame_size to set sizes instead of returning them to caller. (syms_of_frame): Drop symbols used by frame size history; these are now built on-the-fly. Also drop some menu bar related symbols in favor of Qmenu_bar_lines. * src/frame.h (struct frame): Remove new_pixelwise. (SET_FRAME_COLS, SET_FRAME_LINES, SET_FRAME_WIDTH) (SET_FRAME_HEIGHT): Remove macros. (frame_size_history_add): Remove externs. (frame_windows_min_size, frame_size_history_plain) (frame_size_history_extra): Add externs. (FRAME_WINDOWS_WIDTH, FRAME_WINDOWS_HEIGHT): Rename to FRAME_INNER_WIDTH and FRAME_INNER_HEIGHT. (gui_figure_window_size): Drop last two arguments from extern. * src/gtkutil.c (xg_frame_resized): Rename arguments to WIDTH and HEIGHT. Consult delayed_size_change to handle case where WIDTH and HEIGHT do not match F's new_width and new_height values. Call change_frame_size with native sizes and without PIXELWISE argument. Instead of frame_size_history_add call frame_size_history_extra. (xg_frame_set_char_size): WIDTH and HEIGHT are native sizes now; fix adjust_frame_size call accordingly. Instead of frame_size_history_add call frame_size_history_extra. (style_changed_cb): Call xg_frame_set_char_size with native instead of text sizes. (tb_size_cb): Remove frame_size_history_add call. Call adjust_frame_size with INHIBIT 5. (free_frame_tool_bar, xg_change_toolbar_position): Remove frame_size_history_add call. (update_frame_tool_bar): Call adjust_frame_size with INHIBIT 2 and let it handle frame_inhibit_implied_resize and fullheight/-width. Remove frame_size_history_add call. * src/keyboard.c (Fsuspend_emacs): Call change_frame_size with native sizes. * src/nsfns.m (ns_set_tool_bar_lines): Call adjust_frame_size with INHIBIT 2 and let it handle frame_inhibit_implied_resize and fullheight/-width. Remove frame_size_history_add call. (Fx_create_frame): Drop two last arguments in gui_figure_window_size call. Do not SET_FRAME_WIDTH and SET_FRAME_HEIGHT, the adjust_frame_size in gui_figure_window_size did that already. * src/nsterm.m (ns_set_window_size): Drop PIXELWISE argument and its processing; WIDTH and HEIGHT represent native pixel sizes now. Call change_frame_size with native sizes. Remove call to frame_size_history_add. ([EmacsView viewDidResize:]): Call change_frame_size with native sizes. * src/term.c (Fresume_tty): Call change_frame_size with native sizes. * src/termhooks.h (*set_window_size_hook): Drop last argument PIXELWISE. * src/w32fns.c (w32_change_tab_bar_height) (w32_change_tool_bar_height): Fix handling of these in the initial phase before they have been resized at least once. (Fx_create_frame, w32_create_tip_frame): Drop two last arguments in gui_figure_window_size call. Do not SET_FRAME_WIDTH and SET_FRAME_HEIGHT (or SET_FRAME_COLS and SET_FRAME_LINES), the adjust_frame_size in gui_figure_window_size did that already. * src/w32inevt.c (resize_event, maybe_generate_resize_event): Pass native sizes to change_frame_size. * src/w32term.c (w32_read_socket): When WM_WINDOWPOSCHANGED pass native sizes to change_frame_size. (w32_new_font): Recalculate FRAME_TAB_BAR_HEIGHT. Simplify code. (w32fullscreen_hook): Call change_frame_size with native sizes. (w32_set_window_size): Drop argument PIXELWISE and its processing; WIDTH and HEIGHT are native sizes now. Remove frame_size_history_add calls. Pass native sizes to change_frame_size. * src/widget.c (set_frame_size): Set width and height of widget directly. Call frame_size_history_plain instead of frame_size_history_add. (update_from_various_frame_slots): Call frame_size_history_extra. (EmacsFrameRealize): Call frame_size_history_plain. (EmacsFrameResize): Call change_frame_size with native sizes. Call frame_size_history_extra instead of frame_size_history_add. (EmacsFrameSetCharSize): Call frame_size_history_extra. Drop PIXELWISE argument in x_set_window_size call and specify pixels. (pixel_to_text_size): Remove function. * src/xdisp.c (resize_mini_window): Replace FRAME_WINDOWS_HEIGHT with FRAME_INNER_HEIGHT. (redisplay_tab_bar): Don't set tab_bar_redisplayed when we did not redisplay it. (redisplay_tool_bar): Don't call it for external tool bar. Don't set tool_bar_redisplayed when we did not redisplay it. (redisplay_window): When the tool bar is external call update_frame_tool_bar directly. * src/xfns.c (x_set_menu_bar_lines): Call adjust_frame_size only if number of menu bar lines changed and fix 6th argument. (x_change_tab_bar_height, x_change_tool_bar_height): Fix handling of these in the initial phase before they have been resized at least once. (Fx_create_frame, x_create_tip_frame): Drop two last arguments in gui_figure_window_size call. Do not SET_FRAME_WIDTH and SET_FRAME_HEIGHT (or SET_FRAME_COLS and SET_FRAME_LINES), the adjust_frame_size in gui_figure_window_size did that already. * src/xmenu.c (update_frame_menubar): Fix 6th arg of adjust_frame_size call. (free_frame_menubar): For Motif frames fix fullscreen and `frame-inhibit-implied-resize' handling. Fix 6th arg of adjust_frame_size calls. * src/xterm.c (x_net_wm_state): Remove call to frame_size_history_add. (handle_one_xevent): For PropertyNotify and UnmapNotify events add frame_size_history_plain calls. For MapNotify and ConfigureNotify events add a frame_size_history_extra call. For ConfigureNotify events also handle delayed size changes and call change_frame_size with native sizes. (x_new_font): Recalculate FRAME_TAB_BAR_HEIGHT. Simplify code. (x_handle_net_wm_state): Remove frame_size_history_add call. (x_check_fullscreen): Remove frame_size_history_add call. Call change_frame_size with native height. (x_set_window_size_1): WIDTH and HEIGHT are now native. Remove some frame_size_history_add calls and add frame_size_history_extra calls instead. If the frame is not visible call adjust_frame_size directly instead of calling change_frame_size. (x_set_window_size): Drop PIXELWISE argument. WIDTH and HEIGHT represent native sizes now. (x_make_frame_visible, x_make_frame_invisible): Call frame_size_history_plain. * src/xterm.h (x_set_window_size): Drop last argument from extern declaration.
* Avoid selecting tooltip windows and frames (Bug#47207)Martin Rudalics2021-04-181-2/+13
| | | | | | | | | | | | | * src/frame.c (do_switch_frame): Don't switch to a tooltip frame. (Fselect_frame): Do not select a tooltip frame. * src/w32fns.c (Fx_show_tip): * src/xfns.c (Fx_show_tip): Set the tooltip window's `no-other-window' parameter so `other-window' will skip it. * src/window.c (select_window): Do not select a tooltip window. (candidate_window_p): Make sure MINIBUF is live. (decode_next_window_args): Make sure that W's frame's minibuffer window is live before including it. (Qno_other_window): New symbol.
* Improve docstring of 'frame-scale-factor'Robert Pluim2021-04-161-0/+1
| | | | | * src/frame.c (Fframe_scale_factor): Explain what happens when the FRAME argument is nil.
* Fix recent changes regarding frame-scale-factorEli Zaretskii2021-04-041-3/+3
| | | | | * src/frame.c (Fframe_scale_factor): Make more robust and avoid compiler warning while at that. Doc fix.
* Implement frame-scale-factorAlan Third2021-04-031-0/+12
| | | | | | | * src/frame.c (Fframe_scale_factor): New function. (syms_of_frame): Add frame-scale-factor. * src/frame.h: Add FRAME_SCALE_FACTOR. * src/image.c: Move FRAME_SCALE_FACTOR to frame.h.
* Prevent open minibuffers getting lost when their frame gets deletedAlan Mackenzie2021-03-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This happened with minibuffer-follows-selected-frame set to t. * doc/emacs/mini.texi (Basic Minibuffer): State where a command's action takes place when a minibuffer's frame has been deleted. * lisp/window.el (window--before-delete-windows, record-window-buffer): Take into account that minibuffers are now recorded on w->prev_buffers field. * src/fns.c (merge_c): New version of `merge' taking a C function, rather than a Lisp function as the comparison function. * src/frame.c (do_switch_frame): Pass arguments sf and for_deletion to move_minibuffers_onnto_frame. * src/lisp.h (top level): Declare merge_c and move_minibuffers_onto_selected_frame. * src/minibuf.c (MB_frame): New Lisp_Object recording the minibuffer's frame. (choose_minibuf_frame): Remove all code except that which sets minibuf_window to the current frame's minibuffer. (minibuffer_ent_greater): New comparison function, passed to merge_c. (zip_minibuffer_stacks): New function. (move_minibuffers_onto_frame): Renamed from `move_minibuffer_onto_frame' given two arguments, the old frame and for_deletion, and simplified. Minibuffers are now stacked in the mini-window's ->prev_buffers field. (read_minibuf): Several detailed amendments. (exp_MB_frame): New Lisp_Object, the expired minibuffer's frame. (read_minibuf_unwind): Search for the expired minibuffer's frame, rather than taking it from (unreliable) variables. Switch temporarily to this frame for tidying up operations. (minibuffer_unwind): New function which pops a stacked minibuffer. (syms_of_minibuf): Call staticpro for the two new Lisp variables. * src/window.c (Fset_window_configuration): Don't record minibuffers with record-window-buffer. * src/xdisp.c (gui_consider_frame_title): Remove redundant Fselect_window, which caused an unwanted frame switch. Amend the arguments to format_mode_line_unwind_data to match.
* Add minibuffer input support to commands that set the frame sizeDaniel Martín2021-03-161-2/+2
| | | | | | | | | | | * lisp/frame.el (set-frame-property--interactive): Internal function to produce the interactive form of `set-frame-width' and `set-frame-height'. Offer the current size as default. (Bug#9970) * src/frame.c (Fset_frame_height): Modify to call `set-frame-property--interactive'. (Fset_frame_width): Modify to call `set-frame-property--interactive'. * doc/lispref/frames.texi (Frame Size): Update the manuals. * etc/NEWS: Advertise the change (bug#9970).
* Use frame monitor in frame_floatAndrii Kolomoiets2021-02-111-2/+2
| | | | | * src/frame.c (frame_float): Use frame monitor attributes instead of attributes of the main monitor (bug#46406).
* Permit zero value for 'child-frame-border-width' parameter (Bug#46184)Martin Rudalics2021-02-061-3/+13
| | | | | | | | | | | | | | | | | | | | | | | * doc/lispref/frames.texi (Layout Parameters): Update entry on 'child-frame-border-width' parameter. * src/frame.c (make_frame): Init child_frame_border_width to -1. (Fframe_child_frame_border_width): Return internal border width if child frame border width parameter is nil. (gui_report_frame_params): Report nil as child frame border width parameter if the frame value is negative. * src/frame.h (FRAME_INTERNAL_BORDER_WIDTH): Return value of child frame border width only if it is not negative. * src/xfns.c (Fx_create_frame): Default child frame border to -1 when recording it in its frame slot via gui_default_parameter. * src/nsfns.m (ns_set_child_frame_border_width): Handle nil ARG. (Fx_create_frame): Default child frame border width parameter to nil. * src/w32fns.c (w32_set_child_frame_border_width): Handle nil ARG. (Fx_create_frame): Default child frame border width parameter to nil. * src/xfns.c (x_set_child_frame_border_width): Handle nil ARG. (Fx_create_frame): Default child frame border width parameter to nil.
* Add distinct controls for child frames' borders (Bug#45620)Alexander Miller2021-01-261-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The background of the 'child-frame-border' face instead of the 'internal-border' face now controls the color of child frames' borders. The 'child-frame-border-width' frame parameter is now used for the width of child frames' borders instead of internal-border-width', though we still fall back on using the latter if the former is not set. * doc/lispref/frames.texi (Frame Layout): Mention 'child-frame-border' and 'child-frame-border-width'. (Layout Parameters): Mention 'child-frame-border-width'. * etc/NEWS: Mention new face 'child-frame-border' and frame parameter 'child-frame-border-width'. * lisp/faces.el (child-frame-border): New face. * src/dispextern.h (enum face_id): Add CHILD_FRAME_BORDER_FACE_ID. * src/frame.c (Fframe_child_frame_border_width): New function. (gui_report_frame_params): Add entry for Qchild_frame_border_width. * src/frame.h (struct frame): New slot child_frame_border_width. (FRAME_CHILD_FRAME_BORDER_WIDTH): New inlined function. * src/nsfns.m (ns_set_child_frame_border_width): New function. (Fx_create_frame): Handle Qchild_frame_border_width parameter. (ns_frame_parm_handlers): Add ns_set_child_frame_border_width. * src/nsterm.m (ns_clear_under_internal_border): Handle CHILD_FRAME_BORDER_FACE_ID. * src/w32fns.c (w32_clear_under_internal_border): Handle CHILD_FRAME_BORDER_FACE_ID. (w32_set_internal_border_width): New function. (Fx_create_frame): Handle Qchild_frame_border_width parameter. (w32_frame_parm_handlers): Add w32_set_child_frame_border_width. * src/xfaces.c (lookup_basic_face, realize_basic_faces): Handle CHILD_FRAME_BORDER_FACE_ID. * src/xfns.c (x_set_child_frame_border_width): New function. (Fx_create_frame): Handle Qchild_frame_border_width parameter. (x_frame_parm_handlers): Add x_set_child_frame_border_width. * src/xterm.c (x_clear_under_internal_border) (x_after_update_window_line): Handle CHILD_FRAME_BORDER_FACE_ID.
* Fix last changeEli Zaretskii2021-01-161-4/+4
| | | | | | * src/frame.c (Fset_mouse_position, Fset_mouse_pixel_position): Don't compile the FRAME_MSDOS_P case on platforms other than MSDOS, as that will never happen there.
* Make mouse-related calls be more consistent on all frame typesJared Finder2021-01-161-22/+37
| | | | | | | | | | | | * src/frame.c (Fset_mouse_position, Fset_mouse_pixel_position): Call Fselect_frame and appropriate mouse_moveto function on all non-GUI frame types, independent of #ifdef's. * src/term.c (init_tty): Initialize mouse_face_window for all non-GUI frame types. (term_mouse_moveto) [HAVE_GPM]: Make available even if HAVE_WINDOW_SYSTEM is defined. * src/xdisp.c (try_window_id): Call gui_clear_window_mouse_face in all cases.
* Update copyright year to 2021Paul Eggert2021-01-011-1/+1
| | | | Run "TZ=UTC0 admin/update-copyright".
* docstring: If FRAME is nil, it defaults to selected frame.Pankaj Jangid2020-12-111-3/+9
| | | | | * src/frame.c (Fset_frame_size): Clarify what a nil FRAME parameter means (bug#45170).
* frame-position doc string clarificatonLars Ingebrigtsen2020-11-291-1/+5
| | | | | * src/frame.c (Fframe_position): Mention that the values are system-dependent (bug#32977).
* Merge from origin/emacs-27Michael Albinus2020-11-251-3/+7
|\ | | | | | | | | | | 6442cdc0e4 Revert extra focus redirection in do_switch_frame (Bug#24803) fc4379f1ae Minor cleanup of tramp-tests.el on MS Windows dea3d6aa18 Fix handling of defcustom :local tag
| * Revert extra focus redirection in do_switch_frame (Bug#24803)Martin Rudalics2020-11-251-3/+7
| | | | | | | | | | | | | | | | | | * src/frame.c (do_switch_frame): Do not also redirect frame focus when FRAME has its minibuffer window on the selected frame which was intended to fix Bug#24500. It may cause Bug#24803 and lead to a nasty state where no active cursor is shown on any frame, see https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg01137.html.
* | Allow minibuffer to stay in its original frame. Tidy up this area.Alan Mackenzie2020-11-051-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * doc/emacs/mini.texi (Basic Minibuffer): Add an entry for minibuffer-follows-selected-frame. * doc/lispref/minibuf.texi (Minibuffer Misc): Describe the new parameter to minibufferp, LIVE. * etc/NEWS: Add an entry describing the new minibuffer strategy. * lisp/cus-start.el (minibuffer-prompt-properties--setter): Add an entry for minibuffer-follows-selected-frame. * lisp/minibuffer.el (minibuffer-message): Check for the current buffer being an _active_ minibuffer rather than merely a minibuffer. * src/frame.c (do_switch_frame): Call move_minibuffer_onto_frame. * src/lisp.h (Top level): Add prototypes for move_minibuffer_onto_frame and is_minibuffer. * src/minibuf.c (minibuf_follows_frame): New function which ignores local and let-bound values of minibuffer-follows-selected-frame. (choose_minibuf_frame): Reformulate this function to reuse a minibuffer window where possible, and to ensure no other frame has its minibuffer current, but only when `minibuffer-follows-selected-frame'. (move_minibuffer_onto_frame): New function. (live_minibuffer_p): New function. (Fminibufferp): Add a new &optional parameter LIVE. Reformulate, possibly calling live_minibuffer_p. (read_minibuf): move the incrementation of minibuf_level to before the call of choose_minibuf_frame. Empty the miniwindows of frames without an active minibuffer, rather than of all but the current frame. (is_minibuffer): New function. (read_minibuf_unwind): Note the miniwindow being restored and resize all other miniwindows to zero size. (minibuffer-follows-selected-frame): New configuration variable. * src/window.c (candidate_window_p): In some scenarios, check the miniwindow holds an active minibuffer. * src/xdisp.c (get_window_cursor_type): Suppress the cursor for non-active miniwindows, regardless of minibuf_level.
* | Merge from origin/emacs-27Glenn Morris2020-10-271-1/+1
|\| | | | | | | | | | | | | | | | | | | | | e0de9f3295 (origin/emacs-27) Don't skip empty lines when fitting mini... a4ec03fa9b ; * etc/tutorials/TUTORIAL.de: Fix grammar (Bug#44246) 20c02e628c Improve documentation of display-fill-column-indicator e2005f1f2a * INSTALL: Mention efaq.texi for installation of intlfonts. 71661b2872 Use WebKit sandboxing # Conflicts: # etc/NEWS
| * Don't skip empty lines when fitting mini frame to buffer (Bug#44080)Clemens Radermacher2020-10-271-1/+1
| | | | | | | | | | | | | | | | | | | | * lisp/window.el (fit-mini-frame-to-buffer, window--resize-mini-frame, fit-frame-to-buffer, fit-frame-to-buffer-1): By default, fit a mini frame without skipping its buffer's leading or trailing empty lines. * src/frame.c (resize-mini-frames): Update doc-string. * lisp/cus-start.el (resize-mini-frames): Update for customize. * doc/lispref/minibuf.texi (resize-mini-frames): Update description.
* | Make TTY menus work with xterm-mouse-modeJared Finder2020-10-241-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/term.c (mouse_get_xy): Call 'mouse_position' passing it the value of 'tty-menu-calls-mouse-position-function' as the argument. (syms_of_term) <tty-menu-calls-mouse-position-function>: New DEFVAR_BOOL. * src/frame.c (mouse_position): New function, with most of the code from Fmouse_position, but call 'mouse-position-function' only if called with non-zero argument. (Fmouse_position): Call 'mouse_position' to do the job. * lisp/xt-mouse.el (xterm-mouse-translate-1): Respect 'track-mouse'. (xterm-mouse-mode): Set 'tty-menu-calls-mouse-position-function' when setting 'mouse-position-function'. (xterm-mouse-tracking-enable-sequence): Use SET_ANY_EVENT_MOUSE (0x1003) so that mouse movement can be reported even if no buttons are pressed. Doc fix. * lisp/menu-bar.el (menu-bar-define-mouse-key): New function. (tty-menu-navigation-map): Call it. * doc/lispref/frames.texi (Mouse Position): Document 'tty-menu-calls-mouse-position-function'. * etc/NEWS: Announce 'tty-menu-calls-mouse-position-function'.
* | * src/xdisp.c (syms_of_xdisp): New var `redisplay_skip_initial_frame`.Stefan Monnier2020-10-041-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes it possible to run most of the redisplay code (tho not the actual drawing since there's nowhere to draw) even when there's no real frame at hand, as is the case in batch mode. This makes `xdisp-tests--minibuffer-resizing` work even in batch. (redisplay_internal): Obey it. (init_xdisp): Set `echo_area_window` even in noninteractive mode. * src/dispnew.c (update_frame): Skip the initial frame. * src/frame.c (make_frame): Use 80x25 as the default initial size. * test/src/xdisp-tests.el (xdisp-tests--minibuffer-resizing): Use the new var and fix use of `executing-kbd-macro`.
* | Merge from origin/emacs-27Glenn Morris2020-09-201-1/+1
|\| | | | | | | | | | | | | 02a31c9632 (origin/emacs-27) Minor improvement in the ELisp manual's ... f750def778 Mention in PROBLEMS the problems with fonts and Uniscribe 082d8a21b1 Minor copyedits in 'line-height' documentation 5b23393bcc ; * src/frame.c (syms_of_frame) <make-pointer-invisible>: ...
| * ; * src/frame.c (syms_of_frame) <make-pointer-invisible>: Doc fix.Eli Zaretskii2020-09-191-1/+1
| |
* | Pacify gcc -Wunused-variablePaul Eggert2020-08-061-18/+15
| | | | | | | | | | * src/frame.c (Fset_mouse_position, Fset_mouse_pixel_position) (Fset_frame_position): Always use xval, yval. Simplify #if nesting.
* | Drop support for -fcheck-pointer-boundsPaul Eggert2020-08-041-6/+0
| | | | | | | | | | | | | | | | | | | | | | GCC has removed the -fcheck-pointer bounds option, and the Linux kernel has also removed support for Intel MPX, so there’s no point to keeping this debugging option within Emacs. * src/bytecode.c (BYTE_CODE_THREADED): * src/lisp.h (DEFINE_LISP_SYMBOL, XSYMBOL, make_lisp_symbol): Assume __CHKP__ is not defined. * src/ptr-bounds.h: Remove. All uses of ptr_bounds_clip, ptr_bounds_copy, ptr_bounds_init, ptr_bounds_set removed.
* | Merge from origin/emacs-27Glenn Morris2020-04-111-0/+1
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fd27685c1e (origin/emacs-27) ; * doc/lispref/keymaps.texi (Extended M... 6057d79a4e * doc/lispref/keymaps.texi (Extended Menu Items): Tweak :k... 17a1bb5a03 Fix redisplay when scrolling under redisplay-dont-pause 90321f595c Fix face extension in pulse.el 36c42d2a30 * doc/misc/tramp.texi (Bug Reports): Avoid line breaks in ... d5750af151 Avoid assertion violation in intervals.c 18d1bc0a09 Improve documentation of 'jit-lock-contextually' 08486f4cae Speed up 'resize-mode' child frames a little f451ef9308 ; * etc/NEWS: Mention 'executing-macro' in removed vars. c49d379f17 Fix some problems with moving and resizing child frames # Conflicts: # etc/NEWS
| * Fix some problems with moving and resizing child framesMartin Rudalics2020-04-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (1) Provide new option 'x-gtk-resize-child-frames' which allows to either hide a child frame during resizing or asks GTK to resize it "immediately". This is needed because desktops like GNOME shell otherwise won't allow resizing child frames at all. (2) Do not try to synchronize the position of a child frame after moving it. Needed because the present implementation introduces a 0.5 secs delay which makes dragging child frames virtually impossible with Lucid and Motif toolkits on desktops like GNOME shell that use invisible outer frame borders. For further information see the thread starting with https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00343.html * src/frame.c (syms_of_frame): New symbol Qxg_frame_set_char_size_4. * src/gtkutil.c (xg_frame_set_char_size): Hide child frame during resizing when 'x-gtk-resize-child-frames' equals 'hide'. * src/xfns.c (x_set_parent_frame, Fx_create_frame): Set gtk_container_resize_mode to GTK_RESIZE_IMMEDIATE for child frames when'x-gtk-resize-child-frames' equals 'resize-mode'. (Fx_gtk_debug): New function to toggle interactive GTK debugging from within Emacs. (syms_of_xfns): New symbols Qhide and Qresize_mode. (x-gtk-resize-child-frames): New option that allows to resize child frames on desktops like GNOME shell (with the mutter WM) that otherwise refuse to resize them. * src/xterm.c (x_set_offset): Don't x_sync_with_move for child frames, it makes moving child frames virtually impossible with the Lucid and Motif toolkits.
* | Improve integer range checkingPaul Eggert2020-04-051-56/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/bignum.c (check_integer_range, check_uinteger_max) (check_int_nonnegative): New functions. * src/frame.c (check_frame_pixels): New function. (Fset_frame_height, Fset_frame_width, Fset_frame_size): Use it. * src/lisp.h (CHECK_RANGED_INTEGER, CHECK_TYPE_RANGED_INTEGER): Remove these macros. Unless otherwise specified, all callers replaced by calls to check_integer_range, check_uinteger_range, check_int_nonnegative. * src/frame.c (gui_set_right_divider_width) (gui_set_bottom_divider_width): * src/nsfns.m (ns_set_internal_border_width): * src/xfns.c (x_set_internal_border_width): Using check_int_nonnegative means these functions no longer incorrectly reject negative bignums; they treat them as 0, just like negative fixnums.
* | Merge from origin/emacs-27Glenn Morris2020-03-181-5/+7
|\| | | | | | | | | | | | | | | | | | | | | | | | | e92b8e535a (origin/emacs-27) Remove raw carriage return characters fr... 5747a59a88 Recalculate default font when switching font backend a2dd8c4234 * lisp/tab-line.el: Fix tab-line-format and tab-line-forma... a7b8291b6c * etc/NEWS: Make the `--eval` example slightly more precise f8254aad14 * lisp/image/image-converter.el: Support more ImageMagick ... 5beb269505 Support Unicode 13.0 3a671ad7ed Fix regression in wisent-total-conflicts # Conflicts: # etc/NEWS
| * Recalculate default font when switching font backendRobert Pluim2020-03-171-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is an updated version of the patch by Dmitry Antipov <dmantipov@yandex.ru> in <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=23386#43>. Fixes Bug#23386 * src/dispextern.h (struct redisplay_interface): New member default_font_parameter. * src/xterm.h: Add prototype for x_default_font_parameter. * src/xterm.c (x_redisplay_interface): Initialize default_font_parameter member. * src/xfns.c (x_default_font_parameter): Make non-static. * src/w32term.h: Add prototype for w32_default_font_parameter * src/w32fns.c (w32_default_font_parameter): Make non-static. * src/w32term.c (w32_redisplay_interface): Initialize default_font_parameter member. * src/nsterm.m (ns_redisplay_interface): Add dummy ns_default_font_parameter (there is currently only one possible font backend on macOS). Initialize default_font_parameter member. * src/frame.c (gui_set_font_backend): Recalculate default font using RIF default_font_parameter to avoid crash when changing font backend.
* | Fix NS frame parameters (bug#39000)Alan Third2020-01-071-1/+1
|/ | | | | | | | | | | | | | | * src/frame.c (make_frame): Use new system default setting. * src/frame.h (enum ns_appearance_type): Add new system default setting. * src/nsfns.m (Fx_create_frame): Correctly handle Qunbound and support system default appearance. (syms_of_nsfns): Add Qlight. * src/nsterm.h: New method definition. * src/nsterm.m (ns_set_appearance): Correctly handle Qlight and use new setAppearance method. ([EmacsView initFrameFromEmacs:]): Use new setAppearance method. ([EmacsWindow setAppearance]): New method. * doc/lispref/frames.texi (Management Parameters): Document 'light'.
* Update copyright year to 2020Paul Eggert2020-01-011-1/+1
| | | | Run "TZ=UTC0 admin/update-copyright $(git ls-files)".
* Fix documentation of implied frame resizing (Bug#38684)Martin Rudalics2019-12-231-5/+5
| | | | | | * src/frame.c (frame_inhibit_implied_resize): Fix doc-string. * doc/lispref/frames.texi (Implied Frame Resizing): Update and rewrite section.
* Remove nothing from union output_dataPaul Eggert2019-12-141-2/+0
| | | | | | * src/frame.h (union output_data): Remove ‘nothing’ member. It has had no effect for quite some time. All uses removed.
* Spelling fixesPaul Eggert2019-12-091-2/+2
|
* Fix English grammar in some doc strings and commentsStephen Gildea2019-11-031-1/+1
| | | | | | (files.el subr.el): Fix some grammar errors in doc strings and comments. (frame.c fringe.c image.c xfns.c xterm.c): Fix some English grammar errors in doc strings.
* Handle top margin change in adjust_frame_sizeMartin Rudalics2019-10-161-6/+5
| | | | | | | | * src/frame.c (adjust_frame_size): Handle case where only pseudo windows changed height so the top margin has to be adjusted. * src/window.c (Fset_window_configuration): Call adjust_frame_size with inhibit 4.
* Fix initial value of frame-inhibit-implied-resizeJuri Linkov2019-10-141-13/+8
| | | | | * src/frame.c (syms_of_frame): Update doc string and default value of frame-inhibit-implied-resize in NS to include 'tab-bar-lines.
* Fix initial value of frame-inhibit-implied-resizeJuri Linkov2019-10-131-15/+17
| | | | | | * src/frame.c (syms_of_frame): Update doc string and default value of frame-inhibit-implied-resize in NS to not include 'tab-bar-lines, and non-toolkit X builds to include 'tab-bar-lines.
* Fix initial value of frame-inhibit-implied-resizeEli Zaretskii2019-10-101-7/+11
| | | | | | * src/frame.c (syms_of_frame): Update doc string and default value of frame-inhibit-implied-resize in GTK builds to include 'tab-bar-lines.
* Remove unused code and reformat to 70 columns.Juri Linkov2019-10-011-23/+8
|
* Take into account FRAME_TAB_BAR height in more places.Juri Linkov2019-09-221-3/+5
| | | | | | | | | | | | | * src/dispnew.c (handle_window_change_signal, init_display_interactive): * src/frame.c (make_terminal_frame, Fmake_terminal_frame): * src/keyboard.c (Fsuspend_emacs): * src/term.c (Fresume_tty): * src/xterm.c (x_check_fullscreen): Subtract FRAME_TAB_BAR_LINES. * src/xterm.c (x_new_font): Set FRAME_TAB_BAR_HEIGHT. (x_new_font, x_check_fullscreen, x_set_window_size_1) (x_set_window_size, x_wm_set_size_hint): Add FRAME_TABBAR_HEIGHT.
* Text-mode display of the tab-bar and emulation of clicking on a tty.Juri Linkov2019-09-031-0/+37
| | | | | | | | | | | | | | | | | * lisp/tab-bar.el (tab-bar-mouse): New command bound to mouse-1 on [tab-bar]. * lisp/xt-mouse.el (xterm-mouse-event): Use `tab-bar' when clicking on the tab-bar that is on the second row below menu-bar. * src/frame.c (set_tab_bar_lines): New function. (frame_windows_min_size): Add FRAME_TAB_BAR_LINES. (make_initial_frame): Call set_tab_bar_lines. (store_frame_param): Call set_tab_bar_lines for Qtab_bar_lines prop. (Fframe_parameters): Call store_in_alist for Qtab_bar_lines. * src/xdisp.c (display_tab_bar): New function. (redisplay_window): Call display_tab_bar when `FRAME_WINDOW_P (f)' is NULL on a tty.