diff options
Diffstat (limited to 'sway')
-rw-r--r-- | sway/desktop/layer_shell.c | 14 | ||||
-rw-r--r-- | sway/desktop/transaction.c | 10 | ||||
-rw-r--r-- | sway/input/cursor.c | 2 |
3 files changed, 14 insertions, 12 deletions
diff --git a/sway/desktop/layer_shell.c b/sway/desktop/layer_shell.c index 9a35ef95..769d3a86 100644 --- a/sway/desktop/layer_shell.c +++ b/sway/desktop/layer_shell.c | |||
@@ -122,6 +122,16 @@ static struct sway_layer_surface *sway_layer_surface_create( | |||
122 | return NULL; | 122 | return NULL; |
123 | } | 123 | } |
124 | 124 | ||
125 | surface->desc.relative = &scene->tree->node; | ||
126 | |||
127 | if (!scene_descriptor_assign(&popups->node, | ||
128 | SWAY_SCENE_DESC_POPUP, &surface->desc)) { | ||
129 | sway_log(SWAY_ERROR, "Failed to allocate a popup scene descriptor"); | ||
130 | wlr_scene_node_destroy(&popups->node); | ||
131 | free(surface); | ||
132 | return NULL; | ||
133 | } | ||
134 | |||
125 | surface->tree = scene->tree; | 135 | surface->tree = scene->tree; |
126 | surface->scene = scene; | 136 | surface->scene = scene; |
127 | surface->layer_surface = scene->layer_surface; | 137 | surface->layer_surface = scene->layer_surface; |
@@ -224,10 +234,6 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) { | |||
224 | arrange_layers(surface->output); | 234 | arrange_layers(surface->output); |
225 | transaction_commit_dirty(); | 235 | transaction_commit_dirty(); |
226 | } | 236 | } |
227 | |||
228 | int lx, ly; | ||
229 | wlr_scene_node_coords(&surface->scene->tree->node, &lx, &ly); | ||
230 | wlr_scene_node_set_position(&surface->popups->node, lx, ly); | ||
231 | } | 237 | } |
232 | 238 | ||
233 | static void handle_map(struct wl_listener *listener, void *data) { | 239 | static void handle_map(struct wl_listener *listener, void *data) { |
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index e3196e3a..fd1c3d3a 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c | |||
@@ -612,13 +612,9 @@ void arrange_popups(struct wlr_scene_tree *popups) { | |||
612 | struct sway_popup_desc *popup = scene_descriptor_try_get(node, | 612 | struct sway_popup_desc *popup = scene_descriptor_try_get(node, |
613 | SWAY_SCENE_DESC_POPUP); | 613 | SWAY_SCENE_DESC_POPUP); |
614 | 614 | ||
615 | // the popup layer may have popups from layer_shell surfaces, in this | 615 | int lx, ly; |
616 | // case those don't have a scene descriptor, so lets skip those here. | 616 | wlr_scene_node_coords(popup->relative, &lx, &ly); |
617 | if (popup) { | 617 | wlr_scene_node_set_position(node, lx, ly); |
618 | int lx, ly; | ||
619 | wlr_scene_node_coords(popup->relative, &lx, &ly); | ||
620 | wlr_scene_node_set_position(node, lx, ly); | ||
621 | } | ||
622 | } | 618 | } |
623 | } | 619 | } |
624 | 620 | ||
diff --git a/sway/input/cursor.c b/sway/input/cursor.c index f25439cb..25fa603e 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c | |||
@@ -92,7 +92,7 @@ struct sway_node *node_at_coords( | |||
92 | if (!con) { | 92 | if (!con) { |
93 | struct sway_popup_desc *popup = | 93 | struct sway_popup_desc *popup = |
94 | scene_descriptor_try_get(current, SWAY_SCENE_DESC_POPUP); | 94 | scene_descriptor_try_get(current, SWAY_SCENE_DESC_POPUP); |
95 | if (popup) { | 95 | if (popup && popup->view) { |
96 | con = popup->view->container; | 96 | con = popup->view->container; |
97 | } | 97 | } |
98 | } | 98 | } |