terminal: grdev: raise frame event after DISPLAY_ADD/CHANGE

Whenever a display is added or changed, we suppressed any frame events.
Make sure to raise them manually so we can avoid rendering when handling
anything but FRAME events.
This commit is contained in:
David Herrmann 2014-09-20 11:11:07 +02:00
parent 95dbf6b19e
commit 3ec19e5d91
2 changed files with 8 additions and 7 deletions

View file

@ -921,14 +921,17 @@ static void session_change_display(grdev_session *session, grdev_display *displa
changed = display_cache(display);
if (display->n_leafs == 0)
if (display->n_leafs == 0) {
session_remove_display(session, display);
else if (!display->public)
} else if (!display->public) {
session_add_display(session, display);
else if (changed)
session_raise_display_change(session, display);
else if (display->framed)
session_frame(session, display);
} else if (changed) {
session_raise_display_change(session, display);
session_frame(session, display);
} else if (display->framed) {
session_frame(session, display);
}
}
static void session_frame(grdev_session *session, grdev_display *display) {

View file

@ -270,12 +270,10 @@ static void modeset_grdev_fn(grdev_session *session, void *userdata, grdev_event
switch (ev->type) {
case GRDEV_EVENT_DISPLAY_ADD:
grdev_display_enable(ev->display_add.display);
modeset_render(m, ev->display_add.display);
break;
case GRDEV_EVENT_DISPLAY_REMOVE:
break;
case GRDEV_EVENT_DISPLAY_CHANGE:
modeset_render(m, ev->display_change.display);
break;
case GRDEV_EVENT_DISPLAY_FRAME:
modeset_render(m, ev->display_frame.display);