diff options
Diffstat (limited to 'include/rootston')
-rw-r--r-- | include/rootston/desktop.h | 3 | ||||
-rw-r--r-- | include/rootston/seat.h | 17 | ||||
-rw-r--r-- | include/rootston/view.h | 8 |
3 files changed, 22 insertions, 6 deletions
diff --git a/include/rootston/desktop.h b/include/rootston/desktop.h index 10e5bbc6..c245eb09 100644 --- a/include/rootston/desktop.h +++ b/include/rootston/desktop.h @@ -23,7 +23,7 @@ struct roots_output { }; struct roots_desktop { - struct wlr_list *views; + struct wl_list views; // roots_view::link struct wl_list outputs; struct timespec last_frame; @@ -60,6 +60,7 @@ struct roots_desktop *desktop_create(struct roots_server *server, struct roots_config *config); void desktop_destroy(struct roots_desktop *desktop); +void view_init(struct roots_view *view, struct roots_desktop *desktop); void view_destroy(struct roots_view *view); struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy); diff --git a/include/rootston/seat.h b/include/rootston/seat.h index dad8bbc4..7822bb70 100644 --- a/include/rootston/seat.h +++ b/include/rootston/seat.h @@ -14,7 +14,8 @@ struct roots_seat { int32_t touch_id; double touch_x, touch_y; - struct roots_view *focus; + struct wl_list views; // roots_seat_view::link + bool has_focus; struct wl_list keyboards; struct wl_list pointers; @@ -22,6 +23,14 @@ struct roots_seat { struct wl_list tablet_tools; }; +struct roots_seat_view { + struct roots_seat *seat; + struct roots_view *view; + struct wl_list link; // roots_seat::views + + struct wl_listener view_destroy; +}; + struct roots_pointer { struct roots_seat *seat; struct wlr_input_device *device; @@ -60,7 +69,11 @@ void roots_seat_configure_xcursor(struct roots_seat *seat); bool roots_seat_has_meta_pressed(struct roots_seat *seat); -void roots_seat_focus_view(struct roots_seat *seat, struct roots_view *view); +struct roots_view *roots_seat_get_focus(struct roots_seat *seat); + +void roots_seat_set_focus(struct roots_seat *seat, struct roots_view *view); + +void roots_seat_cycle_focus(struct roots_seat *seat); void roots_seat_begin_move(struct roots_seat *seat, struct roots_view *view); diff --git a/include/rootston/view.h b/include/rootston/view.h index 66fc88bc..0f13b2d6 100644 --- a/include/rootston/view.h +++ b/include/rootston/view.h @@ -9,7 +9,6 @@ struct roots_wl_shell_surface { struct roots_view *view; - // TODO: Maybe destroy listener should go in roots_view struct wl_listener destroy; struct wl_listener request_move; struct wl_listener request_resize; @@ -22,7 +21,6 @@ struct roots_wl_shell_surface { struct roots_xdg_surface_v6 { struct roots_view *view; - // TODO: Maybe destroy listener should go in roots_view struct wl_listener commit; struct wl_listener destroy; struct wl_listener request_move; @@ -35,7 +33,6 @@ struct roots_xdg_surface_v6 { struct roots_xwayland_surface { struct roots_view *view; - // TODO: Maybe destroy listener should go in roots_view struct wl_listener destroy; struct wl_listener request_configure; struct wl_listener request_move; @@ -55,6 +52,7 @@ enum roots_view_type { struct roots_view { struct roots_desktop *desktop; + struct wl_list link; // roots_desktop::views double x, y; float rotation; @@ -90,6 +88,10 @@ struct roots_view { }; struct wlr_surface *wlr_surface; + struct { + struct wl_signal destroy; + } events; + // TODO: This would probably be better as a field that's updated on a // configure event from the xdg_shell // If not then this should follow the typical type/impl pattern we use |