Diffstat (limited to 'noncore/apps/opie-console/widget_layer.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-console/widget_layer.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/noncore/apps/opie-console/widget_layer.cpp b/noncore/apps/opie-console/widget_layer.cpp index c00871f..3875a6e 100644 --- a/noncore/apps/opie-console/widget_layer.cpp +++ b/noncore/apps/opie-console/widget_layer.cpp | |||
@@ -55,6 +55,85 @@ void WidgetLayer::bell() | |||
55 | QApplication::beep(); | 55 | QApplication::beep(); |
56 | } | 56 | } |
57 | 57 | ||
58 | bool WidgetLayer::eventFilter( QObject *obj, QEvent *e ) | ||
59 | { | ||
60 | if ( (e->type() == QEvent::Accel || | ||
61 | e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) { | ||
62 | static_cast<QKeyEvent *>( e )->ignore(); | ||
63 | return true; | ||
64 | } | ||
65 | if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ ) | ||
66 | return FALSE; // not us | ||
67 | if ( e->type() == QEvent::Wheel) { | ||
68 | QApplication::sendEvent( m_scrollbar, e); | ||
69 | } | ||
70 | |||
71 | #ifdef FAKE_CTRL_AND_ALT | ||
72 | static bool control = FALSE; | ||
73 | static bool alt = FALSE; | ||
74 | // qDebug(" Has a keyboard with no CTRL and ALT keys, but we fake it:"); | ||
75 | bool dele=FALSE; | ||
76 | if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { | ||
77 | QKeyEvent* ke = (QKeyEvent*)e; | ||
78 | bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat(); | ||
79 | switch (ke->key()) { | ||
80 | case Key_F9: // let this be "Control" | ||
81 | control = keydown; | ||
82 | e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state()); | ||
83 | dele=TRUE; | ||
84 | break; | ||
85 | case Key_F13: // let this be "Alt" | ||
86 | alt = keydown; | ||
87 | e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state()); | ||
88 | dele=TRUE; | ||
89 | break; | ||
90 | default: | ||
91 | if ( control ) { | ||
92 | int a = toupper(ke->ascii())-64; | ||
93 | if ( a >= 0 && a < ' ' ) { | ||
94 | e = new QKeyEvent(e->type(), ke->key(), | ||
95 | a, ke->state()|ControlButton, | ||
96 | QChar(a,0)); | ||
97 | dele=TRUE; | ||
98 | } | ||
99 | } | ||
100 | if ( alt ) { | ||
101 | e = new QKeyEvent(e->type(), ke->key(), | ||
102 | ke->ascii(), ke->state()|AltButton, ke->text()); | ||
103 | dele=TRUE; | ||
104 | } | ||
105 | } | ||
106 | } | ||
107 | #endif | ||
108 | |||
109 | if ( e->type() == QEvent::KeyPress ) { | ||
110 | QKeyEvent* ke = (QKeyEvent*)e; | ||
111 | //actSel=0; // Key stroke implies a screen update, so Widget won't | ||
112 | // know where the current selection is. | ||
113 | |||
114 | // qDebug("key pressed is 0x%x",ke->key()); | ||
115 | |||
116 | if( ke->state() == ShiftButton && ke->key() == Key_Tab) { //lets hardcode this sucker | ||
117 | insertText("\\"); // expose | ||
118 | } else | ||
119 | emit keyPressed( ke ); // expose | ||
120 | ke->accept(); | ||
121 | #ifdef FAKE_CTRL_AND_ALT | ||
122 | if ( dele ) delete e; | ||
123 | #endif | ||
124 | return true; // stop the event | ||
125 | } | ||
126 | if ( e->type() == QEvent::Enter ) { | ||
127 | QObject::disconnect( (QObject*)cb, SIGNAL(dataChanged()), | ||
128 | this, SLOT(onClearSelection()) ); | ||
129 | } | ||
130 | if ( e->type() == QEvent::Leave ) { | ||
131 | QObject::connect( (QObject*)cb, SIGNAL(dataChanged()), | ||
132 | this, SLOT(onClearSelection()) ); | ||
133 | } | ||
134 | return QFrame::eventFilter( obj, e ); | ||
135 | } | ||
136 | |||
58 | 137 | ||
59 | /* --------------------------------- screen --------------------------------- */ | 138 | /* --------------------------------- screen --------------------------------- */ |
60 | 139 | ||