GNU bug report logs -
#5908
tooltip-show breaks with multiline tip on Emacs for Windows v22.2.1
Previous Next
Reported by: "D Chiesa" <dpchiesa <at> hotmail.com>
Date: Thu, 8 Apr 2010 18:27:02 UTC
Severity: normal
Merged with 2423
Done: Chong Yidong <cyd <at> stupidchicken.com>
Bug is archived. No further changes may be made.
Full log
Message #28 received at 5908 <at> debbugs.gnu.org (full text, mbox):
This looks cleaner, can you install it?
Jan D.
YAMAMOTO Mitsuharu skrev 2010-04-10 00.13:
>>>>>> On Fri, 09 Apr 2010 18:58:51 +0200, Jan Djärv<jan.h.d <at> swipnet.se> said:
>
>>> I though this was a duplicate of the (still open) bug#2423. Maybe
>>> it was fixed and never closed, but I don't recall it. (Multiline
>>> tooltips still don't work the first time in GNU/Linux.)
>
>> I have checked in a fix for multiline tooltips the first time for X.
>> try_window aborts if fonts_changed_p is set, and the first time one
>> loads the tip font, this is what happens.
>
> Or maybe we could introduce a flag for try_window to ignore
> fonts_changed_p, because glyph matrices are not adjusted for the
> tooltip case, anyway.
>
> YAMAMOTO Mitsuharu
> mituharu <at> math.s.chiba-u.ac.jp
>
> === modified file 'src/dispextern.h'
> *** src/dispextern.h 2010-03-22 07:26:56 +0000
> --- src/dispextern.h 2010-04-09 22:04:46 +0000
> ***************
> *** 2831,2836 ****
> --- 2831,2840 ----
> XRectangle *));
> #endif
>
> + /* Flags passed to try_window. */
> + #define TRY_WINDOW_CHECK_MARGINS (1<< 0)
> + #define TRY_WINDOW_IGNORE_FONTS_CHANGE (1<< 1)
> +
> /* Defined in fringe.c */
>
> int lookup_fringe_bitmap (Lisp_Object);
>
> === modified file 'src/xdisp.c'
> *** src/xdisp.c 2010-04-05 15:46:29 +0000
> --- src/xdisp.c 2010-04-09 22:04:15 +0000
> ***************
> *** 13603,13609 ****
> = try_window_reusing_current_matrix (w)))
> {
> IF_DEBUG (debug_method_add (w, "1"));
> ! if (try_window (window, startp, 1)< 0)
> /* -1 means we need to scroll.
> 0 means we need new matrices, but fonts_changed_p
> is set in that case, so we will detect it below. */
> --- 13603,13609 ----
> = try_window_reusing_current_matrix (w)))
> {
> IF_DEBUG (debug_method_add (w, "1"));
> ! if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS)< 0)
> /* -1 means we need to scroll.
> 0 means we need new matrices, but fonts_changed_p
> is set in that case, so we will detect it below. */
> ***************
> *** 13954,13966 ****
> Value is 1 if successful. It is zero if fonts were loaded during
> redisplay which makes re-adjusting glyph matrices necessary, and -1
> if point would appear in the scroll margins.
> ! (We check that only if CHECK_MARGINS is nonzero. */
>
> int
> ! try_window (window, pos, check_margins)
> Lisp_Object window;
> struct text_pos pos;
> ! int check_margins;
> {
> struct window *w = XWINDOW (window);
> struct it it;
> --- 13954,13968 ----
> Value is 1 if successful. It is zero if fonts were loaded during
> redisplay which makes re-adjusting glyph matrices necessary, and -1
> if point would appear in the scroll margins.
> ! (We check the former only if TRY_WINDOW_IGNORE_FONTS_CHANGE is
> ! unset in FLAGS, and the latter only if TRY_WINDOW_CHECK_MARGINS is
> ! set in FLAGS.) */
>
> int
> ! try_window (window, pos, flags)
> Lisp_Object window;
> struct text_pos pos;
> ! int flags;
> {
> struct window *w = XWINDOW (window);
> struct it it;
> ***************
> *** 13982,13993 ****
> {
> if (display_line (&it))
> last_text_row = it.glyph_row - 1;
> ! if (fonts_changed_p)
> return 0;
> }
>
> /* Don't let the cursor end in the scroll margins. */
> ! if (check_margins
> && !MINI_WINDOW_P (w))
> {
> int this_scroll_margin;
> --- 13984,13995 ----
> {
> if (display_line (&it))
> last_text_row = it.glyph_row - 1;
> ! if (fonts_changed_p&& !(flags& TRY_WINDOW_IGNORE_FONTS_CHANGE))
> return 0;
> }
>
> /* Don't let the cursor end in the scroll margins. */
> ! if ((flags& TRY_WINDOW_CHECK_MARGINS)
> && !MINI_WINDOW_P (w))
> {
> int this_scroll_margin;
>
> === modified file 'src/xfns.c'
> *** src/xfns.c 2010-03-22 07:26:56 +0000
> --- src/xfns.c 2010-04-09 22:03:33 +0000
> ***************
> *** 5196,5202 ****
> clear_glyph_matrix (w->desired_matrix);
> clear_glyph_matrix (w->current_matrix);
> SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
> ! try_window (FRAME_ROOT_WINDOW (f), pos, 0);
>
> /* Compute width and height of the tooltip. */
> width = height = 0;
> --- 5196,5202 ----
> clear_glyph_matrix (w->desired_matrix);
> clear_glyph_matrix (w->current_matrix);
> SET_TEXT_POS (pos, BEGV, BEGV_BYTE);
> ! try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE);
>
> /* Compute width and height of the tooltip. */
> width = height = 0;
This bug report was last modified 14 years and 202 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.