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 <dh.herrmann@googlemail.com>
This commit is contained in:
David Herrmann 2012-08-15 08:54:02 +02:00
parent d372390734
commit dbb589c55b
3 changed files with 32 additions and 0 deletions

View File

@ -86,6 +86,7 @@ static int vt_event(struct uterm_vt *vt, unsigned int action, void *data)
if (action == UTERM_VT_ACTIVATE) { if (action == UTERM_VT_ACTIVATE) {
seat->awake = true; seat->awake = true;
kmscon_ui_wake_up(seat->ui);
uterm_input_wake_up(seat->input); uterm_input_wake_up(seat->input);
kmscon_dlist_for_each(iter, &seat->videos) { 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); uterm_input_sleep(seat->input);
kmscon_ui_sleep(seat->ui);
seat->awake = false; seat->awake = false;
} }

View File

@ -51,6 +51,7 @@ struct kmscon_ui {
struct uterm_input *input; struct uterm_input *input;
struct kmscon_dlist video_list; struct kmscon_dlist video_list;
struct kmscon_terminal *term; struct kmscon_terminal *term;
bool awake;
}; };
static void video_activate(struct ui_video *vid, struct uterm_display *disp) 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, struct uterm_input_event *ev,
void *data) void *data)
{ {
struct kmscon_ui *ui = data;
if (!ui->awake)
return;
} }
static void terminal_event(struct kmscon_terminal *term, 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;
}

View File

@ -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_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_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 */ #endif /* KMSCON_UI_H */