emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-24 r116881: In x_set_window_size postpone calculatio


From: Martin Rudalics
Subject: [Emacs-diffs] emacs-24 r116881: In x_set_window_size postpone calculation of default frame sizes (Bug#17142).
Date: Sun, 30 Mar 2014 13:31:58 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 116881
revision-id: address@hidden
parent: address@hidden
committer: martin rudalics <address@hidden>
branch nick: emacs-24
timestamp: Sun 2014-03-30 15:31:45 +0200
message:
  In x_set_window_size postpone calculation of default frame sizes (Bug#17142).
  
  * frame.c (x_set_frame_parameters): Calculate default values of
  new frame sizes only after all other frame parameters have been
  processed (Bug#17142).
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/frame.c                    frame.c-20091113204419-o5vbwnq5f7feedwu-243
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-03-28 16:32:54 +0000
+++ b/src/ChangeLog     2014-03-30 13:31:45 +0000
@@ -1,3 +1,9 @@
+2014-03-30  Martin Rudalics  <address@hidden>
+
+       * frame.c (x_set_frame_parameters): Calculate default values of
+       new frame sizes only after all other frame parameters have been
+       processed (Bug#17142).
+
 2014-03-28  Ken Brown  <address@hidden>
 
        * conf_post.h (SYSTEM_PURESIZE_EXTRA) [CYGWIN]: Set to 10000.

=== modified file 'src/frame.c'
--- a/src/frame.c       2014-03-20 14:09:37 +0000
+++ b/src/frame.c       2014-03-30 13:31:45 +0000
@@ -2795,6 +2795,7 @@
      set them both at once.  So we wait until we've looked at the
      entire list before we set them.  */
   int width, height;
+  bool width_change = 0, height_change = 0;
 
   /* Same here.  */
   Lisp_Object left, top;
@@ -2810,7 +2811,6 @@
 #ifdef HAVE_X_WINDOWS
   bool icon_left_no_change = 0, icon_top_no_change = 0;
 #endif
-  bool size_changed = 0;
   struct gcpro gcpro1, gcpro2;
 
   i = 0;
@@ -2844,18 +2844,6 @@
   top = left = Qunbound;
   icon_left = icon_top = Qunbound;
 
-  /* Provide default values for HEIGHT and WIDTH.  */
-  width = (f->new_width
-          ? (f->new_pixelwise
-             ? f->new_width
-             : (f->new_width * FRAME_COLUMN_WIDTH (f)))
-          : FRAME_TEXT_WIDTH (f));
-  height = (f->new_height
-           ? (f->new_pixelwise
-              ? f->new_height
-              : (f->new_height * FRAME_LINE_HEIGHT (f)))
-           : FRAME_TEXT_HEIGHT (f));
-
   /* Process foreground_color and background_color before anything else.
      They are independent of other properties, but other properties (e.g.,
      cursor_color) are dependent upon them.  */
@@ -2897,12 +2885,12 @@
 
       if (EQ (prop, Qwidth) && RANGED_INTEGERP (0, val, INT_MAX))
         {
-          size_changed = 1;
+         width_change = 1;
           width = XFASTINT (val) * FRAME_COLUMN_WIDTH (f) ;
         }
       else if (EQ (prop, Qheight) && RANGED_INTEGERP (0, val, INT_MAX))
         {
-          size_changed = 1;
+         height_change = 1;
           height = XFASTINT (val) * FRAME_LINE_HEIGHT (f);
         }
       else if (EQ (prop, Qtop))
@@ -2989,11 +2977,30 @@
 
     XSETFRAME (frame, f);
 
-    if (size_changed
+    if ((width_change || height_change)
         && (width != FRAME_TEXT_WIDTH (f)
             || height != FRAME_TEXT_HEIGHT (f)
             || f->new_height || f->new_width))
-      Fset_frame_size (frame, make_number (width), make_number (height), Qt);
+      {
+       /* If necessary provide default values for HEIGHT and WIDTH.  Do
+          that here since otherwise a size change implied by an
+          intermittent font change may get lost as in Bug#17142.  */
+       if (!width_change)
+         width = (f->new_width
+                  ? (f->new_pixelwise
+                     ? f->new_width
+                     : (f->new_width * FRAME_COLUMN_WIDTH (f)))
+                  : FRAME_TEXT_WIDTH (f));
+
+       if (!height_change)
+         height = (f->new_height
+                   ? (f->new_pixelwise
+                      ? f->new_height
+                      : (f->new_height * FRAME_LINE_HEIGHT (f)))
+                   : FRAME_TEXT_HEIGHT (f));
+
+       Fset_frame_size (frame, make_number (width), make_number (height), Qt);
+      }
 
     if ((!NILP (left) || !NILP (top))
        && ! (left_no_change && top_no_change)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]