author | hash <hash> | 2002-08-21 18:12:55 (UTC) |
---|---|---|
committer | hash <hash> | 2002-08-21 18:12:55 (UTC) |
commit | 33fb38da29cfb4b29eff08928742b8d6918eb852 (patch) (side-by-side diff) | |
tree | db63fcd49acf5ce9067289ae1a8aac101d43bc11 | |
parent | 0a61be3b42b4b152468a5ef2def4a18baeda9b4f (diff) | |
download | opie-33fb38da29cfb4b29eff08928742b8d6918eb852.zip opie-33fb38da29cfb4b29eff08928742b8d6918eb852.tar.gz opie-33fb38da29cfb4b29eff08928742b8d6918eb852.tar.bz2 |
fixed segfault when no keymap is installed
-rw-r--r-- | inputmethods/multikey/keyboard.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp index 949164a..d5a7afd 100644 --- a/inputmethods/multikey/keyboard.cpp +++ b/inputmethods/multikey/keyboard.cpp @@ -204,128 +204,130 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col) for (row = 1; row <= 5; row++) { int x = 0; int y = (row - 1) * keyHeight + (usePicks ? picks->height() : 0); p.setPen(keycolor_lines); p.drawLine(x, y, x + width(), y); for (int col = 0; col < keys->numKeys(row); col++) { QPixmap *pix = keys->pix(row, col); int keyWidth = keys->width(row, col); int keyWidthPix = defaultKeyWidth * keyWidth; if (keys->pressed(row, col)) p.fillRect(x+1, y+1, keyWidthPix - 1, keyHeight - 1, keycolor_pressed); ushort c = keys->uni(row, col); if (!pix) { p.setPen(textcolor); p.drawText(x, y, keyWidthPix, keyHeight, AlignCenter, ((shift || lock) && keys->shift(c)) ? (QChar)keys->shift(c) : (QChar)c); } else { // center the image in the middle of the key p.drawPixmap( x + (keyWidthPix - pix->width())/2, y + (keyHeight - pix->height())/2 + 1, QPixmap(*pix) ); } p.setPen(keycolor_lines); p.drawLine(x, y, x, y + keyHeight); x += keyWidthPix; } } 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; 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())); configdlg->showMaximized(); configdlg->show(); configdlg->raise(); } } else if (qkeycode == Qt::Key_Control) { ctrl = keys->pressedPtr(row, col); need_repaint = TRUE; *ctrl = !keys->pressed(row, col); } else if (qkeycode == Qt::Key_Alt) { alt = keys->pressedPtr(row, col); need_repaint = TRUE; *alt = !keys->pressed(row, col); } else if (qkeycode == Qt::Key_Shift) { need_repaint = TRUE; if (shift) { *shift = 0; shift = 0; } else { shift = keys->pressedPtr(row, col); *shift = 1; if (lock) { *lock = 0; lock = 0; } } } else if (qkeycode == Qt::Key_CapsLock) { need_repaint = TRUE; if (lock) { |