summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/multikey/keyboard.cpp98
-rw-r--r--inputmethods/multikey/keyboard.h3
2 files changed, 93 insertions, 8 deletions
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp
index 7098a6b..74c99c7 100644
--- a/inputmethods/multikey/keyboard.cpp
+++ b/inputmethods/multikey/keyboard.cpp
@@ -42,6 +42,6 @@
/* Keyboard::Keyboard {{{1 */
Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) :
- QFrame(parent, _name, f), shift(0), lock(0), ctrl(0),
- alt(0), useLargeKeys(TRUE), usePicks(0), useRepeat(0), pressedKeyRow(-1), pressedKeyCol(-1),
+ QFrame(parent, _name, f), shift(0), lock(0), ctrl(0), alt(0), meta(0),
+ useLargeKeys(TRUE), usePicks(0), useRepeat(0), pressedKeyRow(-1), pressedKeyCol(-1),
unicode(-1), qkeycode(0), modifiers(0), schar(0), mchar(0), echar(0),
configdlg(0)
@@ -183,8 +183,15 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
p.setPen(textcolor);
- if (!pix)
+ if (!pix) {
+ if (shift || lock)
+ c = keys->shift(c);
+ if (meta) {
+
+ c = keys->meta(c);
+ }
p.drawText(x, y,
- defaultKeyWidth * keyWidth, keyHeight,
- AlignCenter, ((shift || lock) && keys->shift(c)) ? (QChar)keys->shift(c) : (QChar)c);
+ defaultKeyWidth * keyWidth + 3, keyHeight,
+ AlignCenter, (QChar)c);
+ }
else
// center the image in the middle of the key
@@ -226,8 +233,12 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
if (!pix) {
- p.setPen(textcolor);
+ if ((shift || lock) && keys->shift(c))
+ c = keys->shift(c);
+ else if (meta && keys->meta(c))
+ c = keys->meta(c);
+
p.drawText(x, y,
- keyWidthPix, keyHeight,
- AlignCenter, ((shift || lock) && keys->shift(c)) ? (QChar)keys->shift(c) : (QChar)c);
+ defaultKeyWidth * keyWidth + 3, keyHeight,
+ AlignCenter, (QChar)c);
}
else {
@@ -345,4 +356,9 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
}
}
+ if (meta) {
+
+ *meta = 0;
+ meta = 0;
+ }
} else if (qkeycode == Qt::Key_CapsLock) {
@@ -361,5 +377,39 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
}
}
+ if (meta) {
+
+ *meta = 0;
+ meta = 0;
+ }
+
+ } else if (qkeycode == Qt::Key_Meta) {
+ need_repaint = TRUE;
+
+ if (meta) {
+ *meta = 0;
+ meta = 0;
+
+ } else {
+
+ meta = keys->pressedPtr(row, col);
+ need_repaint = TRUE;
+ *meta = !keys->pressed(row, col);
+ }
+
+ if (shift) {
+
+ *shift = 0;
+ shift = 0;
+
+ }
+ if (lock) {
+
+ *lock = 0;
+ lock = 0;
+
+ }
+ // dont need to emit this key... acts same as alt
+ qkeycode = 0;
}
@@ -369,4 +419,7 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
unicode = keys->shift(unicode);
}
+ if (meta && keys->meta(unicode)) {
+ unicode = keys->meta(unicode);
+ }
}
@@ -448,4 +501,9 @@ void Keyboard::mouseReleaseEvent(QMouseEvent*)
repaint(FALSE);
+ } else if (meta && unicode != 0) {
+
+ *meta = 0;
+ meta = 0;
+ repaint(FALSE);
}
else
@@ -1047,4 +1105,17 @@ void Keys::setKeysFromFile(const char * filename) {
}
+ // meta key map
+ else if (buf.contains(QRegExp("^\\s*m\\s+[0-9a-fx]+\\s+[0-9a-fx]+\\s*$", FALSE, FALSE))) {
+
+ QTextStream tmp (buf, IO_ReadOnly);
+ ushort lower, shift;
+ QChar m;
+ tmp >> m >> lower >> shift;
+
+ metaMap.insert(lower, shift);
+
+ buf = t.readLine();
+ }
+
// other variables like lang & title
else if (buf.contains(QRegExp("^\\s*[a-zA-Z]+\\s*=\\s*[a-zA-Z0-9/]+\\s*$", FALSE, FALSE))) {
@@ -1170,4 +1241,15 @@ ushort Keys::shift(const ushort uni) {
}
+ushort Keys::meta(const ushort uni) {
+
+ if (metaMap[uni]) {
+
+ return metaMap[uni];
+ }
+ else
+ return 0;
+
+}
+
bool *Keys::pressedPtr(const int row, const int col) {
diff --git a/inputmethods/multikey/keyboard.h b/inputmethods/multikey/keyboard.h
index dc50e55..b692975 100644
--- a/inputmethods/multikey/keyboard.h
+++ b/inputmethods/multikey/keyboard.h
@@ -63,4 +63,5 @@ public:
bool *pressedPtr(const int row, const int col);
ushort shift(const ushort);
+ ushort meta(const ushort);
QPixmap *pix(const int row, const int col);
int numKeys(const int row);
@@ -86,4 +87,5 @@ private:
QList<Key> keys[6];
QMap<ushort,ushort> shiftMap;
+ QMap<ushort,ushort> metaMap;
};
@@ -128,4 +130,5 @@ private:
bool *ctrl;
bool *alt;
+ bool *meta;
uint useLargeKeys:1;
uint usePicks:1;