From d35e8265a7dee7773394e13d34cac2e78f19303b Mon Sep 17 00:00:00 2001 From: Jente Hidskes Date: Fri, 4 Jan 2019 17:06:27 +0100 Subject: [PATCH] Add idle tracking Note that this does not do much without an idle manager "on the other side". See, for example, swayidle: https://github.com/swaywm/sway/blob/master/swayidle/swayidle.1.scd Fixes #7. --- cage.c | 11 +++++++++++ seat.c | 17 +++++++++++++++++ server.h | 2 ++ 3 files changed, 30 insertions(+) diff --git a/cage.c b/cage.c index 9a67921..a5e606c 100644 --- a/cage.c +++ b/cage.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #if CAGE_HAS_XWAYLAND #include @@ -151,6 +152,13 @@ main(int argc, char *argv[]) goto end; } + server.idle = wlr_idle_create(server.wl_display); + if (!server.idle) { + wlr_log(WLR_ERROR, "Unable to create the idle tracker"); + ret = 1; + goto end; + } + xdg_shell = wlr_xdg_shell_create(server.wl_display); if (!xdg_shell) { wlr_log(WLR_ERROR, "Unable to create the XDG shell interface"); @@ -228,6 +236,9 @@ end: wlr_xcursor_manager_destroy(xcursor_manager); #endif wlr_xdg_shell_destroy(xdg_shell); + if (server.idle) { + wlr_idle_destroy(server.idle); + } wlr_data_device_manager_destroy(data_device_mgr); wlr_compositor_destroy(compositor); wlr_output_layout_destroy(server.output_layout); diff --git a/seat.c b/seat.c index 88e56ed..468ca3c 100644 --- a/seat.c +++ b/seat.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -195,6 +196,8 @@ handle_keyboard_modifiers(struct wl_listener *listener, void *data) wlr_seat_set_keyboard(keyboard->seat->seat, keyboard->device); wlr_seat_keyboard_notify_modifiers(keyboard->seat->seat, &keyboard->device->keyboard->modifiers); + + wlr_idle_notify_activity(keyboard->seat->server->idle, keyboard->seat->seat); } static bool @@ -209,6 +212,7 @@ handle_keybinding(struct cg_server *server, xkb_keysym_t sym) default: return false; } + wlr_idle_notify_activity(server->idle, server->seat->seat); return true; } @@ -242,6 +246,8 @@ handle_keyboard_key(struct wl_listener *listener, void *data) wlr_seat_keyboard_notify_key(seat->seat, event->time_msec, event->keycode, event->state); } + + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -381,6 +387,8 @@ handle_touch_down(struct wl_listener *listener, void *data) press_cursor_button(seat, event->device, event->time_msec, BTN_LEFT, WLR_BUTTON_PRESSED, lx, ly); } + + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -400,6 +408,7 @@ handle_touch_up(struct wl_listener *listener, void *data) } wlr_seat_touch_notify_up(seat->seat, event->time_msec, event->touch_id); + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -435,6 +444,8 @@ handle_touch_motion(struct wl_listener *listener, void *data) seat->touch_x = lx; seat->touch_y = ly; } + + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -446,6 +457,7 @@ handle_cursor_axis(struct wl_listener *listener, void *data) wlr_seat_pointer_notify_axis(seat->seat, event->time_msec, event->orientation, event->delta, event->delta_discrete, event->source); + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -459,6 +471,7 @@ handle_cursor_button(struct wl_listener *listener, void *data) press_cursor_button(seat, event->device, event->time_msec, event->button, event->state, seat->cursor->x, seat->cursor->y); + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -482,6 +495,8 @@ process_cursor_motion(struct cg_seat *seat, uint32_t time) wlr_seat_pointer_notify_motion(wlr_seat, time, sx, sy); } } + + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -492,6 +507,7 @@ handle_cursor_motion_absolute(struct wl_listener *listener, void *data) wlr_cursor_warp_absolute(seat->cursor, event->device, event->x, event->y); process_cursor_motion(seat, event->time_msec); + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void @@ -502,6 +518,7 @@ handle_cursor_motion(struct wl_listener *listener, void *data) wlr_cursor_move(seat->cursor, event->device, event->delta_x, event->delta_y); process_cursor_motion(seat, event->time_msec); + wlr_idle_notify_activity(seat->server->idle, seat->seat); } static void diff --git a/server.h b/server.h index e29bca8..e2bc6a5 100644 --- a/server.h +++ b/server.h @@ -5,6 +5,7 @@ #include #include +#include #include #if CAGE_HAS_XWAYLAND #include @@ -21,6 +22,7 @@ struct cg_server { struct wl_list views; struct cg_seat *seat; + struct wlr_idle *idle; struct wlr_output_layout *output_layout; struct cg_output *output;