vt_cpulogos: Resize all terms/windows when tearing down logos
PR: 202288 (partial) Tested by: Jakob Alvermark Reviewed by: ed Approved by: markj (mentor) Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D3388
This commit is contained in:
parent
d8331fd329
commit
c9f89bd963
@ -369,6 +369,7 @@ struct vt_driver {
|
||||
* Utility macro to make early vt(4) instances work.
|
||||
*/
|
||||
|
||||
extern struct vt_device vt_consdev;
|
||||
extern struct terminal vt_consterm;
|
||||
extern const struct terminal_class vt_termclass;
|
||||
void vt_upgrade(struct vt_device *vd);
|
||||
|
@ -144,7 +144,6 @@ VT_SYSCTL_INT(splash_cpu_style, 2, "Draw logo style "
|
||||
"(0 = Alternate beastie, 1 = Beastie, 2 = Orb)");
|
||||
VT_SYSCTL_INT(splash_cpu_duration, 10, "Hide logos after (seconds)");
|
||||
|
||||
static struct vt_device vt_consdev;
|
||||
static unsigned int vt_unit = 0;
|
||||
static MALLOC_DEFINE(M_VT, "vt", "vt device");
|
||||
struct vt_device *main_vd = &vt_consdev;
|
||||
@ -187,7 +186,7 @@ SET_DECLARE(vt_drv_set, struct vt_driver);
|
||||
|
||||
struct terminal vt_consterm;
|
||||
static struct vt_window vt_conswindow;
|
||||
static struct vt_device vt_consdev = {
|
||||
struct vt_device vt_consdev = {
|
||||
.vd_driver = NULL,
|
||||
.vd_softc = NULL,
|
||||
.vd_prev_driver = NULL,
|
||||
|
@ -152,6 +152,7 @@ vt_fini_logos(void *dummy __unused)
|
||||
struct vt_font *vf;
|
||||
struct winsize wsz;
|
||||
term_pos_t size;
|
||||
unsigned int i;
|
||||
|
||||
if (!vt_draw_logo_cpus)
|
||||
return;
|
||||
@ -160,44 +161,43 @@ vt_fini_logos(void *dummy __unused)
|
||||
if (!vt_splash_cpu)
|
||||
return;
|
||||
|
||||
tm = &vt_consterm;
|
||||
vw = tm->tm_softc;
|
||||
if (vw == NULL)
|
||||
return;
|
||||
vd = vw->vw_device;
|
||||
if (vd == NULL)
|
||||
return;
|
||||
vf = vw->vw_font;
|
||||
if (vf == NULL)
|
||||
return;
|
||||
|
||||
vd = &vt_consdev;
|
||||
VT_LOCK(vd);
|
||||
if ((vd->vd_flags & (VDF_DEAD | VDF_TEXTMODE)) != 0)
|
||||
goto out;
|
||||
|
||||
if ((vd->vd_flags & (VDF_DEAD | VDF_TEXTMODE)) != 0) {
|
||||
VT_UNLOCK(vd);
|
||||
return;
|
||||
}
|
||||
vt_draw_logo_cpus = 0;
|
||||
VT_UNLOCK(vd);
|
||||
|
||||
vt_termsize(vd, vf, &size);
|
||||
vt_winsize(vd, vf, &wsz);
|
||||
for (i = 0; i < VT_MAXWINDOWS; i++) {
|
||||
vw = vd->vd_windows[i];
|
||||
if (vw == NULL)
|
||||
continue;
|
||||
tm = vw->vw_terminal;
|
||||
vf = vw->vw_font;
|
||||
if (vf == NULL)
|
||||
continue;
|
||||
|
||||
/* Resize screen buffer and terminal. */
|
||||
terminal_mute(tm, 1);
|
||||
vtbuf_grow(&vw->vw_buf, &size, vw->vw_buf.vb_history_size);
|
||||
terminal_set_winsize_blank(tm, &wsz, 0, NULL);
|
||||
terminal_set_cursor(tm, &vw->vw_buf.vb_cursor);
|
||||
terminal_mute(tm, 0);
|
||||
vt_termsize(vd, vf, &size);
|
||||
vt_winsize(vd, vf, &wsz);
|
||||
|
||||
VT_LOCK(vd);
|
||||
vt_compute_drawable_area(vw);
|
||||
/* Resize screen buffer and terminal. */
|
||||
terminal_mute(tm, 1);
|
||||
vtbuf_grow(&vw->vw_buf, &size, vw->vw_buf.vb_history_size);
|
||||
terminal_set_winsize_blank(tm, &wsz, 0, NULL);
|
||||
terminal_set_cursor(tm, &vw->vw_buf.vb_cursor);
|
||||
terminal_mute(tm, 0);
|
||||
|
||||
if (vd->vd_curwindow == vw) {
|
||||
vd->vd_flags |= VDF_INVALID;
|
||||
vt_resume_flush_timer(vd, 0);
|
||||
VT_LOCK(vd);
|
||||
vt_compute_drawable_area(vw);
|
||||
|
||||
if (vd->vd_curwindow == vw) {
|
||||
vd->vd_flags |= VDF_INVALID;
|
||||
vt_resume_flush_timer(vd, 0);
|
||||
}
|
||||
VT_UNLOCK(vd);
|
||||
}
|
||||
|
||||
out:
|
||||
VT_UNLOCK(vd);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user