]> git.eshelyaron.com Git - emacs.git/commitdiff
Refine previous fix of x_set_window_size to handle Bug#17077.
authorMartin Rudalics <rudalics@gmx.at>
Mon, 24 Mar 2014 08:50:17 +0000 (09:50 +0100)
committerMartin Rudalics <rudalics@gmx.at>
Mon, 24 Mar 2014 08:50:17 +0000 (09:50 +0100)
* w32term.c (x_set_window_size): Refine fix from 2014-03-14
(Bug#17077).

src/ChangeLog
src/w32term.c

index 2069d00a24065dda105897e87cbeff685e44503e..da82eca9df28c59e30a9c0ecdb73fe2ac1854f13 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-24  Martin Rudalics  <rudalics@gmx.at>
+
+       * w32term.c (x_set_window_size): Refine fix from 2014-03-14
+       (Bug#17077).
+
 2014-03-23  Glenn Morris  <rgm@gnu.org>
 
        * fileio.c (Ffile_symlink_p): Doc fix. (Bug#17073)
index 15b502b7c1b5550a51bfc29374062e7182a44f51..4c426aca921fcd1451d3020dd809c8506b17e492 100644 (file)
@@ -5653,30 +5653,41 @@ x_set_window_size (struct frame *f, int change_gravity, int width, int height, b
 
   compute_fringe_widths (f, 0);
 
-  if (pixelwise)
+  if (frame_resize_pixelwise)
     {
-      pixelwidth = FRAME_TEXT_TO_PIXEL_WIDTH (f, width);
-      pixelheight = FRAME_TEXT_TO_PIXEL_HEIGHT (f, height);
+      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);
+       }
     }
   else
-    {
-      pixelwidth = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, width);
-      pixelheight = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, height);
-    }
-
-  if (!frame_resize_pixelwise)
     {
       /* If we don't resize frames pixelwise, round sizes to multiples
         of character sizes here.  Otherwise, when enforcing size hints
         while processing WM_WINDOWPOSCHANGING in w32_wnd_proc, we might
         clip our frame rectangle to a multiple of the frame's character
         size and subsequently lose our mode line or scroll bar.
-        Bug#16923 could be one possible consequence of this.  */
+        Bug#16923 could be one possible consequence of this.  Carefully
+        reverse-engineer what WM_WINDOWPOSCHANGING does here since
+        otherwise we might make our frame too small, see Bug#17077.  */
       int unit_width = FRAME_COLUMN_WIDTH (f);
       int unit_height = FRAME_LINE_HEIGHT (f);
 
-      pixelwidth = (pixelwidth / unit_width) * unit_width;
-      pixelheight = (pixelheight / unit_height) * unit_height;
+      pixelwidth = (((((pixelwise ? width : (width * FRAME_COLUMN_WIDTH (f)))
+                      + FRAME_TOTAL_FRINGE_WIDTH (f))
+                     / unit_width) * unit_width)
+                   + FRAME_SCROLL_BAR_AREA_WIDTH (f)
+                   + 2 * FRAME_INTERNAL_BORDER_WIDTH (f));
+
+      pixelheight = ((((pixelwise ? height : (height * FRAME_LINE_HEIGHT (f)))
+                      / unit_height) * unit_height)
+                    + 2 * FRAME_INTERNAL_BORDER_WIDTH (f));
     }
 
   f->win_gravity = NorthWestGravity;