summaryrefslogtreecommitdiff
authorsandman <sandman>2002-12-17 00:20:01 (UTC)
committer sandman <sandman>2002-12-17 00:20:01 (UTC)
commit70090722d240bed8c390281e072c9bcfc5ba7782 (patch) (unidiff)
tree453b4715acff74889655877a491c6cc3791d5de0
parent79b94019014efe998b126219827f3050395beea7 (diff)
downloadopie-70090722d240bed8c390281e072c9bcfc5ba7782.zip
opie-70090722d240bed8c390281e072c9bcfc5ba7782.tar.gz
opie-70090722d240bed8c390281e072c9bcfc5ba7782.tar.bz2
small additions to support grabbing the buttons back from a crashed
application
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp11
-rw-r--r--library/qpeapplication.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 852671a..b26933b 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -82,48 +82,49 @@
82#include "imagecodecinterface.h" 82#include "imagecodecinterface.h"
83 83
84#include <unistd.h> 84#include <unistd.h>
85#include <sys/file.h> 85#include <sys/file.h>
86#include <sys/ioctl.h> 86#include <sys/ioctl.h>
87#include <sys/soundcard.h> 87#include <sys/soundcard.h>
88 88
89#include "qt_override_p.h" 89#include "qt_override_p.h"
90 90
91 91
92class QPEApplicationData 92class QPEApplicationData
93{ 93{
94public: 94public:
95 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), kbgrabber( 0 ), 95 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), kbgrabber( 0 ),
96 rightpressed( FALSE ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), 96 rightpressed( FALSE ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ),
97 forceshow( FALSE ), nomaximize( FALSE ), keep_running( TRUE ), qpe_main_widget( 0 ) 97 forceshow( FALSE ), nomaximize( FALSE ), keep_running( TRUE ), qpe_main_widget( 0 )
98 98
99 { 99 {
100 qcopq.setAutoDelete( TRUE ); 100 qcopq.setAutoDelete( TRUE );
101 } 101 }
102 102
103 int presstimer; 103 int presstimer;
104 QWidget* presswidget; 104 QWidget* presswidget;
105 int kbgrabber; 105 int kbgrabber;
106 QString kbgrabber_appname;
106 QPoint presspos; 107 QPoint presspos;
107 108
108 bool rightpressed : 1; 109 bool rightpressed : 1;
109 bool kbregrab : 1; 110 bool kbregrab : 1;
110 bool notbusysent : 1; 111 bool notbusysent : 1;
111 bool preloaded : 1; 112 bool preloaded : 1;
112 bool forceshow : 1; 113 bool forceshow : 1;
113 bool nomaximize : 1; 114 bool nomaximize : 1;
114 bool keep_running : 1; 115 bool keep_running : 1;
115 116
116 QString appName; 117 QString appName;
117 struct QCopRec 118 struct QCopRec
118 { 119 {
119 QCopRec( const QCString &ch, const QCString &msg, 120 QCopRec( const QCString &ch, const QCString &msg,
120 const QByteArray &d ) : 121 const QByteArray &d ) :
121 channel( ch ), message( msg ), data( d ) 122 channel( ch ), message( msg ), data( d )
122 { } 123 { }
123 124
124 QCString channel; 125 QCString channel;
125 QCString message; 126 QCString message;
126 QByteArray data; 127 QByteArray data;
127 }; 128 };
128 QWidget* qpe_main_widget; 129 QWidget* qpe_main_widget;
129 QList<QCopRec> qcopq; 130 QList<QCopRec> qcopq;
@@ -1043,48 +1044,50 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data
1043 if ( type() == GuiServer ) 1044 if ( type() == GuiServer )
1044 shutdown(); 1045 shutdown();
1045 } 1046 }
1046 else if ( msg == "quit()" ) { 1047 else if ( msg == "quit()" ) {
1047 if ( type() != GuiServer ) 1048 if ( type() != GuiServer )
1048 tryQuit(); 1049 tryQuit();
1049 } 1050 }
1050 else if ( msg == "forceQuit()" ) { 1051 else if ( msg == "forceQuit()" ) {
1051 if ( type() != GuiServer ) 1052 if ( type() != GuiServer )
1052 quit(); 1053 quit();
1053 } 1054 }
1054 else if ( msg == "restart()" ) { 1055 else if ( msg == "restart()" ) {
1055 if ( type() == GuiServer ) 1056 if ( type() == GuiServer )
1056 restart(); 1057 restart();
1057 } 1058 }
1058 else if ( msg == "grabKeyboard(QString)" ) { 1059 else if ( msg == "grabKeyboard(QString)" ) {
1059 QString who; 1060 QString who;
1060 stream >> who; 1061 stream >> who;
1061 if ( who.isEmpty() ) 1062 if ( who.isEmpty() )
1062 d->kbgrabber = 0; 1063 d->kbgrabber = 0;
1063 else if ( who != d->appName ) 1064 else if ( who != d->appName )
1064 d->kbgrabber = 1; 1065 d->kbgrabber = 1;
1065 else 1066 else
1066 d->kbgrabber = 2; 1067 d->kbgrabber = 2;
1068
1069 d-> kbgrabber_appname = who;
1067 } 1070 }
1068 else if ( msg == "language(QString)" ) { 1071 else if ( msg == "language(QString)" ) {
1069 if ( type() == GuiServer ) { 1072 if ( type() == GuiServer ) {
1070 QString l; 1073 QString l;
1071 stream >> l; 1074 stream >> l;
1072 QString cl = getenv( "LANG" ); 1075 QString cl = getenv( "LANG" );
1073 if ( cl != l ) { 1076 if ( cl != l ) {
1074 if ( l.isNull() ) 1077 if ( l.isNull() )
1075 unsetenv( "LANG" ); 1078 unsetenv( "LANG" );
1076 else 1079 else
1077 setenv( "LANG", l.latin1(), 1 ); 1080 setenv( "LANG", l.latin1(), 1 );
1078 restart(); 1081 restart();
1079 } 1082 }
1080 } 1083 }
1081 } 1084 }
1082 else if ( msg == "timeChange(QString)" ) { 1085 else if ( msg == "timeChange(QString)" ) {
1083 QString t; 1086 QString t;
1084 stream >> t; 1087 stream >> t;
1085 if ( t.isNull() ) 1088 if ( t.isNull() )
1086 unsetenv( "TZ" ); 1089 unsetenv( "TZ" );
1087 else 1090 else
1088 setenv( "TZ", t.latin1(), 1 ); 1091 setenv( "TZ", t.latin1(), 1 );
1089 // emit the signal so everyone else knows... 1092 // emit the signal so everyone else knows...
1090 emit timeChanged(); 1093 emit timeChanged();
@@ -1603,48 +1606,56 @@ void QPEApplication::timerEvent( QTimerEvent *e )
1603 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1606 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1604 RightButton, LeftButton ) ); 1607 RightButton, LeftButton ) );
1605 killTimer( d->presstimer ); 1608 killTimer( d->presstimer );
1606 d->presstimer = 0; 1609 d->presstimer = 0;
1607 d->rightpressed = TRUE; 1610 d->rightpressed = TRUE;
1608 } 1611 }
1609} 1612}
1610 1613
1611void QPEApplication::removeSenderFromStylusDict() 1614void QPEApplication::removeSenderFromStylusDict()
1612{ 1615{
1613 stylusDict->remove 1616 stylusDict->remove
1614 ( ( void* ) sender() ); 1617 ( ( void* ) sender() );
1615 if ( d->presswidget == sender() ) 1618 if ( d->presswidget == sender() )
1616 d->presswidget = 0; 1619 d->presswidget = 0;
1617} 1620}
1618 1621
1619/*! 1622/*!
1620 \internal 1623 \internal
1621*/ 1624*/
1622bool QPEApplication::keyboardGrabbed() const 1625bool QPEApplication::keyboardGrabbed() const
1623{ 1626{
1624 return d->kbgrabber; 1627 return d->kbgrabber;
1625} 1628}
1626 1629
1630/*!
1631 \internal
1632*/
1633QString QPEApplication::keyboardGrabbedBy() const
1634{
1635 return d->kbgrabber_appname;
1636}
1637
1627 1638
1628/*! 1639/*!
1629 Reverses the effect of grabKeyboard(). This is called automatically 1640 Reverses the effect of grabKeyboard(). This is called automatically
1630 on program exit. 1641 on program exit.
1631*/ 1642*/
1632void QPEApplication::ungrabKeyboard() 1643void QPEApplication::ungrabKeyboard()
1633{ 1644{
1634 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; 1645 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d;
1635 if ( d->kbgrabber == 2 ) { 1646 if ( d->kbgrabber == 2 ) {
1636#ifndef QT_NO_COP 1647#ifndef QT_NO_COP
1637 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); 1648 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
1638 e << QString::null; 1649 e << QString::null;
1639#endif 1650#endif
1640 1651
1641 d->kbregrab = FALSE; 1652 d->kbregrab = FALSE;
1642 d->kbgrabber = 0; 1653 d->kbgrabber = 0;
1643 } 1654 }
1644} 1655}
1645 1656
1646/*! 1657/*!
1647 Grabs the physical keyboard keys, e.g. the application's launching 1658 Grabs the physical keyboard keys, e.g. the application's launching
1648 keys. Instead of launching applications when these keys are pressed 1659 keys. Instead of launching applications when these keys are pressed
1649 the signals emitted are sent to this application instead. Some games 1660 the signals emitted are sent to this application instead. Some games
1650 programs take over the launch keys in this way to make interaction 1661 programs take over the launch keys in this way to make interaction
diff --git a/library/qpeapplication.h b/library/qpeapplication.h
index 86affa6..f712077 100644
--- a/library/qpeapplication.h
+++ b/library/qpeapplication.h
@@ -13,96 +13,98 @@
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef __QPE_APPLICATION_H__ 20#ifndef __QPE_APPLICATION_H__
21#define __QPE_APPLICATION_H__ 21#define __QPE_APPLICATION_H__
22 22
23 23
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qdialog.h> 25#include <qdialog.h>
26#if defined(_WS_QWS_) && !defined(Q_WS_QWS) 26#if defined(_WS_QWS_) && !defined(Q_WS_QWS)
27#define Q_WS_QWS 27#define Q_WS_QWS
28#endif 28#endif
29#include "qpedecoration_qws.h" 29#include "qpedecoration_qws.h"
30#include "timestring.h" 30#include "timestring.h"
31 31
32class QCopChannel; 32class QCopChannel;
33class QPEApplicationData; 33class QPEApplicationData;
34class QWSEvent; 34class QWSEvent;
35class QWSKeyEvent; 35class QWSKeyEvent;
36 36
37
37class QPEApplication : public QApplication 38class QPEApplication : public QApplication
38{ 39{
39 Q_OBJECT 40 Q_OBJECT
40public: 41public:
41 QPEApplication( int& argc, char **argv, Type=GuiClient ); 42 QPEApplication( int& argc, char **argv, Type=GuiClient );
42 ~QPEApplication(); 43 ~QPEApplication();
43 44
44 static QString qpeDir(); 45 static QString qpeDir();
45 static QString documentDir(); 46 static QString documentDir();
46 void applyStyle(); 47 void applyStyle();
47 static int defaultRotation(); 48 static int defaultRotation();
48 static void setDefaultRotation(int r); 49 static void setDefaultRotation(int r);
49 static void grabKeyboard(); 50 static void grabKeyboard();
50 static void ungrabKeyboard(); 51 static void ungrabKeyboard();
51 52
52 enum StylusMode { 53 enum StylusMode {
53 LeftOnly, 54 LeftOnly,
54 RightOnHold 55 RightOnHold
55 // RightOnHoldLeftDelayed, etc. 56 // RightOnHoldLeftDelayed, etc.
56 }; 57 };
57 static void setStylusOperation( QWidget*, StylusMode ); 58 static void setStylusOperation( QWidget*, StylusMode );
58 static StylusMode stylusOperation( QWidget* ); 59 static StylusMode stylusOperation( QWidget* );
59 60
60 enum InputMethodHint { 61 enum InputMethodHint {
61 Normal, 62 Normal,
62 AlwaysOff, 63 AlwaysOff,
63 AlwaysOn 64 AlwaysOn
64 }; 65 };
65 66
66 enum screenSaverHint { 67 enum screenSaverHint {
67 Disable = 0, 68 Disable = 0,
68 DisableLightOff = 1, 69 DisableLightOff = 1,
69 DisableSuspend = 2, 70 DisableSuspend = 2,
70 Enable = 100 71 Enable = 100
71 }; 72 };
72 73
73 static void setInputMethodHint( QWidget *, InputMethodHint ); 74 static void setInputMethodHint( QWidget *, InputMethodHint );
74 static InputMethodHint inputMethodHint( QWidget * ); 75 static InputMethodHint inputMethodHint( QWidget * );
75 76
76 void showMainWidget( QWidget*, bool nomax=FALSE ); 77 void showMainWidget( QWidget*, bool nomax=FALSE );
77 void showMainDocumentWidget( QWidget*, bool nomax=FALSE ); 78 void showMainDocumentWidget( QWidget*, bool nomax=FALSE );
78 static void showDialog( QDialog*, bool nomax=FALSE ); 79 static void showDialog( QDialog*, bool nomax=FALSE );
79 static int execDialog( QDialog*, bool nomax=FALSE ); 80 static int execDialog( QDialog*, bool nomax=FALSE );
80 81
81 static void setKeepRunning(); 82 static void setKeepRunning();
82 bool keepRunning() const; 83 bool keepRunning() const;
83 84
84 bool keyboardGrabbed() const; 85 bool keyboardGrabbed() const;
86 QString keyboardGrabbedBy ( ) const;
85 87
86 int exec(); 88 int exec();
87 89
88signals: 90signals:
89 void clientMoused(); 91 void clientMoused();
90 void timeChanged(); 92 void timeChanged();
91 void clockChanged( bool pm ); 93 void clockChanged( bool pm );
92 void micChanged( bool muted ); 94 void micChanged( bool muted );
93 void volumeChanged( bool muted ); 95 void volumeChanged( bool muted );
94 void appMessage( const QCString& msg, const QByteArray& data); 96 void appMessage( const QCString& msg, const QByteArray& data);
95 void weekChanged( bool startOnMonday ); 97 void weekChanged( bool startOnMonday );
96 void dateFormatChanged( DateFormat ); 98 void dateFormatChanged( DateFormat );
97 void flush(); 99 void flush();
98 void reload(); 100 void reload();
99 101
100private slots: 102private slots:
101 void systemMessage( const QCString &msg, const QByteArray &data ); 103 void systemMessage( const QCString &msg, const QByteArray &data );
102 void pidMessage( const QCString &msg, const QByteArray &data ); 104 void pidMessage( const QCString &msg, const QByteArray &data );
103 void removeSenderFromStylusDict(); 105 void removeSenderFromStylusDict();
104 void hideOrQuit(); 106 void hideOrQuit();
105 107
106protected: 108protected:
107 bool qwsEventFilter( QWSEvent * ); 109 bool qwsEventFilter( QWSEvent * );
108 void internalSetStyle( const QString &style ); 110 void internalSetStyle( const QString &style );