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
@@ -870,159 +870,162 @@ int QPEApplication::defaultRotation()
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 }
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
@@ -451,124 +451,117 @@ QRegion WindowDecorationInterface::mask( const WindowData *wd ) const
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
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
@@ -34,64 +34,66 @@
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;