aboutsummaryrefslogtreecommitdiff
path: root/rt
diff options
context:
space:
mode:
Diffstat (limited to 'rt')
-rw-r--r--rt/include/util.h5
-rw-r--r--rt/src/util.c35
2 files changed, 40 insertions, 0 deletions
diff --git a/rt/include/util.h b/rt/include/util.h
index a9c290d..2ed2f70 100644
--- a/rt/include/util.h
+++ b/rt/include/util.h
@@ -9,6 +9,11 @@
void *montis_plugin_toplevel_at(void *ctx, double lx, double ly);
void montis_plugin_get_toplevel_position(void *toplevel, double *x, double *y);
void montis_plugin_set_toplevel_position(void *toplevel, double x, double y);
+void montis_plugin_get_toplevel_geometry(void *toplevel, double *x, double *y,
+ double *w, double *h);
+void montis_plugin_set_toplevel_geometry(void *toplevel, double x, double y,
+ double w, double h);
void montis_plugin_focus_toplevel(void *toplevel);
+void montis_plugin_warp_cursor(void *ctx, double lx, double ly);
#endif /* MONTIS_UTIL_H */
diff --git a/rt/src/util.c b/rt/src/util.c
index 66a2b20..e09cff9 100644
--- a/rt/src/util.c
+++ b/rt/src/util.c
@@ -63,6 +63,41 @@ void montis_plugin_set_toplevel_position(void *toplevel, double x, double y)
wlr_scene_node_set_position(&tl->scene_tree->node, (int)x, (int)y);
}
+void montis_plugin_get_toplevel_geometry(void *toplevel, double *x, double *y,
+ double *w, double *h)
+{
+ if (!toplevel || !x || !y || !w || !h) {
+ return;
+ }
+ struct montis_toplevel *tl = toplevel;
+ struct wlr_box geo_box;
+ wlr_xdg_surface_get_geometry(tl->xdg_toplevel->base, &geo_box);
+ *x = tl->scene_tree->node.x;
+ *y = tl->scene_tree->node.y;
+ *w = geo_box.width;
+ *h = geo_box.height;
+}
+
+void montis_plugin_set_toplevel_geometry(void *toplevel, double x, double y,
+ double w, double h)
+{
+ if (!toplevel) {
+ return;
+ }
+ struct montis_toplevel *tl = toplevel;
+ wlr_scene_node_set_position(&tl->scene_tree->node, (int)x, (int)y);
+ wlr_xdg_toplevel_set_size(tl->xdg_toplevel, (int)w, (int)h);
+}
+
+void montis_plugin_warp_cursor(void *ctx, double lx, double ly)
+{
+ if (!ctx) {
+ return;
+ }
+ struct montis_server *server = server_from_ctx(ctx);
+ wlr_cursor_warp(server->cursor, NULL, lx, ly);
+}
+
void montis_plugin_focus_toplevel(void *toplevel)
{
if (!toplevel) {