diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2014-09-20 11:11:07 +0200 |
---|---|---|
committer | David Herrmann <dh.herrmann@gmail.com> | 2014-09-20 11:46:49 +0200 |
commit | 3ec19e5d91d3d705682fee62a509801737c56c1e (patch) | |
tree | f264ad3605ec214aadec8657a3bfd166b6721883 | |
parent | 95dbf6b19e8f25e28224b954ef99d96225b4e6e7 (diff) |
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.
-rw-r--r-- | src/libsystemd-terminal/grdev.c | 11 | ||||
-rw-r--r-- | src/libsystemd-terminal/modeset.c | 2 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/libsystemd-terminal/grdev.c b/src/libsystemd-terminal/grdev.c index 3e3833fc95..397da1b205 100644 --- a/src/libsystemd-terminal/grdev.c +++ b/src/libsystemd-terminal/grdev.c @@ -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_frame(session, display); + } else if (changed) { session_raise_display_change(session, display); - else if (display->framed) session_frame(session, display); + } else if (display->framed) { + session_frame(session, display); + } } static void session_frame(grdev_session *session, grdev_display *display) { diff --git a/src/libsystemd-terminal/modeset.c b/src/libsystemd-terminal/modeset.c index 57bf299df5..33c79a2036 100644 --- a/src/libsystemd-terminal/modeset.c +++ b/src/libsystemd-terminal/modeset.c @@ -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); |