summaryrefslogtreecommitdiff
authorsandman <sandman>2002-11-25 22:12:18 (UTC)
committer sandman <sandman>2002-11-25 22:12:18 (UTC)
commit4e6b2585987290f874697cbec7c289b4df29f82b (patch) (unidiff)
treee19415ef5374ffa3730380813298111e24711590
parent7bd8ef9197506897d3a5287a013934f89658d60a (diff)
downloadopie-4e6b2585987290f874697cbec7c289b4df29f82b.zip
opie-4e6b2585987290f874697cbec7c289b4df29f82b.tar.gz
opie-4e6b2585987290f874697cbec7c289b4df29f82b.tar.bz2
Some changes to the QPEDecoration c'tor internals:
Since the current deco plugin is unloaded, when a new Deco is created via new (even if this new deco is never used or deleted immediatly afer- wards), we have to remember the plugin name, in case someone calls the default c'tor (without supplying a plugin name)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp9
-rw-r--r--library/qpedecoration_qws.cpp41
-rw-r--r--library/qpedecoration_qws.h2
3 files changed, 25 insertions, 27 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index a54fb20..c8e6e74 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -710,479 +710,482 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e )
710 } 710 }
711 } 711 }
712 if ( e->type == QWSEvent::Key ) { 712 if ( e->type == QWSEvent::Key ) {
713 if ( d->kbgrabber == 1 ) 713 if ( d->kbgrabber == 1 )
714 return TRUE; 714 return TRUE;
715 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 715 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
716 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 716 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
717 // Use special "OK" key to press "OK" on top level widgets 717 // Use special "OK" key to press "OK" on top level widgets
718 QWidget * active = activeWindow(); 718 QWidget * active = activeWindow();
719 QWidget *popup = 0; 719 QWidget *popup = 0;
720 if ( active && active->isPopup() ) { 720 if ( active && active->isPopup() ) {
721 popup = active; 721 popup = active;
722 active = active->parentWidget(); 722 active = active->parentWidget();
723 } 723 }
724 if ( active && ( int ) active->winId() == ke->simpleData.window && 724 if ( active && ( int ) active->winId() == ke->simpleData.window &&
725 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 725 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
726 if ( ke->simpleData.is_press ) { 726 if ( ke->simpleData.is_press ) {
727 if ( popup ) 727 if ( popup )
728 popup->close(); 728 popup->close();
729 if ( active->inherits( "QDialog" ) ) { 729 if ( active->inherits( "QDialog" ) ) {
730 HackDialog * d = ( HackDialog * ) active; 730 HackDialog * d = ( HackDialog * ) active;
731 d->acceptIt(); 731 d->acceptIt();
732 return TRUE; 732 return TRUE;
733 } 733 }
734 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 734 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
735 QSignal s; 735 QSignal s;
736 s.connect( active, SLOT( accept() ) ); 736 s.connect( active, SLOT( accept() ) );
737 s.activate(); 737 s.activate();
738 } 738 }
739 else { 739 else {
740 // do the same as with the select key: Map to the default action of the widget: 740 // do the same as with the select key: Map to the default action of the widget:
741 mapToDefaultAction( ke, Qt::Key_Return ); 741 mapToDefaultAction( ke, Qt::Key_Return );
742 } 742 }
743 } 743 }
744 } 744 }
745 } 745 }
746 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 746 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
747 // Use special "select" key to do whatever default action a widget has 747 // Use special "select" key to do whatever default action a widget has
748 mapToDefaultAction( ke, Qt::Key_Space ); 748 mapToDefaultAction( ke, Qt::Key_Space );
749 } 749 }
750 else if ( ke->simpleData.keycode == Qt::Key_Escape && 750 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
751 ke->simpleData.is_press ) { 751 ke->simpleData.is_press ) {
752 // Escape key closes app if focus on toplevel 752 // Escape key closes app if focus on toplevel
753 QWidget * active = activeWindow(); 753 QWidget * active = activeWindow();
754 if ( active && active->testWFlags( WType_TopLevel ) && 754 if ( active && active->testWFlags( WType_TopLevel ) &&
755 ( int ) active->winId() == ke->simpleData.window && 755 ( int ) active->winId() == ke->simpleData.window &&
756 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 756 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
757 if ( active->inherits( "QDialog" ) ) { 757 if ( active->inherits( "QDialog" ) ) {
758 HackDialog * d = ( HackDialog * ) active; 758 HackDialog * d = ( HackDialog * ) active;
759 d->rejectIt(); 759 d->rejectIt();
760 return TRUE; 760 return TRUE;
761 } 761 }
762 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 762 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
763 active->close(); 763 active->close();
764 } 764 }
765 } 765 }
766 } 766 }
767 767
768#if QT_VERSION < 231 768#if QT_VERSION < 231
769 // Filter out the F4/Launcher key from apps 769 // Filter out the F4/Launcher key from apps
770 // ### The launcher key may not always be F4 on all devices 770 // ### The launcher key may not always be F4 on all devices
771 if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) 771 if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 )
772 return TRUE; 772 return TRUE;
773#endif 773#endif
774 774
775 } 775 }
776 if ( e->type == QWSEvent::Focus ) { 776 if ( e->type == QWSEvent::Focus ) {
777 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 777 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
778 QWidget* nfw = QWidget::find( e->window() ); 778 QWidget* nfw = QWidget::find( e->window() );
779 if ( !fe->simpleData.get_focus ) { 779 if ( !fe->simpleData.get_focus ) {
780 QWidget * active = activeWindow(); 780 QWidget * active = activeWindow();
781 while ( active && active->isPopup() ) { 781 while ( active && active->isPopup() ) {
782 active->close(); 782 active->close();
783 active = activeWindow(); 783 active = activeWindow();
784 } 784 }
785 if ( !nfw && d->kbgrabber == 2 ) { 785 if ( !nfw && d->kbgrabber == 2 ) {
786 ungrabKeyboard(); 786 ungrabKeyboard();
787 d->kbregrab = TRUE; // want kb back when we're active 787 d->kbregrab = TRUE; // want kb back when we're active
788 } 788 }
789 } 789 }
790 else { 790 else {
791 // make sure our modal widget is ALWAYS on top 791 // make sure our modal widget is ALWAYS on top
792 QWidget *topm = activeModalWidget(); 792 QWidget *topm = activeModalWidget();
793 if ( topm ) { 793 if ( topm ) {
794 topm->raise(); 794 topm->raise();
795 } 795 }
796 if ( d->kbregrab ) { 796 if ( d->kbregrab ) {
797 grabKeyboard(); 797 grabKeyboard();
798 d->kbregrab = FALSE; 798 d->kbregrab = FALSE;
799 } 799 }
800 } 800 }
801 if ( fe->simpleData.get_focus && inputMethodDict ) { 801 if ( fe->simpleData.get_focus && inputMethodDict ) {
802 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 802 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
803 if ( m == AlwaysOff ) 803 if ( m == AlwaysOff )
804 Global::hideInputMethod(); 804 Global::hideInputMethod();
805 if ( m == AlwaysOn ) 805 if ( m == AlwaysOn )
806 Global::showInputMethod(); 806 Global::showInputMethod();
807 } 807 }
808 } 808 }
809 return QApplication::qwsEventFilter( e ); 809 return QApplication::qwsEventFilter( e );
810} 810}
811#endif 811#endif
812 812
813/*! 813/*!
814 Destroys the QPEApplication. 814 Destroys the QPEApplication.
815*/ 815*/
816QPEApplication::~QPEApplication() 816QPEApplication::~QPEApplication()
817{ 817{
818 ungrabKeyboard(); 818 ungrabKeyboard();
819#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 819#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
820 // Need to delete QCopChannels early, since the display will 820 // Need to delete QCopChannels early, since the display will
821 // be gone by the time we get to ~QObject(). 821 // be gone by the time we get to ~QObject().
822 delete sysChannel; 822 delete sysChannel;
823 delete pidChannel; 823 delete pidChannel;
824#endif 824#endif
825 825
826 delete d; 826 delete d;
827} 827}
828 828
829/*! 829/*!
830 Returns <tt>$OPIEDIR/</tt>. 830 Returns <tt>$OPIEDIR/</tt>.
831*/ 831*/
832QString QPEApplication::qpeDir() 832QString QPEApplication::qpeDir()
833{ 833{
834 const char * base = getenv( "OPIEDIR" ); 834 const char * base = getenv( "OPIEDIR" );
835 if ( base ) 835 if ( base )
836 return QString( base ) + "/"; 836 return QString( base ) + "/";
837 837
838 return QString( "../" ); 838 return QString( "../" );
839} 839}
840 840
841/*! 841/*!
842 Returns the user's current Document directory. There is a trailing "/". 842 Returns the user's current Document directory. There is a trailing "/".
843 .. well, it does now,, and there's no trailing '/' 843 .. well, it does now,, and there's no trailing '/'
844*/ 844*/
845QString QPEApplication::documentDir() 845QString QPEApplication::documentDir()
846{ 846{
847 const char* base = getenv( "HOME"); 847 const char* base = getenv( "HOME");
848 if ( base ) 848 if ( base )
849 return QString( base ) + "/Documents"; 849 return QString( base ) + "/Documents";
850 850
851 return QString( "../Documents" ); 851 return QString( "../Documents" );
852} 852}
853 853
854static int deforient = -1; 854static int deforient = -1;
855 855
856/*! 856/*!
857 \internal 857 \internal
858*/ 858*/
859int QPEApplication::defaultRotation() 859int QPEApplication::defaultRotation()
860{ 860{
861 if ( deforient < 0 ) { 861 if ( deforient < 0 ) {
862 QString d = getenv( "QWS_DISPLAY" ); 862 QString d = getenv( "QWS_DISPLAY" );
863 if ( d.contains( "Rot90" ) ) { 863 if ( d.contains( "Rot90" ) ) {
864 deforient = 90; 864 deforient = 90;
865 } 865 }
866 else if ( d.contains( "Rot180" ) ) { 866 else if ( d.contains( "Rot180" ) ) {
867 deforient = 180; 867 deforient = 180;
868 } 868 }
869 else if ( d.contains( "Rot270" ) ) { 869 else if ( d.contains( "Rot270" ) ) {
870 deforient = 270; 870 deforient = 270;
871 } 871 }
872 else { 872 else {
873 deforient = 0; 873 deforient = 0;
874 } 874 }
875 } 875 }
876 return deforient; 876 return deforient;
877} 877}
878 878
879/*! 879/*!
880 \internal 880 \internal
881*/ 881*/
882void QPEApplication::setDefaultRotation( int r ) 882void QPEApplication::setDefaultRotation( int r )
883{ 883{
884 if ( qApp->type() == GuiServer ) { 884 if ( qApp->type() == GuiServer ) {
885 deforient = r; 885 deforient = r;
886 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 886 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
887 Config config("qpe"); 887 Config config("qpe");
888 config.setGroup( "Rotation" ); 888 config.setGroup( "Rotation" );
889 config.writeEntry( "Screen", getenv("QWS_DISPLAY") ); 889 config.writeEntry( "Screen", getenv("QWS_DISPLAY") );
890 } 890 }
891 else { 891 else {
892#ifndef QT_NO_COP 892#ifndef QT_NO_COP
893 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 893 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
894 e << r; 894 e << r;
895 } 895 }
896#endif 896#endif
897 897
898 } 898 }
899} 899}
900 900
901// exported to libpreload.so 901// exported to libpreload.so
902bool opie_block_style = false; 902int opie_block_style = 0;
903 903
904/*! 904/*!
905 \internal 905 \internal
906*/ 906*/
907void QPEApplication::applyStyle() 907void QPEApplication::applyStyle()
908{ 908{
909 Config config( "qpe" ); 909 Config config( "qpe" );
910 config.setGroup( "Appearance" ); 910 config.setGroup( "Appearance" );
911 911
912 // don't block ourselves ... 912 // don't block ourselves ...
913 opie_block_style = false; 913 opie_block_style = 0;
914 914
915 915
916 static QString appname; 916 static QString appname;
917 917
918 if ( appname. isNull ( )) { 918 if ( appname. isNull ( )) {
919 char src [32]; 919 char src [32];
920 char dst [PATH_MAX + 1]; 920 char dst [PATH_MAX + 1];
921 ::sprintf ( src, "/proc/%d/exe", ::getpid ( )); 921 ::sprintf ( src, "/proc/%d/exe", ::getpid ( ));
922 int l = ::readlink ( src, dst, PATH_MAX ); 922 int l = ::readlink ( src, dst, PATH_MAX );
923 if ( l > 0 ) { 923 if ( l > 0 ) {
924 dst [l] = 0; 924 dst [l] = 0;
925 const char *b = ::strrchr ( dst, '/' ); 925 const char *b = ::strrchr ( dst, '/' );
926 appname = ( b ? b + 1 : dst ); 926 appname = ( b ? b + 1 : dst );
927 } 927 }
928 else 928 else
929 appname = ""; 929 appname = "";
930 } 930 }
931 931
932 932
933 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 933 QStringList ex = config. readListEntry ( "NoStyle", ';' );
934 int nostyle = 0; 934 int nostyle = 0;
935 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 935 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
936 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 936 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
937 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 937 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
938 break; 938 break;
939 } 939 }
940 } 940 }
941 941
942 // Widget style 942 // Widget style
943 QString style = config.readEntry( "Style", "Light" ); 943 QString style = config.readEntry( "Style", "Light" );
944 944
945 // don't set a custom style 945 // don't set a custom style
946 if ( nostyle & 0x01 ) 946 if ( nostyle & 0x01 )
947 style = "Light"; 947 style = "Light";
948 948
949 internalSetStyle ( style ); 949 internalSetStyle ( style );
950 950
951 // Colors 951 // Colors
952 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 952 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
953 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 953 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
954 QPalette pal( btncolor, bgcolor ); 954 QPalette pal( btncolor, bgcolor );
955 QString color = config.readEntry( "Highlight", "#800000" ); 955 QString color = config.readEntry( "Highlight", "#800000" );
956 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 956 pal.setColor( QColorGroup::Highlight, QColor( color ) );
957 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 957 color = config.readEntry( "HighlightedText", "#FFFFFF" );
958 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 958 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
959 color = config.readEntry( "Text", "#000000" ); 959 color = config.readEntry( "Text", "#000000" );
960 pal.setColor( QColorGroup::Text, QColor( color ) ); 960 pal.setColor( QColorGroup::Text, QColor( color ) );
961 color = config.readEntry( "ButtonText", "#000000" ); 961 color = config.readEntry( "ButtonText", "#000000" );
962 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 962 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
963 color = config.readEntry( "Base", "#FFFFFF" ); 963 color = config.readEntry( "Base", "#FFFFFF" );
964 pal.setColor( QColorGroup::Base, QColor( color ) ); 964 pal.setColor( QColorGroup::Base, QColor( color ) );
965 965
966 pal.setColor( QPalette::Disabled, QColorGroup::Text, 966 pal.setColor( QPalette::Disabled, QColorGroup::Text,
967 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 967 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
968 968
969 setPalette( pal, TRUE ); 969 setPalette( pal, TRUE );
970 970
971 // Window Decoration 971 // Window Decoration
972 QString dec = config.readEntry( "Decoration", "Qtopia" ); 972 QString dec = config.readEntry( "Decoration", "Qtopia" );
973 973
974 // don't set a custom deco 974 // don't set a custom deco
975 if ( nostyle & 0x04 ) 975 if ( nostyle & 0x04 )
976 dec = ""; 976 dec = "";
977 977
978 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
979
978 if ( dec != d->decorationName ) { 980 if ( dec != d->decorationName ) {
979 qwsSetDecoration( new QPEDecoration( dec ) ); 981 qwsSetDecoration( new QPEDecoration( dec ) );
980 d->decorationName = dec; 982 d->decorationName = dec;
981 } 983 }
982 984
983 // Font 985 // Font
984 QString ff = config.readEntry( "FontFamily", font().family() ); 986 QString ff = config.readEntry( "FontFamily", font().family() );
985 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 987 int fs = config.readNumEntry( "FontSize", font().pointSize() );
986 988
987 // don't set a custom font 989 // don't set a custom font
988 if ( nostyle & 0x02 ) { 990 if ( nostyle & 0x02 ) {
989 ff = "Helvetica"; 991 ff = "Helvetica";
990 fs = 10; 992 fs = 10;
991 } 993 }
992 994
993 setFont( QFont(ff, fs) ); 995 setFont( QFont(ff, fs) );
994 996
995 // revert to global blocking policy ... 997 // revert to global blocking policy ...
996 opie_block_style = config. readBoolEntry ( "ForceStyle", false ); 998 opie_block_style = config. readBoolEntry ( "ForceStyle", false ) ? 0xff : 0x00;
999 opie_block_style -= nostyle;
997} 1000}
998 1001
999void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1002void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1000{ 1003{
1001#ifdef Q_WS_QWS 1004#ifdef Q_WS_QWS
1002 QDataStream stream( data, IO_ReadOnly ); 1005 QDataStream stream( data, IO_ReadOnly );
1003 if ( msg == "applyStyle()" ) { 1006 if ( msg == "applyStyle()" ) {
1004 applyStyle(); 1007 applyStyle();
1005 } 1008 }
1006 else if ( msg == "setDefaultRotation(int)" ) { 1009 else if ( msg == "setDefaultRotation(int)" ) {
1007 if ( type() == GuiServer ) { 1010 if ( type() == GuiServer ) {
1008 int r; 1011 int r;
1009 stream >> r; 1012 stream >> r;
1010 setDefaultRotation( r ); 1013 setDefaultRotation( r );
1011 } 1014 }
1012 } 1015 }
1013 else if ( msg == "shutdown()" ) { 1016 else if ( msg == "shutdown()" ) {
1014 if ( type() == GuiServer ) 1017 if ( type() == GuiServer )
1015 shutdown(); 1018 shutdown();
1016 } 1019 }
1017 else if ( msg == "quit()" ) { 1020 else if ( msg == "quit()" ) {
1018 if ( type() != GuiServer ) 1021 if ( type() != GuiServer )
1019 tryQuit(); 1022 tryQuit();
1020 } 1023 }
1021 else if ( msg == "forceQuit()" ) { 1024 else if ( msg == "forceQuit()" ) {
1022 if ( type() != GuiServer ) 1025 if ( type() != GuiServer )
1023 quit(); 1026 quit();
1024 } 1027 }
1025 else if ( msg == "restart()" ) { 1028 else if ( msg == "restart()" ) {
1026 if ( type() == GuiServer ) 1029 if ( type() == GuiServer )
1027 restart(); 1030 restart();
1028 } 1031 }
1029 else if ( msg == "grabKeyboard(QString)" ) { 1032 else if ( msg == "grabKeyboard(QString)" ) {
1030 QString who; 1033 QString who;
1031 stream >> who; 1034 stream >> who;
1032 if ( who.isEmpty() ) 1035 if ( who.isEmpty() )
1033 d->kbgrabber = 0; 1036 d->kbgrabber = 0;
1034 else if ( who != d->appName ) 1037 else if ( who != d->appName )
1035 d->kbgrabber = 1; 1038 d->kbgrabber = 1;
1036 else 1039 else
1037 d->kbgrabber = 2; 1040 d->kbgrabber = 2;
1038 } 1041 }
1039 else if ( msg == "language(QString)" ) { 1042 else if ( msg == "language(QString)" ) {
1040 if ( type() == GuiServer ) { 1043 if ( type() == GuiServer ) {
1041 QString l; 1044 QString l;
1042 stream >> l; 1045 stream >> l;
1043 QString cl = getenv( "LANG" ); 1046 QString cl = getenv( "LANG" );
1044 if ( cl != l ) { 1047 if ( cl != l ) {
1045 if ( l.isNull() ) 1048 if ( l.isNull() )
1046 unsetenv( "LANG" ); 1049 unsetenv( "LANG" );
1047 else 1050 else
1048 setenv( "LANG", l.latin1(), 1 ); 1051 setenv( "LANG", l.latin1(), 1 );
1049 restart(); 1052 restart();
1050 } 1053 }
1051 } 1054 }
1052 } 1055 }
1053 else if ( msg == "timeChange(QString)" ) { 1056 else if ( msg == "timeChange(QString)" ) {
1054 QString t; 1057 QString t;
1055 stream >> t; 1058 stream >> t;
1056 if ( t.isNull() ) 1059 if ( t.isNull() )
1057 unsetenv( "TZ" ); 1060 unsetenv( "TZ" );
1058 else 1061 else
1059 setenv( "TZ", t.latin1(), 1 ); 1062 setenv( "TZ", t.latin1(), 1 );
1060 // emit the signal so everyone else knows... 1063 // emit the signal so everyone else knows...
1061 emit timeChanged(); 1064 emit timeChanged();
1062 } 1065 }
1063 else if ( msg == "execute(QString)" ) { 1066 else if ( msg == "execute(QString)" ) {
1064 if ( type() == GuiServer ) { 1067 if ( type() == GuiServer ) {
1065 QString t; 1068 QString t;
1066 stream >> t; 1069 stream >> t;
1067 Global::execute( t ); 1070 Global::execute( t );
1068 } 1071 }
1069 } 1072 }
1070 else if ( msg == "execute(QString,QString)" ) { 1073 else if ( msg == "execute(QString,QString)" ) {
1071 if ( type() == GuiServer ) { 1074 if ( type() == GuiServer ) {
1072 QString t, d; 1075 QString t, d;
1073 stream >> t >> d; 1076 stream >> t >> d;
1074 Global::execute( t, d ); 1077 Global::execute( t, d );
1075 } 1078 }
1076 } 1079 }
1077 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1080 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1078 if ( type() == GuiServer ) { 1081 if ( type() == GuiServer ) {
1079 QDateTime when; 1082 QDateTime when;
1080 QCString channel, message; 1083 QCString channel, message;
1081 int data; 1084 int data;
1082 stream >> when >> channel >> message >> data; 1085 stream >> when >> channel >> message >> data;
1083 AlarmServer::addAlarm( when, channel, message, data ); 1086 AlarmServer::addAlarm( when, channel, message, data );
1084 } 1087 }
1085 } 1088 }
1086 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1089 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1087 if ( type() == GuiServer ) { 1090 if ( type() == GuiServer ) {
1088 QDateTime when; 1091 QDateTime when;
1089 QCString channel, message; 1092 QCString channel, message;
1090 int data; 1093 int data;
1091 stream >> when >> channel >> message >> data; 1094 stream >> when >> channel >> message >> data;
1092 AlarmServer::deleteAlarm( when, channel, message, data ); 1095 AlarmServer::deleteAlarm( when, channel, message, data );
1093 } 1096 }
1094 } 1097 }
1095 else if ( msg == "clockChange(bool)" ) { 1098 else if ( msg == "clockChange(bool)" ) {
1096 int tmp; 1099 int tmp;
1097 stream >> tmp; 1100 stream >> tmp;
1098 emit clockChanged( tmp ); 1101 emit clockChanged( tmp );
1099 } 1102 }
1100 else if ( msg == "weekChange(bool)" ) { 1103 else if ( msg == "weekChange(bool)" ) {
1101 int tmp; 1104 int tmp;
1102 stream >> tmp; 1105 stream >> tmp;
1103 emit weekChanged( tmp ); 1106 emit weekChanged( tmp );
1104 } 1107 }
1105 else if ( msg == "setDateFormat(DateFormat)" ) { 1108 else if ( msg == "setDateFormat(DateFormat)" ) {
1106 DateFormat tmp; 1109 DateFormat tmp;
1107 stream >> tmp; 1110 stream >> tmp;
1108 emit dateFormatChanged( tmp ); 1111 emit dateFormatChanged( tmp );
1109 } 1112 }
1110 else if ( msg == "setVolume(int,int)" ) { 1113 else if ( msg == "setVolume(int,int)" ) {
1111 int t, v; 1114 int t, v;
1112 stream >> t >> v; 1115 stream >> t >> v;
1113 setVolume( t, v ); 1116 setVolume( t, v );
1114 emit volumeChanged( muted ); 1117 emit volumeChanged( muted );
1115 } 1118 }
1116 else if ( msg == "volumeChange(bool)" ) { 1119 else if ( msg == "volumeChange(bool)" ) {
1117 stream >> muted; 1120 stream >> muted;
1118 setVolume(); 1121 setVolume();
1119 emit volumeChanged( muted ); 1122 emit volumeChanged( muted );
1120 } 1123 }
1121 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1124 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1122 int t, v; 1125 int t, v;
1123 stream >> t >> v; 1126 stream >> t >> v;
1124 setMic( t, v ); 1127 setMic( t, v );
1125 emit micChanged( micMuted ); 1128 emit micChanged( micMuted );
1126 } 1129 }
1127 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1130 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1128 stream >> micMuted; 1131 stream >> micMuted;
1129 setMic(); 1132 setMic();
1130 emit micChanged( micMuted ); 1133 emit micChanged( micMuted );
1131 } 1134 }
1132#endif 1135#endif
1133} 1136}
1134 1137
1135/*! 1138/*!
1136 \internal 1139 \internal
1137*/ 1140*/
1138bool QPEApplication::raiseAppropriateWindow() 1141bool QPEApplication::raiseAppropriateWindow()
1139{ 1142{
1140 bool r = FALSE; 1143 bool r = FALSE;
1141 // ########## raise()ing main window should raise and set active 1144 // ########## raise()ing main window should raise and set active
1142 // ########## it and then all childen. This belongs in Qt/Embedded 1145 // ########## it and then all childen. This belongs in Qt/Embedded
1143 QWidget *top = d->qpe_main_widget; 1146 QWidget *top = d->qpe_main_widget;
1144 if ( !top ) 1147 if ( !top )
1145 top = mainWidget(); 1148 top = mainWidget();
1146 if ( top && d->keep_running ) { 1149 if ( top && d->keep_running ) {
1147 if ( top->isVisible() ) 1150 if ( top->isVisible() )
1148 r = TRUE; 1151 r = TRUE;
1149 else if (d->preloaded) { 1152 else if (d->preloaded) {
1150 // We are preloaded and not visible.. pretend we just started.. 1153 // We are preloaded and not visible.. pretend we just started..
1151 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1154 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1152 e << d->appName; 1155 e << d->appName;
1153 } 1156 }
1154 1157
1155 d->show_mx(top, d->nomaximize); 1158 d->show_mx(top, d->nomaximize);
1156 top->raise(); 1159 top->raise();
1157 top->setActiveWindow(); 1160 top->setActiveWindow();
1158 } 1161 }
1159 QWidget *topm = activeModalWidget(); 1162 QWidget *topm = activeModalWidget();
1160 if ( topm && topm != top ) { 1163 if ( topm && topm != top ) {
1161 topm->show(); 1164 topm->show();
1162 topm->raise(); 1165 topm->raise();
1163 topm->setActiveWindow(); 1166 topm->setActiveWindow();
1164 // If we haven't already handled the fastAppShowing message 1167 // If we haven't already handled the fastAppShowing message
1165 if (!top && d->preloaded) { 1168 if (!top && d->preloaded) {
1166 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1169 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1167 e << d->appName; 1170 e << d->appName;
1168 } 1171 }
1169 r = FALSE; 1172 r = FALSE;
1170 } 1173 }
1171 return r; 1174 return r;
1172} 1175}
1173 1176
1174void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1177void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1175{ 1178{
1176#ifdef Q_WS_QWS 1179#ifdef Q_WS_QWS
1177 1180
1178 if ( msg == "quit()" ) { 1181 if ( msg == "quit()" ) {
1179 tryQuit(); 1182 tryQuit();
1180 } 1183 }
1181 else if ( msg == "quitIfInvisible()" ) { 1184 else if ( msg == "quitIfInvisible()" ) {
1182 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1185 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1183 quit(); 1186 quit();
1184 } 1187 }
1185 else if ( msg == "close()" ) { 1188 else if ( msg == "close()" ) {
1186 hideOrQuit(); 1189 hideOrQuit();
1187 } 1190 }
1188 else if ( msg == "disablePreload()" ) { 1191 else if ( msg == "disablePreload()" ) {
diff --git a/library/qpedecoration_qws.cpp b/library/qpedecoration_qws.cpp
index 6221f5b..5e0c32a 100644
--- a/library/qpedecoration_qws.cpp
+++ b/library/qpedecoration_qws.cpp
@@ -291,444 +291,437 @@ void QPEManager::whatsThisTimeout()
291 if ( active ) { 291 if ( active ) {
292 whatsThis = active; 292 whatsThis = active;
293 drawTitle( active ); 293 drawTitle( active );
294 // check periodically to see if we've left whats this mode 294 // check periodically to see if we've left whats this mode
295 wtTimer->start( 250 ); 295 wtTimer->start( 250 );
296 } 296 }
297 } 297 }
298 inWhatsThis = !inWhatsThis; 298 inWhatsThis = !inWhatsThis;
299 } 299 }
300} 300}
301 301
302//=========================================================================== 302//===========================================================================
303 303
304static QImage *okImage( int th ) 304static QImage *okImage( int th )
305{ 305{
306 static QImage *i = 0; 306 static QImage *i = 0;
307 if ( !i || i->height() != th ) { 307 if ( !i || i->height() != th ) {
308 delete i; 308 delete i;
309 i = new QImage(scaleButton(Resource::loadImage("OKButton"),th)); 309 i = new QImage(scaleButton(Resource::loadImage("OKButton"),th));
310 } 310 }
311 return i; 311 return i;
312} 312}
313 313
314static QImage *closeImage( int th ) 314static QImage *closeImage( int th )
315{ 315{
316 static QImage *i = 0; 316 static QImage *i = 0;
317 if ( !i || i->height() != th ) { 317 if ( !i || i->height() != th ) {
318 delete i; 318 delete i;
319 i = new QImage(scaleButton(Resource::loadImage("CloseButton"),th)); 319 i = new QImage(scaleButton(Resource::loadImage("CloseButton"),th));
320 } 320 }
321 return i; 321 return i;
322} 322}
323 323
324static QImage *helpImage( int th ) 324static QImage *helpImage( int th )
325{ 325{
326 static QImage *i = 0; 326 static QImage *i = 0;
327 if ( !i || i->height() != th ) { 327 if ( !i || i->height() != th ) {
328 delete i; 328 delete i;
329 i = new QImage(scaleButton(Resource::loadImage("HelpButton"),th)); 329 i = new QImage(scaleButton(Resource::loadImage("HelpButton"),th));
330 } 330 }
331 return i; 331 return i;
332} 332}
333 333
334static QImage *maximizeImage( int th ) 334static QImage *maximizeImage( int th )
335{ 335{
336 static QImage *i = 0; 336 static QImage *i = 0;
337 if ( !i || i->height() != th ) { 337 if ( !i || i->height() != th ) {
338 delete i; 338 delete i;
339 i = new QImage(scaleButton(Resource::loadImage("MaximizeButton"),th)); 339 i = new QImage(scaleButton(Resource::loadImage("MaximizeButton"),th));
340 } 340 }
341 return i; 341 return i;
342} 342}
343 343
344int WindowDecorationInterface::metric( Metric m, const WindowData *wd ) const 344int WindowDecorationInterface::metric( Metric m, const WindowData *wd ) const
345{ 345{
346 switch ( m ) { 346 switch ( m ) {
347 case TitleHeight: 347 case TitleHeight:
348 if ( QApplication::desktop()->height() > 320 ) 348 if ( QApplication::desktop()->height() > 320 )
349 return 19; 349 return 19;
350 else 350 else
351 return 15; 351 return 15;
352 case LeftBorder: 352 case LeftBorder:
353 case RightBorder: 353 case RightBorder:
354 case TopBorder: 354 case TopBorder:
355 case BottomBorder: 355 case BottomBorder:
356 return 4; 356 return 4;
357 case OKWidth: 357 case OKWidth:
358 return okImage(metric(TitleHeight,wd))->width(); 358 return okImage(metric(TitleHeight,wd))->width();
359 case CloseWidth: 359 case CloseWidth:
360 return closeImage(metric(TitleHeight,wd))->width(); 360 return closeImage(metric(TitleHeight,wd))->width();
361 case HelpWidth: 361 case HelpWidth:
362 return helpImage(metric(TitleHeight,wd))->width(); 362 return helpImage(metric(TitleHeight,wd))->width();
363 case MaximizeWidth: 363 case MaximizeWidth:
364 return maximizeImage(metric(TitleHeight,wd))->width(); 364 return maximizeImage(metric(TitleHeight,wd))->width();
365 case CornerGrabSize: 365 case CornerGrabSize:
366 return 16; 366 return 16;
367 } 367 }
368 368
369 return 0; 369 return 0;
370} 370}
371 371
372void WindowDecorationInterface::drawArea( Area a, QPainter *p, const WindowData *wd ) const 372void WindowDecorationInterface::drawArea( Area a, QPainter *p, const WindowData *wd ) const
373{ 373{
374 int th = metric( TitleHeight, wd ); 374 int th = metric( TitleHeight, wd );
375 QRect r = wd->rect; 375 QRect r = wd->rect;
376 376
377 switch ( a ) { 377 switch ( a ) {
378 case Border: 378 case Border:
379 { 379 {
380 const QColorGroup &cg = wd->palette.active(); 380 const QColorGroup &cg = wd->palette.active();
381 qDrawWinPanel(p, r.x()-metric(LeftBorder,wd), 381 qDrawWinPanel(p, r.x()-metric(LeftBorder,wd),
382 r.y()-th-metric(TopBorder,wd), 382 r.y()-th-metric(TopBorder,wd),
383 r.width()+metric(LeftBorder,wd)+metric(RightBorder,wd), 383 r.width()+metric(LeftBorder,wd)+metric(RightBorder,wd),
384 r.height()+th+metric(TopBorder,wd)+metric(BottomBorder,wd), 384 r.height()+th+metric(TopBorder,wd)+metric(BottomBorder,wd),
385 cg, FALSE, &cg.brush(QColorGroup::Background)); 385 cg, FALSE, &cg.brush(QColorGroup::Background));
386 } 386 }
387 break; 387 break;
388 case Title: 388 case Title:
389 { 389 {
390 const QColorGroup &cg = wd->palette.active(); 390 const QColorGroup &cg = wd->palette.active();
391 QBrush titleBrush; 391 QBrush titleBrush;
392 QPen titleLines; 392 QPen titleLines;
393 393
394 if ( wd->flags & WindowData::Active ) { 394 if ( wd->flags & WindowData::Active ) {
395 titleBrush = cg.brush(QColorGroup::Highlight); 395 titleBrush = cg.brush(QColorGroup::Highlight);
396 titleLines = titleBrush.color().dark(); 396 titleLines = titleBrush.color().dark();
397 } else { 397 } else {
398 titleBrush = cg.brush(QColorGroup::Background); 398 titleBrush = cg.brush(QColorGroup::Background);
399 titleLines = titleBrush.color(); 399 titleLines = titleBrush.color();
400 } 400 }
401 401
402 p->fillRect( r.x(), r.y()-th, r.width(), th, titleBrush); 402 p->fillRect( r.x(), r.y()-th, r.width(), th, titleBrush);
403 403
404 p->setPen( titleLines ); 404 p->setPen( titleLines );
405 for ( int i = r.y()-th; i < r.y(); i += 2 ) 405 for ( int i = r.y()-th; i < r.y(); i += 2 )
406 p->drawLine( r.left(), i, r.right(), i ); 406 p->drawLine( r.left(), i, r.right(), i );
407 } 407 }
408 break; 408 break;
409 case TitleText: 409 case TitleText:
410 p->drawText( r.x()+3+metric(HelpWidth,wd), r.top()-th, 410 p->drawText( r.x()+3+metric(HelpWidth,wd), r.top()-th,
411 r.width()-metric(OKWidth,wd)-metric(CloseWidth,wd), 411 r.width()-metric(OKWidth,wd)-metric(CloseWidth,wd),
412 th, QPainter::AlignVCenter, wd->caption); 412 th, QPainter::AlignVCenter, wd->caption);
413 break; 413 break;
414 } 414 }
415} 415}
416 416
417void WindowDecorationInterface::drawButton( Button b, QPainter *p, const WindowData *wd, int x, int y, int, int, QWSButton::State state ) const 417void WindowDecorationInterface::drawButton( Button b, QPainter *p, const WindowData *wd, int x, int y, int, int, QWSButton::State state ) const
418{ 418{
419 QImage *img = 0; 419 QImage *img = 0;
420 switch ( b ) { 420 switch ( b ) {
421 case OK: 421 case OK:
422 img = okImage(metric(TitleHeight,wd)); 422 img = okImage(metric(TitleHeight,wd));
423 break; 423 break;
424 case Close: 424 case Close:
425 img = closeImage(metric(TitleHeight,wd)); 425 img = closeImage(metric(TitleHeight,wd));
426 break; 426 break;
427 case Help: 427 case Help:
428 img = helpImage(metric(TitleHeight,wd)); 428 img = helpImage(metric(TitleHeight,wd));
429 break; 429 break;
430 case Maximize: 430 case Maximize:
431 img = maximizeImage(metric(TitleHeight,wd)); 431 img = maximizeImage(metric(TitleHeight,wd));
432 break; 432 break;
433 } 433 }
434 434
435 if ( img ) { 435 if ( img ) {
436 if ((state & QWSButton::MouseOver) && (state & QWSButton::Clicked)) 436 if ((state & QWSButton::MouseOver) && (state & QWSButton::Clicked))
437 p->drawImage(x+2, y+2, *img); 437 p->drawImage(x+2, y+2, *img);
438 else 438 else
439 p->drawImage(x+1, y+1, *img); 439 p->drawImage(x+1, y+1, *img);
440 } 440 }
441} 441}
442 442
443QRegion WindowDecorationInterface::mask( const WindowData *wd ) const 443QRegion WindowDecorationInterface::mask( const WindowData *wd ) const
444{ 444{
445 int th = metric(TitleHeight,wd); 445 int th = metric(TitleHeight,wd);
446 QRect rect( wd->rect ); 446 QRect rect( wd->rect );
447 QRect r(rect.left() - metric(LeftBorder,wd), 447 QRect r(rect.left() - metric(LeftBorder,wd),
448 rect.top() - th - metric(TopBorder,wd), 448 rect.top() - th - metric(TopBorder,wd),
449 rect.width() + metric(LeftBorder,wd) + metric(RightBorder,wd), 449 rect.width() + metric(LeftBorder,wd) + metric(RightBorder,wd),
450 rect.height() + th + metric(TopBorder,wd) + metric(BottomBorder,wd)); 450 rect.height() + th + metric(TopBorder,wd) + metric(BottomBorder,wd));
451 return QRegion(r) - rect; 451 return QRegion(r) - rect;
452} 452}
453 453
454class DefaultWindowDecoration : public WindowDecorationInterface 454class DefaultWindowDecoration : public WindowDecorationInterface
455{ 455{
456public: 456public:
457 DefaultWindowDecoration() : ref(0) {} 457 DefaultWindowDecoration() : ref(0) {}
458 QString name() const { 458 QString name() const {
459 return "Default"; 459 return "Default";
460 } 460 }
461 QPixmap icon() const { 461 QPixmap icon() const {
462 return QPixmap(); 462 return QPixmap();
463 } 463 }
464 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { 464 QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) {
465 *iface = 0; 465 *iface = 0;
466 if ( uuid == IID_QUnknown ) 466 if ( uuid == IID_QUnknown )
467 *iface = this; 467 *iface = this;
468 else if ( uuid == IID_WindowDecoration ) 468 else if ( uuid == IID_WindowDecoration )
469 *iface = this; 469 *iface = this;
470 470
471 if ( *iface ) 471 if ( *iface )
472 (*iface)->addRef(); 472 (*iface)->addRef();
473 return QS_OK; 473 return QS_OK;
474 } 474 }
475 Q_REFCOUNT 475 Q_REFCOUNT
476 476
477private: 477private:
478 ulong ref; 478 ulong ref;
479}; 479};
480 480
481static WindowDecorationInterface *wdiface = 0; 481static WindowDecorationInterface *wdiface = 0;
482static QLibrary *wdlib = 0; 482static QLibrary *wdlib = 0;
483static QString libname;
483 484
484//=========================================================================== 485//===========================================================================
485 486
486QPEDecoration::QPEDecoration() 487QPEDecoration::QPEDecoration()
487 : QWSDefaultDecoration() 488 : QWSDefaultDecoration()
488{ 489{
489 if ( wdlib ) { 490 init ( libname );
490 wdiface->release();
491 wdlib->unload();
492 delete wdlib;
493 wdlib = 0;
494 } else {
495 delete wdiface;
496 }
497 wdiface = new DefaultWindowDecoration;
498
499 helpFile = QString(qApp->argv()[0]) + ".html";
500 QStringList helpPath = Global::helpPath();
501 helpExists = FALSE;
502 for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !helpExists; ++it) {
503 helpExists = QFile::exists( *it + "/" + helpFile );
504 qDebug ( "Checking %s/%s for help: %d", (*it).latin1(), helpFile.latin1(),helpExists);
505 }
506 qpeManager = new QPEManager( this );
507
508 // for backward compatibility:
509 imageOk = *okImage ( 15 );
510 imageClose = *closeImage ( 15 );
511 imageHelp = *helpImage ( 15 );
512} 491}
513 492
514QPEDecoration::QPEDecoration( const QString &plugin ) 493QPEDecoration::QPEDecoration( const QString &plugin )
515 : QWSDefaultDecoration() 494 : QWSDefaultDecoration()
516{ 495{
496 init ( plugin );
497}
498
499void QPEDecoration::init ( const QString &plugin )
500{
501 libname = plugin;
502
517 if ( wdlib ) { 503 if ( wdlib ) {
518 wdiface->release(); 504 wdiface->release();
519 wdlib->unload(); 505 wdlib->unload();
520 delete wdlib; 506 delete wdlib;
521 wdlib = 0; 507 wdlib = 0;
522 } else { 508 } else {
523 delete wdiface; 509 delete wdiface;
524 } 510 }
511
525 WindowDecorationInterface *iface = 0; 512 WindowDecorationInterface *iface = 0;
526 QString path = QPEApplication::qpeDir() + "/plugins/decorations"; 513 QString path = QPEApplication::qpeDir() + "/plugins/decorations";
527 QLibrary *lib = new QLibrary( path + "/" + plugin ); 514 QLibrary *lib = new QLibrary( path + "/" + plugin );
528 if ( lib->queryInterface( IID_WindowDecoration, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 515 if ( lib->queryInterface( IID_WindowDecoration, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
529 wdiface = iface; 516 wdiface = iface;
530 wdlib = lib; 517 wdlib = lib;
531 } else { 518 } else {
532 delete lib; 519 delete lib;
533 wdiface = new DefaultWindowDecoration; 520 wdiface = new DefaultWindowDecoration;
534 } 521 }
535 522
536 helpFile = QString(qApp->argv()[0]) + ".html"; 523 helpFile = QString(qApp->argv()[0]) + ".html";
537 QStringList helpPath = Global::helpPath(); 524 QStringList helpPath = Global::helpPath();
538 helpExists = FALSE; 525 helpExists = FALSE;
539 for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !helpExists; ++it) { 526 for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !helpExists; ++it) {
540 helpExists = QFile::exists( *it + "/" + helpFile ); 527 helpExists = QFile::exists( *it + "/" + helpFile );
541 qDebug ( "Checking %s/%s for help: %d", (*it).latin1(), helpFile.latin1(),helpExists); } 528 //qDebug ( "Checking %s/%s for help: %d", (*it).latin1(), helpFile.latin1(),helpExists);
529 }
542 qpeManager = new QPEManager( this ); 530 qpeManager = new QPEManager( this );
531
532 // Qtopia 1.5 compatibility
533 imageOk = *okImage ( 15 );
534 imageClose = *closeImage ( 15 );
535 imageHelp = *helpImage ( 15 );
543} 536}
544 537
545QPEDecoration::~QPEDecoration() 538QPEDecoration::~QPEDecoration()
546{ 539{
547 delete qpeManager; 540 delete qpeManager;
548} 541}
549 542
550const char **QPEDecoration::menuPixmap() 543const char **QPEDecoration::menuPixmap()
551{ 544{
552 return (const char **)0; 545 return (const char **)0;
553} 546}
554 547
555const char **QPEDecoration::closePixmap() 548const char **QPEDecoration::closePixmap()
556{ 549{
557 return (const char **)qpe_close_xpm; 550 return (const char **)qpe_close_xpm;
558} 551}
559 552
560const char **QPEDecoration::minimizePixmap() 553const char **QPEDecoration::minimizePixmap()
561{ 554{
562 return (const char **)qpe_accept_xpm; 555 return (const char **)qpe_accept_xpm;
563} 556}
564 557
565const char **QPEDecoration::maximizePixmap() 558const char **QPEDecoration::maximizePixmap()
566{ 559{
567 return (const char **)0; 560 return (const char **)0;
568} 561}
569 562
570const char **QPEDecoration::normalizePixmap() 563const char **QPEDecoration::normalizePixmap()
571{ 564{
572 return (const char **)0; 565 return (const char **)0;
573} 566}
574 567
575int QPEDecoration::getTitleHeight( const QWidget *w ) 568int QPEDecoration::getTitleHeight( const QWidget *w )
576{ 569{
577 WindowDecorationInterface::WindowData wd; 570 WindowDecorationInterface::WindowData wd;
578 windowData( w, wd ); 571 windowData( w, wd );
579 return wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); 572 return wdiface->metric(WindowDecorationInterface::TitleHeight,&wd);
580} 573}
581 574
582/* 575/*
583 If rect is empty, no frame is added. (a hack, really) 576 If rect is empty, no frame is added. (a hack, really)
584*/ 577*/
585QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecoration::Region type) 578QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecoration::Region type)
586{ 579{
587 qpeManager->updateActive(); 580 qpeManager->updateActive();
588 581
589 WindowDecorationInterface::WindowData wd; 582 WindowDecorationInterface::WindowData wd;
590 windowData( widget, wd ); 583 windowData( widget, wd );
591 wd.rect = rect; 584 wd.rect = rect;
592 585
593 int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); 586 int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd);
594 int okWidth = wdiface->metric(WindowDecorationInterface::OKWidth,&wd); 587 int okWidth = wdiface->metric(WindowDecorationInterface::OKWidth,&wd);
595 int closeWidth = wdiface->metric(WindowDecorationInterface::CloseWidth,&wd); 588 int closeWidth = wdiface->metric(WindowDecorationInterface::CloseWidth,&wd);
596 int helpWidth = wdiface->metric(WindowDecorationInterface::HelpWidth,&wd); 589 int helpWidth = wdiface->metric(WindowDecorationInterface::HelpWidth,&wd);
597 int grab = wdiface->metric(WindowDecorationInterface::CornerGrabSize,&wd); 590 int grab = wdiface->metric(WindowDecorationInterface::CornerGrabSize,&wd);
598 591
599 QRegion region; 592 QRegion region;
600 593
601 switch ((int)type) { 594 switch ((int)type) {
602 case Menu: 595 case Menu:
603 break; 596 break;
604 case Maximize: 597 case Maximize:
605 if ( !widget->inherits( "QDialog" ) && qApp->desktop()->width() > 350 ) { 598 if ( !widget->inherits( "QDialog" ) && qApp->desktop()->width() > 350 ) {
606 int maximizeWidth = wdiface->metric(WindowDecorationInterface::MaximizeWidth,&wd); 599 int maximizeWidth = wdiface->metric(WindowDecorationInterface::MaximizeWidth,&wd);
607 int left = rect.right() - maximizeWidth - closeWidth; 600 int left = rect.right() - maximizeWidth - closeWidth;
608 if ( ((HackWidget *)widget)->needsOk() ) 601 if ( ((HackWidget *)widget)->needsOk() )
609 left -= okWidth; 602 left -= okWidth;
610 QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); 603 QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight);
611 region = r; 604 region = r;
612 } 605 }
613 break; 606 break;
614 case Minimize: 607 case Minimize:
615 if ( ((HackWidget *)widget)->needsOk() ) { 608 if ( ((HackWidget *)widget)->needsOk() ) {
616 QRect r(rect.right() - okWidth, 609 QRect r(rect.right() - okWidth,
617 rect.top() - titleHeight, okWidth, titleHeight); 610 rect.top() - titleHeight, okWidth, titleHeight);
618 if (r.left() > rect.left() + titleHeight) 611 if (r.left() > rect.left() + titleHeight)
619 region = r; 612 region = r;
620 } 613 }
621 break; 614 break;
622 case Close: 615 case Close:
623 { 616 {
624 int left = rect.right() - closeWidth; 617 int left = rect.right() - closeWidth;
625 if ( ((HackWidget *)widget)->needsOk() ) 618 if ( ((HackWidget *)widget)->needsOk() )
626 left -= okWidth; 619 left -= okWidth;
627 QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); 620 QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight);
628 region = r; 621 region = r;
629 } 622 }
630 break; 623 break;
631 case Title: 624 case Title:
632 if ( !widget->isMaximized() ) { 625 if ( !widget->isMaximized() ) {
633 int width = rect.width() - helpWidth - closeWidth; 626 int width = rect.width() - helpWidth - closeWidth;
634 if ( ((HackWidget *)widget)->needsOk() ) 627 if ( ((HackWidget *)widget)->needsOk() )
635 width -= okWidth; 628 width -= okWidth;
636 QRect r(rect.left()+helpWidth, rect.top() - titleHeight, 629 QRect r(rect.left()+helpWidth, rect.top() - titleHeight,
637 width, titleHeight); 630 width, titleHeight);
638 if (r.width() > 0) 631 if (r.width() > 0)
639 region = r; 632 region = r;
640 } 633 }
641 break; 634 break;
642 case Help: 635 case Help:
643 if ( helpExists || widget->testWFlags(Qt::WStyle_ContextHelp) ) { 636 if ( helpExists || widget->testWFlags(Qt::WStyle_ContextHelp) ) {
644 QRect r(rect.left(), rect.top() - titleHeight, 637 QRect r(rect.left(), rect.top() - titleHeight,
645 helpWidth, titleHeight); 638 helpWidth, titleHeight);
646 region = r; 639 region = r;
647 } 640 }
648 break; 641 break;
649 case Top: 642 case Top:
650 if ( !widget->isMaximized() ) { 643 if ( !widget->isMaximized() ) {
651 QRegion m = wdiface->mask(&wd); 644 QRegion m = wdiface->mask(&wd);
652 QRect br = m.boundingRect(); 645 QRect br = m.boundingRect();
653 int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); 646 int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd);
654 region = m & QRect( br.left()+grab, br.top(), 647 region = m & QRect( br.left()+grab, br.top(),
655 br.width()-2*grab, b ); 648 br.width()-2*grab, b );
656 } 649 }
657 break; 650 break;
658 case Left: 651 case Left:
659 if ( !widget->isMaximized() ) { 652 if ( !widget->isMaximized() ) {
660 QRegion m = wdiface->mask(&wd); 653 QRegion m = wdiface->mask(&wd);
661 QRect br = m.boundingRect(); 654 QRect br = m.boundingRect();
662 int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); 655 int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd);
663 region = m & QRect( br.left(), br.top()+grab, 656 region = m & QRect( br.left(), br.top()+grab,
664 b, br.height()-2*grab ); 657 b, br.height()-2*grab );
665 } 658 }
666 break; 659 break;
667 case Right: 660 case Right:
668 if ( !widget->isMaximized() ) { 661 if ( !widget->isMaximized() ) {
669 QRegion m = wdiface->mask(&wd); 662 QRegion m = wdiface->mask(&wd);
670 QRect br = m.boundingRect(); 663 QRect br = m.boundingRect();
671 int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); 664 int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd);
672 region = m & QRect( rect.right(), br.top()+grab, 665 region = m & QRect( rect.right(), br.top()+grab,
673 b, br.height()-2*grab ); 666 b, br.height()-2*grab );
674 } 667 }
675 break; 668 break;
676 case Bottom: 669 case Bottom:
677 if ( !widget->isMaximized() ) { 670 if ( !widget->isMaximized() ) {
678 QRegion m = wdiface->mask(&wd); 671 QRegion m = wdiface->mask(&wd);
679 QRect br = m.boundingRect(); 672 QRect br = m.boundingRect();
680 int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd); 673 int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd);
681 region = m & QRect( br.left()+grab, rect.bottom(), 674 region = m & QRect( br.left()+grab, rect.bottom(),
682 br.width()-2*grab, b ); 675 br.width()-2*grab, b );
683 } 676 }
684 break; 677 break;
685 case TopLeft: 678 case TopLeft:
686 if ( !widget->isMaximized() ) { 679 if ( !widget->isMaximized() ) {
687 QRegion m = wdiface->mask(&wd); 680 QRegion m = wdiface->mask(&wd);
688 QRect br = m.boundingRect(); 681 QRect br = m.boundingRect();
689 int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); 682 int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd);
690 int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); 683 int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd);
691 QRegion crgn( br.left(), br.top(), grab, tb ); 684 QRegion crgn( br.left(), br.top(), grab, tb );
692 crgn |= QRect( br.left(), br.top(), lb, grab ); 685 crgn |= QRect( br.left(), br.top(), lb, grab );
693 region = m & crgn; 686 region = m & crgn;
694 } 687 }
695 break; 688 break;
696 case TopRight: 689 case TopRight:
697 if ( !widget->isMaximized() ) { 690 if ( !widget->isMaximized() ) {
698 QRegion m = wdiface->mask(&wd); 691 QRegion m = wdiface->mask(&wd);
699 QRect br = m.boundingRect(); 692 QRect br = m.boundingRect();
700 int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); 693 int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd);
701 int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); 694 int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd);
702 QRegion crgn( br.right()-grab, br.top(), grab, tb ); 695 QRegion crgn( br.right()-grab, br.top(), grab, tb );
703 crgn |= QRect( br.right()-rb, br.top(), rb, grab ); 696 crgn |= QRect( br.right()-rb, br.top(), rb, grab );
704 region = m & crgn; 697 region = m & crgn;
705 } 698 }
706 break; 699 break;
707 case BottomLeft: 700 case BottomLeft:
708 if ( !widget->isMaximized() ) { 701 if ( !widget->isMaximized() ) {
709 QRegion m = wdiface->mask(&wd); 702 QRegion m = wdiface->mask(&wd);
710 QRect br = m.boundingRect(); 703 QRect br = m.boundingRect();
711 region = m & QRect( br.left(), br.bottom()-grab, grab, grab ); 704 region = m & QRect( br.left(), br.bottom()-grab, grab, grab );
712 } 705 }
713 break; 706 break;
714 case BottomRight: 707 case BottomRight:
715 if ( !widget->isMaximized() ) { 708 if ( !widget->isMaximized() ) {
716 QRegion m = wdiface->mask(&wd); 709 QRegion m = wdiface->mask(&wd);
717 QRect br = m.boundingRect(); 710 QRect br = m.boundingRect();
718 region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab ); 711 region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab );
719 } 712 }
720 break; 713 break;
721 case All: 714 case All:
722 if ( widget->isMaximized() ) 715 if ( widget->isMaximized() )
723 region = QWSDefaultDecoration::region(widget, rect, type); 716 region = QWSDefaultDecoration::region(widget, rect, type);
724 else 717 else
725 region = wdiface->mask(&wd) - rect; 718 region = wdiface->mask(&wd) - rect;
726 break; 719 break;
727 default: 720 default:
728 region = QWSDefaultDecoration::region(widget, rect, type); 721 region = QWSDefaultDecoration::region(widget, rect, type);
729 break; 722 break;
730 } 723 }
731 724
732 return region; 725 return region;
733} 726}
734 727
diff --git a/library/qpedecoration_qws.h b/library/qpedecoration_qws.h
index 691c6f6..6628ba2 100644
--- a/library/qpedecoration_qws.h
+++ b/library/qpedecoration_qws.h
@@ -1,111 +1,113 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
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_DECORATION_QWS_H__ 20#ifndef QPE_DECORATION_QWS_H__
21#define QPE_DECORATION_QWS_H__ 21#define QPE_DECORATION_QWS_H__
22 22
23 23
24#ifdef QWS 24#ifdef QWS
25#include <qwsdefaultdecoration_qws.h> 25#include <qwsdefaultdecoration_qws.h>
26#include <qimage.h> 26#include <qimage.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qguardedptr.h> 28#include <qguardedptr.h>
29#include "windowdecorationinterface.h" 29#include "windowdecorationinterface.h"
30 30
31 31
32#ifndef QT_NO_QWS_QPE_WM_STYLE 32#ifndef QT_NO_QWS_QPE_WM_STYLE
33 33
34class QPEManager; 34class QPEManager;
35class QTimer; 35class QTimer;
36 36
37class QPEDecoration : public QWSDefaultDecoration 37class QPEDecoration : public QWSDefaultDecoration
38{ 38{
39public: 39public:
40 QPEDecoration(); 40 QPEDecoration();
41 QPEDecoration( const QString &plugin ); 41 QPEDecoration( const QString &plugin );
42 virtual ~QPEDecoration(); 42 virtual ~QPEDecoration();
43 43
44 virtual QRegion region(const QWidget *, const QRect &rect, Region); 44 virtual QRegion region(const QWidget *, const QRect &rect, Region);
45 virtual void paint(QPainter *, const QWidget *); 45 virtual void paint(QPainter *, const QWidget *);
46 virtual void paintButton(QPainter *, const QWidget *, Region, int state); 46 virtual void paintButton(QPainter *, const QWidget *, Region, int state);
47 47
48 void maximize( QWidget * ); 48 void maximize( QWidget * );
49 void minimize( QWidget * ); 49 void minimize( QWidget * );
50 virtual void help( QWidget * ); 50 virtual void help( QWidget * );
51 51
52 enum QPERegion { Help=LastRegion+1 }; 52 enum QPERegion { Help=LastRegion+1 };
53 void buttonClicked( QPERegion r ); 53 void buttonClicked( QPERegion r );
54 54
55protected: 55protected:
56 virtual int getTitleHeight(const QWidget *); 56 virtual int getTitleHeight(const QWidget *);
57 virtual const char **menuPixmap(); 57 virtual const char **menuPixmap();
58 virtual const char **closePixmap(); 58 virtual const char **closePixmap();
59 virtual const char **minimizePixmap(); 59 virtual const char **minimizePixmap();
60 virtual const char **maximizePixmap(); 60 virtual const char **maximizePixmap();
61 virtual const char **normalizePixmap(); 61 virtual const char **normalizePixmap();
62 62
63private: 63private:
64 void windowData( const QWidget *w, WindowDecorationInterface::WindowData &wd ) const; 64 void windowData( const QWidget *w, WindowDecorationInterface::WindowData &wd ) const;
65 65
66 void init ( const QString & );
67
66protected: 68protected:
67 QImage imageOk; 69 QImage imageOk;
68 QImage imageClose; 70 QImage imageClose;
69 QImage imageHelp; 71 QImage imageHelp;
70 QString helpFile; 72 QString helpFile;
71 bool helpExists; 73 bool helpExists;
72 QPEManager *qpeManager; 74 QPEManager *qpeManager;
73}; 75};
74 76
75 77
76class QPEManager : public QObject 78class QPEManager : public QObject
77{ 79{
78 Q_OBJECT 80 Q_OBJECT
79 friend class QPEDecoration; 81 friend class QPEDecoration;
80public: 82public:
81 QPEManager( QPEDecoration *d, QObject *parent=0 ); 83 QPEManager( QPEDecoration *d, QObject *parent=0 );
82 84
83 void updateActive(); 85 void updateActive();
84 const QWidget *activeWidget() const { return (const QWidget *)active; } 86 const QWidget *activeWidget() const { return (const QWidget *)active; }
85 const QWidget *whatsThisWidget() const { return (const QWidget *)whatsThis; } 87 const QWidget *whatsThisWidget() const { return (const QWidget *)whatsThis; }
86 88
87protected: 89protected:
88 int pointInQpeRegion( QWidget *w, const QPoint &p ); 90 int pointInQpeRegion( QWidget *w, const QPoint &p );
89 virtual bool eventFilter( QObject *, QEvent * ); 91 virtual bool eventFilter( QObject *, QEvent * );
90 void drawButton( QWidget *w, QPEDecoration::QPERegion r, int state ); 92 void drawButton( QWidget *w, QPEDecoration::QPERegion r, int state );
91 void drawTitle( QWidget *w ); 93 void drawTitle( QWidget *w );
92 94
93protected slots: 95protected slots:
94 void whatsThisTimeout(); 96 void whatsThisTimeout();
95 97
96protected: 98protected:
97 QPEDecoration *decoration; 99 QPEDecoration *decoration;
98 QGuardedPtr<QWidget> active; 100 QGuardedPtr<QWidget> active;
99 int helpState; 101 int helpState;
100 QTime pressTime; 102 QTime pressTime;
101 QTimer *wtTimer; 103 QTimer *wtTimer;
102 bool inWhatsThis; 104 bool inWhatsThis;
103 QGuardedPtr<QWidget> whatsThis; 105 QGuardedPtr<QWidget> whatsThis;
104}; 106};
105 107
106 108
107#endif // QT_NO_QWS_QPE_WM_STYLE 109#endif // QT_NO_QWS_QPE_WM_STYLE
108 110
109 111
110#endif // QPE_DECORATION_QWS_H__ 112#endif // QPE_DECORATION_QWS_H__
111#endif // QWS 113#endif // QWS