bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#5908: tooltip-show breaks with multiline tip on Emacs for Windows v2


From: Jan Djärv
Subject: bug#5908: tooltip-show breaks with multiline tip on Emacs for Windows v22.2.1
Date: Sat, 10 Apr 2010 08:45:04 +0200
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; sv-SE; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4

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@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@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;






reply via email to

[Prev in Thread] Current Thread [Next in Thread]