diff --git a/src/main.c b/src/main.c index 2848f40..f377899 100644 --- a/src/main.c +++ b/src/main.c @@ -86,6 +86,7 @@ static int vt_event(struct uterm_vt *vt, unsigned int action, void *data) if (action == UTERM_VT_ACTIVATE) { seat->awake = true; + kmscon_ui_wake_up(seat->ui); uterm_input_wake_up(seat->input); kmscon_dlist_for_each(iter, &seat->videos) { @@ -99,6 +100,7 @@ static int vt_event(struct uterm_vt *vt, unsigned int action, void *data) } uterm_input_sleep(seat->input); + kmscon_ui_sleep(seat->ui); seat->awake = false; } diff --git a/src/ui.c b/src/ui.c index 73ba458..187ad8b 100644 --- a/src/ui.c +++ b/src/ui.c @@ -51,6 +51,7 @@ struct kmscon_ui { struct uterm_input *input; struct kmscon_dlist video_list; struct kmscon_terminal *term; + bool awake; }; static void video_activate(struct ui_video *vid, struct uterm_display *disp) @@ -167,6 +168,10 @@ static void input_event(struct uterm_input *input, struct uterm_input_event *ev, void *data) { + struct kmscon_ui *ui = data; + + if (!ui->awake) + return; } static void terminal_event(struct kmscon_terminal *term, @@ -259,3 +264,24 @@ void kmscon_ui_remove_video(struct kmscon_ui *ui, struct uterm_video *video) } } } + +void kmscon_ui_wake_up(struct kmscon_ui *ui) +{ + if (!ui || ui->awake) + return; + + ui->awake = true; +} + +void kmscon_ui_sleep(struct kmscon_ui *ui) +{ + if (!ui || !ui->awake) + return; + + ui->awake = false; +} + +bool kmscon_ui_is_awake(struct kmscon_ui *ui) +{ + return ui && ui->awake; +} diff --git a/src/ui.h b/src/ui.h index 4b35fcd..548bb33 100644 --- a/src/ui.h +++ b/src/ui.h @@ -46,4 +46,8 @@ void kmscon_ui_free(struct kmscon_ui *ui); void kmscon_ui_add_video(struct kmscon_ui *ui, struct uterm_video *video); void kmscon_ui_remove_video(struct kmscon_ui *ui, struct uterm_video *video); +void kmscon_ui_wake_up(struct kmscon_ui *ui); +void kmscon_ui_sleep(struct kmscon_ui *ui); +bool kmscon_ui_is_awake(struct kmscon_ui *ui); + #endif /* KMSCON_UI_H */