[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#16013: 24.3.50; Rows in height is interpreted as pixels.
From: |
martin rudalics |
Subject: |
bug#16013: 24.3.50; Rows in height is interpreted as pixels. |
Date: |
Sat, 30 Nov 2013 16:00:24 +0100 |
> Can't do this from -Q, but with a minimal .emacs:
>
> (custom-set-variables
> '(default-frame-alist (quote ((height . 50))))
> )
>
> start emacs and it won't be 50 rows, but 50 pixels.
Bad luck. Please try the attached, pretty unripe patch.
Thanks, martin
=== modified file 'src/gtkutil.c'
--- src/gtkutil.c 2013-11-30 09:25:31 +0000
+++ src/gtkutil.c 2013-11-30 14:44:13 +0000
@@ -938,27 +938,30 @@
COLUMNS/ROWS is the size the edit area shall have after the resize. */
void
-xg_frame_set_char_size (struct frame *f, int width, int height)
+xg_frame_set_char_size (struct frame *f, int width, int height, bool pixelwise)
{
- int pixelwidth;
- int pixelheight = FRAME_TEXT_TO_PIXEL_HEIGHT (f, height);
+ int pixelwidth = pixelwise ? width : 0;
+ int pixelheight = pixelwise ? height : FRAME_TEXT_TO_PIXEL_HEIGHT (f,
height);
if (FRAME_PIXEL_HEIGHT (f) == 0)
return;
- /* Take into account the size of the scroll bar. Always use the
- number of columns occupied by the scroll bar here otherwise we
- might end up with a frame width that is not a multiple of the
- frame's character width which is bad for vertically split
- windows. */
- f->scroll_bar_actual_width
- = FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f);
-
- compute_fringe_widths (f, 0);
-
- /* FRAME_TEXT_COLS_TO_PIXEL_WIDTH uses scroll_bar_actual_width, so call it
- after calculating that value. */
- pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width);
+ if (! pixelwise)
+ {
+ /* Take into account the size of the scroll bar. Always use the
+ number of columns occupied by the scroll bar here otherwise we
+ might end up with a frame width that is not a multiple of the
+ frame's character width which is bad for vertically split
+ windows. */
+ f->scroll_bar_actual_width
+ = FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f);
+
+ compute_fringe_widths (f, 0);
+
+ /* FRAME_TEXT_COLS_TO_PIXEL_WIDTH uses scroll_bar_actual_width, so call
it
+ after calculating that value. */
+ pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width);
+ }
/* Do this before resize, as we don't know yet if we will be resized. */
xg_clear_under_internal_border (f);
@@ -988,7 +991,7 @@
}
else
{
- change_frame_size (f, width, height, 0, 1, 0, 1);
+ change_frame_size (f, pixelwidth, pixelheight, 0, 1, 0, 1);
FRAME_PIXEL_WIDTH (f) = pixelwidth;
FRAME_PIXEL_HEIGHT (f) = pixelheight;
}
@@ -1095,7 +1098,7 @@
&& FRAME_X_DISPLAY (f) == dpy)
{
x_set_scroll_bar_default_width (f);
- xg_frame_set_char_size (f, FRAME_COLS (f), FRAME_LINES (f));
+ xg_frame_set_char_size (f, FRAME_COLS (f), FRAME_LINES (f), 0);
}
}
}
=== modified file 'src/gtkutil.h'
--- src/gtkutil.h 2013-09-17 07:06:42 +0000
+++ src/gtkutil.h 2013-11-30 14:43:32 +0000
@@ -139,7 +139,7 @@
extern void xg_frame_resized (struct frame *f,
int pixelwidth,
int pixelheight);
-extern void xg_frame_set_char_size (struct frame *f, int cols, int rows);
+extern void xg_frame_set_char_size (struct frame *f, int cols, int rows, bool
pixelwise);
extern GtkWidget * xg_win_to_widget (Display *dpy, Window wdesc);
extern void xg_display_open (char *display_name, Display **dpy);
=== modified file 'src/xterm.c'
--- src/xterm.c 2013-11-30 09:25:31 +0000
+++ src/xterm.c 2013-11-30 14:42:43 +0000
@@ -8743,8 +8743,12 @@
void
x_set_window_size (struct frame *f, int change_gravity, int width, int height,
bool pixelwise)
{
+ int pixelwidth, pixelheight;
+
block_input ();
+ check_frame_size (f, &width, &height, pixelwise);
+
if (NILP (tip_frame) || XFRAME (tip_frame) != f)
{
int r, c, text_width, text_height;
@@ -8773,14 +8777,25 @@
change_frame_size (f, text_width, text_height, 0, 1, 0, 1);
}
+ if (pixelwise)
+ {
+ pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width);
+ pixelheight = FRAME_TEXT_TO_PIXEL_HEIGHT (f, height);
+ }
+ else
+ {
+ pixelwidth = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, width);
+ pixelheight = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, height);
+ }
+
#ifdef USE_GTK
if (FRAME_GTK_WIDGET (f))
- xg_frame_set_char_size (f, width, height);
+ xg_frame_set_char_size (f, pixelwidth, pixelheight, 1);
else
- x_set_window_size_1 (f, change_gravity, width, height, pixelwise);
+ x_set_window_size_1 (f, change_gravity, pixelwidth, pixelheight, 1);
#else /* not USE_GTK */
- x_set_window_size_1 (f, change_gravity, width, height, pixelwise);
+ x_set_window_size_1 (f, change_gravity, pixelwidth, pixelheight, 1);
#endif /* not USE_GTK */