summaryrefslogtreecommitdiff
authoribotty <ibotty>2002-10-13 16:56:54 (UTC)
committer ibotty <ibotty>2002-10-13 16:56:54 (UTC)
commit495abbf351f29328b52cb055566ef8bec6f466f0 (patch) (side-by-side diff)
tree7b462124c88f6127bf3f789339ebde9e4a089e35
parent19cf7d4ff5a64aff90e31b29072ce30db6a046ec (diff)
downloadopie-495abbf351f29328b52cb055566ef8bec6f466f0.zip
opie-495abbf351f29328b52cb055566ef8bec6f466f0.tar.gz
opie-495abbf351f29328b52cb055566ef8bec6f466f0.tar.bz2
key presses should be now visible.
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-console/widget_layer.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/noncore/apps/opie-console/widget_layer.cpp b/noncore/apps/opie-console/widget_layer.cpp
index 0364e66..6682708 100644
--- a/noncore/apps/opie-console/widget_layer.cpp
+++ b/noncore/apps/opie-console/widget_layer.cpp
@@ -1,178 +1,183 @@
/* ------------------------------------------------------------------------- */
/* */
/* widget_layer.cpp Widget Layer */
/* */
/* opie developers <opie@handhelds.org> */
/* */
/* ------------------------------------------------------------------------- */
#include "widget_layer.h"
#include <qclipboard.h>
#include <qregexp.h>
#include <qglobal.h>
#include <string.h>
//#include <
#include "common.h"
WidgetLayer::WidgetLayer( const Profile &config, QWidget *parent, const char *name ) : QFrame( parent, name )
{
// get the clipboard
m_clipboard = QApplication::clipboard();
// when data on clipboard changes, clear selection
QObject::connect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
(QObject*)this, SLOT( onClearSelection() ) );
// initialize vars:
m_lines = 1;
m_columns = 1;
m_resizing = false;
// just for demonstrating
//m_image = QArray<Character>( m_lines * m_columns );
m_image = QArray<Character>( 1 );
+ // we need to install an event filter,
+ // to emit keypresses.
+ qApp->installEventFilter( this );
+
}
WidgetLayer::~WidgetLayer()
{
// clean up
delete m_image;
}
+
/* --------------------------------- audio ---------------------------------- */
void WidgetLayer::bell()
{
QApplication::beep();
}
bool WidgetLayer::eventFilter( QObject *obj, QEvent *e )
{
if ( (e->type() == QEvent::Accel ||
e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) {
static_cast<QKeyEvent *>( e )->ignore();
return true;
}
if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ )
return FALSE; // not us
#ifdef FAKE_CTRL_AND_ALT
static bool control = FALSE;
static bool alt = FALSE;
// qDebug(" Has a keyboard with no CTRL and ALT keys, but we fake it:");
bool dele=FALSE;
if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
QKeyEvent* ke = (QKeyEvent*)e;
bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat();
switch (ke->key()) {
case Key_F9: // let this be "Control"
control = keydown;
e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state());
dele=TRUE;
break;
case Key_F13: // let this be "Alt"
alt = keydown;
e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state());
dele=TRUE;
break;
default:
if ( control ) {
int a = toupper(ke->ascii())-64;
if ( a >= 0 && a < ' ' ) {
e = new QKeyEvent(e->type(), ke->key(),
a, ke->state()|ControlButton,
QChar(a,0));
dele=TRUE;
}
}
if ( alt ) {
e = new QKeyEvent(e->type(), ke->key(),
ke->ascii(), ke->state()|AltButton, ke->text());
dele=TRUE;
}
}
}
#endif
if ( e->type() == QEvent::KeyPress ) {
QKeyEvent* ke = (QKeyEvent*)e;
//actSel=0; // Key stroke implies a screen update, so Widget won't
// know where the current selection is.
// qDebug("key pressed is 0x%x",ke->key());
if( ke->state() == ShiftButton && ke->key() == Key_Tab) { //lets hardcode this sucker
insertText("\\"); // expose
} else
emit keyPressed( ke ); // expose
ke->accept();
#ifdef FAKE_CTRL_AND_ALT
if ( dele ) delete e;
#endif
return true; // stop the event
}
return QFrame::eventFilter( obj, e );
}
/* --------------------------------- screen --------------------------------- */
void WidgetLayer::propagateSize()
{
QArray<Character> oldimage = m_image.copy();
int oldlines = m_lines;
int oldcolumns = m_columns;
makeImage();
// copy old image, to reduce flicker
if ( ! oldimage.isEmpty() )
{
int lins = QMIN( oldlines, m_lines );
int cols = QMIN( oldcolumns, m_columns );
for ( int lin = 0; lin < lins; ++lin )
{
memcpy( (void*) &m_image[m_columns*lin],
(void*) &oldimage[oldcolumns*lin],
cols*sizeof( Character ) );
}
}
else
clearImage();
delete oldimage;
m_resizing = true;
emit imageSizeChanged( m_lines, m_columns );
m_resizing = false;
}
void WidgetLayer::makeImage()
{
calcGeometry();
m_image = QArray<Character>( m_columns * m_lines );
clearImage();
}
void WidgetLayer::clearImage()
{
//should this belong here??
for ( int y = 0; y < m_lines; y++ )
for ( int x = 0; x < m_columns; x++ )
{
m_image[loc(x,y)].c = 0xff;
m_image[loc(x,y)].f = 0xff;
m_image[loc(x,y)].b = 0xff;
m_image[loc(x,y)].r = 0xff;
}
}