diff --git a/main.c b/main.c index 0c86f912..88ad2605 100644 --- a/main.c +++ b/main.c @@ -623,7 +623,9 @@ static void enable_timeouts(void) { state.timeouts_enabled = true; struct swayidle_timeout_cmd *cmd; wl_list_for_each(cmd, &state.timeout_cmds, link) { - register_timeout(cmd, cmd->timeout); + if ((cmd->idle_notification == NULL && cmd->kde_idle_timer == NULL) || !cmd->resume_pending) { + register_timeout(cmd, cmd->timeout); + } } } @@ -637,7 +639,9 @@ static void disable_timeouts(void) { state.timeouts_enabled = false; struct swayidle_timeout_cmd *cmd; wl_list_for_each(cmd, &state.timeout_cmds, link) { - destroy_cmd_timer(cmd); + if (!cmd->resume_pending) { + destroy_cmd_timer(cmd); + } } if (state.logind_idlehint) { set_idle_hint(false); @@ -661,7 +665,9 @@ static void handle_idled(struct swayidle_timeout_cmd *cmd) { static void handle_resumed(struct swayidle_timeout_cmd *cmd) { cmd->resume_pending = false; swayidle_log(LOG_DEBUG, "active state"); - if (cmd->registered_timeout != cmd->timeout) { + if (!state.timeouts_enabled) { + destroy_cmd_timer(cmd); + } else if (cmd->registered_timeout != cmd->timeout) { register_timeout(cmd, cmd->timeout); } #if HAVE_SYSTEMD || HAVE_ELOGIND