summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
Unidiff
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp40
1 files changed, 14 insertions, 26 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 7cbda92..4c93111 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -41,96 +41,98 @@
41#include <qpalette.h> 41#include <qpalette.h>
42#include <qbuffer.h> 42#include <qbuffer.h>
43#include <qptrdict.h> 43#include <qptrdict.h>
44#include <qregexp.h> 44#include <qregexp.h>
45#include <qdir.h> 45#include <qdir.h>
46#include <qlabel.h> 46#include <qlabel.h>
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"
90
89 91
90class QPEApplicationData 92class QPEApplicationData
91{ 93{
92public: 94public:
93 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ), 95 QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ),
94 kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), 96 kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ),
95 forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ), 97 forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ),
96 keep_running( TRUE ) 98 keep_running( TRUE )
97 { 99 {
98 qcopq.setAutoDelete( TRUE ); 100 qcopq.setAutoDelete( TRUE );
99 } 101 }
100 102
101 int presstimer; 103 int presstimer;
102 QWidget* presswidget; 104 QWidget* presswidget;
103 QPoint presspos; 105 QPoint presspos;
104bool rightpressed : 106bool rightpressed :
105 1; // AEH why not use uint foobar :1; if it's tt style -zecke 107 1; // AEH why not use uint foobar :1; if it's tt style -zecke
106 int kbgrabber; 108 int kbgrabber;
107bool kbregrab : 109bool kbregrab :
108 1; 110 1;
109bool notbusysent : 111bool notbusysent :
110 1; 112 1;
111 QString appName; 113 QString appName;
112 struct QCopRec 114 struct QCopRec
113 { 115 {
114 QCopRec( const QCString &ch, const QCString &msg, 116 QCopRec( const QCString &ch, const QCString &msg,
115 const QByteArray &d ) : 117 const QByteArray &d ) :
116 channel( ch ), message( msg ), data( d ) 118 channel( ch ), message( msg ), data( d )
117 { } 119 { }
118 120
119 QCString channel; 121 QCString channel;
120 QCString message; 122 QCString message;
121 QByteArray data; 123 QByteArray data;
122 }; 124 };
123bool preloaded : 125bool preloaded :
124 1; 126 1;
125bool forceshow : 127bool forceshow :
126 1; 128 1;
127bool nomaximize : 129bool nomaximize :
128 1; 130 1;
129 QWidget* qpe_main_widget; 131 QWidget* qpe_main_widget;
130bool keep_running : 132bool keep_running :
131 1; 133 1;
132 QList<QCopRec> qcopq; 134 QList<QCopRec> qcopq;
133 135
134 void enqueueQCop( const QCString &ch, const QCString &msg, 136 void enqueueQCop( const QCString &ch, const QCString &msg,
135 const QByteArray &data ) 137 const QByteArray &data )
136 { 138 {
@@ -854,195 +856,177 @@ QString QPEApplication::documentDir()
854 856
855static int deforient = -1; 857static int deforient = -1;
856 858
857/*! 859/*!
858 \internal 860 \internal
859*/ 861*/
860int QPEApplication::defaultRotation() 862int QPEApplication::defaultRotation()
861{ 863{
862 if ( deforient < 0 ) { 864 if ( deforient < 0 ) {
863 QString d = getenv( "QWS_DISPLAY" ); 865 QString d = getenv( "QWS_DISPLAY" );
864 if ( d.contains( "Rot90" ) ) { 866 if ( d.contains( "Rot90" ) ) {
865 deforient = 90; 867 deforient = 90;
866 } 868 }
867 else if ( d.contains( "Rot180" ) ) { 869 else if ( d.contains( "Rot180" ) ) {
868 deforient = 180; 870 deforient = 180;
869 } 871 }
870 else if ( d.contains( "Rot270" ) ) { 872 else if ( d.contains( "Rot270" ) ) {
871 deforient = 270; 873 deforient = 270;
872 } 874 }
873 else { 875 else {
874 deforient = 0; 876 deforient = 0;
875 } 877 }
876 } 878 }
877 return deforient; 879 return deforient;
878} 880}
879 881
880/*! 882/*!
881 \internal 883 \internal
882*/ 884*/
883void QPEApplication::setDefaultRotation( int r ) 885void QPEApplication::setDefaultRotation( int r )
884{ 886{
885 if ( qApp->type() == GuiServer ) { 887 if ( qApp->type() == GuiServer ) {
886 deforient = r; 888 deforient = r;
887 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 889 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
888 Config config("qpe"); 890 Config config("qpe");
889 config.setGroup( "Rotation" ); 891 config.setGroup( "Rotation" );
890 config.writeEntry( "Screen", getenv("QWS_DISPLAY") ); 892 config.writeEntry( "Screen", getenv("QWS_DISPLAY") );
891 } 893 }
892 else { 894 else {
893#ifndef QT_NO_COP 895#ifndef QT_NO_COP
894 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 896 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
895 e << r; 897 e << r;
896 } 898 }
897#endif 899#endif
898 900
899 } 901 }
900} 902}
901 903
902// exported to libpreload.so
903int opie_block_style = 0;
904 904
905/*! 905/*!
906 \internal 906 \internal
907*/ 907*/
908void QPEApplication::applyStyle() 908void QPEApplication::applyStyle()
909{ 909{
910 Config config( "qpe" ); 910 Config config( "qpe" );
911 config.setGroup( "Appearance" ); 911 config.setGroup( "Appearance" );
912 912
913 // don't block ourselves ... 913 // don't block ourselves ...
914 opie_block_style = 0; 914 Opie::force_appearance = 0;
915 915
916 916 static QString appname = Opie::binaryName ( );
917 static QString appname;
918
919 if ( appname. isNull ( )) {
920 char src [32];
921 char dst [PATH_MAX + 1];
922 ::sprintf ( src, "/proc/%d/exe", ::getpid ( ));
923 int l = ::readlink ( src, dst, PATH_MAX );
924 if ( l > 0 ) {
925 dst [l] = 0;
926 const char *b = ::strrchr ( dst, '/' );
927 appname = ( b ? b + 1 : dst );
928 }
929 else
930 appname = "";
931 }
932
933 917
934 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 918 QStringList ex = config. readListEntry ( "NoStyle", ';' );
935 int nostyle = 0; 919 int nostyle = 0;
936 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 920 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
937 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 921 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
938 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 922 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
939 break; 923 break;
940 } 924 }
941 } 925 }
942 926
943 // Widget style 927 // Widget style
944 QString style = config.readEntry( "Style", "Light" ); 928 QString style = config.readEntry( "Style", "Light" );
945 929
946 // don't set a custom style 930 // don't set a custom style
947 if ( nostyle & 0x01 ) 931 if ( nostyle & Opie::Force_Style )
948 style = "Light"; 932 style = "Light";
949 933
950 internalSetStyle ( style ); 934 internalSetStyle ( style );
951 935
952 // Colors 936 // Colors
953 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 937 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
954 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 938 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
955 QPalette pal( btncolor, bgcolor ); 939 QPalette pal( btncolor, bgcolor );
956 QString color = config.readEntry( "Highlight", "#800000" ); 940 QString color = config.readEntry( "Highlight", "#800000" );
957 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 941 pal.setColor( QColorGroup::Highlight, QColor( color ) );
958 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 942 color = config.readEntry( "HighlightedText", "#FFFFFF" );
959 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 943 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
960 color = config.readEntry( "Text", "#000000" ); 944 color = config.readEntry( "Text", "#000000" );
961 pal.setColor( QColorGroup::Text, QColor( color ) ); 945 pal.setColor( QColorGroup::Text, QColor( color ) );
962 color = config.readEntry( "ButtonText", "#000000" ); 946 color = config.readEntry( "ButtonText", "#000000" );
963 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 947 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
964 color = config.readEntry( "Base", "#FFFFFF" ); 948 color = config.readEntry( "Base", "#FFFFFF" );
965 pal.setColor( QColorGroup::Base, QColor( color ) ); 949 pal.setColor( QColorGroup::Base, QColor( color ) );
966 950
967 pal.setColor( QPalette::Disabled, QColorGroup::Text, 951 pal.setColor( QPalette::Disabled, QColorGroup::Text,
968 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 952 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
969 953
970 setPalette( pal, TRUE ); 954 setPalette( pal, TRUE );
971 955
972 // Window Decoration 956 // Window Decoration
973 QString dec = config.readEntry( "Decoration", "Qtopia" ); 957 QString dec = config.readEntry( "Decoration", "Qtopia" );
974 958
975 // don't set a custom deco 959 // don't set a custom deco
976 if ( nostyle & 0x04 ) 960 if ( nostyle & Opie::Force_Decoration )
977 dec = ""; 961 dec = "";
978 962
979 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 963 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
980 964
981 if ( dec != d->decorationName ) { 965 if ( dec != d->decorationName ) {
982 qwsSetDecoration( new QPEDecoration( dec ) ); 966 qwsSetDecoration( new QPEDecoration( dec ) );
983 d->decorationName = dec; 967 d->decorationName = dec;
984 } 968 }
985 969
986 // Font 970 // Font
987 QString ff = config.readEntry( "FontFamily", font().family() ); 971 QString ff = config.readEntry( "FontFamily", font().family() );
988 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 972 int fs = config.readNumEntry( "FontSize", font().pointSize() );
989 973
990 // don't set a custom font 974 // don't set a custom font
991 if ( nostyle & 0x02 ) { 975 if ( nostyle & Opie::Force_Font ) {
992 ff = "Helvetica"; 976 ff = "Helvetica";
993 fs = 10; 977 fs = 10;
994 } 978 }
995 979
996 setFont ( QFont ( ff, fs ), true ); 980 setFont ( QFont ( ff, fs ), true );
997 981
998 // revert to global blocking policy ... 982 // revert to global blocking policy ...
999 opie_block_style = config. readBoolEntry ( "ForceStyle", false ) ? 0xff : 0x00; 983 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1000 opie_block_style -= nostyle; 984 Opie::force_appearance &= ~nostyle;
1001} 985}
1002 986
1003void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 987void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1004{ 988{
1005#ifdef Q_WS_QWS 989#ifdef Q_WS_QWS
1006 QDataStream stream( data, IO_ReadOnly ); 990 QDataStream stream( data, IO_ReadOnly );
1007 if ( msg == "applyStyle()" ) { 991 if ( msg == "applyStyle()" ) {
1008 applyStyle(); 992 applyStyle();
1009 } 993 }
1010 else if ( msg == "setDefaultRotation(int)" ) { 994 else if ( msg == "setDefaultRotation(int)" ) {
1011 if ( type() == GuiServer ) { 995 if ( type() == GuiServer ) {
1012 int r; 996 int r;
1013 stream >> r; 997 stream >> r;
1014 setDefaultRotation( r ); 998 setDefaultRotation( r );
1015 } 999 }
1016 } 1000 }
1017 else if ( msg == "shutdown()" ) { 1001 else if ( msg == "shutdown()" ) {
1018 if ( type() == GuiServer ) 1002 if ( type() == GuiServer )
1019 shutdown(); 1003 shutdown();
1020 } 1004 }
1021 else if ( msg == "quit()" ) { 1005 else if ( msg == "quit()" ) {
1022 if ( type() != GuiServer ) 1006 if ( type() != GuiServer )
1023 tryQuit(); 1007 tryQuit();
1024 } 1008 }
1025 else if ( msg == "forceQuit()" ) { 1009 else if ( msg == "forceQuit()" ) {
1026 if ( type() != GuiServer ) 1010 if ( type() != GuiServer )
1027 quit(); 1011 quit();
1028 } 1012 }
1029 else if ( msg == "restart()" ) { 1013 else if ( msg == "restart()" ) {
1030 if ( type() == GuiServer ) 1014 if ( type() == GuiServer )
1031 restart(); 1015 restart();
1032 } 1016 }
1033 else if ( msg == "grabKeyboard(QString)" ) { 1017 else if ( msg == "grabKeyboard(QString)" ) {
1034 QString who; 1018 QString who;
1035 stream >> who; 1019 stream >> who;
1036 if ( who.isEmpty() ) 1020 if ( who.isEmpty() )
1037 d->kbgrabber = 0; 1021 d->kbgrabber = 0;
1038 else if ( who != d->appName ) 1022 else if ( who != d->appName )
1039 d->kbgrabber = 1; 1023 d->kbgrabber = 1;
1040 else 1024 else
1041 d->kbgrabber = 2; 1025 d->kbgrabber = 2;
1042 } 1026 }
1043 else if ( msg == "language(QString)" ) { 1027 else if ( msg == "language(QString)" ) {
1044 if ( type() == GuiServer ) { 1028 if ( type() == GuiServer ) {
1045 QString l; 1029 QString l;
1046 stream >> l; 1030 stream >> l;
1047 QString cl = getenv( "LANG" ); 1031 QString cl = getenv( "LANG" );
1048 if ( cl != l ) { 1032 if ( cl != l ) {
@@ -1648,96 +1632,100 @@ int QPEApplication::exec()
1648} 1632}
1649 1633
1650/*! 1634/*!
1651 \internal 1635 \internal
1652 External request for application to quit. Quits if possible without 1636 External request for application to quit. Quits if possible without
1653 loosing state. 1637 loosing state.
1654*/ 1638*/
1655void QPEApplication::tryQuit() 1639void QPEApplication::tryQuit()
1656{ 1640{
1657 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1641 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1658 return ; // Inside modal loop or konsole. Too hard to save state. 1642 return ; // Inside modal loop or konsole. Too hard to save state.
1659#ifndef QT_NO_COP 1643#ifndef QT_NO_COP
1660 1644
1661 { 1645 {
1662 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1646 QCopEnvelope e( "QPE/System", "closing(QString)" );
1663 e << d->appName; 1647 e << d->appName;
1664 } 1648 }
1665#endif 1649#endif
1666 processEvents(); 1650 processEvents();
1667 1651
1668 quit(); 1652 quit();
1669} 1653}
1670 1654
1671/*! 1655/*!
1672 \internal 1656 \internal
1673 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1657 User initiated quit. Makes the window 'Go Away'. If preloaded this means
1674 hiding the window. If not it means quitting the application. 1658 hiding the window. If not it means quitting the application.
1675 As this is user initiated we don't need to check state. 1659 As this is user initiated we don't need to check state.
1676*/ 1660*/
1677void QPEApplication::hideOrQuit() 1661void QPEApplication::hideOrQuit()
1678{ 1662{
1679 processEvents(); 1663 processEvents();
1680 1664
1681 // If we are a preloaded application we don't actually quit, so emit 1665 // If we are a preloaded application we don't actually quit, so emit
1682 // a System message indicating we're quasi-closing. 1666 // a System message indicating we're quasi-closing.
1683 if ( d->preloaded && d->qpe_main_widget ) 1667 if ( d->preloaded && d->qpe_main_widget )
1684#ifndef QT_NO_COP 1668#ifndef QT_NO_COP
1685 1669
1686 { 1670 {
1687 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 1671 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
1688 e << d->appName; 1672 e << d->appName;
1689 d->qpe_main_widget->hide(); 1673 d->qpe_main_widget->hide();
1690 } 1674 }
1691#endif 1675#endif
1692 else 1676 else
1693 quit(); 1677 quit();
1694} 1678}
1695 1679
1680
1681// These 6 stubs below need 1.5K in the binary and besides that -
1682// we are not using ancient toolchains anymore - sandman
1683
1696#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SHARP) 1684#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SHARP)
1697 1685
1698// The libraries with the skiff package (and possibly others) have 1686// The libraries with the skiff package (and possibly others) have
1699// completely useless implementations of builtin new and delete that 1687// completely useless implementations of builtin new and delete that
1700// use about 50% of your CPU. Here we revert to the simple libc 1688// use about 50% of your CPU. Here we revert to the simple libc
1701// functions. 1689// functions.
1702 1690
1703void* operator new[]( size_t size ) 1691void* operator new[]( size_t size )
1704{ 1692{
1705 return malloc( size ); 1693 return malloc( size );
1706} 1694}
1707 1695
1708void* operator new( size_t size ) 1696void* operator new( size_t size )
1709{ 1697{
1710 return malloc( size ); 1698 return malloc( size );
1711} 1699}
1712 1700
1713void operator delete[]( void* p ) 1701void operator delete[]( void* p )
1714{ 1702{
1715 free( p ); 1703 free( p );
1716} 1704}
1717 1705
1718void operator delete[]( void* p, size_t /*size*/ ) 1706void operator delete[]( void* p, size_t /*size*/ )
1719{ 1707{
1720 free( p ); 1708 free( p );
1721} 1709}
1722 1710
1723void operator delete( void* p ) 1711void operator delete( void* p )
1724{ 1712{
1725 free( p ); 1713 free( p );
1726} 1714}
1727 1715
1728void operator delete( void* p, size_t /*size*/ ) 1716void operator delete( void* p, size_t /*size*/ )
1729{ 1717{
1730 free( p ); 1718 free( p );
1731} 1719}
1732 1720
1733#endif 1721#endif
1734 1722
1735#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 1723#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
1736#include <qwidgetlist.h> 1724#include <qwidgetlist.h>
1737#ifdef QWS 1725#ifdef QWS
1738#include <qgfx_qws.h> 1726#include <qgfx_qws.h>
1739extern QRect qt_maxWindowRect; 1727extern QRect qt_maxWindowRect;
1740void qt_setMaxWindowRect(const QRect& r ) 1728void qt_setMaxWindowRect(const QRect& r )
1741{ 1729{
1742 qt_maxWindowRect = qt_screen->mapFromDevice( r, 1730 qt_maxWindowRect = qt_screen->mapFromDevice( r,
1743 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 1731 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );