Mercurial > emacs
changeset 106772:dfa01a7a3f36
(Fx_create_frame): Don't create frame larger than display by default bug#3643.
author | Jan D. <jan.h.d@swipnet.se> |
---|---|
date | Sat, 09 Jan 2010 14:26:23 +0100 |
parents | 6aa2fde93c55 |
children | d2c6973afc86 05ac7369b8c2 |
files | src/ChangeLog src/xfns.c |
diffstat | 2 files changed, 44 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sat Jan 09 13:31:29 2010 +0100 +++ b/src/ChangeLog Sat Jan 09 14:26:23 2010 +0100 @@ -1,3 +1,8 @@ +2010-01-09 Jan Djärv <jan.h.d@swipnet.se> + + * xfns.c (Fx_create_frame): Don't create frame larger than display + by default bug#3643. + 2010-01-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> * frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro.
--- a/src/xfns.c Sat Jan 09 13:31:29 2010 +0100 +++ b/src/xfns.c Sat Jan 09 14:26:23 2010 +0100 @@ -3396,6 +3396,45 @@ /* Compute the size of the X window. */ window_prompting = x_figure_window_size (f, parms, 1); + /* Don't make height higher than display height unless the user asked + for it. */ + height = FRAME_LINES (f); + tem = x_get_arg (dpyinfo, parms, Qheight, 0, 0, RES_TYPE_NUMBER); + if (EQ (tem, Qunbound)) + { + int ph = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, FRAME_LINES (f)); + int dph = DisplayHeight (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)); + if (ph > dph) + { + height = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, dph) - + FRAME_TOOL_BAR_LINES (f) - FRAME_MENU_BAR_LINES (f); + if (FRAME_EXTERNAL_TOOL_BAR (f)) + height -= 2; /* We can't know how big it will be. */ + if (FRAME_EXTERNAL_MENU_BAR (f)) + height -= 2; /* We can't know how big it will be. */ + } + } + + /* Don't make width wider than display width unless the user asked + for it. */ + width = FRAME_COLS (f); + tem = x_get_arg (dpyinfo, parms, Qwidth, 0, 0, RES_TYPE_NUMBER); + if (EQ (tem, Qunbound)) + { + int pw = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, FRAME_COLS (f)); + int dpw = DisplayWidth (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)); + if (pw > dpw) + width = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, dpw); + } + + if (height != FRAME_LINES (f) || width != FRAME_COLS (f)) + { + check_frame_size (f, &height, &width); + FRAME_LINES (f) = height; + SET_FRAME_COLS (f, width); + } + + tem = x_get_arg (dpyinfo, parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); f->no_split = minibuffer_only || EQ (tem, Qt);