mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-22 12:55:58 +01:00
idle: allow zero timeout
Prior to this commit, setting up a zero timeout resulted in a timer that never expires, which isn't particularly useful. This commit allows setting up timers that expire immediately, which is useful to immediately enter idle state.
This commit is contained in:
parent
266b3df678
commit
3cb4ff3ff1
1 changed files with 13 additions and 2 deletions
|
@ -27,6 +27,9 @@ static void idle_timeout_destroy(struct wlr_idle_timeout *timer) {
|
||||||
|
|
||||||
static int idle_notify(void *data) {
|
static int idle_notify(void *data) {
|
||||||
struct wlr_idle_timeout *timer = data;
|
struct wlr_idle_timeout *timer = data;
|
||||||
|
if (timer->idle_state) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
timer->idle_state = true;
|
timer->idle_state = true;
|
||||||
org_kde_kwin_idle_timeout_send_idle(timer->resource);
|
org_kde_kwin_idle_timeout_send_idle(timer->resource);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -36,13 +39,18 @@ static void handle_activity(struct wlr_idle_timeout *timer) {
|
||||||
if (!timer->enabled) {
|
if (!timer->enabled) {
|
||||||
return;
|
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
|
// in case the previous state was sleeping send a resume event and switch state
|
||||||
if (timer->idle_state) {
|
if (timer->idle_state) {
|
||||||
timer->idle_state = false;
|
timer->idle_state = false;
|
||||||
org_kde_kwin_idle_timeout_send_resumed(timer->resource);
|
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) {
|
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) {
|
if (timer->enabled) {
|
||||||
// arm the timer
|
// arm the timer
|
||||||
wl_event_source_timer_update(timer->idle_source, timer->timeout);
|
wl_event_source_timer_update(timer->idle_source, timer->timeout);
|
||||||
|
if (timer->timeout == 0) {
|
||||||
|
idle_notify(timer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue