@ -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 ) ;
}
}
}
}
}