Mercurial > illumos > illumos-gate
changeset 4925:9078d6644363
6590903 X is not notified when the keyboard layout is changed by 'kbd -s'
author | qz150045 |
---|---|
date | Tue, 21 Aug 2007 22:58:27 -0700 |
parents | a4d43c3be842 |
children | 0c0bcae7290e |
files | usr/src/uts/common/io/conskbd.c |
diffstat | 1 files changed, 28 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/conskbd.c Tue Aug 21 20:03:39 2007 -0700 +++ b/usr/src/uts/common/io/conskbd.c Tue Aug 21 22:58:27 2007 -0700 @@ -768,17 +768,17 @@ switch (csp->cp_cmd) { case KIOCSETFREQ: frqp = (struct freq_request *)mp-> - b_cont->b_rptr; + b_cont->b_rptr; switch (frqp->type) { case CONSOLE_BEEP: error = beeper_freq(BEEP_CONSOLE, - (int)frqp->freq); + (int)frqp->freq); break; case KBD_BEEP: error = beeper_freq(BEEP_TYPE4, - (int)frqp->freq); + (int)frqp->freq); break; default: @@ -923,7 +923,21 @@ miocnak(q, mp, 0, EINVAL); break; } + kbd_layout_bak = conskbd.conskbd_layout; conskbd.conskbd_layout = *(intptr_t *)(mp->b_cont->b_rptr); + if (conskbd.conskbd_layout != kbd_layout_bak) { + + /* notify the upper of the change event */ + if ((datap = conskbd_alloc_firm_event( + KEYBOARD_LAYOUT_CHANGE, + conskbd.conskbd_layout)) != NULL) { + if (conskbd.conskbd_directio) { + putnext(conskbd_regqueue, datap); + } else { + freemsg(datap); + } + } + } miocack(q, mp, 0, 0); break; @@ -1701,17 +1715,20 @@ break; } if ((req = conskbd_alloc_firm_event( - KEYBOARD_LAYOUT_CHANGE, - layout)) != NULL) { - if (conskbd.conskbd_directio) + KEYBOARD_LAYOUT_CHANGE, + layout)) != NULL) { + if (conskbd.conskbd_directio) { putnext( conskbd_regqueue, req); - else if (conskbd_consqueue - != NULL) + } else if (conskbd_consqueue + != NULL) { putnext( conskbd_consqueue, req); + } else { + freemsg(req); + } } } } @@ -2050,11 +2067,11 @@ iocp = (struct iocblk *)mp->b_rptr; if ((iocp->ioc_cmd == CONSOPENPOLLEDIO) || - (iocp->ioc_cmd == CONSCLOSEPOLLEDIO)) { + (iocp->ioc_cmd == CONSCLOSEPOLLEDIO)) { DPRINTF(PRINT_L1, PRINT_MASK_ALL, - ("conskbd_legacy_upstream_msg: " - "CONSOPEN/CLOSEPOLLEDIO ACK/NAK\n")); + ("conskbd_legacy_upstream_msg: " + "CONSOPEN/CLOSEPOLLEDIO ACK/NAK\n")); putnext(conskbd_consqueue, mp); } else if (conskbd_regqueue != NULL) {