diff options
author | emersion <contact@emersion.fr> | 2018-10-28 11:21:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-28 11:21:14 +0100 |
commit | fe247e20a3884dd44ef26512716efd67f35c862b (patch) | |
tree | 2352ca4654538e41e24be65d3d1fb76929a48be2 | |
parent | f34b7f88006c3be5fc5283d86f206ac75cf20093 (diff) | |
parent | 3cb4ff3ff1e689132554394920fb62bb838b696d (diff) |
Merge pull request #1337 from emersion/idle-zero-timeout
idle: allow zero timeout
-rw-r--r-- | types/wlr_idle.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/types/wlr_idle.c b/types/wlr_idle.c index 2d0e8eed..29367ceb 100644 --- a/types/wlr_idle.c +++ b/types/wlr_idle.c @@ -27,6 +27,9 @@ static void idle_timeout_destroy(struct wlr_idle_timeout *timer) { static int idle_notify(void *data) { struct wlr_idle_timeout *timer = data; + if (timer->idle_state) { + return 0; + } timer->idle_state = true; org_kde_kwin_idle_timeout_send_idle(timer->resource); return 1; @@ -36,13 +39,18 @@ static void handle_activity(struct wlr_idle_timeout *timer) { if (!timer->enabled) { return; } - // rearm the timer - wl_event_source_timer_update(timer->idle_source, timer->timeout); + // in case the previous state was sleeping send a resume event and switch state if (timer->idle_state) { timer->idle_state = false; org_kde_kwin_idle_timeout_send_resumed(timer->resource); } + + // rearm the timer + wl_event_source_timer_update(timer->idle_source, timer->timeout); + if (timer->timeout == 0) { + idle_notify(timer); + } } static void handle_timer_resource_destroy(struct wl_resource *timer_resource) { @@ -142,6 +150,9 @@ static void create_idle_timer(struct wl_client *client, if (timer->enabled) { // arm the timer wl_event_source_timer_update(timer->idle_source, timer->timeout); + if (timer->timeout == 0) { + idle_notify(timer); + } } } |