[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r113862: Cleanup window fringes, margins and scroll
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] trunk r113862: Cleanup window fringes, margins and scroll bars adjustments. |
Date: |
Wed, 14 Aug 2013 04:10:44 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 113862
revision-id: address@hidden
parent: address@hidden
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Wed 2013-08-14 08:09:37 +0400
message:
Cleanup window fringes, margins and scroll bars adjustments.
* window.c (set_window_fringes, set_window_margins)
(set_window_scroll_bars, apply_window_adjustment): New functions.
(set_window_buffer, Fset_window_margins, Fset_window_fringes)
(Fset_window_scroll_bars): Use them.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/window.c window.c-20091113204419-o5vbwnq5f7feedwu-231
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-08-14 04:07:14 +0000
+++ b/src/ChangeLog 2013-08-14 04:09:37 +0000
@@ -1,5 +1,13 @@
2013-08-14 Dmitry Antipov <address@hidden>
+ Cleanup window fringes, margins and scroll bars adjustments.
+ * window.c (set_window_fringes, set_window_margins)
+ (set_window_scroll_bars, apply_window_adjustment): New functions.
+ (set_window_buffer, Fset_window_margins, Fset_window_fringes)
+ (Fset_window_scroll_bars): Use them.
+
+2013-08-14 Dmitry Antipov <address@hidden>
+
* 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):
=== modified file 'src/window.c'
--- a/src/window.c 2013-08-14 04:07:14 +0000
+++ b/src/window.c 2013-08-14 04:09:37 +0000
@@ -87,6 +87,14 @@
static Lisp_Object select_window (Lisp_Object, Lisp_Object, int);
static void select_window_1 (Lisp_Object, bool);
+static struct window *set_window_fringes (struct window *, Lisp_Object,
+ Lisp_Object, Lisp_Object);
+static struct window *set_window_margins (struct window *, Lisp_Object,
+ Lisp_Object);
+static struct window *set_window_scroll_bars (struct window *, Lisp_Object,
+ Lisp_Object, Lisp_Object);
+static void apply_window_adjustment (struct window *);
+
/* This is the window in which the terminal's cursor should
be left when nothing is being done with it. This must
always be a leaf window, and its buffer is selected by
@@ -3202,28 +3210,14 @@
if (!keep_margins_p)
{
/* Set left and right marginal area width etc. from buffer. */
-
- /* This may call adjust_window_margins three times, so
- temporarily disable window margins. */
- int save_left = w->left_margin_cols;
- int save_right = w->right_margin_cols;
-
- w->left_margin_cols = 0;
- w->right_margin_cols = 0;
-
- Fset_window_fringes (window,
- BVAR (b, left_fringe_width), BVAR (b,
right_fringe_width),
- BVAR (b, fringes_outside_margins));
-
- Fset_window_scroll_bars (window,
- BVAR (b, scroll_bar_width),
- BVAR (b, vertical_scroll_bar_type), Qnil);
-
- w->left_margin_cols = save_left;
- w->right_margin_cols = save_right;
-
- Fset_window_margins (window,
- BVAR (b, left_margin_cols), BVAR (b,
right_margin_cols));
+ set_window_fringes (w, BVAR (b, left_fringe_width),
+ BVAR (b, right_fringe_width),
+ BVAR (b, fringes_outside_margins));
+ set_window_scroll_bars (w, BVAR (b, scroll_bar_width),
+ BVAR (b, vertical_scroll_bar_type), Qnil);
+ set_window_margins (w, BVAR (b, left_margin_cols),
+ BVAR (b, right_margin_cols));
+ apply_window_adjustment (w);
}
if (run_hooks_p)
@@ -6112,11 +6106,46 @@
XSETWINDOW_CONFIGURATION (tem, data);
return (tem);
}
+
+/* Called after W's margins, fringes or scroll bars was adjusted. */
+
+static void
+apply_window_adjustment (struct window *w)
+{
+ eassert (w);
+ adjust_window_margins (w);
+ clear_glyph_matrix (w->current_matrix);
+ w->window_end_valid = 0;
+ windows_or_buffers_changed++;
+ adjust_glyphs (XFRAME (WINDOW_FRAME (w)));
+}
+
/***********************************************************************
Marginal Areas
***********************************************************************/
+static struct window *
+set_window_margins (struct window *w, Lisp_Object left_width,
+ Lisp_Object right_width)
+{
+ int left, right;
+
+ /* FIXME: what about margins that are too wide? */
+ left = (NILP (left_width) ? 0
+ : (CHECK_NATNUM (left_width), XINT (left_width)));
+ right = (NILP (right_width) ? 0
+ : (CHECK_NATNUM (right_width), XINT (right_width)));
+
+ if (w->left_margin_cols != left || w->right_margin_cols != right)
+ {
+ w->left_margin_cols = left;
+ w->right_margin_cols = right;
+ return w;
+ }
+ return NULL;
+}
+
DEFUN ("set-window-margins", Fset_window_margins, Sset_window_margins,
2, 3, 0,
doc: /* Set width of marginal areas of window WINDOW.
@@ -6130,29 +6159,9 @@
Return t if any margin was actually changed and nil otherwise. */)
(Lisp_Object window, Lisp_Object left_width, Lisp_Object right_width)
{
- struct window *w = decode_live_window (window);
- int left, right;
-
- /* FIXME: what about margins that are too wide? */
-
- left = (NILP (left_width) ? 0
- : (CHECK_NATNUM (left_width), XINT (left_width)));
- right = (NILP (right_width) ? 0
- : (CHECK_NATNUM (right_width), XINT (right_width)));
-
- if (w->left_margin_cols != left || w->right_margin_cols != right)
- {
- w->left_margin_cols = left;
- w->right_margin_cols = right;
-
- adjust_window_margins (w);
-
- ++windows_or_buffers_changed;
- adjust_glyphs (XFRAME (WINDOW_FRAME (w)));
- return Qt;
- }
-
- return Qnil;
+ struct window *w = set_window_margins (decode_live_window (window),
+ left_width, right_width);
+ return w ? (apply_window_adjustment (w), Qt) : Qnil;
}
@@ -6177,6 +6186,31 @@
Fringes
***********************************************************************/
+static struct window *
+set_window_fringes (struct window *w, Lisp_Object left_width,
+ Lisp_Object right_width, Lisp_Object outside_margins)
+{
+ int left, right, outside = !NILP (outside_margins);
+
+ left = (NILP (left_width) ? -1
+ : (CHECK_NATNUM (left_width), XINT (left_width)));
+ right = (NILP (right_width) ? -1
+ : (CHECK_NATNUM (right_width), XINT (right_width)));
+
+ /* Do nothing on a tty or if nothing to actually change. */
+ if (FRAME_WINDOW_P (WINDOW_XFRAME (w))
+ && (w->left_fringe_width != left
+ || w->right_fringe_width != right
+ || w->fringes_outside_margins != outside))
+ {
+ w->left_fringe_width = left;
+ w->right_fringe_width = right;
+ w->fringes_outside_margins = outside;
+ return w;
+ }
+ return NULL;
+}
+
DEFUN ("set-window-fringes", Fset_window_fringes, Sset_window_fringes,
2, 4, 0,
doc: /* Set the fringe widths of window WINDOW.
@@ -6195,35 +6229,10 @@
(Lisp_Object window, Lisp_Object left_width,
Lisp_Object right_width, Lisp_Object outside_margins)
{
- struct window *w = decode_live_window (window);
- int left, right, outside = !NILP (outside_margins);
-
- left = (NILP (left_width) ? -1
- : (CHECK_NATNUM (left_width), XINT (left_width)));
- right = (NILP (right_width) ? -1
- : (CHECK_NATNUM (right_width), XINT (right_width)));
-
- /* Do nothing on a tty or if nothing to actually change. */
- if (FRAME_WINDOW_P (WINDOW_XFRAME (w))
- && (w->left_fringe_width != left
- || w->right_fringe_width != right
- || w->fringes_outside_margins != outside))
- {
- w->left_fringe_width = left;
- w->right_fringe_width = right;
- w->fringes_outside_margins = outside;
-
- adjust_window_margins (w);
-
- clear_glyph_matrix (w->current_matrix);
- w->window_end_valid = 0;
-
- ++windows_or_buffers_changed;
- adjust_glyphs (XFRAME (WINDOW_FRAME (w)));
- return Qt;
- }
-
- return Qnil;
+ struct window *w
+ = set_window_fringes (decode_live_window (window),
+ left_width, right_width, outside_margins);
+ return w ? (apply_window_adjustment (w), Qt) : Qnil;
}
@@ -6248,6 +6257,31 @@
Scroll bars
***********************************************************************/
+static struct window *
+set_window_scroll_bars (struct window *w, Lisp_Object width,
+ Lisp_Object vertical_type, Lisp_Object horizontal_type)
+{
+ int iwidth = (NILP (width) ? -1 : (CHECK_NATNUM (width), XINT (width)));
+
+ if (iwidth == 0)
+ vertical_type = Qnil;
+
+ if (!(NILP (vertical_type)
+ || EQ (vertical_type, Qleft)
+ || EQ (vertical_type, Qright)
+ || EQ (vertical_type, Qt)))
+ error ("Invalid type of vertical scroll bar");
+
+ if (w->scroll_bar_width != iwidth
+ || !EQ (w->vertical_scroll_bar_type, vertical_type))
+ {
+ w->scroll_bar_width = iwidth;
+ wset_vertical_scroll_bar_type (w, vertical_type);
+ return w;
+ }
+ return NULL;
+}
+
DEFUN ("set-window-scroll-bars", Fset_window_scroll_bars,
Sset_window_scroll_bars, 2, 4, 0,
doc: /* Set width and type of scroll bars of window WINDOW.
@@ -6265,35 +6299,10 @@
(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 (iwidth == 0)
- vertical_type = Qnil;
-
- if (!(NILP (vertical_type)
- || EQ (vertical_type, Qleft)
- || EQ (vertical_type, Qright)
- || EQ (vertical_type, Qt)))
- error ("Invalid type of vertical scroll bar");
-
- if (w->scroll_bar_width != iwidth
- || !EQ (w->vertical_scroll_bar_type, vertical_type))
- {
- w->scroll_bar_width = iwidth;
- wset_vertical_scroll_bar_type (w, vertical_type);
-
- adjust_window_margins (w);
-
- clear_glyph_matrix (w->current_matrix);
- w->window_end_valid = 0;
-
- ++windows_or_buffers_changed;
- adjust_glyphs (XFRAME (WINDOW_FRAME (w)));
- return Qt;
- }
-
- return Qnil;
+ struct window *w
+ = set_window_scroll_bars (decode_live_window (window),
+ width, vertical_type, horizontal_type);
+ return w ? (apply_window_adjustment (w), Qt) : Qnil;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r113862: Cleanup window fringes, margins and scroll bars adjustments.,
Dmitry Antipov <=