aboutsummaryrefslogtreecommitdiff
path: root/rootston/desktop.c
diff options
context:
space:
mode:
Diffstat (limited to 'rootston/desktop.c')
-rw-r--r--rootston/desktop.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/rootston/desktop.c b/rootston/desktop.c
index fbaf9cac..f0495fa1 100644
--- a/rootston/desktop.c
+++ b/rootston/desktop.c
@@ -1,6 +1,7 @@
#define _POSIX_C_SOURCE 199309L
#include <time.h>
#include <stdlib.h>
+#include <wlr/types/wlr_box.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_cursor.h>
#include <wlr/types/wlr_gamma_control.h>
@@ -16,6 +17,34 @@ void view_destroy(struct roots_view *view) {
free(view);
}
+void view_get_input_bounds(struct roots_view *view, struct wlr_box *box) {
+ if (view->get_input_bounds) {
+ view->get_input_bounds(view, box);
+ return;
+ }
+ box->x = box->y = 0;
+}
+
+void view_activate(struct roots_view *view, bool activate) {
+ if (view->activate) {
+ view->activate(view, activate);
+ }
+}
+
+struct roots_view *view_at(struct roots_desktop *desktop, int x, int y) {
+ struct roots_view *view;
+ wl_list_for_each(view, &desktop->views, link) {
+ struct wlr_box box;
+ view_get_input_bounds(view, &box);
+ box.x += view->x;
+ box.y += view->y;
+ if (wlr_box_contains_point(&box, x, y)) {
+ return view;
+ }
+ }
+ return NULL;
+}
+
struct roots_desktop *desktop_create(struct roots_server *server,
struct roots_config *config) {
struct roots_desktop *desktop = calloc(1, sizeof(struct roots_desktop));