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: YAMAMOTO Mitsuharu
Subject: bug#5908: tooltip-show breaks with multiline tip on Emacs for Windows v22.2.1
Date: Sat, 10 Apr 2010 07:13:32 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

>>>>> 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]