aboutsummaryrefslogtreecommitdiffstats
path: root/sway/input/cursor.c
diff options
context:
space:
mode:
authorLibravatar Rouven Czerwinski <rouven@czerwinskis.de>2018-10-15 16:18:46 +0200
committerLibravatar Rouven Czerwinski <rouven@czerwinskis.de>2018-10-16 15:47:02 +0200
commit0969bf758b258b328f48ee360b30764b08a7d145 (patch)
treec2efce1a8da4dc7ec7003818e5277fb2f49bc28b /sway/input/cursor.c
parentview: move arrange_workspace into view_map (diff)
downloadsway-0969bf758b258b328f48ee360b30764b08a7d145.tar.gz
sway-0969bf758b258b328f48ee360b30764b08a7d145.tar.zst
sway-0969bf758b258b328f48ee360b30764b08a7d145.zip
cursor: functions to warp cursor to container and workspace
The new functions allow a cursor to be warped without changing the focus. This is a preparation commit to handle cursor warping not only in seat_set_focus_warp.
Diffstat (limited to 'sway/input/cursor.c')
-rw-r--r--sway/input/cursor.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index 5c446299..21e104ec 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -9,6 +9,7 @@
9#include <wlr/types/wlr_cursor.h> 9#include <wlr/types/wlr_cursor.h>
10#include <wlr/types/wlr_xcursor_manager.h> 10#include <wlr/types/wlr_xcursor_manager.h>
11#include <wlr/types/wlr_idle.h> 11#include <wlr/types/wlr_idle.h>
12#include <wlr/types/wlr_box.h>
12#include "list.h" 13#include "list.h"
13#include "log.h" 14#include "log.h"
14#include "config.h" 15#include "config.h"
@@ -1271,4 +1272,44 @@ struct sway_cursor *sway_cursor_create(struct sway_seat *seat) {
1271 cursor->cursor = wlr_cursor; 1272 cursor->cursor = wlr_cursor;
1272 1273
1273 return cursor; 1274 return cursor;
1275
1276}
1277
1278/**
1279 * Warps the cursor to the middle of the container argument.
1280 * Does nothing if the cursor is already inside the container.
1281 * If container is NULL, returns without doing anything.
1282 */
1283void cursor_warp_to_container(struct sway_cursor *cursor,
1284 struct sway_container *container) {
1285 if (!container) {
1286 return;
1287 }
1288
1289 struct wlr_box box;
1290 container_get_box(container, &box);
1291 if (wlr_box_contains_point(&box, cursor->cursor->x, cursor->cursor->y)) {
1292 return;
1293 }
1294
1295 double x = container->x + container->width / 2.0;
1296 double y = container->y + container->height / 2.0;
1297
1298 wlr_cursor_warp(cursor->cursor, NULL, x, y);
1299}
1300
1301/**
1302 * Warps the cursor to the middle of the workspace argument.
1303 * If workspace is NULL, returns without doing anything.
1304 */
1305void cursor_warp_to_workspace(struct sway_cursor *cursor,
1306 struct sway_workspace *workspace) {
1307 if (!workspace) {
1308 return;
1309 }
1310
1311 double x = workspace->x + workspace->width / 2.0;
1312 double y = workspace->y + workspace->height / 2.0;
1313
1314 wlr_cursor_warp(cursor->cursor, NULL, x, y);
1274} 1315}