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/xmenu.c | |
| 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/xmenu.c')
| -rw-r--r-- | src/xmenu.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/xmenu.c b/src/xmenu.c index 192ed89e2c6..4379cddaf2e 100644 --- a/src/xmenu.c +++ b/src/xmenu.c | |||
| @@ -636,13 +636,7 @@ update_frame_menubar (struct frame *f) | |||
| 636 | lw_refigure_widget (x->column_widget, True); | 636 | lw_refigure_widget (x->column_widget, True); |
| 637 | 637 | ||
| 638 | /* Force the pane widget to resize itself. */ | 638 | /* Force the pane widget to resize itself. */ |
| 639 | int new_height = -1; | 639 | adjust_frame_size (f, -1, -1, 2, false, Qupdate_frame_menubar); |
| 640 | #ifdef USE_LUCID | ||
| 641 | /* For reasons I don't know Lucid wants to add one pixel to the frame | ||
| 642 | height when adding the menu bar. Compensate that here. */ | ||
| 643 | new_height = FRAME_TEXT_HEIGHT (f) - 1; | ||
| 644 | #endif /* USE_LUCID */ | ||
| 645 | adjust_frame_size (f, -1, new_height, 2, false, Qmenu_bar_lines); | ||
| 646 | unblock_input (); | 640 | unblock_input (); |
| 647 | #endif /* USE_GTK */ | 641 | #endif /* USE_GTK */ |
| 648 | } | 642 | } |
| @@ -979,7 +973,15 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) | |||
| 979 | menubar_size | 973 | menubar_size |
| 980 | = (f->output_data.x->menubar_widget | 974 | = (f->output_data.x->menubar_widget |
| 981 | ? (f->output_data.x->menubar_widget->core.height | 975 | ? (f->output_data.x->menubar_widget->core.height |
| 982 | + f->output_data.x->menubar_widget->core.border_width) | 976 | #ifndef USE_LUCID |
| 977 | /* Damn me... With Lucid I get a core.border_width of 1 | ||
| 978 | only the first time this is called and an ibw of 1 every | ||
| 979 | time this is called. So the first time this is called I | ||
| 980 | was off by one. Fix that here by never adding | ||
| 981 | core.border_width for Lucid. */ | ||
| 982 | + f->output_data.x->menubar_widget->core.border_width | ||
| 983 | #endif /* USE_LUCID */ | ||
| 984 | ) | ||
| 983 | : 0); | 985 | : 0); |
| 984 | 986 | ||
| 985 | #ifdef USE_LUCID | 987 | #ifdef USE_LUCID |
| @@ -990,9 +992,10 @@ set_frame_menubar (struct frame *f, bool first_time, bool deep_p) | |||
| 990 | if (FRAME_EXTERNAL_MENU_BAR (f)) | 992 | if (FRAME_EXTERNAL_MENU_BAR (f)) |
| 991 | { | 993 | { |
| 992 | Dimension ibw = 0; | 994 | Dimension ibw = 0; |
| 995 | |||
| 993 | XtVaGetValues (f->output_data.x->column_widget, | 996 | XtVaGetValues (f->output_data.x->column_widget, |
| 994 | XtNinternalBorderWidth, &ibw, NULL); | 997 | XtNinternalBorderWidth, &ibw, NULL); |
| 995 | menubar_size += ibw; | 998 | menubar_size += ibw; |
| 996 | } | 999 | } |
| 997 | #endif /* USE_LUCID */ | 1000 | #endif /* USE_LUCID */ |
| 998 | 1001 | ||
| @@ -1073,21 +1076,24 @@ free_frame_menubar (struct frame *f) | |||
| 1073 | 1076 | ||
| 1074 | if (f->output_data.x->widget) | 1077 | if (f->output_data.x->widget) |
| 1075 | { | 1078 | { |
| 1076 | int new_height = -1; | ||
| 1077 | #ifdef USE_MOTIF | 1079 | #ifdef USE_MOTIF |
| 1078 | XtVaGetValues (f->output_data.x->widget, XtNx, &x1, XtNy, &y1, NULL); | 1080 | XtVaGetValues (f->output_data.x->widget, XtNx, &x1, XtNy, &y1, NULL); |
| 1079 | if (x1 == 0 && y1 == 0) | 1081 | if (x1 == 0 && y1 == 0) |
| 1080 | XtVaSetValues (f->output_data.x->widget, XtNx, x0, XtNy, y0, NULL); | 1082 | XtVaSetValues (f->output_data.x->widget, XtNx, x0, XtNy, y0, NULL); |
| 1081 | if (frame_inhibit_resize (f, false, Qmenu_bar_lines)) | 1083 | if (frame_inhibit_resize (f, false, Qmenu_bar_lines)) |
| 1082 | new_height = old_height; | 1084 | adjust_frame_size (f, -1, old_height, 1, false, Qfree_frame_menubar_1); |
| 1085 | else | ||
| 1086 | adjust_frame_size (f, -1, -1, 2, false, Qfree_frame_menubar_1); | ||
| 1087 | #else | ||
| 1088 | adjust_frame_size (f, -1, -1, 2, false, Qfree_frame_menubar_1); | ||
| 1083 | #endif /* USE_MOTIF */ | 1089 | #endif /* USE_MOTIF */ |
| 1084 | adjust_frame_size (f, -1, new_height, 2, false, Qmenu_bar_lines); | ||
| 1085 | } | 1090 | } |
| 1086 | else | 1091 | else |
| 1087 | { | 1092 | { |
| 1088 | #ifdef USE_MOTIF | 1093 | #ifdef USE_MOTIF |
| 1089 | if (frame_inhibit_resize (f, false, Qmenu_bar_lines)) | 1094 | if (WINDOWP (FRAME_ROOT_WINDOW (f)) |
| 1090 | adjust_frame_size (f, -1, old_height, 1, false, Qmenu_bar_lines); | 1095 | && frame_inhibit_resize (f, false, Qmenu_bar_lines)) |
| 1096 | adjust_frame_size (f, -1, old_height, 1, false, Qfree_frame_menubar_2); | ||
| 1091 | #endif | 1097 | #endif |
| 1092 | } | 1098 | } |
| 1093 | 1099 | ||