summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-10-20 23:00:49 (UTC)
committer llornkcor <llornkcor>2002-10-20 23:00:49 (UTC)
commit8bbd3bca858939b15b8775b4811149b8d83bb6cc (patch) (side-by-side diff)
tree3ec2f82cf31c49debdf46f21746c71c0d69ec1db
parent706b3e155ad713f388606b4ae15c70a2be4c2294 (diff)
downloadopie-8bbd3bca858939b15b8775b4811149b8d83bb6cc.zip
opie-8bbd3bca858939b15b8775b4811149b8d83bb6cc.tar.gz
opie-8bbd3bca858939b15b8775b4811149b8d83bb6cc.tar.bz2
better implementation of F11 menu handling
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/launcher/desktop.cpp23
-rw-r--r--core/launcher/desktop.h1
2 files changed, 20 insertions, 4 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
index 9863187..387650b 100644
--- a/core/launcher/desktop.cpp
+++ b/core/launcher/desktop.cpp
@@ -383,196 +383,196 @@ void DesktopApplication::desktopMessage( const QCString &msg, const QByteArray &
stream >> c;
stream >> m;
qWarning( "KeyRegisterReceived: %i, %s, %s", k, ( const char* ) c, ( const char * ) m );
keyRegisterList.append( QCopKeyRegister( k, c, m ) );
}
}
void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data )
{
QDataStream stream ( data, IO_ReadOnly );
if ( msg == "setScreenSaverInterval(int)" ) {
int time;
stream >> time;
m_screensaver-> setInterval( time );
}
else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
int t1, t2, t3;
stream >> t1 >> t2 >> t3;
m_screensaver-> setIntervals( t1, t2, t3 );
}
else if ( msg == "setBacklight(int)" ) {
int bright;
stream >> bright;
m_screensaver-> setBacklight( bright );
}
else if ( msg == "setScreenSaverMode(int)" ) {
int mode;
stream >> mode;
m_screensaver-> setMode ( mode );
}
else if ( msg == "setDisplayState(int)" ) {
int state;
stream >> state;
m_screensaver-> setDisplayState ( state != 0 );
}
else if ( msg == "suspend()" ) {
emit power();
}
}
enum MemState { Unknown, VeryLow, Low, Normal } memstate = Unknown;
#ifdef Q_WS_QWS
bool DesktopApplication::qwsEventFilter( QWSEvent *e )
{
qpedesktop->checkMemory();
if ( e->type == QWSEvent::Key ) {
QWSKeyEvent * ke = ( QWSKeyEvent * ) e;
if ( !loggedin && ke->simpleData.keycode != Key_F34 )
return TRUE;
bool press = ke->simpleData.is_press;
bool autoRepeat = ke->simpleData.is_auto_repeat;
/*
app that registers key/message to be sent back to the app, when it doesn't have focus,
when user presses key, unless keyboard has been requested from app.
will not send multiple repeats if user holds key
i.e. one shot
*/
if ( !keyRegisterList.isEmpty() && ke->simpleData.keycode !=0 && press) {
// qDebug("<<<<<<<<<<<<<keycode %d", ke->simpleData.keycode);
KeyRegisterList::Iterator it;
for ( it = keyRegisterList.begin(); it != keyRegisterList.end(); ++it ) {
if ( ( *it ).getKeyCode() == ke->simpleData.keycode && !autoRepeat && !keyboardGrabbed() ) {
if ( press )
qDebug( "press" );
else
qDebug( "release" );
QCopEnvelope( ( *it ).getChannel().utf8(), ( *it ).getMessage().utf8() );
}
}
}
if ( !keyboardGrabbed() ) {
if ( ke->simpleData.keycode == Key_F9 ) {
if ( press )
emit datebook();
return TRUE;
}
if ( ke->simpleData.keycode == Key_F10 ) {
if ( !press && cardSendTimer ) {
emit contacts();
delete cardSendTimer;
}
else if ( press ) {
cardSendTimer = new QTimer();
cardSendTimer->start( 2000, TRUE );
connect( cardSendTimer, SIGNAL( timeout() ), this, SLOT( sendCard() ) );
}
return TRUE;
}
// menu key now opens application menu/toolbar
- if ( ke->simpleData.keycode == Key_F11 ) {
- if ( press ) emit menu();
- return TRUE;
- }
+// if ( ke->simpleData.keycode == Key_F11 ) {
+// if ( press ) emit menu();
+// return TRUE;
+// }
if ( ke->simpleData.keycode == Key_F12 ) {
while ( activePopupWidget() )
activePopupWidget() ->close();
if ( press )
emit launch();
return TRUE;
}
if ( ke->simpleData.keycode == Key_F13 ) {
if ( press )
emit email();
return TRUE;
}
}
if ( ke->simpleData.keycode == Key_F34 ) {
if ( press )
emit power();
return TRUE;
}
// This was used for the iPAQ PowerButton
// See main.cpp for new KeyboardFilter
//
// if ( ke->simpleData.keycode == Key_SysReq ) {
// if ( press ) emit power();
// return TRUE;
// }
if ( ke->simpleData.keycode == Key_F35 ) {
if ( press )
emit backlight();
return TRUE;
}
if ( ke->simpleData.keycode == Key_F32 ) {
if ( press )
QCopEnvelope e( "QPE/Desktop", "startSync()" );
return TRUE;
}
if ( ke->simpleData.keycode == Key_F31 && !ke->simpleData.modifiers ) {
if ( press )
emit symbol();
return TRUE;
}
if ( ke->simpleData.keycode == Key_NumLock ) {
if ( press )
emit numLockStateToggle();
}
if ( ke->simpleData.keycode == Key_CapsLock ) {
if ( press )
emit capsLockStateToggle();
}
if ( ( press && !autoRepeat ) || ( !press && autoRepeat ) )
qpedesktop->keyClick();
}
else {
if ( e->type == QWSEvent::Mouse ) {
QWSMouseEvent * me = ( QWSMouseEvent * ) e;
static bool up = TRUE;
if ( me->simpleData.state & LeftButton ) {
if ( up ) {
up = FALSE;
qpedesktop->screenClick();
}
}
else {
up = TRUE;
}
}
}
return QPEApplication::qwsEventFilter( e );
}
#endif
void DesktopApplication::psTimeout()
{
qpedesktop->checkMemory(); // in case no events are being generated
*ps = PowerStatusManager::readStatus();
if ( ( ps->batteryStatus() == PowerStatus::VeryLow ) ) {
pa->alert( tr( "Battery is running very low." ), 6 );
}
if ( ps->batteryStatus() == PowerStatus::Critical ) {
pa->alert( tr( "Battery level is critical!\n"
"Keep power off until power restored!" ), 1 );
}
if ( ps->backupBatteryStatus() == PowerStatus::VeryLow ) {
pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 3 );
}
}
void DesktopApplication::sendCard()
{
@@ -954,96 +954,111 @@ void DesktopApplication::shutdown( ShutdownImpl::Type t )
break;
case ShutdownImpl::TerminateDesktop:
prepareForTermination( FALSE );
// This is a workaround for a Qt bug
// clipboard applet has to stop its poll timer, or Qt/E
// will hang on quit() right before it emits aboutToQuit()
emit aboutToQuit ( );
quit();
break;
}
}
void DesktopApplication::restart()
{
prepareForTermination( TRUE );
#ifdef Q_WS_QWS
for ( int fd = 3; fd < 100; fd++ )
close( fd );
#if defined(QT_DEMO_SINGLE_FLOPPY)
execl( "/sbin/init", "qpe", 0 );
#elif defined(QT_QWS_CASSIOPEIA)
execl( "/bin/sh", "sh", 0 );
#else
execl( ( qpeDir() + "/bin/qpe" ).latin1(), "qpe", 0 );
#endif
exit( 1 );
#endif
}
void Desktop::startTransferServer()
{
// start qcop bridge server
qcopBridge = new QCopBridge( 4243 );
if ( !qcopBridge->ok() ) {
delete qcopBridge;
qcopBridge = 0;
}
// start transfer server
transferServer = new TransferServer( 4242 );
if ( !transferServer->ok() ) {
delete transferServer;
transferServer = 0;
}
if ( !transferServer || !qcopBridge )
startTimer( 2000 );
}
void Desktop::timerEvent( QTimerEvent *e )
{
killTimer( e->timerId() );
startTransferServer();
}
void Desktop::terminateServers()
{
delete transferServer;
delete qcopBridge;
transferServer = 0;
qcopBridge = 0;
}
void Desktop::rereadVolumes()
{
Config cfg( "qpe" );
cfg.setGroup( "Volume" );
touchclick = cfg.readBoolEntry( "TouchSound" );
keyclick = cfg.readBoolEntry( "KeySound" );
alarmsound = cfg.readBoolEntry( "AlarmSound" );
}
void Desktop::keyClick()
{
if ( keyclick )
ODevice::inst ( ) -> keySound ( );
}
void Desktop::screenClick()
{
if ( touchclick )
ODevice::inst ( ) -> touchSound ( );
}
void Desktop::soundAlarm()
{
if ( qpedesktop-> alarmsound )
ODevice::inst ( ) -> alarmSound ( );
}
+bool Desktop::eventFilter( QObject *, QEvent *ev )
+{
+ if ( ev->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent *)ev;
+ if ( ke->key() == Qt::Key_F11 ) { // menu key
+ QWidget *active = qApp->activeWindow();
+ if ( active && active->isPopup() ) {
+ active->close();
+ }
+ raiseMenu();
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
diff --git a/core/launcher/desktop.h b/core/launcher/desktop.h
index 5de85f4..04c2f61 100644
--- a/core/launcher/desktop.h
+++ b/core/launcher/desktop.h
@@ -32,116 +32,117 @@
class Background;
class Launcher;
class TaskBar;
class PowerStatus;
class QCopBridge;
class TransferServer;
class DesktopPowerAlerter;
class PackageSlave;
class QPEScreenSaver;
class DesktopApplication : public QPEApplication
{
Q_OBJECT
public:
DesktopApplication( int& argc, char **argv, Type t );
~DesktopApplication();
static void switchLCD ( bool on ); // only for togglePower in Desktop
signals:
void menu();
void home();
void datebook();
void contacts();
void launch();
void email();
void backlight();
void power();
void symbol();
void numLockStateToggle();
void capsLockStateToggle();
void prepareForRestart();
protected:
#ifdef Q_WS_QWS
bool qwsEventFilter( QWSEvent * );
#endif
void shutdown();
void restart();
public slots:
virtual void desktopMessage ( const QCString &msg, const QByteArray &data );
virtual void systemMessage ( const QCString &msg, const QByteArray &data );
protected slots:
void shutdown( ShutdownImpl::Type );
void psTimeout();
void sendCard();
private:
DesktopPowerAlerter *pa;
PowerStatus *ps;
QTimer *cardSendTimer;
QCopChannel *channel;
QPEScreenSaver *m_screensaver;
};
class Desktop : public QWidget
{
Q_OBJECT
public:
Desktop();
~Desktop();
static bool screenLocked();
void show();
void checkMemory();
void keyClick();
void screenClick();
static void soundAlarm();
public slots:
void raiseDatebook();
void raiseContacts();
void raiseMenu();
void raiseLauncher();
void raiseEmail();
void execAutoStart();
void togglePower();
void toggleLight();
void toggleNumLockState();
void toggleCapsLockState();
void toggleSymbolInput();
void terminateServers();
void rereadVolumes();
void home ( );
protected:
void executeOrModify( const QString& appLnkFile );
void styleChange( QStyle & );
void timerEvent( QTimerEvent *e );
+ bool eventFilter( QObject *, QEvent * );
QWidget *bg;
Launcher *launcher;
TaskBar *tb;
private:
void startTransferServer();
bool recoverMemory();
QCopBridge *qcopBridge;
TransferServer *transferServer;
PackageSlave *packageSlave;
QDateTime suspendTime;
bool keyclick, touchclick, alarmsound;
};
#endif // __DESKTOP_H__