Mercurial > emacs
changeset 106987:7362dc093e43
* xfns.c (Fx_create_frame): If frame height is too big, try
sizes 24 and 10. Bug #3643.
author | Jan D. <jan.h.d@swipnet.se> |
---|---|
date | Mon, 25 Jan 2010 08:46:15 +0100 |
parents | e9c454218ac8 (current diff) 6612625cb8e9 (diff) |
children | 05efa1881381 de2044ac357c |
files | |
diffstat | 2 files changed, 22 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sun Jan 24 22:03:23 2010 -0800 +++ b/src/ChangeLog Mon Jan 25 08:46:15 2010 +0100 @@ -1,3 +1,8 @@ +2010-01-25 Jan Djärv <jan.h.d@swipnet.se> + + * xfns.c (Fx_create_frame): If frame height is too big, try + sizes 24 and 10. Bug #3643. + 2010-01-24 Stefan Monnier <monnier@iro.umontreal.ca> Try and fix bug#788, hopefully for real this time.
--- a/src/xfns.c Sun Jan 24 22:03:23 2010 -0800 +++ b/src/xfns.c Mon Jan 25 08:46:15 2010 +0100 @@ -3518,27 +3518,35 @@ window_prompting = x_figure_window_size (f, parms, 1); /* Don't make height higher than display height unless the user asked - for it. */ + for it. Try sizes 24 and 10 if current is too large. */ 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 h = FRAME_LINES (f) + FRAME_TOOL_BAR_LINES (f) + + FRAME_MENU_BAR_LINES (f) + 2; + int ph = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, h); int dph = DisplayHeight (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)); + static int tryheight[] = { 24, 10, 0 } ; + int i; + + ph += (FRAME_EXTERNAL_TOOL_BAR (f) ? 32 : 0) /* Gtk toolbar size */ + + (FRAME_EXTERNAL_MENU_BAR (f) ? 24 : 0); /* Arbitrary */ + /* Some desktops have fixed menus above and/or panels below. Try to figure out the usable size we have for emacs. */ current_desktop = x_get_current_desktop (f); x_get_desktop_workarea (f, current_desktop, &deskw, &deskh); if (deskh > 0 && deskh < dph) dph = deskh; - if (ph > dph) + /* Allow 40 pixels for manager decorations. */ + for (i = 0; ph+40 > dph && tryheight[i] != 0; ++i) { - 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. */ + height = tryheight[i]; + h = height + FRAME_TOOL_BAR_LINES (f) + FRAME_MENU_BAR_LINES (f) + 2; + ph = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, h) + + (FRAME_EXTERNAL_TOOL_BAR (f) ? 32 : 0) + + (FRAME_EXTERNAL_MENU_BAR (f) ? 24 : 0); } }