summaryrefslogtreecommitdiff
path: root/src/xfns.c
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2010-01-11 14:19:47 +0900
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2010-01-11 14:19:47 +0900
commit1df47e3844f79ba5f490096dd6206d50367363ba (patch)
tree7009143b03d4fcfeabe82657c051b70b19f37b84 /src/xfns.c
parent0419b8d6eb95ba71ead60aed3cad04536da25289 (diff)
downloademacs-1df47e3844f79ba5f490096dd6206d50367363ba.tar.gz
* xfns.c (x_set_menu_bar_lines) [!USE_X_TOOLKIT && !USE_GTK]:
Clear areas that will not be updated after change of menu bar lines. Clear the menu bar window's current matrix when the window gets empty.
Diffstat (limited to 'src/xfns.c')
-rw-r--r--src/xfns.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/xfns.c b/src/xfns.c
index db42e005d75..15ada091860 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1317,7 +1317,43 @@ x_set_menu_bar_lines (f, value, oldval)
#else /* not USE_X_TOOLKIT && not USE_GTK */
FRAME_MENU_BAR_LINES (f) = nlines;
change_window_heights (f->root_window, nlines - olines);
-#endif /* not USE_X_TOOLKIT */
+
+ /* If the menu bar height gets changed, the internal border below
+ the top margin has to be cleared. Also, if the menu bar gets
+ larger, the area for the added lines has to be cleared except for
+ the first menu bar line that is to be drawn later. */
+ if (nlines != olines)
+ {
+ int height = FRAME_INTERNAL_BORDER_WIDTH (f);
+ int width = FRAME_PIXEL_WIDTH (f);
+ int y;
+
+ /* height can be zero here. */
+ if (height > 0 && width > 0)
+ {
+ y = FRAME_TOP_MARGIN_HEIGHT (f);
+
+ BLOCK_INPUT;
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ 0, y, width, height, False);
+ UNBLOCK_INPUT;
+ }
+
+ if (nlines > 1 && nlines > olines)
+ {
+ y = (olines == 0 ? 1 : olines) * FRAME_LINE_HEIGHT (f);
+ height = nlines * FRAME_LINE_HEIGHT (f) - y;
+
+ BLOCK_INPUT;
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ 0, y, width, height, False);
+ UNBLOCK_INPUT;
+ }
+
+ if (nlines == 0 && WINDOWP (f->menu_bar_window))
+ clear_glyph_matrix (XWINDOW (f->menu_bar_window)->current_matrix);
+ }
+#endif /* not USE_X_TOOLKIT && not USE_GTK */
adjust_glyphs (f);
}