]> git.eshelyaron.com Git - emacs.git/commitdiff
* window.h (struct window): Convert scroll_bar_width
authorDmitry Antipov <dmantipov@yandex.ru>
Wed, 14 Aug 2013 04:07:14 +0000 (08:07 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Wed, 14 Aug 2013 04:07:14 +0000 (08:07 +0400)
from Lisp_Object to integer.  Adjust comment.
(WINDOW_CONFIG_SCROLL_BAR_WIDTH, WINDOW_CONFIG_SCROLL_BAR_COLS):
Adjust users.
* window.c (wset_scroll_bar_width): Remove.
(make_window): Initialize scroll_bar_width.
(Fsplit_window_internal): Use direct assignment.
(Fset_window_configuration, save_window_save):
Convert Lisp_Object to integer and back where appropriate.
(Fset_window_scroll_bars): Adjust user.  Return t if any scroll
bar was actually changed, and mention this in docstring.

src/ChangeLog
src/window.c
src/window.h

index d89f702a2aa7e1770f10077d0538596623f11f7f..7081236ec65c7400534cffe5c0b8959167325917 100644 (file)
@@ -1,3 +1,17 @@
+2013-08-14  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * window.h (struct window): Convert scroll_bar_width
+       from Lisp_Object to integer.  Adjust comment.
+       (WINDOW_CONFIG_SCROLL_BAR_WIDTH, WINDOW_CONFIG_SCROLL_BAR_COLS):
+       Adjust users.
+       * window.c (wset_scroll_bar_width): Remove.
+       (make_window): Initialize scroll_bar_width.
+       (Fsplit_window_internal): Use direct assignment.
+       (Fset_window_configuration, save_window_save):
+       Convert Lisp_Object to integer and back where appropriate.
+       (Fset_window_scroll_bars): Adjust user.  Return t if any scroll
+       bar was actually changed, and mention this in docstring.
+
 2013-08-13  Paul Eggert  <eggert@cs.ucla.edu>
 
        * decompress.c: Minor simplifications.
index f9084e6c05fa33f2a30cf94a9472f80a90f7e911..7b2e9b08881cb3a89a4946d020dd241c0e059917 100644 (file)
@@ -181,11 +181,6 @@ wset_pointm (struct window *w, Lisp_Object val)
   w->pointm = val;
 }
 static void
