Mercurial > emacs
changeset 111358:4cf33ba4068d
* xfns.c (x_real_positions): Only use _NET_FRAME_EXTENTS if our
parent is the root window. Check this after traversing window tree.
author | Jan D. <jan.h.d@swipnet.se> |
---|---|
date | Thu, 04 Nov 2010 13:37:17 +0100 |
parents | 57237ed26a84 |
children | 57927f4ca500 |
files | src/ChangeLog src/xfns.c |
diffstat | 2 files changed, 33 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Thu Nov 04 13:17:46 2010 +0100 +++ b/src/ChangeLog Thu Nov 04 13:37:17 2010 +0100 @@ -1,5 +1,8 @@ 2010-11-04 Jan Djärv <jan.h.d@swipnet.se> + * xfns.c (x_real_positions): Only use _NET_FRAME_EXTENTS if our + parent is the root window. Check this after traversing window tree. + * xterm.c (x_term_init): Initialize Xatom_net_frame_extents. * xterm.h (struct x_display_info): Xatom_net_frame_extents is new.
--- a/src/xfns.c Thu Nov 04 13:17:46 2010 +0100 +++ b/src/xfns.c Thu Nov 04 13:37:17 2010 +0100 @@ -532,7 +532,7 @@ int win_x, win_y, outer_x, outer_y; int real_x = 0, real_y = 0; int had_errors = 0; - Window win; + Window win = f->output_data.x->parent_desc; Atom actual_type; unsigned long actual_size, bytes_remaining; int i, rc, actual_format; @@ -546,47 +546,7 @@ x_catch_errors (dpy); - win = FRAME_OUTER_WINDOW (f); - /* Try _NET_FRAME_EXTENTS first. */ - rc = XGetWindowProperty (dpy, win, dpyinfo->Xatom_net_frame_extents, - 0, max_len, False, target_type, - &actual_type, &actual_format, &actual_size, - &bytes_remaining, &tmp_data); - - if (rc == Success && actual_type == target_type && !x_had_errors_p (dpy) - && actual_size == 4 && actual_format == 32) - { - int ign; - Window rootw; - - XGetGeometry (FRAME_X_DISPLAY (f), win, - &rootw, &real_x, &real_y, &ign, &ign, &ign, &ign); - long *fe = (long *)tmp_data; - - FRAME_X_OUTPUT (f)->x_pixels_outer_diff = fe[0]; - FRAME_X_OUTPUT (f)->y_pixels_outer_diff = fe[2]; - *xptr = real_x - fe[0]; - *yptr = real_y - fe[2]; - - if (FRAME_X_WINDOW (f) != win) - { - XGetGeometry (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), - &rootw, &real_x, &real_y, &ign, &ign, &ign, &ign); - - f->x_pixels_diff = real_x; - f->y_pixels_diff = real_y; - } - - if (tmp_data) XFree (tmp_data); - x_uncatch_errors (); - UNBLOCK_INPUT; - return; - } - - if (tmp_data) XFree (tmp_data); - - win = f->output_data.x->parent_desc; - if (win == FRAME_X_DISPLAY_INFO (f)->root_window) + if (win == dpyinfo->root_window) win = FRAME_OUTER_WINDOW (f); /* This loop traverses up the containment tree until we hit the root @@ -671,6 +631,34 @@ had_errors = x_had_errors_p (FRAME_X_DISPLAY (f)); } + + if (dpyinfo->root_window == f->output_data.x->parent_desc) + { + /* Try _NET_FRAME_EXTENTS if our parent is the root window. */ + rc = XGetWindowProperty (dpy, win, dpyinfo->Xatom_net_frame_extents, + 0, max_len, False, target_type, + &actual_type, &actual_format, &actual_size, + &bytes_remaining, &tmp_data); + + if (rc == Success && actual_type == target_type && !x_had_errors_p (dpy) + && actual_size == 4 && actual_format == 32) + { + int ign; + Window rootw; + + XGetGeometry (FRAME_X_DISPLAY (f), win, + &rootw, &real_x, &real_y, &ign, &ign, &ign, &ign); + long *fe = (long *)tmp_data; + + outer_x = -fe[0]; + outer_y = -fe[2]; + real_x -= fe[0]; + real_y -= fe[2]; + } + } + + if (tmp_data) XFree (tmp_data); + x_uncatch_errors (); UNBLOCK_INPUT;