diff options
| author | Martin Rudalics | 2015-10-13 12:11:43 +0200 |
|---|---|---|
| committer | Martin Rudalics | 2015-10-13 12:11:43 +0200 |
| commit | d4fe840df0b5fdb3aed538fae2ced143a471f60a (patch) | |
| tree | 13ff9d7115616a99af7e0257277a1ca6edf31f72 /src/nsterm.m | |
| parent | e53e1a0426539aa3f2902632fdd8025da8f710f2 (diff) | |
| download | emacs-d4fe840df0b5fdb3aed538fae2ced143a471f60a.tar.gz emacs-d4fe840df0b5fdb3aed538fae2ced143a471f60a.zip | |
Allow setting frame pixel sizes from frame parameters (Bug#21415)
Also fix some misfeatures in frame (re-)sizing code, add more
debugging information and remove some dead code.
* lisp/frame.el (frame-notice-user-settings, make-frame): Change
parameter names when setting `frame-size-history'.
(frame--size-history): New function.
* src/frame.c (frame_inhibit_resize): If frame has not been made
yet, return t if inhibit_horizontal_resize or
inhibit_vertical_resize bit have been set.
(adjust_frame_size): Simplify.
(make_frame): Initialize inhibit_horizontal_resize,
inhibit_vertical_resize, tool_bar_redisplayed, tool_bar_resized.
(Fframe_after_make_frame): Reset inhibit_horizontal_resize and
inhibit_vertical_resize slots.
(x_set_frame_parameters): Handle `text-pixels' specification for
width and height parameters. Don't consider new_height or
new_width changes. Call adjust_frame_size instead of
Fset_frame_size.
(x_figure_window_size): Two new arguments x_width and y_width
returning frame's figures width and height. Calculate tool bar
height before frame sizes so SET_FRAME_HEIGHT can pick it up.
Handle `text-pixels' specification for width and height
parameters.
(Qtext_pixels, Qx_set_frame_parameters, Qset_frame_size)
(Qx_set_window_size_1, Qx_set_window_size_2)
(Qx_set_window_size_3, Qx_set_menu_bar_lines)
(Qupdate_frame_menubar, Qfree_frame_menubar_1)
(Qfree_frame_menubar_2): New symbols.
* src/frame.h (structure frame): New booleans
tool_bar_redisplayed, tool_bar_resized,
inhibit_horizontal_resize, inhibit_vertical_resize.
(x_figure_window_size): Update external declaration.
* src/gtkutil.c (xg_frame_set_char_size): Set size hints before
calling gtk_window_resize.
(update_frame_tool_bar): Make inhibiting of frame resizing more
discriminative. Set tool_bar_resized bit.
* src/nsfns.m (x_set_tool_bar_lines): Make inhibiting of frame
resizing more discriminative. Call adjust_frame_size instead of
x_set_window_size.
(Fx_create_frame): Handle x_width and x_height if
set by x_figure_window_size.
* src/nsterm.m (x_set_window_size): For GNUSTEP build don't
subtract 3 from tool bar height.
(x_set_window_size): Add frame_size_history_add call.
(x_new_font): Call adjust_frame_size instead of
x_set_window_size.
* src/w32fns.c (x_change_tool_bar_height): Reset
tool_bar_redisplayed and tool_bar_resized bits when adding tool
bar. Make inhibiting of frame resizing more discriminative.
(w32_wnd_proc): Remove dead code in WM_WINDOWPOSCHANGING case.
(Fx_create_frame): Handle x_width and x_height if set by
x_figure_window_size. Set size hints before adjusting frame size.
(x_create_tip_frame): Adjust x_figure_window_size call.
* src/w32term.c (x_set_window_size): Add frame_size_history_add
call.
* src/widget.c (set_frame_size): Remove dead code. Add
frame_size_history_add call. When frame_resize_pixelwise is t
use FRAME_PIXEL_WIDTH and FRAME_PIXEL_HEIGHT instead of
pixel_width and pixel_height.
(update_various_frame_slots): Remove dead code.
(EmacsFrameResize): Add more information in
frame_size_history_add call.
(EmacsFrameQueryGeometry): Round only when frame_resize_pixelwise
is not set.
* src/xdisp.c (redisplay_tool_bar): Set tool_bar_redisplayed bits.
* src/xfns.c (x_set_menu_bar_lines): Change argument name.
(x_change_tool_bar_height): Reset tool_bar_redisplayed and
tool_bar_resized bits when adding tool bar. Make inhibiting of
frame resizing more discriminative.
(Fx_create_frame): Handle x_width and x_height if set by
x_figure_window_size. Set size hints before adjusting frame size.
(x_create_tip_frame): Adjust x_figure_window_size call.
* src/xmenu.c (update_frame_menubar): Don't handle Lucid specially.
(set_frame_menubar): On Lucid never add core-border-width to
avoid that adding XtNinternalBorderWidth adds it again.
(free_frame_menubar): Handle frame_inhibit_resize true for Motif.
* src/xterm.c (x_new_font): In non-toolkit case handle size
change of menu bar.
(x_set_window_size_1): Fix calls to frame_size_history_add.
(x_wm_set_size_hint): Remove dead code. Set
size_hints.min_width and size_hints.min_height to base_width and
base_height.
Diffstat (limited to 'src/nsterm.m')
| -rw-r--r-- | src/nsterm.m | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/nsterm.m b/src/nsterm.m index 65d07b2f1e4..c4bfd7c9914 100644 --- a/src/nsterm.m +++ b/src/nsterm.m | |||
| @@ -1365,9 +1365,12 @@ x_set_window_size (struct frame *f, | |||
| 1365 | FRAME_TOOLBAR_HEIGHT (f) = | 1365 | FRAME_TOOLBAR_HEIGHT (f) = |
| 1366 | NSHeight ([window frameRectForContentRect: NSMakeRect (0, 0, 0, 0)]) | 1366 | NSHeight ([window frameRectForContentRect: NSMakeRect (0, 0, 0, 0)]) |
| 1367 | - FRAME_NS_TITLEBAR_HEIGHT (f); | 1367 | - FRAME_NS_TITLEBAR_HEIGHT (f); |
| 1368 | #if 0 | ||
| 1369 | /* Only breaks things here, removed by martin 2015-09-30. */ | ||
| 1368 | #ifdef NS_IMPL_GNUSTEP | 1370 | #ifdef NS_IMPL_GNUSTEP |
| 1369 | FRAME_TOOLBAR_HEIGHT (f) -= 3; | 1371 | FRAME_TOOLBAR_HEIGHT (f) -= 3; |
| 1370 | #endif | 1372 | #endif |
| 1373 | #endif | ||
| 1371 | } | 1374 | } |
| 1372 | else | 1375 | else |
| 1373 | FRAME_TOOLBAR_HEIGHT (f) = 0; | 1376 | FRAME_TOOLBAR_HEIGHT (f) = 0; |
| @@ -1386,6 +1389,14 @@ x_set_window_size (struct frame *f, | |||
| 1386 | else | 1389 | else |
| 1387 | wr.origin.y += orig_height - wr.size.height; | 1390 | wr.origin.y += orig_height - wr.size.height; |
| 1388 | 1391 | ||
| 1392 | frame_size_history_add | ||
| 1393 | (f, Qx_set_window_size_1, width, height, | ||
| 1394 | list5 (Fcons (make_number (pixelwidth), make_number (pixelheight)), | ||
| 1395 | Fcons (make_number (wr.size.width), make_number (wr.size.height)), | ||
| 1396 | make_number (f->border_width), | ||
| 1397 | make_number (FRAME_NS_TITLEBAR_HEIGHT (f)), | ||
| 1398 | make_number (FRAME_TOOLBAR_HEIGHT (f)))); | ||
| 1399 | |||
| 1389 | [view setRows: rows andColumns: cols]; | 1400 | [view setRows: rows andColumns: cols]; |
| 1390 | [window setFrame: wr display: YES]; | 1401 | [window setFrame: wr display: YES]; |
| 1391 | 1402 | ||
| @@ -7741,8 +7752,9 @@ x_new_font (struct frame *f, Lisp_Object font_object, int fontset) | |||
| 7741 | 7752 | ||
| 7742 | /* Now make the frame display the given font. */ | 7753 | /* Now make the frame display the given font. */ |
| 7743 | if (FRAME_NS_WINDOW (f) != 0 && ! [view isFullscreen]) | 7754 | if (FRAME_NS_WINDOW (f) != 0 && ! [view isFullscreen]) |
| 7744 | x_set_window_size (f, false, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f), | 7755 | adjust_frame_size (f, FRAME_COLS (f) * FRAME_COLUMN_WIDTH (f), |
| 7745 | FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), true); | 7756 | FRAME_LINES (f) * FRAME_LINE_HEIGHT (f), 3, |
| 7757 | false, Qfont); | ||
| 7746 | 7758 | ||
| 7747 | return font_object; | 7759 | return font_object; |
| 7748 | } | 7760 | } |