summaryrefslogtreecommitdiffstats
path: root/include/sway/tree/view.h
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-07-31 18:41:30 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-07-31 18:41:30 +1000
commitde86d65627e96cffe77f4abf11c4a0b982326ff9 (patch)
tree1a3a914fdf561884b1bb0425d51d15684b629b3a /include/sway/tree/view.h
parentMerge pull request #2390 from emersion/fix-fullscreen-segfault (diff)
downloadsway-de86d65627e96cffe77f4abf11c4a0b982326ff9.tar.gz
sway-de86d65627e96cffe77f4abf11c4a0b982326ff9.tar.zst
sway-de86d65627e96cffe77f4abf11c4a0b982326ff9.zip
Fix popups
Fixes the render and container_at order for popups. Fixes #2210 For rendering: * render_view_surfaces has been renamed to render_view_toplevels * render_view_toplevels now uses output_surface_for_each_surface (which is now public), as that function uses wlr_surface_for_each_surface which doesn't descend into popups * Views now have a for_each_popup iterator, which is used by the renderer to render the focused view's popups * When rendering a popup, toplevels (xdg subsurfaces) of that popup are also rendered For sending frame done, the logic has been updated to match the rendering logic: * send_frame_done_container no longer descends into popups * for_each_popup is used to send frame done to the focused view's popups and their child toplevels For container_at: * floating_container_at is now static, which means it had to be moved higher in the file. * container_at now considers popups for the focused view before checking containers. * tiling_container_at has been introduced, so that it doesn't call container_at recursively (it would check popups recursively if it did)
Diffstat (limited to 'include/sway/tree/view.h')
-rw-r--r--include/sway/tree/view.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h
index 0152ed55..9f6d36fe 100644
--- a/include/sway/tree/view.h
+++ b/include/sway/tree/view.h
@@ -47,6 +47,8 @@ struct sway_view_impl {
47 bool (*has_client_side_decorations)(struct sway_view *view); 47 bool (*has_client_side_decorations)(struct sway_view *view);
48 void (*for_each_surface)(struct sway_view *view, 48 void (*for_each_surface)(struct sway_view *view,
49 wlr_surface_iterator_func_t iterator, void *user_data); 49 wlr_surface_iterator_func_t iterator, void *user_data);
50 void (*for_each_popup)(struct sway_view *view,
51 wlr_surface_iterator_func_t iterator, void *user_data);
50 void (*close)(struct sway_view *view); 52 void (*close)(struct sway_view *view);
51 void (*destroy)(struct sway_view *view); 53 void (*destroy)(struct sway_view *view);
52}; 54};
@@ -248,9 +250,18 @@ void view_close(struct sway_view *view);
248 250
249void view_damage_from(struct sway_view *view); 251void view_damage_from(struct sway_view *view);
250 252
253/**
254 * Iterate all surfaces of a view (toplevels + popups).
255 */
251void view_for_each_surface(struct sway_view *view, 256void view_for_each_surface(struct sway_view *view,
252 wlr_surface_iterator_func_t iterator, void *user_data); 257 wlr_surface_iterator_func_t iterator, void *user_data);
253 258
259/**
260 * Iterate all popups recursively.
261 */
262void view_for_each_popup(struct sway_view *view,
263 wlr_surface_iterator_func_t iterator, void *user_data);
264
254// view implementation 265// view implementation
255 266
256void view_init(struct sway_view *view, enum sway_view_type type, 267void view_init(struct sway_view *view, enum sway_view_type type,