From dbb589c55bc855c2c0207afb353fa2152f106310 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Wed, 15 Aug 2012 08:54:02 +0200 Subject: [PATCH] ui: add sleep/awake logic to UI We need to forward all sleep/awake states to the lower subsystems to avoid overdoing stuff like rendering an user-input. That is, while being asleep we shouldn't render and/or do any other user-interaction. This patch simply adds this logic to the UI subsystem, which, however, does not to anything useful, yet. Signed-off-by: David Herrmann --- src/main.c | 2 ++ src/ui.c | 26 ++++++++++++++++++++++++++ src/ui.h | 4 ++++ 3 files changed, 32 insertions(+) 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 */