diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 13 | ||||
| -rw-r--r-- | src/dispnew.c | 15 | ||||
| -rw-r--r-- | src/w32term.c | 62 |
3 files changed, 58 insertions, 32 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 4d969d73279..a5c25ab7168 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,16 @@ | |||
| 1 | 2014-09-24 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * w32term.c (w32_read_socket): Don't use frame dimensions for | ||
| 4 | resizing if GetClientRect returned an empty (0, 0, 0, 0) | ||
| 5 | rectangle. Check the return value of GetClientRect, and don't use | ||
| 6 | the results if it didn't succeed. | ||
| 7 | |||
| 8 | * dispnew.c (change_frame_size_1): Recompute the frame dimensions | ||
| 9 | in columns and lines after correcting the pixel dimensions in | ||
| 10 | check_frame_size. | ||
| 11 | (adjust_decode_mode_spec_buffer): Add assertion to avoid passing | ||
| 12 | negative values to xrealloc. (Bug#18528) | ||
| 13 | |||
| 1 | 2014-09-22 Dmitry Antipov <dmantipov@yandex.ru> | 14 | 2014-09-22 Dmitry Antipov <dmantipov@yandex.ru> |
| 2 | 15 | ||
| 3 | On OSX, do not free font-specific data more than once (Bug#18501). | 16 | On OSX, do not free font-specific data more than once (Bug#18501). |
diff --git a/src/dispnew.c b/src/dispnew.c index 5bdcb279be7..71345775045 100644 --- a/src/dispnew.c +++ b/src/dispnew.c | |||
| @@ -2138,8 +2138,11 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f) | |||
| 2138 | static void | 2138 | static void |
| 2139 | adjust_decode_mode_spec_buffer (struct frame *f) | 2139 | adjust_decode_mode_spec_buffer (struct frame *f) |
| 2140 | { | 2140 | { |
| 2141 | ssize_t frame_message_buf_size = FRAME_MESSAGE_BUF_SIZE (f); | ||
| 2142 | |||
| 2143 | eassert (frame_message_buf_size >= 0); | ||
| 2141 | f->decode_mode_spec_buffer = xrealloc (f->decode_mode_spec_buffer, | 2144 | f->decode_mode_spec_buffer = xrealloc (f->decode_mode_spec_buffer, |
| 2142 | FRAME_MESSAGE_BUF_SIZE (f) + 1); | 2145 | frame_message_buf_size + 1); |
| 2143 | } | 2146 | } |
| 2144 | 2147 | ||
| 2145 | 2148 | ||
| @@ -5539,10 +5542,6 @@ change_frame_size_1 (struct frame *f, int new_width, int new_height, | |||
| 5539 | { | 5542 | { |
| 5540 | new_text_width = (new_width == 0) ? FRAME_TEXT_WIDTH (f) : new_width; | 5543 | new_text_width = (new_width == 0) ? FRAME_TEXT_WIDTH (f) : new_width; |
| 5541 | new_text_height = (new_height == 0) ? FRAME_TEXT_HEIGHT (f) : new_height; | 5544 | new_text_height = (new_height == 0) ? FRAME_TEXT_HEIGHT (f) : new_height; |
| 5542 | /* Consider rounding here: Currently, the root window can be | ||
| 5543 | larger than the frame in terms of columns/lines. */ | ||
| 5544 | new_cols = new_text_width / FRAME_COLUMN_WIDTH (f); | ||
| 5545 | new_lines = new_text_height / FRAME_LINE_HEIGHT (f); | ||
| 5546 | } | 5545 | } |
| 5547 | else | 5546 | else |
| 5548 | { | 5547 | { |
| @@ -5555,6 +5554,12 @@ change_frame_size_1 (struct frame *f, int new_width, int new_height, | |||
| 5555 | /* Compute width of windows in F. */ | 5554 | /* Compute width of windows in F. */ |
| 5556 | /* Round up to the smallest acceptable size. */ | 5555 | /* Round up to the smallest acceptable size. */ |
| 5557 | check_frame_size (f, &new_text_width, &new_text_height, 1); | 5556 | check_frame_size (f, &new_text_width, &new_text_height, 1); |
| 5557 | /* Recompute the dimensions in character units, since | ||
| 5558 | check_frame_size might have changed the pixel dimensions. */ | ||
| 5559 | /* Consider rounding here: Currently, the root window can be | ||
| 5560 | larger than the frame in terms of columns/lines. */ | ||
| 5561 | new_cols = new_text_width / FRAME_COLUMN_WIDTH (f); | ||
| 5562 | new_lines = new_text_height / FRAME_LINE_HEIGHT (f); | ||
| 5558 | 5563 | ||
| 5559 | /* This is the width of the frame without vertical scroll bars and | 5564 | /* This is the width of the frame without vertical scroll bars and |
| 5560 | fringe columns. Do this after rounding - see discussion of | 5565 | fringe columns. Do this after rounding - see discussion of |
diff --git a/src/w32term.c b/src/w32term.c index 5f15798eeeb..5a053b4fc0d 100644 --- a/src/w32term.c +++ b/src/w32term.c | |||
| @@ -4754,34 +4754,42 @@ w32_read_socket (struct terminal *terminal, | |||
| 4754 | RECT rect; | 4754 | RECT rect; |
| 4755 | int rows, columns, width, height, text_width, text_height; | 4755 | int rows, columns, width, height, text_width, text_height; |
| 4756 | 4756 | ||
| 4757 | GetClientRect (msg.msg.hwnd, &rect); | 4757 | if (GetClientRect (msg.msg.hwnd, &rect) |
| 4758 | 4758 | /* GetClientRect evidently returns (0, 0, 0, 0) if | |
| 4759 | height = rect.bottom - rect.top; | 4759 | called on a minimized frame. Such "dimensions" |
| 4760 | width = rect.right - rect.left; | 4760 | aren't useful anyway. */ |
| 4761 | text_width = FRAME_PIXEL_TO_TEXT_WIDTH (f, width); | 4761 | && !(rect.bottom == 0 |
| 4762 | text_height = FRAME_PIXEL_TO_TEXT_HEIGHT (f, height); | 4762 | && rect.top == 0 |
| 4763 | rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, height); | 4763 | && rect.left == 0 |
| 4764 | columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, width); | 4764 | && rect.right == 0)) |
| 4765 | |||
| 4766 | /* TODO: Clip size to the screen dimensions. */ | ||
| 4767 | |||
| 4768 | /* Even if the number of character rows and columns has | ||
| 4769 | not changed, the font size may have changed, so we need | ||
| 4770 | to check the pixel dimensions as well. */ | ||
| 4771 | |||
| 4772 | if (width != FRAME_PIXEL_WIDTH (f) | ||
| 4773 | || height != FRAME_PIXEL_HEIGHT (f) | ||
| 4774 | || text_width != FRAME_TEXT_WIDTH (f) | ||
| 4775 | || text_height != FRAME_TEXT_HEIGHT (f)) | ||
| 4776 | { | 4765 | { |
| 4777 | change_frame_size (f, text_width, text_height, 0, 1, 0, 1); | 4766 | height = rect.bottom - rect.top; |
| 4778 | SET_FRAME_GARBAGED (f); | 4767 | width = rect.right - rect.left; |
| 4779 | cancel_mouse_face (f); | 4768 | text_width = FRAME_PIXEL_TO_TEXT_WIDTH (f, width); |
| 4780 | /* Do we want to set these here ???? */ | 4769 | text_height = FRAME_PIXEL_TO_TEXT_HEIGHT (f, height); |
| 4781 | /** FRAME_PIXEL_WIDTH (f) = width; **/ | 4770 | rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, height); |
| 4782 | /** FRAME_TEXT_WIDTH (f) = text_width; **/ | 4771 | columns = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, width); |
| 4783 | /** FRAME_PIXEL_HEIGHT (f) = height; **/ | 4772 | |
| 4784 | f->win_gravity = NorthWestGravity; | 4773 | /* TODO: Clip size to the screen dimensions. */ |
| 4774 | |||
| 4775 | /* Even if the number of character rows and columns | ||
| 4776 | has not changed, the font size may have changed, | ||
| 4777 | so we need to check the pixel dimensions as well. */ | ||
| 4778 | |||
| 4779 | if (width != FRAME_PIXEL_WIDTH (f) | ||
| 4780 | || height != FRAME_PIXEL_HEIGHT (f) | ||
| 4781 | || text_width != FRAME_TEXT_WIDTH (f) | ||
| 4782 | || text_height != FRAME_TEXT_HEIGHT (f)) | ||
| 4783 | { | ||
| 4784 | change_frame_size (f, text_width, text_height, 0, 1, 0, 1); | ||
| 4785 | SET_FRAME_GARBAGED (f); | ||
| 4786 | cancel_mouse_face (f); | ||
| 4787 | /* Do we want to set these here ???? */ | ||
| 4788 | /** FRAME_PIXEL_WIDTH (f) = width; **/ | ||
| 4789 | /** FRAME_TEXT_WIDTH (f) = text_width; **/ | ||
| 4790 | /** FRAME_PIXEL_HEIGHT (f) = height; **/ | ||
| 4791 | f->win_gravity = NorthWestGravity; | ||
| 4792 | } | ||
| 4785 | } | 4793 | } |
| 4786 | } | 4794 | } |
| 4787 | 4795 | ||