From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Drew Adams" Newsgroups: gmane.emacs.devel Subject: RE: Patch to fix frame positioning with negative top/left values onWindows Date: Fri, 31 Mar 2006 23:44:59 -0800 Message-ID: References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1143877536 14899 80.91.229.2 (1 Apr 2006 07:45:36 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sat, 1 Apr 2006 07:45:36 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Apr 01 09:45:34 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1FPanY-0005mb-Ue for ged-emacs-devel@m.gmane.org; Sat, 01 Apr 2006 09:45:29 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FPanY-0007Ic-Fj for ged-emacs-devel@m.gmane.org; Sat, 01 Apr 2006 02:45:28 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FPanK-0007IF-Oj for emacs-devel@gnu.org; Sat, 01 Apr 2006 02:45:14 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FPanI-0007Hj-Q7 for emacs-devel@gnu.org; Sat, 01 Apr 2006 02:45:14 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FPanI-0007Hg-MN for emacs-devel@gnu.org; Sat, 01 Apr 2006 02:45:12 -0500 Original-Received: from [141.146.126.228] (helo=agminet01.oracle.com) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA:24) (Exim 4.52) id 1FPapr-0005Cp-L2 for emacs-devel@gnu.org; Sat, 01 Apr 2006 02:47:51 -0500 Original-Received: from rgmsgw301.us.oracle.com (rgmsgw301.us.oracle.com [138.1.186.50]) by agminet01.oracle.com (Switch-3.1.7/Switch-3.1.7) with ESMTP id k317jA0g016919; Sat, 1 Apr 2006 01:45:10 -0600 Original-Received: from rgmsgw301.us.oracle.com (localhost [127.0.0.1]) by rgmsgw301.us.oracle.com (Switch-3.1.7/Switch-3.1.7) with ESMTP id k317jA0p001887; Sat, 1 Apr 2006 00:45:10 -0700 Original-Received: from dradamslap (dhcp-amer-whq-csvpn-gw3-141-144-82-76.vpn.oracle.com [141.144.82.76]) by rgmsgw301.us.oracle.com (Switch-3.1.7/Switch-3.1.7) with SMTP id k317j9Bl001879 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO); Sat, 1 Apr 2006 00:45:09 -0700 Original-To: "Francis Litterio" , X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.6604 (9.0.2911.0) In-Reply-To: X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506 Importance: Normal X-Brightmail-Tracker: AAAAAQAAAAI= X-Whitelist: TRUE X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:52277 Archived-At: 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: emacs-devel-bounces+drew.adams=oracle.com@gnu.org [mailto:emacs-devel-bounces+drew.adams=oracle.com@gnu.org]On Behalf Of Francis Litterio Sent: Thursday, July 07, 2005 9:24 AM To: emacs-devel@gnu.org Cc: help-emacs-windows@gnu.org 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 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 Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel