{
assert(parent != NULL);
+ shell_surface_set_parent(shsurf, parent);
+
+ surface_clear_next_states(shsurf);
+
shsurf->transient.x = x;
shsurf->transient.y = y;
shsurf->transient.flags = flags;
struct weston_surface *parent =
wl_resource_get_user_data(parent_resource);
- shell_surface_set_parent(shsurf, parent);
-
- surface_clear_next_states(shsurf);
set_transient(shsurf, parent, x, y, flags);
}
struct weston_shell_interface *shell_interface =
&wm->server->compositor->shell_interface;
struct weston_output *output;
+ struct weston_wm_window *parent;
if (!shell_interface->create_shell_surface)
return;
shell_interface->set_fullscreen(window->shsurf,
WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT,
0, output);
- } else if (!window->override_redirect && !window->transient_for) {
- shell_interface->set_toplevel(window->shsurf);
- return;
- } else {
+ } else if (window->override_redirect) {
shell_interface->set_xwayland(window->shsurf,
window->x,
window->y,
WL_SHELL_SURFACE_TRANSIENT_INACTIVE);
+ } else if (window->transient_for) {
+ parent = window->transient_for;
+ shell_interface->set_transient(window->shsurf,
+ parent->surface,
+ parent->x - window->x,
+ parent->y - window->y, 0);
+ } else {
+ shell_interface->set_toplevel(window->shsurf);
}
}