-rw-r--r-- | inputmethods/multikey/keyboard.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp index 08318bd..84c0c74 100644 --- a/inputmethods/multikey/keyboard.cpp +++ b/inputmethods/multikey/keyboard.cpp @@ -303,147 +303,146 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col) p.drawImage( x + (keyWidthPix - pix->width())/2 + 1, y + (keyHeight - pix->height())/2 + 1, QImage(*pix) ); } p.setPen(keycolor_lines); p.drawLine(x, y, x, y + keyHeight); x += keyWidthPix; } } p.setPen(keycolor_lines); p.drawLine(0, height() - 1, width(), height() - 1); p.drawLine(width() - 1, 0, width() - 1, height()); } } /* Keyboard::mousePressEvent {{{1 */ void Keyboard::mousePressEvent(QMouseEvent *e) { int row = (e->y() - (usePicks ? picks->height() : 0)) / keyHeight + 1; if (row > 5) row = 5; // figure out the column int col = 0; for (int w = 0; e->x() >= w; col++) if (col < keys->numKeys(row)) // it segfaults if it trys to read past numKeys w += keys->width(row,col) * defaultKeyWidth; else break; if (col <= 0) return; col --; // rewind one... qkeycode = keys->qcode(row, col); unicode = keys->uni(row, col); // might need to repaint if two or more of the same keys. // should be faster if just paint one key even though multiple keys exist. bool need_repaint = FALSE; // circumflex and diaeresis support // messy to have this here, but too hard to implement any other method if (unicode == 0x2c6) { unicode = 0; if (shift || lock) { // diaeresis qkeycode = 0x2001; } else { // circumflex qkeycode = 0x2000; } } // Back accent character support - //if (unicode == 0x60) { // the keys from 2c6 ~ 2cf should be used instead of the ascii one + // the keys from 2c6 ~ 2cf should be used instead of the ascii one if (unicode == 0x2cb) { unicode = 0; if (shift || lock) { // circumblex qkeycode = 0x2000; } else { // back accent qkeycode = 0x2002; } } // Accent character support - //if (unicode == 0xb4) { if (unicode == 0x2ca) { unicode = 0; if (shift || lock) { // diaeresis qkeycode = 0x2001; } else { // accent qkeycode = 0x2003; } } if (unicode == 0) { // either Qt char, or nothing if (qkeycode == Qt::Key_F1) { // toggle the pickboard if ( configdlg ) { delete (ConfigDlg *) configdlg; configdlg = 0; } else { configdlg = new ConfigDlg (); connect(configdlg, SIGNAL(setMapToDefault()), this, SLOT(setMapToDefault())); connect(configdlg, SIGNAL(setMapToFile(QString)), this, SLOT(setMapToFile(QString))); connect(configdlg, SIGNAL(pickboardToggled(bool)), this, SLOT(togglePickboard(bool))); connect(configdlg, SIGNAL(repeatToggled(bool)), this, SLOT(toggleRepeat(bool))); connect(configdlg, SIGNAL(reloadKeyboard()), this, SLOT(reloadKeyboard())); connect(configdlg, SIGNAL(configDlgClosed()), this, SLOT(cleanupConfigDlg())); configdlg->showMaximized(); configdlg->show(); configdlg->raise(); } } else if (qkeycode == Qt::Key_Control) { need_repaint = TRUE; if (ctrl) { *ctrl = 0; ctrl = 0; } else { ctrl = keys->pressedPtr(row, col); need_repaint = TRUE; *ctrl = !keys->pressed(row, col); } } else if (qkeycode == Qt::Key_Alt) { need_repaint = TRUE; if (alt) { @@ -714,128 +713,135 @@ void Keyboard::mousePressEvent(QMouseEvent *e) if (dc) { if (qkeycode == Qt::Key_Backspace) { dc->input.remove(dc->input.last()); // remove last input dc->decBackspaces(); } else if ( qkeycode == Qt::Key_Return || QChar(unicode).isPunct() || QChar(unicode).isSpace() || unicode == 0) { dc->input.clear(); dc->resetBackspaces(); } else { dc->add(QString(QChar(unicode))); dc->incBackspaces(); } } picks->repaint(); } // painting pressed = TRUE; pressedKeyRow = row; pressedKeyCol = col; if (need_repaint) repaint(FALSE); else { // just paint the one key pressed QPainter p(this); drawKeyboard(p, row, col); } if (useRepeat) repeatTimer->start( 800 ); //pressTid = startTimer(80); } /* Keyboard::mouseReleaseEvent {{{1 */ void Keyboard::mouseReleaseEvent(QMouseEvent*) { pressed = FALSE; //if ( pressTid == 0 ) #if defined(Q_WS_QWS) || defined(_WS_QWS_) if ( unicode != -1 ) { emit key( unicode, qkeycode, modifiers, false, false ); repeatTimer->stop(); } #endif if (shift && unicode != 0) { *shift = 0; // unpress shift key shift = 0; // reset the shift pointer repaint(FALSE); } if (ctrl && unicode != 0) { *ctrl = 0; ctrl = 0; repaint(FALSE); } + if (alt && alt != 0) { + + *alt = 0; + alt = 0; + repaint(FALSE); + + } /* * do not make the meta key release after being pressed * else if (meta && unicode != 0) { *meta = 0; meta = 0; repaint(FALSE); } */ else clearHighlight(); } /* Keyboard::timerEvent {{{1 */ /* dont know what this does, but i think it is here so that if your screen * sticks (like on an ipaq) then it will stop repeating if you click another * key... but who knows what anything does in this thing anyway? void Keyboard::timerEvent(QTimerEvent* e) { if ( e->timerId() == pressTid ) { killTimer(pressTid); pressTid = 0; if ( !pressed ) cout << "calling clearHighlight from timerEvent\n"; //clearHighlight(); } } */ void Keyboard::repeat() { repeatTimer->start( 200 ); emit key( unicode, qkeycode, modifiers, true, true ); } void Keyboard::clearHighlight() { if ( pressedKeyRow >= 0 && pressedKeyCol >= 0) { int tmpRow = pressedKeyRow; int tmpCol = pressedKeyCol; pressedKeyRow = -1; pressedKeyCol = -1; QPainter p(this); drawKeyboard(p, tmpRow, tmpCol); } } /* Keyboard::sizeHint {{{1 */ QSize Keyboard::sizeHint() const { QFontMetrics fm=fontMetrics(); int keyHeight = fm.lineSpacing() + 2; return QSize( 240, keyHeight * keys->rows() + (usePicks ? picks->sizeHint().height() : 0) + 1); |