From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Andreas Politz Newsgroups: gmane.emacs.bugs Subject: bug#5721: Feature request: Function that returns absolute coordinates Date: Fri, 04 Oct 2013 12:33:57 +0200 Message-ID: <87txgxfhpm.fsf@hochschule-trier.de> References: <4B9E4521.9030909@yahoo.co.jp> <87fvsoemnj.fsf@hochschule-trier.de> <52480060.7020309@gmx.at> <87mwmvtz26.fsf@hochschule-trier.de> <6CBDC204-ABA9-41D4-BD59-4B66DF82B9D9@swipnet.se> <524875AC.5020104@gmx.at> <87ioxe8dxp.fsf@hochschule-trier.de> <83hacycdan.fsf@gnu.org> <87eh8283jm.fsf@hochschule-trier.de> <83bo35cz1x.fsf@gnu.org> <874n8xh23i.fsf@hochschule-trier.de> <837gdtct50.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1380882920 10378 80.91.229.3 (4 Oct 2013 10:35:20 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 4 Oct 2013 10:35:20 +0000 (UTC) Cc: 5721@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Oct 04 12:35:20 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VS2jA-0003OB-Kz for geb-bug-gnu-emacs@m.gmane.org; Fri, 04 Oct 2013 12:35:20 +0200 Original-Received: from localhost ([::1]:47222 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VS2jA-0003k4-9u for geb-bug-gnu-emacs@m.gmane.org; Fri, 04 Oct 2013 06:35:20 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:52011) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VS2j1-0003iy-Tu for bug-gnu-emacs@gnu.org; Fri, 04 Oct 2013 06:35:17 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VS2is-0003z6-W2 for bug-gnu-emacs@gnu.org; Fri, 04 Oct 2013 06:35:11 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:44977) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VS2is-0003yg-TX for bug-gnu-emacs@gnu.org; Fri, 04 Oct 2013 06:35:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1VS2ir-0003Ta-UR for bug-gnu-emacs@gnu.org; Fri, 04 Oct 2013 06:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Andreas Politz Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 04 Oct 2013 10:35:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 5721 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 5721-submit@debbugs.gnu.org id=B5721.138088285813305 (code B ref 5721); Fri, 04 Oct 2013 10:35:01 +0000 Original-Received: (at 5721) by debbugs.gnu.org; 4 Oct 2013 10:34:18 +0000 Original-Received: from localhost ([127.0.0.1]:53270 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VS2i8-0003SV-IH for submit@debbugs.gnu.org; Fri, 04 Oct 2013 06:34:17 -0400 Original-Received: from gateway-a.fh-trier.de ([143.93.54.181]:43569) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VS2i6-0003SI-8l for 5721@debbugs.gnu.org; Fri, 04 Oct 2013 06:34:15 -0400 X-Virus-Scanned: by Amavisd-new + McAfee uvscan + ClamAV [Rechenzentrum Hochschule Trier] Original-Received: from luca (dslb-146-060-061-089.pools.arcor-ip.net [146.60.61.89]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: politza) by gateway-a.fh-trier.de (Postfix) with ESMTPSA id E507F1760D77; Fri, 4 Oct 2013 12:33:57 +0200 (CEST) Original-Received: from politza by luca with local (Exim 4.72) (envelope-from ) id 1VS2hp-0000J0-8D; Fri, 04 Oct 2013 12:33:57 +0200 In-Reply-To: <837gdtct50.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 04 Oct 2013 11:55:23 +0300") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:78920 Archived-At: --=-=-= Content-Type: text/plain Eli Zaretskii writes: > One more nit, about these fragments: [...] it is better to check the > frame type at run time, [...] > #ifdef HAVE_X_WINDOWS > if (FRAME_X_P (f)) > *add_y += FRAME_X_OUTPUT (f)->y_pixels_outer_diff; > else > #elif defined (HAVE_NTGUI) > if (FRAME_W32_P (f)) > *add_y += f->y_pixels_diff; > #endif > > etc., you get the idea. I don't think that quite does what you have in mind, but I get it. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=window-absolute-pixel-v3.diff === modified file 'src/window.c' *** src/window.c 2013-10-02 12:08:27 +0000 --- src/window.c 2013-10-04 10:13:26 +0000 *************** *** 935,945 **** --- 935,974 ---- WINDOW_RIGHT_EDGE_X (w), WINDOW_BOTTOM_EDGE_Y (w)); } + #ifdef HAVE_WINDOW_SYSTEM static void calc_absolute_offset (struct window *w, int *add_x, int *add_y) { struct frame *f = XFRAME (w->frame); + + if (! FRAME_WINDOW_P (f)) + { + *add_x = *add_y = 0; + return; + } *add_y = f->top_pos; + *add_x = f->left_pos; + switch (f->output_method) + { + #ifdef HAVE_X_WINDOWS + case output_x_window: + *add_y += FRAME_X_OUTPUT (f)->y_pixels_outer_diff; + *add_x += FRAME_X_OUTPUT (f)->x_pixels_outer_diff; + break; + #endif + #ifdef HAVE_NTGUI + case output_w32: + *add_y += f->y_pixels_diff; + *add_x += f->x_pixels_diff; + break; + #endif + #ifdef HAVE_NS + case output_ns: + /* FIXME: Add proper offsets. */ + break; + #endif + } + #ifdef FRAME_MENUBAR_HEIGHT *add_y += FRAME_MENUBAR_HEIGHT (f); #endif *************** *** 951,961 **** #ifdef FRAME_NS_TITLEBAR_HEIGHT *add_y += FRAME_NS_TITLEBAR_HEIGHT (f); #endif ! *add_x = f->left_pos; #ifdef FRAME_TOOLBAR_LEFT_WIDTH *add_x += FRAME_TOOLBAR_LEFT_WIDTH (f); #endif } DEFUN ("window-absolute-pixel-edges", Fwindow_absolute_pixel_edges, Swindow_absolute_pixel_edges, 0, 1, 0, --- 980,991 ---- #ifdef FRAME_NS_TITLEBAR_HEIGHT *add_y += FRAME_NS_TITLEBAR_HEIGHT (f); #endif ! #ifdef FRAME_TOOLBAR_LEFT_WIDTH *add_x += FRAME_TOOLBAR_LEFT_WIDTH (f); #endif } + #endif /* HAVE_WINDOW_SYSTEM */ DEFUN ("window-absolute-pixel-edges", Fwindow_absolute_pixel_edges, Swindow_absolute_pixel_edges, 0, 1, 0, *************** *** 975,982 **** register struct window *w = decode_valid_window (window); int add_x, add_y; calc_absolute_offset (w, &add_x, &add_y); ! return list4i (WINDOW_LEFT_EDGE_X (w) + add_x, WINDOW_TOP_EDGE_Y (w) + add_y, WINDOW_RIGHT_EDGE_X (w) + add_x, --- 1005,1015 ---- register struct window *w = decode_valid_window (window); int add_x, add_y; + #ifdef HAVE_WINDOW_SYSTEM calc_absolute_offset (w, &add_x, &add_y); ! #else ! add_x = add_y = 0; ! #endif return list4i (WINDOW_LEFT_EDGE_X (w) + add_x, WINDOW_TOP_EDGE_Y (w) + add_y, WINDOW_RIGHT_EDGE_X (w) + add_x, *************** *** 1056,1063 **** register struct window *w = decode_live_window (window); int add_x, add_y; calc_absolute_offset (w, &add_x, &add_y); ! return list4i ((WINDOW_BOX_LEFT_EDGE_X (w) + WINDOW_LEFT_MARGIN_WIDTH (w) + WINDOW_LEFT_FRINGE_WIDTH (w) + add_x), --- 1089,1099 ---- register struct window *w = decode_live_window (window); int add_x, add_y; + #ifdef HAVE_WINDOW_SYSTEM calc_absolute_offset (w, &add_x, &add_y); ! #else ! add_x = add_y = 0; ! #endif return list4i ((WINDOW_BOX_LEFT_EDGE_X (w) + WINDOW_LEFT_MARGIN_WIDTH (w) + WINDOW_LEFT_FRINGE_WIDTH (w) + add_x), --=-=-= Content-Type: text/plain -ap --=-=-=--