Subject: Re: bug#1545: 23.0.60; scroll-bar-mode and fringe

From: Daiki Ueno <[email-masked]>
Date: Wed, 17 Dec 2008 12:03:42 +0900

>>>>> In <[email-masked]> 
>>>>>	TAKAHASHI Naoto <[email-masked]> wrote:
> $ emacs -Q
> M-x scroll-bar-mode RET
> M-< C-e 1 2 3 4 5 6 7

> The character '6' is not displayed.

I've also experienced the same problem for months.  I just did
git-bisect to find the cause.  Here is the log:

git-bisect good a7ed2949c9a3769de4c44c8e9b1000fa708860e1
git-bisect bad 64ed432df346190927205d0c7f5adb7c32ba13ea
git-bisect bad 0509621969ae0bf6cc78f58bb0aa6c8c2c0109ee
git-bisect skip ca88bf954c086af59495e5c7f1b6e6de5c4b7124
git-bisect skip e7b1f8ef280ab2a452d01b5d67d4319d56fc6b28

commit e7b1f8ef280ab2a452d01b5d67d4319d56fc6b28
Author: Jan Djärv <[email-masked]>
Date:   Sat Mar 1 14:56:53 2008 +0000

    (xg_resize_outer_widget): Only do one of set_geometry or
    set_char_size.
    (xg_frame_resized): Renamed from xg_resize_widgets.  Remove all
    operations on widgets here.  Just set frame size if needed.
    (flush_and_sync, x_wm_size_hint_off, xg_pack_tool_bar): New functions.
    (xg_frame_set_char_size): Call x_wm_size_hint_off before resizing.
    (x_wm_set_size_hint): Set size hints on the edit widget only, not
    the whole frame.
    (xg_create_tool_bar): Move attachement of the tool bar to
    xg_pack_tool_bar.  Do not attach the tool bar if there are no items.
    (free_frame_tool_bar): Remove call to SET_FRAME_GARBAGED.

This change introduced an extra guard around resize handling (in
gtkutil.c:xg_frame_resized), so that the layout logic no longer takes
place even if scroll-bar is turned off.

+      if (rows != FRAME_LINES (f) || columns != FRAME_COLS (f)
+          || (f->new_text_lines != 0 && f->new_text_lines != rows)
+          || (f->new_text_cols != 0 && f->new_text_cols != columns))
+        {
+          change_frame_size (f, rows, columns, 0, 1, 0);
+          SET_FRAME_GARBAGED (f);
+          cancel_mouse_face (f);
+        }
-      change_frame_size (f, rows, columns, 0, 1, 0);
-      SET_FRAME_GARBAGED (f);
-      cancel_mouse_face (f);

Regards,
-- 
Daiki Ueno