emacs-devel
[Top][All Lists]
Advanced

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

Re: Patch to fix frame positioning with negative top/left values onWindo


From: Fran Litterio
Subject: Re: Patch to fix frame positioning with negative top/left values onWindows
Date: Sat, 1 Apr 2006 11:22:09 -0500

I just checked the CVS archive, and my patch has not been applied. 
I've been running with it for well over a year with no negative
side-effects. I would like to see it applied.
--
Fran Litterio

On 4/1/06, Drew Adams <address@hidden> wrote:
> I've been using a 2005-06-26 CVS snapshot on Windows that had this bug. I
> thought that this had been fixed since that snapshot. I just tried a
> 2006-03-20 snapshot on Windows, however, and the same bug is still there.
>
> Did Fran's patch never get applied, or doesn't it work? His patch dates from
> January of 2005 - soon to be a year and a half! The bug symptoms are the
> same as before. See thread "Improved patch to fix frame positioning bug on
> Windows" from 2005-01-14.
>
>     -----Original Message-----
>     From: address@hidden
>     [mailto:address@hidden Behalf Of
>     Francis Litterio
>     Sent: Thursday, July 07, 2005 9:24 AM
>     To: address@hidden
>     Cc: address@hidden
>     Subject: Patch to fix frame positioning with negative top/left values
>     onWindows
>
>     Emacs developers,
>
>     This patch to the CVS Emacs sources fixes the way that function
>     x_calc_absolute_position() accounts for the Windows-drawn borders around
>     a frame when converting a negative 'top or 'left parameter into the
>     equivalent positive value.
>
>     I have submitted this patch before, but RMS told me that the FSF needed
>     a copyright assignment from me before it could applied.  The FSF now has
>     mysigned the copyright assignment, so please let me know if there's any
>     problem with this patch.  I've been running Emacs with it for some
>     months with no problems.
>     --
>     Francis Litterio
>     franl <at> world . std . com
>
>
>     diff -w -u -u -w -r1.228 w32term.c
>     --- w32term.c       4 Jul 2005 16:06:37 -0000       1.228
>     +++ w32term.c       7 Jul 2005 16:19:39 -0000
>     @@ -5438,17 +5438,58 @@
>      {
>        int flags = f->size_hint_flags;
>
>     -  /* Treat negative positions as relative to the leftmost bottommost
>     +  /* left_right_borders_width holds the sum of the widths of
>     the frame's left
>     +     and right borders (in pixels) drawn by Windows. */
>     +
>     +  unsigned int left_right_borders_width = 8;   /* A sensible
>     default value. */
>     +
>     +  /* top_bottom_borders_height holds the sum of the heights of
>     the frame's top and
>     +     bottom borders (in pixels) drawn by Windows. */
>     +
>     +  unsigned int top_bottom_borders_height = 32;  /* A sensible
>     default value. */
>     +
>     +  /* Now obtain the actual values of the above two variables.
>     If we fail to
>     +     obtain the actual values, we will use the defaults
>     assigned above.  We compute
>     +     the border width (height) by subtracting the width
>     (height) of the frame's
>     +     client area from the width (height) of the frame's entire window.
>     +  */
>     +
>     +  WINDOWPLACEMENT wp = { 0 };
>     +
>     +  BOOL status = GetWindowPlacement (FRAME_W32_WINDOW (f), &wp);
>     +
>     +  if (status != FALSE)
>     +  {
>     +      RECT client_rect = { 0 };
>     +
>     +      status = GetClientRect (FRAME_W32_WINDOW (f), &client_rect);
>     +
>     +      if (status != FALSE)
>     +      {
>     +     left_right_borders_width =
>     +         (wp.rcNormalPosition.right - wp.rcNormalPosition.left) -
>     +         (client_rect.right - client_rect.left);
>     +
>     +     top_bottom_borders_height =
>     +         (wp.rcNormalPosition.bottom - wp.rcNormalPosition.top) -
>     +         (client_rect.bottom - client_rect.top);
>     +      }
>     +  }
>     +
>     +  /* Treat negative positions as relative to the rightmost bottommost
>           position that fits on the screen.  */
>        if (flags & XNegative)
>          f->left_pos = (FRAME_W32_DISPLAY_INFO (f)->width
>                    - FRAME_PIXEL_WIDTH (f)
>     -              + f->left_pos);
>     +              + f->left_pos
>     +              - (left_right_borders_width - 1));
>
>        if (flags & YNegative)
>          f->top_pos = (FRAME_W32_DISPLAY_INFO (f)->height
>                   - FRAME_PIXEL_HEIGHT (f)
>     -             + f->top_pos);
>     +             + f->top_pos
>     +                  - (top_bottom_borders_height - 1));
>     +
>        /* The left_pos and top_pos
>           are now relative to the top and left screen edges,
>           so the flags should correspond.  */
>
>
>
>     _______________________________________________
>     Emacs-devel mailing list
>     address@hidden
>     http://lists.gnu.org/mailman/listinfo/emacs-devel
>
>




reply via email to

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