tooltips follows the pointer, whereas most of the other transient is surface relative.
Signed-off-by: Tiago Vignatti <tiago.vigna...@intel.com> --- src/xserver-launcher.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/xserver-launcher.c b/src/xserver-launcher.c index 7c7bd0b..2cf5d1f 100644 --- a/src/xserver-launcher.c +++ b/src/xserver-launcher.c @@ -133,6 +133,8 @@ struct weston_wm_window { struct weston_wm_window *transient_for; uint32_t protocols; xcb_atom_t type; + const char *atom_name; + uint32_t configured_x, configured_y; int width, height; }; @@ -321,6 +323,7 @@ weston_wm_window_read_properties(struct weston_wm_window *window) break; case XCB_ATOM_ATOM: atom = xcb_get_property_value(reply); + window->atom_name = get_atom_name(wm->conn, *atom); *(xcb_atom_t *) p = *atom; break; case TYPE_WM_PROTOCOLS: @@ -644,6 +647,8 @@ weston_wm_handle_configure_notify(struct weston_wm *wm, xcb_generic_event_t *eve if (configure_notify->window != window->id) return; + window->configured_x = configure_notify->x; + window->configured_y = configure_notify->y; window->width = configure_notify->width; window->height = configure_notify->height; @@ -1788,19 +1793,23 @@ xserver_map_shell_surface(struct weston_wm *wm, shell_interface->create_shell_surface(shell_interface->shell, window->surface, &window->shsurf); - if (!window->transient_for) + if (!window->transient_for) { shell_interface->set_toplevel(window->shsurf); - else { - parent = hash_table_lookup(wm->window_hash, - window->transient_for->id); + return; + } + + parent = hash_table_lookup(wm->window_hash, window->transient_for->id); + if (!strcmp(window->atom_name, "_NET_WM_WINDOW_TYPE_TOOLTIP")) { pointer = wm->server->compositor->seat->pointer; - shell_interface->set_transient(window->shsurf, - parent->shsurf, - wl_fixed_to_int(pointer.x) - - parent->surface->geometry.x, - wl_fixed_to_int(pointer.y) - - parent->surface->geometry.y + offset_y, - WL_SHELL_SURFACE_TRANSIENT_METHOD_INACTIVE); + shell_interface->set_transient(window->shsurf, parent->shsurf, + wl_fixed_to_int(pointer.x) - parent->surface->geometry.x, + wl_fixed_to_int(pointer.y) - parent->surface->geometry.y + + offset_y, + WL_SHELL_SURFACE_TRANSIENT_METHOD_INACTIVE); + } else { + shell_interface->set_transient(window->shsurf, parent->shsurf, + window->configured_x, window->configured_y, + WL_SHELL_SURFACE_TRANSIENT_METHOD_INACTIVE); } } -- 1.7.9.5 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel