summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
Unidiff
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp121
1 files changed, 54 insertions, 67 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index b26933b..e7e210a 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -47,112 +47,111 @@
47#include <qdialog.h> 47#include <qdialog.h>
48#include <qdragobject.h> 48#include <qdragobject.h>
49#include <qtextcodec.h> 49#include <qtextcodec.h>
50#include <qevent.h> 50#include <qevent.h>
51#include <qtooltip.h> 51#include <qtooltip.h>
52#include <qsignal.h> 52#include <qsignal.h>
53#include "qpeapplication.h" 53#include "qpeapplication.h"
54#include "qpestyle.h" 54#include "qpestyle.h"
55#include "styleinterface.h" 55#include "styleinterface.h"
56#if QT_VERSION >= 300 56#if QT_VERSION >= 300
57#include <qstylefactory.h> 57#include <qstylefactory.h>
58#else 58#else
59#include <qplatinumstyle.h> 59#include <qplatinumstyle.h>
60#include <qwindowsstyle.h> 60#include <qwindowsstyle.h>
61#include <qmotifstyle.h> 61#include <qmotifstyle.h>
62#include <qmotifplusstyle.h> 62#include <qmotifplusstyle.h>
63#include "lightstyle.h" 63#include "lightstyle.h"
64 64
65#include <qpe/qlibrary.h> 65#include <qpe/qlibrary.h>
66#endif 66#endif
67#include "global.h" 67#include "global.h"
68#include "resource.h" 68#include "resource.h"
69#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 69#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
70#include "qutfcodec.h" 70#include "qutfcodec.h"
71#endif 71#endif
72#include "config.h" 72#include "config.h"
73#include "network.h" 73#include "network.h"
74#ifdef QWS 74#ifdef QWS
75#include "fontmanager.h" 75#include "fontmanager.h"
76#endif 76#endif
77 77
78#include "alarmserver.h" 78#include "alarmserver.h"
79#include "applnk.h" 79#include "applnk.h"
80#include "qpemenubar.h" 80#include "qpemenubar.h"
81#include "textcodecinterface.h" 81#include "textcodecinterface.h"
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 ( )
96 rightpressed( FALSE ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), 96 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ),
97 forceshow( FALSE ), nomaximize( FALSE ), keep_running( TRUE ), qpe_main_widget( 0 ) 97 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ),
98 keep_running( true ), qpe_main_widget( 0 )
98 99
99 { 100 {
100 qcopq.setAutoDelete( TRUE ); 101 qcopq.setAutoDelete( TRUE );
101 } 102 }
102 103
103 int presstimer; 104 int presstimer;
104 QWidget* presswidget; 105 QWidget* presswidget;
105 int kbgrabber;
106 QString kbgrabber_appname;
107 QPoint presspos; 106 QPoint presspos;
108 107
109 bool rightpressed : 1; 108 bool rightpressed : 1;
110 bool kbregrab : 1; 109 bool kbgrabbed : 1;
111 bool notbusysent : 1; 110 bool notbusysent : 1;
112 bool preloaded : 1; 111 bool preloaded : 1;
113 bool forceshow : 1; 112 bool forceshow : 1;
114 bool nomaximize : 1; 113 bool nomaximize : 1;
115 bool keep_running : 1; 114 bool keep_running : 1;
116 115
117 QString appName; 116 QString appName;
118 struct QCopRec 117 struct QCopRec
119 { 118 {
120 QCopRec( const QCString &ch, const QCString &msg, 119 QCopRec( const QCString &ch, const QCString &msg,
121 const QByteArray &d ) : 120 const QByteArray &d ) :
122 channel( ch ), message( msg ), data( d ) 121 channel( ch ), message( msg ), data( d )
123 { } 122 { }
124 123
125 QCString channel; 124 QCString channel;
126 QCString message; 125 QCString message;
127 QByteArray data; 126 QByteArray data;
128 }; 127 };
129 QWidget* qpe_main_widget; 128 QWidget* qpe_main_widget;
130 QList<QCopRec> qcopq; 129 QList<QCopRec> qcopq;
131 130
132 void enqueueQCop( const QCString &ch, const QCString &msg, 131 void enqueueQCop( const QCString &ch, const QCString &msg,
133 const QByteArray &data ) 132 const QByteArray &data )
134 { 133 {
135 qcopq.append( new QCopRec( ch, msg, data ) ); 134 qcopq.append( new QCopRec( ch, msg, data ) );
136 } 135 }
137 void sendQCopQ() 136 void sendQCopQ()
138 { 137 {
139 QCopRec * r; 138 QCopRec * r;
140#ifndef QT_NO_COP 139#ifndef QT_NO_COP
141 140
142 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) 141 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it )
143 QCopChannel::sendLocally( r->channel, r->message, r->data ); 142 QCopChannel::sendLocally( r->channel, r->message, r->data );
144#endif 143#endif
145 144
146 qcopq.clear(); 145 qcopq.clear();
147 } 146 }
148 static void show_mx(QWidget* mw, bool nomaximize) 147 static void show_mx(QWidget* mw, bool nomaximize)
149 { 148 {
150 if ( mw->layout() && mw->inherits("QDialog") ) { 149 if ( mw->layout() && mw->inherits("QDialog") ) {
151 QPEApplication::showDialog((QDialog*)mw, nomaximize); 150 QPEApplication::showDialog((QDialog*)mw, nomaximize);
152 } 151 }
153 else { 152 else {
154#ifdef Q_WS_QWS 153#ifdef Q_WS_QWS
155 if ( !nomaximize ) 154 if ( !nomaximize )
156 mw->showMaximized(); 155 mw->showMaximized();
157 else 156 else
158#endif 157#endif
@@ -710,183 +709,196 @@ void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
710 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 709 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
711 && activePopupWidget() ->parentWidget() 710 && activePopupWidget() ->parentWidget()
712 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 711 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
713 key = Qt::Key_Return; 712 key = Qt::Key_Return;
714 713
715 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 714 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
716 key = Qt::Key_Return; 715 key = Qt::Key_Return;
717 716
718#ifdef QWS 717#ifdef QWS
719 718
720 ke->simpleData.keycode = key; 719 ke->simpleData.keycode = key;
721#endif 720#endif
722} 721}
723 722
724class HackWidget : public QWidget 723class HackWidget : public QWidget
725{ 724{
726public: 725public:
727 bool needsOk() 726 bool needsOk()
728 { 727 {
729 return ( getWState() & WState_Reserved1 ); 728 return ( getWState() & WState_Reserved1 );
730 } 729 }
731}; 730};
732 731
733/*! 732/*!
734 \internal 733 \internal
735*/ 734*/
736 735
737#ifdef QWS 736#ifdef QWS
738bool QPEApplication::qwsEventFilter( QWSEvent * e ) 737bool QPEApplication::qwsEventFilter( QWSEvent * e )
739{ 738{
740 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 739 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
741 if ( qApp->type() != QApplication::GuiServer ) { 740 if ( qApp->type() != QApplication::GuiServer ) {
742 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 741 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
743 e << d->appName; 742 e << d->appName;
744 } 743 }
745 d->notbusysent = TRUE; 744 d->notbusysent = TRUE;
746 } 745 }
747 if ( type() == GuiServer ) { 746 if ( type() == GuiServer ) {
748 switch ( e->type ) { 747 switch ( e->type ) {
749 case QWSEvent::Mouse: 748 case QWSEvent::Mouse:
750 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 749 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
751 emit clientMoused(); 750 emit clientMoused();
752 break; 751 break;
753 default: 752 default:
754 break; 753 break;
755 } 754 }
756 } 755 }
757 if ( e->type == QWSEvent::Key ) { 756 if ( e->type == QWSEvent::Key ) {
758 if ( d->kbgrabber == 1 )
759 return TRUE;
760 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 757 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
761 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 758 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
762 // Use special "OK" key to press "OK" on top level widgets 759 // Use special "OK" key to press "OK" on top level widgets
763 QWidget * active = activeWindow(); 760 QWidget * active = activeWindow();
764 QWidget *popup = 0; 761 QWidget *popup = 0;
765 if ( active && active->isPopup() ) { 762 if ( active && active->isPopup() ) {
766 popup = active; 763 popup = active;
767 active = active->parentWidget(); 764 active = active->parentWidget();
768 } 765 }
769 if ( active && ( int ) active->winId() == ke->simpleData.window && 766 if ( active && ( int ) active->winId() == ke->simpleData.window &&
770 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 767 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
771 if ( ke->simpleData.is_press ) { 768 if ( ke->simpleData.is_press ) {
772 if ( popup ) 769 if ( popup )
773 popup->close(); 770 popup->close();
774 if ( active->inherits( "QDialog" ) ) { 771 if ( active->inherits( "QDialog" ) ) {
775 HackDialog * d = ( HackDialog * ) active; 772 HackDialog * d = ( HackDialog * ) active;
776 d->acceptIt(); 773 d->acceptIt();
777 return TRUE; 774 return TRUE;
778 } 775 }
779 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 776 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
780 QSignal s; 777 QSignal s;
781 s.connect( active, SLOT( accept() ) ); 778 s.connect( active, SLOT( accept() ) );
782 s.activate(); 779 s.activate();
783 } 780 }
784 else { 781 else {
785 // do the same as with the select key: Map to the default action of the widget: 782 // do the same as with the select key: Map to the default action of the widget:
786 mapToDefaultAction( ke, Qt::Key_Return ); 783 mapToDefaultAction( ke, Qt::Key_Return );
787 } 784 }
788 } 785 }
789 } 786 }
790 } 787 }
791 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 788 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
792 // Use special "select" key to do whatever default action a widget has 789 // Use special "select" key to do whatever default action a widget has
793 mapToDefaultAction( ke, Qt::Key_Space ); 790 mapToDefaultAction( ke, Qt::Key_Space );
794 } 791 }
795 else if ( ke->simpleData.keycode == Qt::Key_Escape && 792 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
796 ke->simpleData.is_press ) { 793 ke->simpleData.is_press ) {
797 // Escape key closes app if focus on toplevel 794 // Escape key closes app if focus on toplevel
798 QWidget * active = activeWindow(); 795 QWidget * active = activeWindow();
799 if ( active && active->testWFlags( WType_TopLevel ) && 796 if ( active && active->testWFlags( WType_TopLevel ) &&
800 ( int ) active->winId() == ke->simpleData.window && 797 ( int ) active->winId() == ke->simpleData.window &&
801 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 798 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
802 if ( active->inherits( "QDialog" ) ) { 799 if ( active->inherits( "QDialog" ) ) {
803 HackDialog * d = ( HackDialog * ) active; 800 HackDialog * d = ( HackDialog * ) active;
804 d->rejectIt(); 801 d->rejectIt();
805 return TRUE; 802 return TRUE;
806 } 803 }
807 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 804 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
808 active->close(); 805 active->close();
809 } 806 }
810 } 807 }
811 } 808 }
812 809 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
813#if QT_VERSION < 231 810 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
814 // Filter out the F4/Launcher key from apps 811 // but we cannot access libopie function within libqpe :(
815 // ### The launcher key may not always be F4 on all devices 812
816 if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) 813 QWidget * active = activeWindow ( );
817 return TRUE; 814 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
818#endif 815 if ( d-> kbgrabbed ) { // we grabbed the keyboard
819 816 QChar ch ( ke-> simpleData.unicode );
817 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
818 ke-> simpleData.keycode,
819 ch. latin1 ( ),
820 ke-> simpleData.modifiers,
821 QString ( ch ),
822 ke-> simpleData.is_auto_repeat, 1 );
823
824 QObject *which = QWidget::keyboardGrabber ( );
825 if ( !which )
826 which = QApplication::focusWidget ( );
827 if ( !which )
828 which = QApplication::activeWindow ( );
829 if ( !which )
830 which = qApp;
831
832 QApplication::sendEvent ( which, &qke );
833 }
834 else { // we didn't grab the keyboard, so send the event to the launcher
835 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
836 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
837 }
838 }
839 return true;
840 }
820 } 841 }
821 if ( e->type == QWSEvent::Focus ) { 842 if ( e->type == QWSEvent::Focus ) {
822 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 843 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
823 QWidget* nfw = QWidget::find( e->window() );
824 if ( !fe->simpleData.get_focus ) { 844 if ( !fe->simpleData.get_focus ) {
825 QWidget * active = activeWindow(); 845 QWidget * active = activeWindow();
826 while ( active && active->isPopup() ) { 846 while ( active && active->isPopup() ) {
827 active->close(); 847 active->close();
828 active = activeWindow(); 848 active = activeWindow();
829 } 849 }
830 if ( !nfw && d->kbgrabber == 2 ) {
831 ungrabKeyboard();
832 d->kbregrab = TRUE; // want kb back when we're active
833 }
834 } 850 }
835 else { 851 else {
836 // make sure our modal widget is ALWAYS on top 852 // make sure our modal widget is ALWAYS on top
837 QWidget *topm = activeModalWidget(); 853 QWidget *topm = activeModalWidget();
838 if ( topm ) { 854 if ( topm ) {
839 topm->raise(); 855 topm->raise();
840 } 856 }
841 if ( d->kbregrab ) {
842 grabKeyboard();
843 d->kbregrab = FALSE;
844 }
845 } 857 }
846 if ( fe->simpleData.get_focus && inputMethodDict ) { 858 if ( fe->simpleData.get_focus && inputMethodDict ) {
847 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 859 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
848 if ( m == AlwaysOff ) 860 if ( m == AlwaysOff )
849 Global::hideInputMethod(); 861 Global::hideInputMethod();
850 if ( m == AlwaysOn ) 862 if ( m == AlwaysOn )
851 Global::showInputMethod(); 863 Global::showInputMethod();
852 } 864 }
853 } 865 }
854 return QApplication::qwsEventFilter( e ); 866 return QApplication::qwsEventFilter( e );
855} 867}
856#endif 868#endif
857 869
858/*! 870/*!
859 Destroys the QPEApplication. 871 Destroys the QPEApplication.
860*/ 872*/
861QPEApplication::~QPEApplication() 873QPEApplication::~QPEApplication()
862{ 874{
863 ungrabKeyboard(); 875 ungrabKeyboard();
864#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 876#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
865 // Need to delete QCopChannels early, since the display will 877 // Need to delete QCopChannels early, since the display will
866 // be gone by the time we get to ~QObject(). 878 // be gone by the time we get to ~QObject().
867 delete sysChannel; 879 delete sysChannel;
868 delete pidChannel; 880 delete pidChannel;
869#endif 881#endif
870 882
871 delete d; 883 delete d;
872} 884}
873 885
874/*! 886/*!
875 Returns <tt>$OPIEDIR/</tt>. 887 Returns <tt>$OPIEDIR/</tt>.
876*/ 888*/
877QString QPEApplication::qpeDir() 889QString QPEApplication::qpeDir()
878{ 890{
879 const char * base = getenv( "OPIEDIR" ); 891 const char * base = getenv( "OPIEDIR" );
880 if ( base ) 892 if ( base )
881 return QString( base ) + "/"; 893 return QString( base ) + "/";
882 894
883 return QString( "../" ); 895 return QString( "../" );
884} 896}
885 897
886/*! 898/*!
887 Returns the user's current Document directory. There is a trailing "/". 899 Returns the user's current Document directory. There is a trailing "/".
888 .. well, it does now,, and there's no trailing '/' 900 .. well, it does now,, and there's no trailing '/'
889*/ 901*/
890QString QPEApplication::documentDir() 902QString QPEApplication::documentDir()
891{ 903{
892 const char* base = getenv( "HOME"); 904 const char* base = getenv( "HOME");
@@ -988,131 +1000,133 @@ void QPEApplication::applyStyle()
988 color = config.readEntry( "ButtonText", "#000000" ); 1000 color = config.readEntry( "ButtonText", "#000000" );
989 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1001 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
990 color = config.readEntry( "Base", "#FFFFFF" ); 1002 color = config.readEntry( "Base", "#FFFFFF" );
991 pal.setColor( QColorGroup::Base, QColor( color ) ); 1003 pal.setColor( QColorGroup::Base, QColor( color ) );
992 1004
993 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1005 pal.setColor( QPalette::Disabled, QColorGroup::Text,
994 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1006 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
995 1007
996 setPalette( pal, TRUE ); 1008 setPalette( pal, TRUE );
997 1009
998 // Window Decoration 1010 // Window Decoration
999 QString dec = config.readEntry( "Decoration", "Qtopia" ); 1011 QString dec = config.readEntry( "Decoration", "Qtopia" );
1000 1012
1001 // don't set a custom deco 1013 // don't set a custom deco
1002 if ( nostyle & Opie::Force_Decoration ) 1014 if ( nostyle & Opie::Force_Decoration )
1003 dec = ""; 1015 dec = "";
1004 1016
1005 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 1017 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
1006 1018
1007 if ( dec != d->decorationName ) { 1019 if ( dec != d->decorationName ) {
1008 qwsSetDecoration( new QPEDecoration( dec ) ); 1020 qwsSetDecoration( new QPEDecoration( dec ) );
1009 d->decorationName = dec; 1021 d->decorationName = dec;
1010 } 1022 }
1011 1023
1012 // Font 1024 // Font
1013 QString ff = config.readEntry( "FontFamily", font().family() ); 1025 QString ff = config.readEntry( "FontFamily", font().family() );
1014 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1026 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1015 1027
1016 // don't set a custom font 1028 // don't set a custom font
1017 if ( nostyle & Opie::Force_Font ) { 1029 if ( nostyle & Opie::Force_Font ) {
1018 ff = "Helvetica"; 1030 ff = "Helvetica";
1019 fs = 10; 1031 fs = 10;
1020 } 1032 }
1021 1033
1022 setFont ( QFont ( ff, fs ), true ); 1034 setFont ( QFont ( ff, fs ), true );
1023 1035
1024 // revert to global blocking policy ... 1036 // revert to global blocking policy ...
1025 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None; 1037 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1026 Opie::force_appearance &= ~nostyle; 1038 Opie::force_appearance &= ~nostyle;
1027} 1039}
1028 1040
1029void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1041void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1030{ 1042{
1031#ifdef Q_WS_QWS 1043#ifdef Q_WS_QWS
1032 QDataStream stream( data, IO_ReadOnly ); 1044 QDataStream stream( data, IO_ReadOnly );
1033 if ( msg == "applyStyle()" ) { 1045 if ( msg == "applyStyle()" ) {
1034 applyStyle(); 1046 applyStyle();
1035 } 1047 }
1048 else if ( msg == "toggleApplicationMenu()" ) {
1049 QWidget *active = activeWindow ( );
1050
1051 if ( active ) {
1052 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1053 bool oldactive = man-> isActive ( );
1054
1055 man-> setActive( !man-> isActive() );
1056
1057 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1058 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1059 }
1060 }
1061 }
1036 else if ( msg == "setDefaultRotation(int)" ) { 1062 else if ( msg == "setDefaultRotation(int)" ) {
1037 if ( type() == GuiServer ) { 1063 if ( type() == GuiServer ) {
1038 int r; 1064 int r;
1039 stream >> r; 1065 stream >> r;
1040 setDefaultRotation( r ); 1066 setDefaultRotation( r );
1041 } 1067 }
1042 } 1068 }
1043 else if ( msg == "shutdown()" ) { 1069 else if ( msg == "shutdown()" ) {
1044 if ( type() == GuiServer ) 1070 if ( type() == GuiServer )
1045 shutdown(); 1071 shutdown();
1046 } 1072 }
1047 else if ( msg == "quit()" ) { 1073 else if ( msg == "quit()" ) {
1048 if ( type() != GuiServer ) 1074 if ( type() != GuiServer )
1049 tryQuit(); 1075 tryQuit();
1050 } 1076 }
1051 else if ( msg == "forceQuit()" ) { 1077 else if ( msg == "forceQuit()" ) {
1052 if ( type() != GuiServer ) 1078 if ( type() != GuiServer )
1053 quit(); 1079 quit();
1054 } 1080 }
1055 else if ( msg == "restart()" ) { 1081 else if ( msg == "restart()" ) {
1056 if ( type() == GuiServer ) 1082 if ( type() == GuiServer )
1057 restart(); 1083 restart();
1058 } 1084 }
1059 else if ( msg == "grabKeyboard(QString)" ) {
1060 QString who;
1061 stream >> who;
1062 if ( who.isEmpty() )
1063 d->kbgrabber = 0;
1064 else if ( who != d->appName )
1065 d->kbgrabber = 1;
1066 else
1067 d->kbgrabber = 2;
1068
1069 d-> kbgrabber_appname = who;
1070 }
1071 else if ( msg == "language(QString)" ) { 1085 else if ( msg == "language(QString)" ) {
1072 if ( type() == GuiServer ) { 1086 if ( type() == GuiServer ) {
1073 QString l; 1087 QString l;
1074 stream >> l; 1088 stream >> l;
1075 QString cl = getenv( "LANG" ); 1089 QString cl = getenv( "LANG" );
1076 if ( cl != l ) { 1090 if ( cl != l ) {
1077 if ( l.isNull() ) 1091 if ( l.isNull() )
1078 unsetenv( "LANG" ); 1092 unsetenv( "LANG" );
1079 else 1093 else
1080 setenv( "LANG", l.latin1(), 1 ); 1094 setenv( "LANG", l.latin1(), 1 );
1081 restart(); 1095 restart();
1082 } 1096 }
1083 } 1097 }
1084 } 1098 }
1085 else if ( msg == "timeChange(QString)" ) { 1099 else if ( msg == "timeChange(QString)" ) {
1086 QString t; 1100 QString t;
1087 stream >> t; 1101 stream >> t;
1088 if ( t.isNull() ) 1102 if ( t.isNull() )
1089 unsetenv( "TZ" ); 1103 unsetenv( "TZ" );
1090 else 1104 else
1091 setenv( "TZ", t.latin1(), 1 ); 1105 setenv( "TZ", t.latin1(), 1 );
1092 // emit the signal so everyone else knows... 1106 // emit the signal so everyone else knows...
1093 emit timeChanged(); 1107 emit timeChanged();
1094 } 1108 }
1095 else if ( msg == "execute(QString)" ) { 1109 else if ( msg == "execute(QString)" ) {
1096 if ( type() == GuiServer ) { 1110 if ( type() == GuiServer ) {
1097 QString t; 1111 QString t;
1098 stream >> t; 1112 stream >> t;
1099 Global::execute( t ); 1113 Global::execute( t );
1100 } 1114 }
1101 } 1115 }
1102 else if ( msg == "execute(QString,QString)" ) { 1116 else if ( msg == "execute(QString,QString)" ) {
1103 if ( type() == GuiServer ) { 1117 if ( type() == GuiServer ) {
1104 QString t, d; 1118 QString t, d;
1105 stream >> t >> d; 1119 stream >> t >> d;
1106 Global::execute( t, d ); 1120 Global::execute( t, d );
1107 } 1121 }
1108 } 1122 }
1109 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1123 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1110 if ( type() == GuiServer ) { 1124 if ( type() == GuiServer ) {
1111 QDateTime when; 1125 QDateTime when;
1112 QCString channel, message; 1126 QCString channel, message;
1113 int data; 1127 int data;
1114 stream >> when >> channel >> message >> data; 1128 stream >> when >> channel >> message >> data;
1115 AlarmServer::addAlarm( when, channel, message, data ); 1129 AlarmServer::addAlarm( when, channel, message, data );
1116 } 1130 }
1117 } 1131 }
1118 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1132 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
@@ -1579,148 +1593,121 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1579 } 1593 }
1580 break; 1594 break;
1581 default: 1595 default:
1582 ; 1596 ;
1583 } 1597 }
1584 } 1598 }
1585 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1599 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1586 QKeyEvent *ke = (QKeyEvent *)e; 1600 QKeyEvent *ke = (QKeyEvent *)e;
1587 if ( ke->key() == Key_Enter ) { 1601 if ( ke->key() == Key_Enter ) {
1588 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1602 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1589 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1603 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1590 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1604 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1591 return TRUE; 1605 return TRUE;
1592 } 1606 }
1593 } 1607 }
1594 } 1608 }
1595 return FALSE; 1609 return FALSE;
1596} 1610}
1597 1611
1598/*! 1612/*!
1599 \reimp 1613 \reimp
1600*/ 1614*/
1601void QPEApplication::timerEvent( QTimerEvent *e ) 1615void QPEApplication::timerEvent( QTimerEvent *e )
1602{ 1616{
1603 if ( e->timerId() == d->presstimer && d->presswidget ) { 1617 if ( e->timerId() == d->presstimer && d->presswidget ) {
1604 // Right pressed 1618 // Right pressed
1605 postEvent( d->presswidget, 1619 postEvent( d->presswidget,
1606 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1620 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1607 RightButton, LeftButton ) ); 1621 RightButton, LeftButton ) );
1608 killTimer( d->presstimer ); 1622 killTimer( d->presstimer );
1609 d->presstimer = 0; 1623 d->presstimer = 0;
1610 d->rightpressed = TRUE; 1624 d->rightpressed = TRUE;
1611 } 1625 }
1612} 1626}
1613 1627
1614void QPEApplication::removeSenderFromStylusDict() 1628void QPEApplication::removeSenderFromStylusDict()
1615{ 1629{
1616 stylusDict->remove 1630 stylusDict->remove
1617 ( ( void* ) sender() ); 1631 ( ( void* ) sender() );
1618 if ( d->presswidget == sender() ) 1632 if ( d->presswidget == sender() )
1619 d->presswidget = 0; 1633 d->presswidget = 0;
1620} 1634}
1621 1635
1622/*! 1636/*!
1623 \internal 1637 \internal
1624*/ 1638*/
1625bool QPEApplication::keyboardGrabbed() const 1639bool QPEApplication::keyboardGrabbed() const
1626{ 1640{
1627 return d->kbgrabber; 1641 return d->kbgrabbed;
1628}
1629
1630/*!
1631 \internal
1632*/
1633QString QPEApplication::keyboardGrabbedBy() const
1634{
1635 return d->kbgrabber_appname;
1636} 1642}
1637 1643
1638 1644
1639/*! 1645/*!
1640 Reverses the effect of grabKeyboard(). This is called automatically 1646 Reverses the effect of grabKeyboard(). This is called automatically
1641 on program exit. 1647 on program exit.
1642*/ 1648*/
1643void QPEApplication::ungrabKeyboard() 1649void QPEApplication::ungrabKeyboard()
1644{ 1650{
1645 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; 1651 ((QPEApplication *) qApp )-> d-> kbgrabbed = false;
1646 if ( d->kbgrabber == 2 ) {
1647#ifndef QT_NO_COP
1648 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
1649 e << QString::null;
1650#endif
1651
1652 d->kbregrab = FALSE;
1653 d->kbgrabber = 0;
1654 }
1655} 1652}
1656 1653
1657/*! 1654/*!
1658 Grabs the physical keyboard keys, e.g. the application's launching 1655 Grabs the physical keyboard keys, e.g. the application's launching
1659 keys. Instead of launching applications when these keys are pressed 1656 keys. Instead of launching applications when these keys are pressed
1660 the signals emitted are sent to this application instead. Some games 1657 the signals emitted are sent to this application instead. Some games
1661 programs take over the launch keys in this way to make interaction 1658 programs take over the launch keys in this way to make interaction
1662 easier. 1659 easier.
1663 1660
1664 \sa ungrabKeyboard() 1661 \sa ungrabKeyboard()
1665*/ 1662*/
1666void QPEApplication::grabKeyboard() 1663void QPEApplication::grabKeyboard()
1667{ 1664{
1668 QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; 1665 ((QPEApplication *) qApp )-> d-> kbgrabbed = true;
1669 if ( qApp->type() == QApplication::GuiServer )
1670 d->kbgrabber = 0;
1671 else {
1672#ifndef QT_NO_COP
1673 QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
1674 e << d->appName;
1675#endif
1676
1677 d->kbgrabber = 2; // me
1678 }
1679} 1666}
1680 1667
1681/*! 1668/*!
1682 \reimp 1669 \reimp
1683*/ 1670*/
1684int QPEApplication::exec() 1671int QPEApplication::exec()
1685{ 1672{
1686#ifndef QT_NO_COP 1673#ifndef QT_NO_COP
1687 d->sendQCopQ(); 1674 d->sendQCopQ();
1688#endif 1675#endif
1689 1676
1690 if ( d->keep_running ) 1677 if ( d->keep_running )
1691 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1678 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1692 return QApplication::exec(); 1679 return QApplication::exec();
1693 1680
1694#ifndef QT_NO_COP 1681#ifndef QT_NO_COP
1695 1682
1696 { 1683 {
1697 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1684 QCopEnvelope e( "QPE/System", "closing(QString)" );
1698 e << d->appName; 1685 e << d->appName;
1699 } 1686 }
1700#endif 1687#endif
1701 processEvents(); 1688 processEvents();
1702 return 0; 1689 return 0;
1703} 1690}
1704 1691
1705/*! 1692/*!
1706 \internal 1693 \internal
1707 External request for application to quit. Quits if possible without 1694 External request for application to quit. Quits if possible without
1708 loosing state. 1695 loosing state.
1709*/ 1696*/
1710void QPEApplication::tryQuit() 1697void QPEApplication::tryQuit()
1711{ 1698{
1712 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1699 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1713 return ; // Inside modal loop or konsole. Too hard to save state. 1700 return ; // Inside modal loop or konsole. Too hard to save state.
1714#ifndef QT_NO_COP 1701#ifndef QT_NO_COP
1715 1702
1716 { 1703 {
1717 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1704 QCopEnvelope e( "QPE/System", "closing(QString)" );
1718 e << d->appName; 1705 e << d->appName;
1719 } 1706 }
1720#endif 1707#endif
1721 processEvents(); 1708 processEvents();
1722 1709
1723 quit(); 1710 quit();
1724} 1711}
1725 1712
1726/*! 1713/*!