-rw-r--r-- | core/apps/embeddedkonsole/TEWidget.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/core/apps/embeddedkonsole/TEWidget.cpp b/core/apps/embeddedkonsole/TEWidget.cpp index d0850e3..ec1b30c 100644 --- a/core/apps/embeddedkonsole/TEWidget.cpp +++ b/core/apps/embeddedkonsole/TEWidget.cpp | |||
@@ -215,66 +215,76 @@ static QChar vt100extended(QChar c) | |||
215 | case 0x250c : return 13; | 215 | case 0x250c : return 13; |
216 | case 0x2514 : return 14; | 216 | case 0x2514 : return 14; |
217 | case 0x253c : return 15; | 217 | case 0x253c : return 15; |
218 | case 0xf800 : return 16; | 218 | case 0xf800 : return 16; |
219 | case 0xf801 : return 17; | 219 | case 0xf801 : return 17; |
220 | case 0x2500 : return 18; | 220 | case 0x2500 : return 18; |
221 | case 0xf803 : return 19; | 221 | case 0xf803 : return 19; |
222 | case 0xf804 : return 20; | 222 | case 0xf804 : return 20; |
223 | case 0x251c : return 21; | 223 | case 0x251c : return 21; |
224 | case 0x2524 : return 22; | 224 | case 0x2524 : return 22; |
225 | case 0x2534 : return 23; | 225 | case 0x2534 : return 23; |
226 | case 0x252c : return 24; | 226 | case 0x252c : return 24; |
227 | case 0x2502 : return 25; | 227 | case 0x2502 : return 25; |
228 | case 0x2264 : return 26; | 228 | case 0x2264 : return 26; |
229 | case 0x2265 : return 27; | 229 | case 0x2265 : return 27; |
230 | case 0x03c0 : return 28; | 230 | case 0x03c0 : return 28; |
231 | case 0x2260 : return 29; | 231 | case 0x2260 : return 29; |
232 | case 0x00a3 : return 30; | 232 | case 0x00a3 : return 30; |
233 | case 0x00b7 : return 31; | 233 | case 0x00b7 : return 31; |
234 | } | 234 | } |
235 | return c; | 235 | return c; |
236 | } | 236 | } |
237 | 237 | ||
238 | static QChar identicalMap(QChar c) | 238 | static QChar identicalMap(QChar c) |
239 | { | 239 | { |
240 | return c; | 240 | return c; |
241 | } | 241 | } |
242 | 242 | ||
243 | void TEWidget::fontChange(const QFont &) | 243 | void TEWidget::fontChange(const QFont &) |
244 | { | 244 | { |
245 | QFontMetrics fm(font()); | 245 | QFontMetrics fm(font()); |
246 | font_h = fm.height(); | 246 | font_h = fm.height(); |
247 | font_w = fm.maxWidth(); | 247 | |
248 | font_a = fm.ascent(); | 248 | // font_w = max width of ASCII chars (U.B.) |
249 | font_w = 0; | ||
250 | int fw; | ||
251 | for (int i = 0x20; i < 0x80; i++) { | ||
252 | if (isprint(i) && font_w < (fw = fm.width(i))) { | ||
253 | font_w = fw; | ||
254 | } | ||
255 | } | ||
256 | //font_w = fm.maxWidth(); | ||
257 | |||
258 | font_a = fm.ascent(); | ||
249 | //printf("font_h: %d\n",font_h); | 259 | //printf("font_h: %d\n",font_h); |
250 | //printf("font_w: %d\n",font_w); | 260 | //printf("font_w: %d\n",font_w); |
251 | //printf("font_a: %d\n",font_a); | 261 | //printf("font_a: %d\n",font_a); |
252 | //printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii()); | 262 | //printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii()); |
253 | //printf("rawname: %s\n",font().rawName().ascii()); | 263 | //printf("rawname: %s\n",font().rawName().ascii()); |
254 | fontMap = | 264 | fontMap = |
255 | #if QT_VERSION < 300 | 265 | #if QT_VERSION < 300 |
256 | strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646") | 266 | strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646") |
257 | ? vt100extended | 267 | ? vt100extended |
258 | : | 268 | : |
259 | #endif | 269 | #endif |
260 | identicalMap; | 270 | identicalMap; |
261 | propagateSize(); | 271 | propagateSize(); |
262 | update(); | 272 | update(); |
263 | } | 273 | } |
264 | 274 | ||
265 | void TEWidget::setVTFont(const QFont& f) | 275 | void TEWidget::setVTFont(const QFont& f) |
266 | { | 276 | { |
267 | QFrame::setFont(f); | 277 | QFrame::setFont(f); |
268 | } | 278 | } |
269 | 279 | ||
270 | QFont TEWidget::getVTFont() { | 280 | QFont TEWidget::getVTFont() { |
271 | return font(); | 281 | return font(); |
272 | } | 282 | } |
273 | 283 | ||
274 | void TEWidget::setFont(const QFont &) | 284 | void TEWidget::setFont(const QFont &) |
275 | { | 285 | { |
276 | // ignore font change request if not coming from konsole itself | 286 | // ignore font change request if not coming from konsole itself |
277 | } | 287 | } |
278 | 288 | ||
279 | /* ------------------------------------------------------------------------- */ | 289 | /* ------------------------------------------------------------------------- */ |
280 | /* */ | 290 | /* */ |
@@ -991,103 +1001,108 @@ void TEWidget::onClearSelection() | |||
991 | // for the auto-hide cursor feature, I added empty focusInEvent() and | 1001 | // for the auto-hide cursor feature, I added empty focusInEvent() and |
992 | // focusOutEvent() so that update() isn't called. | 1002 | // focusOutEvent() so that update() isn't called. |
993 | // For auto-hide, we need to get keypress-events, but we only get them when | 1003 | // For auto-hide, we need to get keypress-events, but we only get them when |
994 | // we have focus. | 1004 | // we have focus. |
995 | 1005 | ||
996 | void TEWidget::doScroll(int lines) | 1006 | void TEWidget::doScroll(int lines) |
997 | { | 1007 | { |
998 | scrollbar->setValue(scrollbar->value()+lines); | 1008 | scrollbar->setValue(scrollbar->value()+lines); |
999 | } | 1009 | } |
1000 | 1010 | ||
1001 | void TEWidget::doHScroll(int lines) { | 1011 | void TEWidget::doHScroll(int lines) { |
1002 | hScrollbar->setValue( hScrollbar->value()+lines); | 1012 | hScrollbar->setValue( hScrollbar->value()+lines); |
1003 | } | 1013 | } |
1004 | 1014 | ||
1005 | bool TEWidget::eventFilter( QObject *obj, QEvent *e ) | 1015 | bool TEWidget::eventFilter( QObject *obj, QEvent *e ) |
1006 | { | 1016 | { |
1007 | if ( (e->type() == QEvent::Accel || | 1017 | if ( (e->type() == QEvent::Accel || |
1008 | e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) { | 1018 | e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) { |
1009 | static_cast<QKeyEvent *>( e )->ignore(); | 1019 | static_cast<QKeyEvent *>( e )->ignore(); |
1010 | return true; | 1020 | return true; |
1011 | } | 1021 | } |
1012 | if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ ) | 1022 | if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ ) |
1013 | return FALSE; // not us | 1023 | return FALSE; // not us |
1014 | if ( e->type() == QEvent::Wheel) { | 1024 | if ( e->type() == QEvent::Wheel) { |
1015 | QApplication::sendEvent(scrollbar, e); | 1025 | QApplication::sendEvent(scrollbar, e); |
1016 | } | 1026 | } |
1017 | 1027 | ||
1018 | #ifdef FAKE_CTRL_AND_ALT | 1028 | #ifdef FAKE_CTRL_AND_ALT |
1019 | static bool control = FALSE; | 1029 | static bool control = FALSE; |
1020 | static bool alt = FALSE; | 1030 | static bool alt = FALSE; |
1021 | // qDebug(" Has a keyboard with no CTRL and ALT keys, but we fake it:"); | 1031 | // qDebug(" Has a keyboard with no CTRL and ALT keys, but we fake it:"); |
1022 | bool dele=FALSE; | 1032 | bool dele=FALSE; |
1033 | |||
1023 | if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { | 1034 | if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { |
1024 | QKeyEvent* ke = (QKeyEvent*)e; | 1035 | QKeyEvent* ke = (QKeyEvent*)e; |
1025 | bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat(); | 1036 | bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat(); |
1026 | switch (ke->key()) { | 1037 | switch (ke->key()) { |
1027 | case Key_F9: // let this be "Control" | 1038 | case Key_F9: // let this be "Control" |
1028 | control = keydown; | 1039 | control = keydown; |
1029 | e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state()); | 1040 | e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state()); |
1030 | dele=TRUE; | 1041 | dele=TRUE; |
1031 | break; | 1042 | break; |
1032 | case Key_F13: // let this be "Alt" | 1043 | case Key_F13: // let this be "Alt" |
1033 | alt = keydown; | 1044 | alt = keydown; |
1034 | e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state()); | 1045 | e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state()); |
1035 | dele=TRUE; | 1046 | dele=TRUE; |
1036 | break; | 1047 | break; |
1037 | default: | 1048 | default: |
1038 | if ( control ) { | 1049 | if ( control ) { |
1039 | int a = toupper(ke->ascii())-64; | 1050 | int a = toupper(ke->ascii())-64; |
1040 | if ( a >= 0 && a < ' ' ) { | 1051 | if ( a >= 0 && a < ' ' ) { |
1041 | e = new QKeyEvent(e->type(), ke->key(), | 1052 | e = new QKeyEvent(e->type(), ke->key(), |
1042 | a, ke->state()|ControlButton, QChar(a,0)); | 1053 | a, ke->state()|ControlButton, QChar(a,0)); |
1043 | dele=TRUE; | 1054 | dele=TRUE; |
1044 | } | 1055 | } |
1045 | } | 1056 | } |
1046 | if ( alt ) { | 1057 | if ( alt ) { |
1047 | e = new QKeyEvent(e->type(), ke->key(), | 1058 | e = new QKeyEvent(e->type(), ke->key(), |
1048 | ke->ascii(), ke->state()|AltButton, ke->text()); | 1059 | ke->ascii(), ke->state()|AltButton, ke->text()); |
1049 | dele=TRUE; | 1060 | dele=TRUE; |
1050 | } | 1061 | } |
1051 | } | 1062 | } |
1052 | } | 1063 | } |
1053 | #endif | 1064 | #endif |
1054 | 1065 | ||
1055 | if ( e->type() == QEvent::KeyPress ) { | 1066 | if ( e->type() == QEvent::KeyPress ) { |
1056 | QKeyEvent* ke = (QKeyEvent*)e; | 1067 | QKeyEvent* ke = (QKeyEvent*)e; |
1057 | actSel=0; // Key stroke implies a screen update, so TEWidget won't | 1068 | actSel=0; // Key stroke implies a screen update, so TEWidget won't |
1058 | // know where the current selection is. | 1069 | // know where the current selection is. |
1059 | 1070 | ||
1060 | // qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state()); | 1071 | // qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state()); |
1061 | 1072 | if(ke->key() == Key_Escape) { | |
1073 | qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state()); | ||
1074 | |||
1075 | } | ||
1076 | |||
1062 | if( ke->state() == ShiftButton && ke->key() == Key_Tab) { | 1077 | if( ke->state() == ShiftButton && ke->key() == Key_Tab) { |
1063 | //lets hardcode this sucker | 1078 | //lets hardcode this sucker |
1064 | 1079 | ||
1065 | // qDebug("key pressed 2 is 0x%x", ke->key()); | 1080 | // qDebug("key pressed 2 is 0x%x", ke->key()); |
1066 | emitText("\\"); // expose | 1081 | emitText("\\"); // expose |
1067 | } | 1082 | } |
1068 | else if( ke->state() == ControlButton && ke->key() == Key_V) { | 1083 | else if( ke->state() == ControlButton && ke->key() == Key_V) { |
1069 | pasteClipboard(); | 1084 | pasteClipboard(); |
1070 | } | 1085 | } |
1071 | // else if( ke->state() == ControlButton && ke->key() == Key_C) { | 1086 | // else if( ke->state() == ControlButton && ke->key() == Key_C) { |
1072 | // pasteClipboard(); | 1087 | // pasteClipboard(); |
1073 | // } | 1088 | // } |
1074 | else | 1089 | else |
1075 | emit keyPressedSignal(ke); // expose | 1090 | emit keyPressedSignal(ke); // expose |
1076 | ke->accept(); | 1091 | ke->accept(); |
1077 | #ifdef FAKE_CTRL_AND_ALT | 1092 | #ifdef FAKE_CTRL_AND_ALT |
1078 | if ( dele ) delete e; | 1093 | if ( dele ) delete e; |
1079 | #endif | 1094 | #endif |
1080 | return true; // stop the event | 1095 | return true; // stop the event |
1081 | } | 1096 | } |
1082 | if ( e->type() == QEvent::Enter ) { | 1097 | if ( e->type() == QEvent::Enter ) { |
1083 | QObject::disconnect( (QObject*)cb, SIGNAL(dataChanged()), | 1098 | QObject::disconnect( (QObject*)cb, SIGNAL(dataChanged()), |
1084 | this, SLOT(onClearSelection()) ); | 1099 | this, SLOT(onClearSelection()) ); |
1085 | } | 1100 | } |
1086 | if ( e->type() == QEvent::Leave ) { | 1101 | if ( e->type() == QEvent::Leave ) { |
1087 | QObject::connect( (QObject*)cb, SIGNAL(dataChanged()), | 1102 | QObject::connect( (QObject*)cb, SIGNAL(dataChanged()), |
1088 | this, SLOT(onClearSelection()) ); | 1103 | this, SLOT(onClearSelection()) ); |
1089 | } | 1104 | } |
1090 | return QFrame::eventFilter( obj, e ); | 1105 | return QFrame::eventFilter( obj, e ); |
1091 | } | 1106 | } |
1092 | 1107 | ||
1093 | /* ------------------------------------------------------------------------- */ | 1108 | /* ------------------------------------------------------------------------- */ |