bool QWSInputContext::translateIMEvent(QWidget *w, const QWSIMEvent *e) { QDataStream stream(e->streamingData); QString preedit; QString commit; stream >> preedit; stream >> commit; if (preedit.isEmpty() && QT_PREPEND_NAMESPACE(activeWidget)) w = QT_PREPEND_NAMESPACE(activeWidget); QInputContext *qic = w->inputContext(); if (!qic) return false; QList<QInputMethodEvent::Attribute> attrs; while (!stream.atEnd()) { int type = -1; int start = -1; int length = -1; QVariant data; stream >> type >> start >> length >> data; if (stream.status() != QDataStream::Ok) { qWarning("corrupted QWSIMEvent"); //qic->reset(); //??? return false; } if (type == QInputMethodEvent::TextFormat) data = qic->standardFormat(static_cast<QInputContext::StandardFormat>(data.toInt())); attrs << QInputMethodEvent::Attribute(static_cast<QInputMethodEvent::AttributeType>(type), start, length, data); } #ifdef EXTRA_DEBUG qDebug() << "preedit" << preedit << "len" << preedit.length() <<"commit" << commit << "len" << commit.length() << "n attr" << attrs.count(); #endif if (preedit.isEmpty()) QT_PREPEND_NAMESPACE(activeWidget) = 0; else QT_PREPEND_NAMESPACE(activeWidget) = w; QInputMethodEvent ime(preedit, attrs); if (!commit.isEmpty() || e->simpleData.replaceLength > 0) ime.setCommitString(commit, e->simpleData.replaceFrom, e->simpleData.replaceLength); extern bool qt_sendSpontaneousEvent(QObject *, QEvent *); //qapplication_qws.cpp qt_sendSpontaneousEvent(w, &ime); return true; }
void QtopiaInputDialogPrivate::_q_preedit(QString text) { QList<QInputMethodEvent::Attribute> attributes; QInputContext *qic = m_widget->inputContext(); QVariant data = qic->standardFormat(QInputContext::PreeditFormat); attributes << QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 0, text.length(), data); //QInputMethodEvent *ime = new QInputMethodEvent(text, attributes); //QApplication::postEvent(m_widget, ime); QInputMethodEvent ime(text, attributes); QApplication::sendEvent(m_widget, &ime); }
MLImeCfg_CL::MLImeCfg_CL( QWidget* parent ) : QWidget( parent ), imefilestatus( false ) { setupUI(); buttonOk->hide(); buttonCancel->hide(); connect( listBox, SIGNAL( itemClicked( QListWidgetItem* ) ), this, SLOT( listBox_clicked( QListWidgetItem* ) ) ); connect( buttonOk, SIGNAL( clicked() ), this, SLOT( buttonOk_clicked() ) ); connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( buttonCancel_clicked() ) ); connect( savebt, SIGNAL( clicked() ), this, SLOT( savebt_clicked() ) ); connect( createbt, SIGNAL( clicked() ), this, SLOT( createbt_clicked() ) ); connect( opencmd, SIGNAL( clicked() ), this, SLOT( opencmd_clicked() ) ); connect( delbn, SIGNAL( clicked() ), this, SLOT( delbn_clicked() ) ); connect( addbn, SIGNAL( clicked() ), this, SLOT( addbn_clicked() ) ); connect( clearbn, SIGNAL( clicked() ), this, SLOT( clearbn_clicked() ) ); connect( defaultbn, SIGNAL( clicked() ), this, SLOT( defaultbn_clicked() ) ); QDir ime( IMEDIR ); //检查用户权限,若非 root 则禁用添加删除输入法及保存启动脚本的按钮 if ( checkroot() ) { if ( !ime.exists() ) { //如果目录不存在则创建它。 QString tmpcmd; tmpcmd = "mkdir -p " + QString( IMEDIR ); system( qPrintable( tmpcmd ) ); } } else { addbn->setEnabled( false ); delbn->setEnabled( false ); savebt->setEnabled( false ); } ime.setFilter( QDir::Files ); imecount = ime.count(); listitem = imecount; for ( int i=0; i<imecount; ++i ) listBox->addItem( ime[i] ); //显示默认输入法 showdefaultime(); readxinput(); auto_choose(); }
inline std::string Osoba::to_string() const { return ime() + " " + prezime(); }
void InterruptRequester::saveState(SaveState &state) const { state.mem.minIntTime = minIntTime; state.mem.IME = ime(); state.mem.halted = halted(); }
unsigned long Memory::event(unsigned long cycleCounter) { if (lastOamDmaUpdate != DISABLED_TIME) updateOamDma(cycleCounter); switch (intreq.minEventId()) { case UNHALT: intreq.unhalt(); intreq.setEventTime<UNHALT>(DISABLED_TIME); break; case END: intreq.setEventTime<END>(DISABLED_TIME - 1); while (cycleCounter >= intreq.minEventTime() && intreq.eventTime(END) != DISABLED_TIME) cycleCounter = event(cycleCounter); intreq.setEventTime<END>(DISABLED_TIME); break; case BLIT: { const bool lcden = ioamhram[0x140] >> 7 & 1; unsigned long blitTime = intreq.eventTime(BLIT); if (lcden | blanklcd) { display.updateScreen(blanklcd, cycleCounter); intreq.setEventTime<BLIT>(DISABLED_TIME); intreq.setEventTime<END>(DISABLED_TIME); while (cycleCounter >= intreq.minEventTime()) cycleCounter = event(cycleCounter); } else blitTime += 70224 << isDoubleSpeed(); blanklcd = lcden ^ 1; intreq.setEventTime<BLIT>(blitTime); } break; case SERIAL: updateSerial(cycleCounter); break; case OAM: intreq.setEventTime<OAM>(lastOamDmaUpdate == DISABLED_TIME ? static_cast<unsigned long>(DISABLED_TIME) : intreq.eventTime(OAM) + 0xA0 * 4); break; case DMA: { const bool doubleSpeed = isDoubleSpeed(); unsigned dmaSrc = dmaSource; unsigned dmaDest = dmaDestination; unsigned dmaLength = ((ioamhram[0x155] & 0x7F) + 0x1) * 0x10; unsigned length = hdmaReqFlagged(intreq) ? 0x10 : dmaLength; ackDmaReq(&intreq); if ((static_cast<unsigned long>(dmaDest) + length) & 0x10000) { length = 0x10000 - dmaDest; ioamhram[0x155] |= 0x80; } dmaLength -= length; if (!(ioamhram[0x140] & 0x80)) dmaLength = 0; { unsigned long lOamDmaUpdate = lastOamDmaUpdate; lastOamDmaUpdate = DISABLED_TIME; while (length--) { const unsigned src = dmaSrc++ & 0xFFFF; const unsigned data = ((src & 0xE000) == 0x8000 || src > 0xFDFF) ? 0xFF : read(src, cycleCounter); cycleCounter += 2 << doubleSpeed; if (cycleCounter - 3 > lOamDmaUpdate) { oamDmaPos = (oamDmaPos + 1) & 0xFF; lOamDmaUpdate += 4; if (oamDmaPos < 0xA0) { if (oamDmaPos == 0) startOamDma(lOamDmaUpdate - 1); ioamhram[src & 0xFF] = data; } else if (oamDmaPos == 0xA0) { endOamDma(lOamDmaUpdate - 1); lOamDmaUpdate = DISABLED_TIME; } } nontrivial_write(0x8000 | (dmaDest++ & 0x1FFF), data, cycleCounter); } lastOamDmaUpdate = lOamDmaUpdate; } cycleCounter += 4; dmaSource = dmaSrc; dmaDestination = dmaDest; ioamhram[0x155] = ((dmaLength / 0x10 - 0x1) & 0xFF) | (ioamhram[0x155] & 0x80); if ((ioamhram[0x155] & 0x80) && display.hdmaIsEnabled()) { if (lastOamDmaUpdate != DISABLED_TIME) updateOamDma(cycleCounter); display.disableHdma(cycleCounter); } } break; case TIMA: tima.doIrqEvent(TimaInterruptRequester(intreq)); break; case VIDEO: display.update(cycleCounter); break; case INTERRUPTS: if (halted()) { if (isCgb()) cycleCounter += 4; intreq.unhalt(); intreq.setEventTime<UNHALT>(DISABLED_TIME); } if (ime()) { unsigned address; const unsigned pendingIrqs = intreq.pendingIrqs(); const unsigned n = pendingIrqs & -pendingIrqs; if (n < 8) { static const unsigned char lut[] = { 0x40, 0x48, 0x48, 0x50 }; address = lut[n-1]; } else address = 0x50 + n; intreq.ackIrq(n); cycleCounter = interrupter.interrupt(address, cycleCounter, *this); } break; } return cycleCounter; }
unsigned long Memory::event(unsigned long cc) { if (lastOamDmaUpdate_ != disabled_time) updateOamDma(cc); switch (intreq_.minEventId()) { case intevent_unhalt: intreq_.unhalt(); intreq_.setEventTime<intevent_unhalt>(disabled_time); break; case intevent_end: intreq_.setEventTime<intevent_end>(disabled_time - 1); while (cc >= intreq_.minEventTime() && intreq_.eventTime(intevent_end) != disabled_time) { cc = event(cc); } intreq_.setEventTime<intevent_end>(disabled_time); break; case intevent_blit: { bool const lcden = ioamhram_[0x140] & lcdc_en; unsigned long blitTime = intreq_.eventTime(intevent_blit); if (lcden | blanklcd_) { lcd_.updateScreen(blanklcd_, cc); intreq_.setEventTime<intevent_blit>(disabled_time); intreq_.setEventTime<intevent_end>(disabled_time); while (cc >= intreq_.minEventTime()) cc = event(cc); } else blitTime += 70224 << isDoubleSpeed(); blanklcd_ = lcden ^ 1; intreq_.setEventTime<intevent_blit>(blitTime); } break; case intevent_serial: updateSerial(cc); break; case intevent_oam: intreq_.setEventTime<intevent_oam>(lastOamDmaUpdate_ == disabled_time ? static_cast<unsigned long>(disabled_time) : intreq_.eventTime(intevent_oam) + 0xA0 * 4); break; case intevent_dma: { bool const doubleSpeed = isDoubleSpeed(); unsigned dmaSrc = dmaSource_; unsigned dmaDest = dmaDestination_; unsigned dmaLength = ((ioamhram_[0x155] & 0x7F) + 0x1) * 0x10; unsigned length = hdmaReqFlagged(intreq_) ? 0x10 : dmaLength; ackDmaReq(intreq_); if ((static_cast<unsigned long>(dmaDest) + length) & 0x10000) { length = 0x10000 - dmaDest; ioamhram_[0x155] |= 0x80; } dmaLength -= length; if (!(ioamhram_[0x140] & lcdc_en)) dmaLength = 0; { unsigned long lOamDmaUpdate = lastOamDmaUpdate_; lastOamDmaUpdate_ = disabled_time; while (length--) { unsigned const src = dmaSrc++ & 0xFFFF; unsigned const data = (src & 0xE000) == 0x8000 || src > 0xFDFF ? 0xFF : read(src, cc); cc += 2 << doubleSpeed; if (cc - 3 > lOamDmaUpdate) { oamDmaPos_ = (oamDmaPos_ + 1) & 0xFF; lOamDmaUpdate += 4; if (oamDmaPos_ < 0xA0) { if (oamDmaPos_ == 0) startOamDma(lOamDmaUpdate - 1); ioamhram_[src & 0xFF] = data; } else if (oamDmaPos_ == 0xA0) { endOamDma(lOamDmaUpdate - 1); lOamDmaUpdate = disabled_time; } } nontrivial_write(0x8000 | (dmaDest++ & 0x1FFF), data, cc); } lastOamDmaUpdate_ = lOamDmaUpdate; } cc += 4; dmaSource_ = dmaSrc; dmaDestination_ = dmaDest; ioamhram_[0x155] = ((dmaLength / 0x10 - 0x1) & 0xFF) | (ioamhram_[0x155] & 0x80); if ((ioamhram_[0x155] & 0x80) && lcd_.hdmaIsEnabled()) { if (lastOamDmaUpdate_ != disabled_time) updateOamDma(cc); lcd_.disableHdma(cc); } } break; case intevent_tima: tima_.doIrqEvent(TimaInterruptRequester(intreq_)); break; case intevent_video: lcd_.update(cc); break; case intevent_interrupts: if (halted()) { if (isCgb()) cc += 4; intreq_.unhalt(); intreq_.setEventTime<intevent_unhalt>(disabled_time); } if (ime()) { unsigned const pendingIrqs = intreq_.pendingIrqs(); unsigned const n = pendingIrqs & -pendingIrqs; unsigned address; if (n <= 4) { static unsigned char const lut[] = { 0x40, 0x48, 0x48, 0x50 }; address = lut[n-1]; } else address = 0x50 + n; intreq_.ackIrq(n); cc = interrupter_.interrupt(address, cc, *this); } break; } return cc; }