-wset_scroll_bar_width (struct window *w, Lisp_Object val)
-{
-  w->scroll_bar_width = val;
-}
-static void
 wset_start (struct window *w, Lisp_Object val)
 {
   w->start = val;
@@ -3461,6 +3456,7 @@ make_window (void)
   w->left_fringe_width = w->right_fringe_width = -1;
   w->phys_cursor_type = -1;
   w->phys_cursor_width = -1;
+  w->scroll_bar_width = -1;
   w->column_number_displayed = -1;
 
   /* Reset window_list.  */
@@ -3931,7 +3927,7 @@ set correctly.  See the code of `split-window' for how this is done.  */)
   n->left_fringe_width = r->left_fringe_width;
   n->right_fringe_width = r->right_fringe_width;
   n->fringes_outside_margins = r->fringes_outside_margins;
-  wset_scroll_bar_width (n, r->scroll_bar_width);
+  n->scroll_bar_width = r->scroll_bar_width;
   wset_vertical_scroll_bar_type (n, r->vertical_scroll_bar_type);
 
   /* Directly assign orthogonal coordinates and sizes.  */
@@ -5674,7 +5670,7 @@ the return value is nil.  Otherwise the value is t.  */)
          w->left_fringe_width = XINT (p->left_fringe_width);
          w->right_fringe_width = XINT (p->right_fringe_width);
          w->fringes_outside_margins = !NILP (p->fringes_outside_margins);
-         wset_scroll_bar_width (w, p->scroll_bar_width);
+         w->scroll_bar_width = XINT (p->scroll_bar_width);
          wset_vertical_scroll_bar_type (w, p->vertical_scroll_bar_type);
          wset_dedicated (w, p->dedicated);
          wset_combination_limit (w, p->combination_limit);
@@ -5975,7 +5971,7 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, int i)
       p->left_fringe_width = make_number (w->left_fringe_width);
       p->right_fringe_width = make_number (w->right_fringe_width);
       p->fringes_outside_margins = w->fringes_outside_margins ? Qt : Qnil;
-      p->scroll_bar_width = w->scroll_bar_width;
+      p->scroll_bar_width = make_number (w->scroll_bar_width);
       p->vertical_scroll_bar_type = w->vertical_scroll_bar_type;
       p->dedicated = w->dedicated;
       p->combination_limit = w->combination_limit;
@@ -6263,18 +6259,17 @@ Third parameter VERTICAL-TYPE specifies the type of the vertical scroll
 bar: left, right, or nil.
 If WIDTH is nil, use the frame's scroll-bar width.
 If VERTICAL-TYPE is t, use the frame's scroll-bar type.
-Fourth parameter HORIZONTAL-TYPE is currently unused.  */)
-  (Lisp_Object window, Lisp_Object width, Lisp_Object vertical_type, Lisp_Object horizontal_type)
+Fourth parameter HORIZONTAL-TYPE is currently unused.
+
+Return t if scroll bars was actually changed and nil otherwise.  */)
+  (Lisp_Object window, Lisp_Object width,
+   Lisp_Object vertical_type, Lisp_Object horizontal_type)
 {
   struct window *w = decode_live_window (window);
+  int iwidth = (NILP (width) ? -1 : (CHECK_NATNUM (width), XINT (width)));
 
-  if (!NILP (width))
-    {
-      CHECK_RANGED_INTEGER (width, 0, INT_MAX);
-
-      if (XINT (width) == 0)
-       vertical_type = Qnil;
-    }
+  if (iwidth == 0)
+    vertical_type = Qnil;
 
   if (!(NILP (vertical_type)
        || EQ (vertical_type, Qleft)
@@ -6282,10 +6277,10 @@ Fourth parameter HORIZONTAL-TYPE is currently unused.  */)
        || EQ (vertical_type, Qt)))
     error ("Invalid type of vertical scroll bar");
 
-  if (!EQ (w->scroll_bar_width, width)
+  if (w->scroll_bar_width != iwidth
       || !EQ (w->vertical_scroll_bar_type, vertical_type))
     {
-      wset_scroll_bar_width (w, width);
+      w->scroll_bar_width = iwidth;
       wset_vertical_scroll_bar_type (w, vertical_type);
 
       adjust_window_margins (w);
@@ -6295,6 +6290,7 @@ Fourth parameter HORIZONTAL-TYPE is currently unused.  */)
 
       ++windows_or_buffers_changed;
       adjust_glyphs (XFRAME (WINDOW_FRAME (w)));
+      return Qt;
     }
 
   return Qnil;
index 9d41a14cd23e5a39c001a2c0f6353d885d26932d..823fe678c43d96bc960d2d27d2f3e99ad1ea9be5 100644 (file)
@@ -141,10 +141,6 @@ struct window
        it yet, or if the frame doesn't have any scroll bars, this is nil.  */
     Lisp_Object vertical_scroll_bar;
 
-    /* Pixel width of scroll bars.
-       A value of nil or t means use frame values.  */
-    Lisp_Object scroll_bar_width;
-
     /* Type of vertical scroll bar.  A value of nil means
        no scroll bar.  A value of t means use frame value.  */
     Lisp_Object vertical_scroll_bar_type;
@@ -269,6 +265,10 @@ struct window
     int left_margin_cols;
     int right_margin_cols;
 
+    /* Pixel width of scroll bars.
+       A value of -1 means use frame values.  */
+    int scroll_bar_width;
+
     /* Non-zero if this window is a minibuffer window.  */
     unsigned mini : 1;
 
@@ -695,8 +695,7 @@ wset_next_buffers (struct window *w, Lisp_Object val)
    nonzero.  */
 
 #define WINDOW_CONFIG_SCROLL_BAR_WIDTH(w)              \
-  (INTEGERP (w->scroll_bar_width)                      \
-   ? XFASTINT (w->scroll_bar_width)                    \
+  (w->scroll_bar_width >= 0 ? w->scroll_bar_width      \
    : FRAME_CONFIG_SCROLL_BAR_WIDTH (WINDOW_XFRAME (w)))
 
 /* Width that a scroll bar in window W should have, if there is one.
@@ -704,8 +703,8 @@ wset_next_buffers (struct window *w, Lisp_Object val)
    this is still nonzero.  */
 
 #define WINDOW_CONFIG_SCROLL_BAR_COLS(w)               \
-  (INTEGERP (w->scroll_bar_width)                      \
-   ? ((XFASTINT (w->scroll_bar_width)                  \
+  (w->scroll_bar_width >= 0                            \
+   ? ((w->scroll_bar_width                             \
        + WINDOW_FRAME_COLUMN_WIDTH (w) - 1)            \
       / WINDOW_FRAME_COLUMN_WIDTH (w))                 \
    : FRAME_CONFIG_SCROLL_BAR_COLS (WINDOW_XFRAME (w)))