=== modified file 'src/window.c' *** src/window.c 2013-10-02 12:08:27 +0000 --- src/window.c 2013-10-04 08:05:28 +0000 *************** *** 935,945 **** WINDOW_RIGHT_EDGE_X (w), WINDOW_BOTTOM_EDGE_Y (w)); } static void ! calc_absolute_offset (struct window *w, int *add_x, int *add_y) { ! struct frame *f = XFRAME (w->frame); *add_y = f->top_pos; #ifdef FRAME_MENUBAR_HEIGHT *add_y += FRAME_MENUBAR_HEIGHT (f); #endif --- 935,952 ---- WINDOW_RIGHT_EDGE_X (w), WINDOW_BOTTOM_EDGE_Y (w)); } + #ifdef HAVE_WINDOW_SYSTEM static void ! calc_absolute_offset (struct frame *f, int *add_x, int *add_y) { ! eassert (FRAME_WINDOW_P (f)); ! *add_y = f->top_pos; + #ifdef HAVE_X_WINDOWS + *add_y += FRAME_X_OUTPUT (f)->y_pixels_outer_diff; + #elif defined (HAVE_NTGUI) + *add_y += f->y_pixels_diff; + #endif #ifdef FRAME_MENUBAR_HEIGHT *add_y += FRAME_MENUBAR_HEIGHT (f); #endif *************** *** 951,961 **** --- 958,975 ---- #ifdef FRAME_NS_TITLEBAR_HEIGHT *add_y += FRAME_NS_TITLEBAR_HEIGHT (f); #endif + *add_x = f->left_pos; + #ifdef HAVE_X_WINDOWS + *add_x += FRAME_X_OUTPUT (f)->x_pixels_outer_diff; + #elif defined (HAVE_NTGUI) + *add_x += f->x_pixels_diff; + #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, *************** *** 972,987 **** of just the text area, use `window-inside-absolute-pixel-edges'. */) (Lisp_Object window) { 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, WINDOW_BOTTOM_EDGE_Y (w) + add_y); } DEFUN ("window-inside-edges", Fwindow_inside_edges, Swindow_inside_edges, 0, 1, 0, doc: /* Return a list of the edge coordinates of WINDOW. --- 986,1009 ---- of just the text area, use `window-inside-absolute-pixel-edges'. */) (Lisp_Object window) { + #if HAVE_WINDOW_SYSTEM register struct window *w = decode_valid_window (window); + struct frame *f = XFRAME (w->frame); int add_x, add_y; ! if (FRAME_WINDOW_P (f)) ! { ! calc_absolute_offset (f, &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, WINDOW_BOTTOM_EDGE_Y (w) + add_y); } + else + #endif + return Fwindow_pixel_edges (window); + } DEFUN ("window-inside-edges", Fwindow_inside_edges, Swindow_inside_edges, 0, 1, 0, doc: /* Return a list of the edge coordinates of WINDOW. *************** *** 1053,1062 **** display margins, fringes, header line, and/or mode line. */) (Lisp_Object window) { ! 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) --- 1075,1088 ---- display margins, fringes, header line, and/or mode line. */) (Lisp_Object window) { ! #if HAVE_WINDOW_SYSTEM ! register struct window *w = decode_valid_window (window); ! struct frame *f = XFRAME (w->frame); int add_x, add_y; ! if (FRAME_WINDOW_P (f)) ! { ! calc_absolute_offset (f, &add_x, &add_y); return list4i ((WINDOW_BOX_LEFT_EDGE_X (w) + WINDOW_LEFT_MARGIN_WIDTH (w) *************** *** 1069,1074 **** --- 1095,1104 ---- (WINDOW_BOTTOM_EDGE_Y (w) - WINDOW_MODE_LINE_HEIGHT (w) + add_y)); } + else + #endif + return Fwindow_inside_pixel_edges (window); + } /* Test if the character at column X, row Y is within window W. If it is not, return ON_NOTHING;