author | chicken <chicken> | 2004-03-01 16:12:01 (UTC) |
---|---|---|
committer | chicken <chicken> | 2004-03-01 16:12:01 (UTC) |
commit | 9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38 (patch) (unidiff) | |
tree | 62527c430eb2f6c62ac01c11cdfea06494101a0e | |
parent | 931c55406a043195712955c732a875e17899df90 (diff) | |
download | opie-9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38.zip opie-9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38.tar.gz opie-9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38.tar.bz2 |
fix includes
28 files changed, 1 insertions, 110 deletions
diff --git a/core/applets/batteryapplet/battery.cpp b/core/applets/batteryapplet/battery.cpp index fed9b34..b2cef55 100644 --- a/core/applets/batteryapplet/battery.cpp +++ b/core/applets/batteryapplet/battery.cpp | |||
@@ -1,183 +1,182 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of 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 | #include "battery.h" | 20 | #include "battery.h" |
21 | #include "batterystatus.h" | 21 | #include "batterystatus.h" |
22 | 22 | ||
23 | /* OPIE */ | 23 | /* OPIE */ |
24 | #include <opie2/otaskbarapplet.h> | 24 | #include <opie2/otaskbarapplet.h> |
25 | #include <qpe/applnk.h> | 25 | #include <qpe/applnk.h> |
26 | #include <qpe/config.h> | 26 | #include <qpe/config.h> |
27 | #include <qpe/power.h> | 27 | #include <qpe/power.h> |
28 | #include <qpe/qpeapplication.h> | ||
29 | 28 | ||
30 | /* QT */ | 29 | /* QT */ |
31 | #include <qpainter.h> | 30 | #include <qpainter.h> |
32 | #include <qtimer.h> | 31 | #include <qtimer.h> |
33 | 32 | ||
34 | 33 | ||
35 | BatteryMeter::BatteryMeter( QWidget *parent ) | 34 | BatteryMeter::BatteryMeter( QWidget *parent ) |
36 | : QWidget( parent ), charging(false) | 35 | : QWidget( parent ), charging(false) |
37 | { | 36 | { |
38 | ps = new PowerStatus; | 37 | ps = new PowerStatus; |
39 | startTimer( 10000 ); | 38 | startTimer( 10000 ); |
40 | 39 | ||
41 | setFixedWidth( QMAX(AppLnk::smallIconSize()*3/4, 6) ); | 40 | setFixedWidth( QMAX(AppLnk::smallIconSize()*3/4, 6) ); |
42 | setFixedHeight( AppLnk::smallIconSize() ); | 41 | setFixedHeight( AppLnk::smallIconSize() ); |
43 | 42 | ||
44 | chargeTimer = new QTimer( this ); | 43 | chargeTimer = new QTimer( this ); |
45 | connect( chargeTimer, SIGNAL(timeout()), this, SLOT(chargeTimeout()) ); | 44 | connect( chargeTimer, SIGNAL(timeout()), this, SLOT(chargeTimeout()) ); |
46 | timerEvent(0); | 45 | timerEvent(0); |
47 | QPEApplication::setStylusOperation( this, QPEApplication::RightOnHold ); | 46 | QPEApplication::setStylusOperation( this, QPEApplication::RightOnHold ); |
48 | Config c( "qpe" ); | 47 | Config c( "qpe" ); |
49 | c.setGroup( "Battery" ); | 48 | c.setGroup( "Battery" ); |
50 | style = c.readNumEntry( "Style", 0 ); | 49 | style = c.readNumEntry( "Style", 0 ); |
51 | } | 50 | } |
52 | 51 | ||
53 | BatteryMeter::~BatteryMeter() | 52 | BatteryMeter::~BatteryMeter() |
54 | { | 53 | { |
55 | delete ps; | 54 | delete ps; |
56 | } | 55 | } |
57 | 56 | ||
58 | QSize BatteryMeter::sizeHint() const | 57 | QSize BatteryMeter::sizeHint() const |
59 | { | 58 | { |
60 | return QSize(QMAX(AppLnk::smallIconSize()*3/4, 6), height() ); | 59 | return QSize(QMAX(AppLnk::smallIconSize()*3/4, 6), height() ); |
61 | } | 60 | } |
62 | 61 | ||
63 | void BatteryMeter::mousePressEvent( QMouseEvent* e ) | 62 | void BatteryMeter::mousePressEvent( QMouseEvent* e ) |
64 | { | 63 | { |
65 | if ( e->button() == RightButton ) | 64 | if ( e->button() == RightButton ) |
66 | { | 65 | { |
67 | style = 1-style; | 66 | style = 1-style; |
68 | Config c( "qpe" ); | 67 | Config c( "qpe" ); |
69 | c.setGroup( "Battery" ); | 68 | c.setGroup( "Battery" ); |
70 | c.writeEntry( "Style", style ); | 69 | c.writeEntry( "Style", style ); |
71 | repaint( true ); | 70 | repaint( true ); |
72 | } | 71 | } |
73 | QWidget::mousePressEvent( e ); | 72 | QWidget::mousePressEvent( e ); |
74 | } | 73 | } |
75 | 74 | ||
76 | void BatteryMeter::mouseReleaseEvent( QMouseEvent* /*e*/ ) | 75 | void BatteryMeter::mouseReleaseEvent( QMouseEvent* /*e*/ ) |
77 | { | 76 | { |
78 | if ( batteryView && batteryView->isVisible() ) { | 77 | if ( batteryView && batteryView->isVisible() ) { |
79 | delete (QWidget *) batteryView; | 78 | delete (QWidget *) batteryView; |
80 | } else { | 79 | } else { |
81 | if ( !batteryView ) batteryView = new BatteryStatus( ps ); | 80 | if ( !batteryView ) batteryView = new BatteryStatus( ps ); |
82 | QPEApplication::showWidget( batteryView ); | 81 | QPEApplication::showWidget( batteryView ); |
83 | batteryView->raise(); | 82 | batteryView->raise(); |
84 | batteryView->show(); | 83 | batteryView->show(); |
85 | } | 84 | } |
86 | } | 85 | } |
87 | 86 | ||
88 | void BatteryMeter::timerEvent( QTimerEvent * ) | 87 | void BatteryMeter::timerEvent( QTimerEvent * ) |
89 | { | 88 | { |
90 | PowerStatus prev = *ps; | 89 | PowerStatus prev = *ps; |
91 | 90 | ||
92 | *ps = PowerStatusManager::readStatus(); | 91 | *ps = PowerStatusManager::readStatus(); |
93 | 92 | ||
94 | if ( prev != *ps ) { | 93 | if ( prev != *ps ) { |
95 | percent = ps->batteryPercentRemaining(); | 94 | percent = ps->batteryPercentRemaining(); |
96 | if ( !charging && ps->batteryStatus() == PowerStatus::Charging ) { | 95 | if ( !charging && ps->batteryStatus() == PowerStatus::Charging ) { |
97 | percent = 0; | 96 | percent = 0; |
98 | charging = true; | 97 | charging = true; |
99 | chargeTimer->start( 500 ); | 98 | chargeTimer->start( 500 ); |
100 | } else if ( charging && ps->batteryStatus() != PowerStatus::Charging ) { | 99 | } else if ( charging && ps->batteryStatus() != PowerStatus::Charging ) { |
101 | charging = false; | 100 | charging = false; |
102 | chargeTimer->stop(); | 101 | chargeTimer->stop(); |
103 | if ( batteryView ) | 102 | if ( batteryView ) |
104 | batteryView->updatePercent( percent ); | 103 | batteryView->updatePercent( percent ); |
105 | } | 104 | } |
106 | repaint( style != 0 ); | 105 | repaint( style != 0 ); |
107 | if ( batteryView ) | 106 | if ( batteryView ) |
108 | batteryView->repaint(); | 107 | batteryView->repaint(); |
109 | } | 108 | } |
110 | } | 109 | } |
111 | 110 | ||
112 | void BatteryMeter::chargeTimeout() | 111 | void BatteryMeter::chargeTimeout() |
113 | { | 112 | { |
114 | percent += 20; | 113 | percent += 20; |
115 | if ( percent > 100 ) | 114 | if ( percent > 100 ) |
116 | percent = 0; | 115 | percent = 0; |
117 | 116 | ||
118 | repaint(FALSE); | 117 | repaint(FALSE); |
119 | if ( batteryView ) | 118 | if ( batteryView ) |
120 | batteryView->updatePercent( percent ); | 119 | batteryView->updatePercent( percent ); |
121 | } | 120 | } |
122 | 121 | ||
123 | void BatteryMeter::paintEvent( QPaintEvent* ) | 122 | void BatteryMeter::paintEvent( QPaintEvent* ) |
124 | { | 123 | { |
125 | 124 | ||
126 | if ( style == 1 ) | 125 | if ( style == 1 ) |
127 | { | 126 | { |
128 | QPainter p(this); | 127 | QPainter p(this); |
129 | QFont f( "Fixed", AppLnk::smallIconSize()/2 ); | 128 | QFont f( "Fixed", AppLnk::smallIconSize()/2 ); |
130 | QFontMetrics fm( f ); | 129 | QFontMetrics fm( f ); |
131 | p.setFont( f ); | 130 | p.setFont( f ); |
132 | p.drawText( 0, height()/2, QString::number( percent ) ); | 131 | p.drawText( 0, height()/2, QString::number( percent ) ); |
133 | p.drawText( width()/4, height(), "%" ); | 132 | p.drawText( width()/4, height(), "%" ); |
134 | return; | 133 | return; |
135 | } | 134 | } |
136 | 135 | ||
137 | QPainter p(this); | 136 | QPainter p(this); |
138 | QColor color; | 137 | QColor color; |
139 | QColor g = gray.light( 160 ); | 138 | QColor g = gray.light( 160 ); |
140 | switch ( ps->acStatus() ) | 139 | switch ( ps->acStatus() ) |
141 | { | 140 | { |
142 | case PowerStatus::Offline: color = blue.light( 150 ); break; | 141 | case PowerStatus::Offline: color = blue.light( 150 ); break; |
143 | case PowerStatus::Online: color = green.dark( 130 ).light( 180 ); break; | 142 | case PowerStatus::Online: color = green.dark( 130 ).light( 180 ); break; |
144 | default: color = red.light( 160 ); | 143 | default: color = red.light( 160 ); |
145 | } | 144 | } |
146 | 145 | ||
147 | int w = height() / 2; | 146 | int w = height() / 2; |
148 | if ( !(w%2) ) w--; // should have an odd value to get a real middle line | 147 | if ( !(w%2) ) w--; // should have an odd value to get a real middle line |
149 | int h = height() - 4; | 148 | int h = height() - 4; |
150 | int pix = (percent * h) / 100; | 149 | int pix = (percent * h) / 100; |
151 | int y2 = height() -2; | 150 | int y2 = height() -2; |
152 | int y = y2 - pix; | 151 | int y = y2 - pix; |
153 | int x1 = (width() - w ) / 2; | 152 | int x1 = (width() - w ) / 2; |
154 | 153 | ||
155 | p.setPen(QColor(80,80,80)); | 154 | p.setPen(QColor(80,80,80)); |
156 | p.drawLine(x1+w/4,0,x1+w/4+w/2+1,0); // header | 155 | p.drawLine(x1+w/4,0,x1+w/4+w/2+1,0); // header |
157 | p.drawRect(x1,1,w,height()-1); // corpus | 156 | p.drawRect(x1,1,w,height()-1); // corpus |
158 | p.setBrush(color); | 157 | p.setBrush(color); |
159 | 158 | ||
160 | //int extra = ((percent * h) % 100)/(100/4); | 159 | //int extra = ((percent * h) % 100)/(100/4); |
161 | 160 | ||
162 | int middle = w/2; | 161 | int middle = w/2; |
163 | for ( int i = 0; i < middle; i++ ) | 162 | for ( int i = 0; i < middle; i++ ) |
164 | { | 163 | { |
165 | p.setPen( gray.dark( 100+i*20 ) ); | 164 | p.setPen( gray.dark( 100+i*20 ) ); |
166 | p.drawLine( x1+middle-i, 2, x1+middle-i, y-1 ); | 165 | p.drawLine( x1+middle-i, 2, x1+middle-i, y-1 ); |
167 | p.drawLine( x1+middle+i, 2, x1+middle+i, y-1 ); | 166 | p.drawLine( x1+middle+i, 2, x1+middle+i, y-1 ); |
168 | p.setPen( color.dark( 100+i*20 ) ); | 167 | p.setPen( color.dark( 100+i*20 ) ); |
169 | p.drawLine( x1+middle-i, y, x1+middle-i, y2 ); | 168 | p.drawLine( x1+middle-i, y, x1+middle-i, y2 ); |
170 | p.drawLine( x1+middle+i, y, x1+middle+i, y2 ); | 169 | p.drawLine( x1+middle+i, y, x1+middle+i, y2 ); |
171 | } | 170 | } |
172 | } | 171 | } |
173 | 172 | ||
174 | int BatteryMeter::position() | 173 | int BatteryMeter::position() |
175 | { | 174 | { |
176 | return 8; | 175 | return 8; |
177 | } | 176 | } |
178 | 177 | ||
179 | Q_EXPORT_INTERFACE() | 178 | Q_EXPORT_INTERFACE() |
180 | { | 179 | { |
181 | Q_CREATE_INSTANCE( OTaskbarAppletWrapper<BatteryMeter> ); | 180 | Q_CREATE_INSTANCE( OTaskbarAppletWrapper<BatteryMeter> ); |
182 | } | 181 | } |
183 | 182 | ||
diff --git a/core/applets/batteryapplet/batterystatus.cpp b/core/applets/batteryapplet/batterystatus.cpp index b9ca7b5..ea11495 100644 --- a/core/applets/batteryapplet/batterystatus.cpp +++ b/core/applets/batteryapplet/batterystatus.cpp | |||
@@ -1,253 +1,251 @@ | |||
1 | 1 | ||
2 | #include "batterystatus.h" | 2 | #include "batterystatus.h" |
3 | 3 | ||
4 | /* OPIE */ | 4 | /* OPIE */ |
5 | #include <opie2/odevice.h> | 5 | #include <opie2/odevice.h> |
6 | #include <qpe/power.h> | 6 | #include <qpe/power.h> |
7 | 7 | ||
8 | /* QT */ | 8 | /* QT */ |
9 | #include <qpainter.h> | ||
10 | #include <qpushbutton.h> | 9 | #include <qpushbutton.h> |
11 | #include <qdrawutil.h> | 10 | #include <qdrawutil.h> |
12 | #include <qfile.h> | 11 | #include <qfile.h> |
13 | #include <qlayout.h> | 12 | #include <qlayout.h> |
14 | #include <qtextstream.h> | 13 | #include <qtextstream.h> |
15 | #include <qapplication.h> | ||
16 | #include <qmessagebox.h> | 14 | #include <qmessagebox.h> |
17 | 15 | ||
18 | using namespace Opie; | 16 | using namespace Opie; |
19 | 17 | ||
20 | BatteryStatus::BatteryStatus( const PowerStatus *p, QWidget *parent ) | 18 | BatteryStatus::BatteryStatus( const PowerStatus *p, QWidget *parent ) |
21 | : QWidget( parent, 0, WDestructiveClose), ps(p), bat2(false) { | 19 | : QWidget( parent, 0, WDestructiveClose), ps(p), bat2(false) { |
22 | setCaption( tr("Battery status") ); | 20 | setCaption( tr("Battery status") ); |
23 | setMinimumSize( 150, 200 ); | 21 | setMinimumSize( 150, 200 ); |
24 | 22 | ||
25 | QPushButton *pb = new QPushButton( tr("Close"), this ); | 23 | QPushButton *pb = new QPushButton( tr("Close"), this ); |
26 | QVBoxLayout *layout = new QVBoxLayout ( this ); | 24 | QVBoxLayout *layout = new QVBoxLayout ( this ); |
27 | 25 | ||
28 | jackPercent = 0; | 26 | jackPercent = 0; |
29 | 27 | ||
30 | pb->setMaximumSize( 120, 40 ); | 28 | pb->setMaximumSize( 120, 40 ); |
31 | 29 | ||
32 | pb->show(); | 30 | pb->show(); |
33 | 31 | ||
34 | layout->addStretch(); | 32 | layout->addStretch(); |
35 | layout->addWidget( pb ); | 33 | layout->addWidget( pb ); |
36 | 34 | ||
37 | if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { | 35 | if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { |
38 | getProcApmStatusIpaq(); | 36 | getProcApmStatusIpaq(); |
39 | } | 37 | } |
40 | connect( pb, SIGNAL( clicked() ), this, SLOT( close() ) ); | 38 | connect( pb, SIGNAL( clicked() ), this, SLOT( close() ) ); |
41 | percent = ps->batteryPercentRemaining(); | 39 | percent = ps->batteryPercentRemaining(); |
42 | show(); | 40 | show(); |
43 | } | 41 | } |
44 | 42 | ||
45 | BatteryStatus::~BatteryStatus() | 43 | BatteryStatus::~BatteryStatus() |
46 | { | 44 | { |
47 | } | 45 | } |
48 | 46 | ||
49 | /* | 47 | /* |
50 | * Make use of the advanced apm interface of the ipaq | 48 | * Make use of the advanced apm interface of the ipaq |
51 | */ | 49 | */ |
52 | bool BatteryStatus::getProcApmStatusIpaq() { | 50 | bool BatteryStatus::getProcApmStatusIpaq() { |
53 | 51 | ||
54 | bat2 = false; | 52 | bat2 = false; |
55 | 53 | ||
56 | QFile procApmIpaq("/proc/hal/battery"); | 54 | QFile procApmIpaq("/proc/hal/battery"); |
57 | 55 | ||
58 | if (procApmIpaq.open(IO_ReadOnly) ) { | 56 | if (procApmIpaq.open(IO_ReadOnly) ) { |
59 | QStringList list; | 57 | QStringList list; |
60 | // since it is /proc we _must_ use QTextStream | 58 | // since it is /proc we _must_ use QTextStream |
61 | QTextStream stream ( &procApmIpaq); | 59 | QTextStream stream ( &procApmIpaq); |
62 | QString streamIn; | 60 | QString streamIn; |
63 | streamIn = stream.read(); | 61 | streamIn = stream.read(); |
64 | list = QStringList::split("\n", streamIn); | 62 | list = QStringList::split("\n", streamIn); |
65 | 63 | ||
66 | for(QStringList::Iterator line=list.begin(); line!=list.end(); line++) { | 64 | for(QStringList::Iterator line=list.begin(); line!=list.end(); line++) { |
67 | // not nice, need a rewrite later | 65 | // not nice, need a rewrite later |
68 | if( (*line).startsWith(" Percentage") ){ | 66 | if( (*line).startsWith(" Percentage") ){ |
69 | if (bat2 == true) { | 67 | if (bat2 == true) { |
70 | perc2 = (*line).mid(((*line).find('('))+1,(*line).find(')')-(*line).find('(')-2); | 68 | perc2 = (*line).mid(((*line).find('('))+1,(*line).find(')')-(*line).find('(')-2); |
71 | } else { | 69 | } else { |
72 | perc1 = (*line).mid(((*line).find('('))+1,(*line).find(')')-(*line).find('(')-2); | 70 | perc1 = (*line).mid(((*line).find('('))+1,(*line).find(')')-(*line).find('(')-2); |
73 | } | 71 | } |
74 | }else if( (*line).startsWith(" Life") ){ | 72 | }else if( (*line).startsWith(" Life") ){ |
75 | if (bat2 == true) { | 73 | if (bat2 == true) { |
76 | sec2 = (*line).mid(((*line).find(':')+2), 5 ); | 74 | sec2 = (*line).mid(((*line).find(':')+2), 5 ); |
77 | } else { | 75 | } else { |
78 | sec1 = (*line).mid(((*line).find(':')+2), 5 ); | 76 | sec1 = (*line).mid(((*line).find(':')+2), 5 ); |
79 | } | 77 | } |
80 | }else if( (*line).startsWith("Battery #1") ){ | 78 | }else if( (*line).startsWith("Battery #1") ){ |
81 | bat2 = true; | 79 | bat2 = true; |
82 | }else if( (*line).startsWith(" Status") ){ | 80 | }else if( (*line).startsWith(" Status") ){ |
83 | if (bat2 == true) { | 81 | if (bat2 == true) { |
84 | jackStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); | 82 | jackStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); |
85 | } else { | 83 | } else { |
86 | ipaqStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); | 84 | ipaqStatus = (*line).mid((*line).find('(')+1, (*line).find(')')-(*line).find('(')-1); |
87 | } | 85 | } |
88 | }else if( (*line).startsWith(" Chemistry") ) { | 86 | }else if( (*line).startsWith(" Chemistry") ) { |
89 | if (bat2 == true) { | 87 | if (bat2 == true) { |
90 | jackChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); | 88 | jackChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); |
91 | } else { | 89 | } else { |
92 | ipaqChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); | 90 | ipaqChem = (*line).mid((*line).find('('), (*line).find(')')-(*line).find('(')+1); |
93 | } | 91 | } |
94 | } | 92 | } |
95 | } | 93 | } |
96 | } else { | 94 | } else { |
97 | QMessageBox::warning(this, tr("Failure"),tr("could not open file")); | 95 | QMessageBox::warning(this, tr("Failure"),tr("could not open file")); |
98 | } | 96 | } |
99 | 97 | ||
100 | procApmIpaq.close(); | 98 | procApmIpaq.close(); |
101 | 99 | ||
102 | jackPercent = perc2.toInt(); | 100 | jackPercent = perc2.toInt(); |
103 | ipaqPercent = perc1.toInt(); | 101 | ipaqPercent = perc1.toInt(); |
104 | 102 | ||
105 | if (perc2.isEmpty()) { | 103 | if (perc2.isEmpty()) { |
106 | perc2 = tr("no data"); | 104 | perc2 = tr("no data"); |
107 | } else { | 105 | } else { |
108 | perc2 += " %"; | 106 | perc2 += " %"; |
109 | } | 107 | } |
110 | 108 | ||
111 | 109 | ||
112 | if (sec2 == "0" || sec2 == "" || sec2.isEmpty()) { | 110 | if (sec2 == "0" || sec2 == "" || sec2.isEmpty()) { |
113 | sec2 = tr("no data"); | 111 | sec2 = tr("no data"); |
114 | } else { | 112 | } else { |
115 | sec2 += " min"; | 113 | sec2 += " min"; |
116 | } | 114 | } |
117 | 115 | ||
118 | jackStatus == (" ( " + jackStatus + " )"); | 116 | jackStatus == (" ( " + jackStatus + " )"); |
119 | 117 | ||
120 | return true; | 118 | return true; |
121 | } | 119 | } |
122 | 120 | ||
123 | 121 | ||
124 | void BatteryStatus::updatePercent( int pc ) { | 122 | void BatteryStatus::updatePercent( int pc ) { |
125 | percent = pc; | 123 | percent = pc; |
126 | repaint(FALSE); | 124 | repaint(FALSE); |
127 | } | 125 | } |
128 | 126 | ||
129 | void BatteryStatus::drawSegment( QPainter *p, const QRect &r, const QColor &topgrad, const QColor &botgrad, const QColor &highlight, int hightlight_height ) { | 127 | void BatteryStatus::drawSegment( QPainter *p, const QRect &r, const QColor &topgrad, const QColor &botgrad, const QColor &highlight, int hightlight_height ) { |
130 | int h1, h2, s1, s2, v1, v2, ng = r.height(), hy = ng*30/100, hh = hightlight_height; | 128 | int h1, h2, s1, s2, v1, v2, ng = r.height(), hy = ng*30/100, hh = hightlight_height; |
131 | topgrad.hsv( &h1, &s1, &v1 ); | 129 | topgrad.hsv( &h1, &s1, &v1 ); |
132 | botgrad.hsv( &h2, &s2, &v2 ); | 130 | botgrad.hsv( &h2, &s2, &v2 ); |
133 | for ( int j = 0; j < hy-2; j++ ) { | 131 | for ( int j = 0; j < hy-2; j++ ) { |
134 | p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), | 132 | p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), |
135 | v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); | 133 | v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); |
136 | p->drawLine( r.x(), r.top()+hy-2-j, r.x()+r.width(), r.top()+hy-2-j ); | 134 | p->drawLine( r.x(), r.top()+hy-2-j, r.x()+r.width(), r.top()+hy-2-j ); |
137 | } | 135 | } |
138 | for ( int j = 0; j < hh; j++ ) { | 136 | for ( int j = 0; j < hh; j++ ) { |
139 | p->setPen( highlight ); | 137 | p->setPen( highlight ); |
140 | p->drawLine( r.x(), r.top()+hy-2+j, r.x()+r.width(), r.top()+hy-2+j ); | 138 | p->drawLine( r.x(), r.top()+hy-2+j, r.x()+r.width(), r.top()+hy-2+j ); |
141 | } | 139 | } |
142 | for ( int j = 0; j < ng-hy-hh; j++ ) { | 140 | for ( int j = 0; j < ng-hy-hh; j++ ) { |
143 | p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), | 141 | p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1), |
144 | v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); | 142 | v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) ); |
145 | p->drawLine( r.x(), r.top()+hy+hh-2+j, r.x()+r.width(), r.top()+hy+hh-2+j ); | 143 | p->drawLine( r.x(), r.top()+hy+hh-2+j, r.x()+r.width(), r.top()+hy+hh-2+j ); |
146 | } | 144 | } |
147 | } | 145 | } |
148 | 146 | ||
149 | void BatteryStatus::paintEvent( QPaintEvent * ) { | 147 | void BatteryStatus::paintEvent( QPaintEvent * ) { |
150 | 148 | ||
151 | QPainter p(this); | 149 | QPainter p(this); |
152 | QString text; | 150 | QString text; |
153 | if ( ps->batteryStatus() == PowerStatus::Charging ) { | 151 | if ( ps->batteryStatus() == PowerStatus::Charging ) { |
154 | if (bat2) { | 152 | if (bat2) { |
155 | text = tr("Charging both devices"); | 153 | text = tr("Charging both devices"); |
156 | } else { | 154 | } else { |
157 | text = tr("Charging"); | 155 | text = tr("Charging"); |
158 | } | 156 | } |
159 | } else if ( ps->batteryPercentAccurate() ) { | 157 | } else if ( ps->batteryPercentAccurate() ) { |
160 | text.sprintf( tr("Percentage battery remaining") + ": %i%%", percent ); | 158 | text.sprintf( tr("Percentage battery remaining") + ": %i%%", percent ); |
161 | } else { | 159 | } else { |
162 | text = tr("Battery status: "); | 160 | text = tr("Battery status: "); |
163 | switch ( ps->batteryStatus() ) { | 161 | switch ( ps->batteryStatus() ) { |
164 | case PowerStatus::High: | 162 | case PowerStatus::High: |
165 | text += tr("Good"); | 163 | text += tr("Good"); |
166 | break; | 164 | break; |
167 | case PowerStatus::Low: | 165 | case PowerStatus::Low: |
168 | text += tr("Low"); | 166 | text += tr("Low"); |
169 | break; | 167 | break; |
170 | case PowerStatus::VeryLow: | 168 | case PowerStatus::VeryLow: |
171 | text += tr("Very Low"); | 169 | text += tr("Very Low"); |
172 | break; | 170 | break; |
173 | case PowerStatus::Critical: | 171 | case PowerStatus::Critical: |
174 | text += tr("Critical"); | 172 | text += tr("Critical"); |
175 | break; | 173 | break; |
176 | default: // NotPresent, etc. | 174 | default: // NotPresent, etc. |
177 | text += tr("Unknown"); | 175 | text += tr("Unknown"); |
178 | } | 176 | } |
179 | } | 177 | } |
180 | p.drawText( 10, 90, text ); | 178 | p.drawText( 10, 90, text ); |
181 | 179 | ||
182 | if ( ps->acStatus() == PowerStatus::Backup ) | 180 | if ( ps->acStatus() == PowerStatus::Backup ) |
183 | p.drawText( 10, 110, tr("On backup power") ); | 181 | p.drawText( 10, 110, tr("On backup power") ); |
184 | else if ( ps->acStatus() == PowerStatus::Online ) | 182 | else if ( ps->acStatus() == PowerStatus::Online ) |
185 | p.drawText( 10, 110, tr("Power on-line") ); | 183 | p.drawText( 10, 110, tr("Power on-line") ); |
186 | else if ( ps->acStatus() == PowerStatus::Offline ) | 184 | else if ( ps->acStatus() == PowerStatus::Offline ) |
187 | p.drawText( 10, 110, tr("External power disconnected") ); | 185 | p.drawText( 10, 110, tr("External power disconnected") ); |
188 | 186 | ||
189 | if ( ps->batteryTimeRemaining() >= 0 ) { | 187 | if ( ps->batteryTimeRemaining() >= 0 ) { |
190 | text.sprintf( tr("Battery time remaining") + ": %im %02is", | 188 | text.sprintf( tr("Battery time remaining") + ": %im %02is", |
191 | ps->batteryTimeRemaining() / 60, ps->batteryTimeRemaining() % 60 ); | 189 | ps->batteryTimeRemaining() / 60, ps->batteryTimeRemaining() % 60 ); |
192 | p.drawText( 10, 130, text ); | 190 | p.drawText( 10, 130, text ); |
193 | } | 191 | } |
194 | 192 | ||
195 | QColor c; | 193 | QColor c; |
196 | QColor darkc; | 194 | QColor darkc; |
197 | QColor lightc; | 195 | QColor lightc; |
198 | if ( ps->acStatus() == PowerStatus::Offline ) { | 196 | if ( ps->acStatus() == PowerStatus::Offline ) { |
199 | c = blue.light(120); | 197 | c = blue.light(120); |
200 | darkc = c.dark(280); | 198 | darkc = c.dark(280); |
201 | lightc = c.light(145); | 199 | lightc = c.light(145); |
202 | } else if ( ps->acStatus() == PowerStatus::Online ) { | 200 | } else if ( ps->acStatus() == PowerStatus::Online ) { |
203 | c = green.dark(130); | 201 | c = green.dark(130); |
204 | darkc = c.dark(200); | 202 | darkc = c.dark(200); |
205 | lightc = c.light(220); | 203 | lightc = c.light(220); |
206 | } else { | 204 | } else { |
207 | c = red; | 205 | c = red; |
208 | darkc = c.dark(280); | 206 | darkc = c.dark(280); |
209 | lightc = c.light(140); | 207 | lightc = c.light(140); |
210 | } | 208 | } |
211 | if ( percent < 0 ) | 209 | if ( percent < 0 ) |
212 | return; | 210 | return; |
213 | 211 | ||
214 | int rightEnd1 = width() - 47; | 212 | int rightEnd1 = width() - 47; |
215 | int rightEnd2 = width() - 35; | 213 | int rightEnd2 = width() - 35; |
216 | int percent2 = ( percent / 100 ) * rightEnd1 ; | 214 | int percent2 = ( percent / 100 ) * rightEnd1 ; |
217 | p.setPen( black ); | 215 | p.setPen( black ); |
218 | qDrawShadePanel( &p, 9, 30, rightEnd1 , 39, colorGroup(), TRUE, 1, NULL); | 216 | qDrawShadePanel( &p, 9, 30, rightEnd1 , 39, colorGroup(), TRUE, 1, NULL); |
219 | qDrawShadePanel( &p, rightEnd2, 37, 12, 24, colorGroup(), TRUE, 1, NULL); | 217 | qDrawShadePanel( &p, rightEnd2, 37, 12, 24, colorGroup(), TRUE, 1, NULL); |
220 | drawSegment( &p, QRect( 10, 30, percent2, 40 ), lightc, darkc, lightc.light(115), 6 ); | 218 | drawSegment( &p, QRect( 10, 30, percent2, 40 ), lightc, darkc, lightc.light(115), 6 ); |
221 | drawSegment( &p, QRect( 11 + percent2, 30, rightEnd1 - percent2, 40 ), white.light(80), black, white.light(90), 6 ); | 219 | drawSegment( &p, QRect( 11 + percent2, 30, rightEnd1 - percent2, 40 ), white.light(80), black, white.light(90), 6 ); |
222 | drawSegment( &p, QRect( rightEnd2, 37, 10, 25 ), white.light(80), black, white.light(90), 2 ); | 220 | drawSegment( &p, QRect( rightEnd2, 37, 10, 25 ), white.light(80), black, white.light(90), 2 ); |
223 | p.setPen( black); | 221 | p.setPen( black); |
224 | 222 | ||
225 | 223 | ||
226 | if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { | 224 | if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) { |
227 | 225 | ||
228 | p.drawText(15, 50, tr ("Ipaq ") + ipaqChem); | 226 | p.drawText(15, 50, tr ("Ipaq ") + ipaqChem); |
229 | 227 | ||
230 | QString jacketMsg; | 228 | QString jacketMsg; |
231 | if (bat2) { | 229 | if (bat2) { |
232 | p.setPen(black); | 230 | p.setPen(black); |
233 | p.drawText(10,220, tr("Percentage battery remaining: ") + perc2 + " " + jackStatus); | 231 | p.drawText(10,220, tr("Percentage battery remaining: ") + perc2 + " " + jackStatus); |
234 | p.drawText(10,240, tr("Battery time remaining: ") + sec2); | 232 | p.drawText(10,240, tr("Battery time remaining: ") + sec2); |
235 | jacketMsg = tr("Jacket ") + jackChem; | 233 | jacketMsg = tr("Jacket ") + jackChem; |
236 | } else { | 234 | } else { |
237 | jackPercent = 0; | 235 | jackPercent = 0; |
238 | jacketMsg = tr("No jacket with battery inserted"); | 236 | jacketMsg = tr("No jacket with battery inserted"); |
239 | } | 237 | } |
240 | 238 | ||
241 | int jackPerc = ( jackPercent / 100 ) * ( width() - 47 ) ; | 239 | int jackPerc = ( jackPercent / 100 ) * ( width() - 47 ) ; |
242 | 240 | ||
243 | qDrawShadePanel( &p, 9, 160, rightEnd1, 39, colorGroup(), TRUE, 1, NULL); | 241 | qDrawShadePanel( &p, 9, 160, rightEnd1, 39, colorGroup(), TRUE, 1, NULL); |
244 | qDrawShadePanel( &p, rightEnd2, 167, 12, 24, colorGroup(), TRUE, 1, NULL); | 242 | qDrawShadePanel( &p, rightEnd2, 167, 12, 24, colorGroup(), TRUE, 1, NULL); |
245 | drawSegment( &p, QRect( 10, 160, jackPerc, 40 ), lightc, darkc, lightc.light(115), 6 ); | 243 | drawSegment( &p, QRect( 10, 160, jackPerc, 40 ), lightc, darkc, lightc.light(115), 6 ); |
246 | drawSegment( &p, QRect( 11 + jackPerc, 160, rightEnd1 - jackPerc, 40 ), white.light(80), black, white.light(90), 6 ); | 244 | drawSegment( &p, QRect( 11 + jackPerc, 160, rightEnd1 - jackPerc, 40 ), white.light(80), black, white.light(90), 6 ); |
247 | drawSegment( &p, QRect( rightEnd2, 167, 10, 25 ), white.light(80), black, white.light(90), 2 ); | 245 | drawSegment( &p, QRect( rightEnd2, 167, 10, 25 ), white.light(80), black, white.light(90), 2 ); |
248 | p.setPen( black ); | 246 | p.setPen( black ); |
249 | p.drawText(15, 180, jacketMsg); | 247 | p.drawText(15, 180, jacketMsg); |
250 | } | 248 | } |
251 | 249 | ||
252 | } | 250 | } |
253 | 251 | ||
diff --git a/core/applets/cardmon/cardmon.cpp b/core/applets/cardmon/cardmon.cpp index 8ffaada..7625545 100644 --- a/core/applets/cardmon/cardmon.cpp +++ b/core/applets/cardmon/cardmon.cpp | |||
@@ -1,287 +1,285 @@ | |||
1 | /* | 1 | /* |
2 | * cardmon.cpp | 2 | * cardmon.cpp |
3 | * | 3 | * |
4 | * --------------------- | 4 | * --------------------- |
5 | * | 5 | * |
6 | * copyright : (c) 2002 by Maximilian Reiss | 6 | * copyright : (c) 2002 by Maximilian Reiss |
7 | * email : max.reiss@gmx.de | 7 | * email : max.reiss@gmx.de |
8 | * based on two apps by Devin Butterfield | 8 | * based on two apps by Devin Butterfield |
9 | */ | 9 | */ |
10 | /*************************************************************************** | 10 | /*************************************************************************** |
11 | * * | 11 | * * |
12 | * This program is free software; you can redistribute it and/or modify * | 12 | * This program is free software; you can redistribute it and/or modify * |
13 | * it under the terms of the GNU General Public License as published by * | 13 | * it under the terms of the GNU General Public License as published by * |
14 | * the Free Software Foundation; either version 2 of the License, or * | 14 | * the Free Software Foundation; either version 2 of the License, or * |
15 | * (at your option) any later version. * | 15 | * (at your option) any later version. * |
16 | * * | 16 | * * |
17 | ***************************************************************************/ | 17 | ***************************************************************************/ |
18 | 18 | ||
19 | #include "cardmon.h" | 19 | #include "cardmon.h" |
20 | 20 | ||
21 | /* OPIE */ | 21 | /* OPIE */ |
22 | #include <opie2/odevice.h> | 22 | #include <opie2/odevice.h> |
23 | #include <opie2/otaskbarapplet.h> | 23 | #include <opie2/otaskbarapplet.h> |
24 | #include <qpe/applnk.h> | 24 | #include <qpe/applnk.h> |
25 | #include <qpe/resource.h> | 25 | #include <qpe/resource.h> |
26 | 26 | ||
27 | /* QT */ | 27 | /* QT */ |
28 | #include <qapplication.h> | ||
29 | #include <qcopchannel_qws.h> | 28 | #include <qcopchannel_qws.h> |
30 | #include <qpainter.h> | 29 | #include <qpainter.h> |
31 | #include <qmessagebox.h> | ||
32 | #include <qfile.h> | 30 | #include <qfile.h> |
33 | #include <qtextstream.h> | 31 | #include <qtextstream.h> |
34 | #include <qsound.h> | 32 | #include <qsound.h> |
35 | #include <qtimer.h> | 33 | #include <qtimer.h> |
36 | 34 | ||
37 | /* STD */ | 35 | /* STD */ |
38 | #include <stdio.h> | 36 | #include <stdio.h> |
39 | #include <unistd.h> | 37 | #include <unistd.h> |
40 | #include <stdlib.h> | 38 | #include <stdlib.h> |
41 | #include <string.h> | 39 | #include <string.h> |
42 | #include <fcntl.h> | 40 | #include <fcntl.h> |
43 | 41 | ||
44 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | 42 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) |
45 | #include <sys/vfs.h> | 43 | #include <sys/vfs.h> |
46 | #include <mntent.h> | 44 | #include <mntent.h> |
47 | #endif | 45 | #endif |
48 | 46 | ||
49 | using namespace Opie; | 47 | using namespace Opie; |
50 | 48 | ||
51 | CardMonitor::CardMonitor( QWidget * parent ) : QWidget( parent ), | 49 | CardMonitor::CardMonitor( QWidget * parent ) : QWidget( parent ), |
52 | pm( Resource::loadPixmap( "cardmon/pcmcia" ) ) | 50 | pm( Resource::loadPixmap( "cardmon/pcmcia" ) ) |
53 | { | 51 | { |
54 | 52 | ||
55 | QCopChannel * pcmciaChannel = new QCopChannel( "QPE/Card", this ); | 53 | QCopChannel * pcmciaChannel = new QCopChannel( "QPE/Card", this ); |
56 | connect( pcmciaChannel, | 54 | connect( pcmciaChannel, |
57 | SIGNAL( received( const QCString &, const QByteArray & ) ), this, | 55 | SIGNAL( received( const QCString &, const QByteArray & ) ), this, |
58 | SLOT( cardMessage( const QCString &, const QByteArray & ) ) ); | 56 | SLOT( cardMessage( const QCString &, const QByteArray & ) ) ); |
59 | 57 | ||
60 | QCopChannel *sdChannel = new QCopChannel( "QPE/Card", this ); | 58 | QCopChannel *sdChannel = new QCopChannel( "QPE/Card", this ); |
61 | connect( sdChannel, | 59 | connect( sdChannel, |
62 | SIGNAL( received( const QCString &, const QByteArray & ) ), this, | 60 | SIGNAL( received( const QCString &, const QByteArray & ) ), this, |
63 | SLOT( cardMessage( const QCString &, const QByteArray & ) ) ); | 61 | SLOT( cardMessage( const QCString &, const QByteArray & ) ) ); |
64 | 62 | ||
65 | cardInPcmcia0 = FALSE; | 63 | cardInPcmcia0 = FALSE; |
66 | cardInPcmcia1 = FALSE; | 64 | cardInPcmcia1 = FALSE; |
67 | cardInSd = FALSE; | 65 | cardInSd = FALSE; |
68 | 66 | ||
69 | setFocusPolicy( NoFocus ); | 67 | setFocusPolicy( NoFocus ); |
70 | 68 | ||
71 | setFixedWidth ( AppLnk::smallIconSize() ); | 69 | setFixedWidth ( AppLnk::smallIconSize() ); |
72 | setFixedHeight ( AppLnk::smallIconSize() ); | 70 | setFixedHeight ( AppLnk::smallIconSize() ); |
73 | 71 | ||
74 | getStatusPcmcia( TRUE ); | 72 | getStatusPcmcia( TRUE ); |
75 | getStatusSd( TRUE ); | 73 | getStatusSd( TRUE ); |
76 | repaint( FALSE ); | 74 | repaint( FALSE ); |
77 | popupMenu = 0; | 75 | popupMenu = 0; |
78 | } | 76 | } |
79 | 77 | ||
80 | CardMonitor::~CardMonitor() | 78 | CardMonitor::~CardMonitor() |
81 | { | 79 | { |
82 | if ( popupMenu ) | 80 | if ( popupMenu ) |
83 | { | 81 | { |
84 | delete popupMenu; | 82 | delete popupMenu; |
85 | } | 83 | } |
86 | } | 84 | } |
87 | 85 | ||
88 | void CardMonitor::popUp( QString message, QString icon ) | 86 | void CardMonitor::popUp( QString message, QString icon ) |
89 | { | 87 | { |
90 | if ( !popupMenu ) | 88 | if ( !popupMenu ) |
91 | { | 89 | { |
92 | popupMenu = new QPopupMenu( this ); | 90 | popupMenu = new QPopupMenu( this ); |
93 | } | 91 | } |
94 | 92 | ||
95 | popupMenu->clear(); | 93 | popupMenu->clear(); |
96 | if ( icon.isEmpty() ) | 94 | if ( icon.isEmpty() ) |
97 | { | 95 | { |
98 | popupMenu->insertItem( message, 0 ); | 96 | popupMenu->insertItem( message, 0 ); |
99 | } | 97 | } |
100 | else | 98 | else |
101 | { | 99 | { |
102 | popupMenu->insertItem( QIconSet( Resource::loadPixmap( icon ) ), | 100 | popupMenu->insertItem( QIconSet( Resource::loadPixmap( icon ) ), |
103 | message, 0 ); | 101 | message, 0 ); |
104 | } | 102 | } |
105 | 103 | ||
106 | QPoint p = mapToGlobal( QPoint( 0, 0 ) ); | 104 | QPoint p = mapToGlobal( QPoint( 0, 0 ) ); |
107 | QSize s = popupMenu->sizeHint(); | 105 | QSize s = popupMenu->sizeHint(); |
108 | popupMenu->popup( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), | 106 | popupMenu->popup( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), |
109 | p.y() - s.height() ), 0 ); | 107 | p.y() - s.height() ), 0 ); |
110 | 108 | ||
111 | QTimer::singleShot( 2000, this, SLOT( popupTimeout() ) ); | 109 | QTimer::singleShot( 2000, this, SLOT( popupTimeout() ) ); |
112 | } | 110 | } |
113 | 111 | ||
114 | void CardMonitor::popupTimeout() | 112 | void CardMonitor::popupTimeout() |
115 | { | 113 | { |
116 | popupMenu->hide(); | 114 | popupMenu->hide(); |
117 | } | 115 | } |
118 | 116 | ||
119 | void CardMonitor::mousePressEvent( QMouseEvent * ) | 117 | void CardMonitor::mousePressEvent( QMouseEvent * ) |
120 | { | 118 | { |
121 | QPopupMenu * menu = new QPopupMenu( this ); | 119 | QPopupMenu * menu = new QPopupMenu( this ); |
122 | QString cmd; | 120 | QString cmd; |
123 | int err = 0; | 121 | int err = 0; |
124 | 122 | ||
125 | if ( cardInSd ) | 123 | if ( cardInSd ) |
126 | { | 124 | { |
127 | menu->insertItem( QIconSet( Resource::loadPixmap( "cardmon/ide" ) ), | 125 | menu->insertItem( QIconSet( Resource::loadPixmap( "cardmon/ide" ) ), |
128 | tr( "Eject SD/MMC card" ), 0 ); | 126 | tr( "Eject SD/MMC card" ), 0 ); |
129 | } | 127 | } |
130 | 128 | ||
131 | if ( cardInPcmcia0 ) | 129 | if ( cardInPcmcia0 ) |
132 | { | 130 | { |
133 | menu-> | 131 | menu-> |
134 | insertItem( QIconSet | 132 | insertItem( QIconSet |
135 | ( Resource::loadPixmap( "cardmon/" + cardInPcmcia0Type ) ), | 133 | ( Resource::loadPixmap( "cardmon/" + cardInPcmcia0Type ) ), |
136 | tr( "Eject card 0: %1" ).arg( cardInPcmcia0Name ), 1 ); | 134 | tr( "Eject card 0: %1" ).arg( cardInPcmcia0Name ), 1 ); |
137 | } | 135 | } |
138 | 136 | ||
139 | if ( cardInPcmcia1 ) | 137 | if ( cardInPcmcia1 ) |
140 | { | 138 | { |
141 | menu-> | 139 | menu-> |
142 | insertItem( QIconSet | 140 | insertItem( QIconSet |
143 | ( Resource::loadPixmap( "cardmon/" + cardInPcmcia1Type ) ), | 141 | ( Resource::loadPixmap( "cardmon/" + cardInPcmcia1Type ) ), |
144 | tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 ); | 142 | tr( "Eject card 1: %1" ).arg( cardInPcmcia1Name ), 2 ); |
145 | } | 143 | } |
146 | 144 | ||
147 | QPoint p = mapToGlobal( QPoint( 0, 0 ) ); | 145 | QPoint p = mapToGlobal( QPoint( 0, 0 ) ); |
148 | QSize s = menu->sizeHint(); | 146 | QSize s = menu->sizeHint(); |
149 | int opt = menu->exec( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), | 147 | int opt = menu->exec( QPoint( p.x() + ( width() / 2 ) - ( s.width() / 2 ), |
150 | p.y() - s.height() ), 0 ); | 148 | p.y() - s.height() ), 0 ); |
151 | 149 | ||
152 | if ( opt == 1 ) | 150 | if ( opt == 1 ) |
153 | { | 151 | { |
154 | cmd = "/sbin/cardctl eject 0"; | 152 | cmd = "/sbin/cardctl eject 0"; |
155 | err = system( ( const char * ) cmd ); | 153 | err = system( ( const char * ) cmd ); |
156 | if ( err != 0 ) | 154 | if ( err != 0 ) |
157 | { | 155 | { |
158 | qDebug( "Could not execute `/sbin/cardctl eject 0'! err=%d", | 156 | qDebug( "Could not execute `/sbin/cardctl eject 0'! err=%d", |
159 | err ); | 157 | err ); |
160 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); | 158 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); |
161 | } | 159 | } |
162 | } | 160 | } |
163 | else if ( opt == 0 ) | 161 | else if ( opt == 0 ) |
164 | { | 162 | { |
165 | if ( ODevice::inst() ->system() == System_Familiar ) | 163 | if ( ODevice::inst() ->system() == System_Familiar ) |
166 | { | 164 | { |
167 | cmd = "umount /dev/mmc/part1"; | 165 | cmd = "umount /dev/mmc/part1"; |
168 | } | 166 | } |
169 | else | 167 | else |
170 | { | 168 | { |
171 | cmd = "umount /dev/mmcda1"; | 169 | cmd = "umount /dev/mmcda1"; |
172 | } | 170 | } |
173 | err = system( ( const char * ) cmd ); | 171 | err = system( ( const char * ) cmd ); |
174 | if ( err != 0 ) | 172 | if ( err != 0 ) |
175 | { | 173 | { |
176 | popUp( tr( "SD/MMC card eject failed!" ) ); | 174 | popUp( tr( "SD/MMC card eject failed!" ) ); |
177 | } | 175 | } |
178 | } | 176 | } |
179 | else if ( opt == 2 ) | 177 | else if ( opt == 2 ) |
180 | { | 178 | { |
181 | cmd = "/sbin/cardctl eject 1"; | 179 | cmd = "/sbin/cardctl eject 1"; |
182 | err = system( ( const char * ) cmd ); | 180 | err = system( ( const char * ) cmd ); |
183 | if ( err != 0 ) | 181 | if ( err != 0 ) |
184 | { | 182 | { |
185 | qDebug( "Could not execute `/sbin/cardctl eject 1'! err=%d", | 183 | qDebug( "Could not execute `/sbin/cardctl eject 1'! err=%d", |
186 | err ); | 184 | err ); |
187 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); | 185 | popUp( tr( "CF/PCMCIA card eject failed!" ) ); |
188 | } | 186 | } |
189 | } | 187 | } |
190 | delete menu; | 188 | delete menu; |
191 | } | 189 | } |
192 | 190 | ||
193 | 191 | ||
194 | void CardMonitor::cardMessage( const QCString & msg, const QByteArray & ) | 192 | void CardMonitor::cardMessage( const QCString & msg, const QByteArray & ) |
195 | { | 193 | { |
196 | if ( msg == "stabChanged()" ) | 194 | if ( msg == "stabChanged()" ) |
197 | { | 195 | { |
198 | // qDebug("Pcmcia: stabchanged"); | 196 | // qDebug("Pcmcia: stabchanged"); |
199 | getStatusPcmcia(); | 197 | getStatusPcmcia(); |
200 | } | 198 | } |
201 | else if ( msg == "mtabChanged()" ) | 199 | else if ( msg == "mtabChanged()" ) |
202 | { | 200 | { |
203 | // qDebug("CARDMONAPPLET: mtabchanged"); | 201 | // qDebug("CARDMONAPPLET: mtabchanged"); |
204 | getStatusSd(); | 202 | getStatusSd(); |
205 | } | 203 | } |
206 | } | 204 | } |
207 | 205 | ||
208 | bool CardMonitor::getStatusPcmcia( int showPopUp ) | 206 | bool CardMonitor::getStatusPcmcia( int showPopUp ) |
209 | { | 207 | { |
210 | 208 | ||
211 | bool cardWas0 = cardInPcmcia0;// remember last state | 209 | bool cardWas0 = cardInPcmcia0;// remember last state |
212 | bool cardWas1 = cardInPcmcia1; | 210 | bool cardWas1 = cardInPcmcia1; |
213 | 211 | ||
214 | QString fileName; | 212 | QString fileName; |
215 | 213 | ||
216 | // one of these 3 files should exist | 214 | // one of these 3 files should exist |
217 | if ( QFile::exists( "/var/run/stab" ) ) | 215 | if ( QFile::exists( "/var/run/stab" ) ) |
218 | { | 216 | { |
219 | fileName = "/var/run/stab"; | 217 | fileName = "/var/run/stab"; |
220 | } | 218 | } |
221 | else if ( QFile::exists( "/var/state/pcmcia/stab" ) ) | 219 | else if ( QFile::exists( "/var/state/pcmcia/stab" ) ) |
222 | { | 220 | { |
223 | fileName = "/var/state/pcmcia/stab"; | 221 | fileName = "/var/state/pcmcia/stab"; |
224 | } | 222 | } |
225 | else | 223 | else |
226 | { | 224 | { |
227 | fileName = "/var/lib/pcmcia/stab"; | 225 | fileName = "/var/lib/pcmcia/stab"; |
228 | } | 226 | } |
229 | 227 | ||
230 | QFile f( fileName ); | 228 | QFile f( fileName ); |
231 | 229 | ||
232 | if ( f.open( IO_ReadOnly ) ) | 230 | if ( f.open( IO_ReadOnly ) ) |
233 | { | 231 | { |
234 | QStringList list; | 232 | QStringList list; |
235 | QTextStream stream( &f ); | 233 | QTextStream stream( &f ); |
236 | QString streamIn; | 234 | QString streamIn; |
237 | streamIn = stream.read(); | 235 | streamIn = stream.read(); |
238 | list = QStringList::split( "\n", streamIn ); | 236 | list = QStringList::split( "\n", streamIn ); |
239 | for ( QStringList::Iterator line = list.begin(); line != list.end(); | 237 | for ( QStringList::Iterator line = list.begin(); line != list.end(); |
240 | line++ ) | 238 | line++ ) |
241 | { | 239 | { |
242 | if ( ( *line ).startsWith( "Socket 0:" ) ) | 240 | if ( ( *line ).startsWith( "Socket 0:" ) ) |
243 | { | 241 | { |
244 | if ( ( *line ).startsWith( "Socket 0: empty" ) && cardInPcmcia0 ) | 242 | if ( ( *line ).startsWith( "Socket 0: empty" ) && cardInPcmcia0 ) |
245 | { | 243 | { |
246 | cardInPcmcia0 = FALSE; | 244 | cardInPcmcia0 = FALSE; |
247 | } | 245 | } |
248 | else if ( !( *line ).startsWith( "Socket 0: empty" ) | 246 | else if ( !( *line ).startsWith( "Socket 0: empty" ) |
249 | && !cardInPcmcia0 ) | 247 | && !cardInPcmcia0 ) |
250 | { | 248 | { |
251 | cardInPcmcia0Name = | 249 | cardInPcmcia0Name = |
252 | ( *line ).mid( ( ( *line ).find( ':' ) + 1 ), | 250 | ( *line ).mid( ( ( *line ).find( ':' ) + 1 ), |
253 | ( *line ).length() - 9 ); | 251 | ( *line ).length() - 9 ); |
254 | cardInPcmcia0Name.stripWhiteSpace(); | 252 | cardInPcmcia0Name.stripWhiteSpace(); |
255 | cardInPcmcia0 = TRUE; | 253 | cardInPcmcia0 = TRUE; |
256 | show(); | 254 | show(); |
257 | line++; | 255 | line++; |
258 | int pos = ( *line ).find( '\t' ) + 1; | 256 | int pos = ( *line ).find( '\t' ) + 1; |
259 | cardInPcmcia0Type = | 257 | cardInPcmcia0Type = |
260 | ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos ); | 258 | ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos ); |
261 | } | 259 | } |
262 | } | 260 | } |
263 | else if ( ( *line ).startsWith( "Socket 1:" ) ) | 261 | else if ( ( *line ).startsWith( "Socket 1:" ) ) |
264 | { | 262 | { |
265 | if ( ( *line ).startsWith( "Socket 1: empty" ) && cardInPcmcia1 ) | 263 | if ( ( *line ).startsWith( "Socket 1: empty" ) && cardInPcmcia1 ) |
266 | { | 264 | { |
267 | cardInPcmcia1 = FALSE; | 265 | cardInPcmcia1 = FALSE; |
268 | } | 266 | } |
269 | else if ( !( *line ).startsWith( "Socket 1: empty" ) | 267 | else if ( !( *line ).startsWith( "Socket 1: empty" ) |
270 | && !cardInPcmcia1 ) | 268 | && !cardInPcmcia1 ) |
271 | { | 269 | { |
272 | cardInPcmcia1Name = | 270 | cardInPcmcia1Name = |
273 | ( *line ).mid( ( ( *line ).find( ':' ) + 1 ), | 271 | ( *line ).mid( ( ( *line ).find( ':' ) + 1 ), |
274 | ( *line ).length() - 9 ); | 272 | ( *line ).length() - 9 ); |
275 | cardInPcmcia1Name.stripWhiteSpace(); | 273 | cardInPcmcia1Name.stripWhiteSpace(); |
276 | cardInPcmcia1 = TRUE; | 274 | cardInPcmcia1 = TRUE; |
277 | show(); | 275 | show(); |
278 | line++; | 276 | line++; |
279 | int pos = ( *line ).find( '\t' ) + 1; | 277 | int pos = ( *line ).find( '\t' ) + 1; |
280 | cardInPcmcia1Type = | 278 | cardInPcmcia1Type = |
281 | ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos ); | 279 | ( *line ).mid( pos, ( *line ).find( "\t", pos ) - pos ); |
282 | } | 280 | } |
283 | } | 281 | } |
284 | } | 282 | } |
285 | f.close(); | 283 | f.close(); |
286 | 284 | ||
287 | if ( !showPopUp | 285 | if ( !showPopUp |
diff --git a/core/applets/homeapplet/home.cpp b/core/applets/homeapplet/home.cpp index 455575f..8a930be 100644 --- a/core/applets/homeapplet/home.cpp +++ b/core/applets/homeapplet/home.cpp | |||
@@ -1,87 +1,85 @@ | |||
1 | #include <qpe/resource.h> | 1 | #include <qpe/resource.h> |
2 | #include <qpe/qcopenvelope_qws.h> | 2 | #include <qpe/qcopenvelope_qws.h> |
3 | 3 | ||
4 | #include <qapplication.h> | 4 | #include <qapplication.h> |
5 | #include <qiconset.h> | ||
6 | #include <qpopupmenu.h> | ||
7 | 5 | ||
8 | #include "home.h" | 6 | #include "home.h" |
9 | 7 | ||
10 | 8 | ||
11 | HomeApplet::HomeApplet ( ) | 9 | HomeApplet::HomeApplet ( ) |
12 | : QObject ( 0, "HomeApplet" ) | 10 | : QObject ( 0, "HomeApplet" ) |
13 | { | 11 | { |
14 | } | 12 | } |
15 | 13 | ||
16 | HomeApplet::~HomeApplet ( ) | 14 | HomeApplet::~HomeApplet ( ) |
17 | { | 15 | { |
18 | } | 16 | } |
19 | 17 | ||
20 | int HomeApplet::position ( ) const | 18 | int HomeApplet::position ( ) const |
21 | { | 19 | { |
22 | return 4; | 20 | return 4; |
23 | } | 21 | } |
24 | 22 | ||
25 | QString HomeApplet::name ( ) const | 23 | QString HomeApplet::name ( ) const |
26 | { | 24 | { |
27 | return tr( "Home shortcut" ); | 25 | return tr( "Home shortcut" ); |
28 | } | 26 | } |
29 | 27 | ||
30 | QString HomeApplet::text ( ) const | 28 | QString HomeApplet::text ( ) const |
31 | { | 29 | { |
32 | return tr( "Desktop" ); | 30 | return tr( "Desktop" ); |
33 | } | 31 | } |
34 | 32 | ||
35 | QString HomeApplet::tr( const char* s ) const | 33 | QString HomeApplet::tr( const char* s ) const |
36 | { | 34 | { |
37 | return qApp->translate( "HomeApplet", s, 0 ); | 35 | return qApp->translate( "HomeApplet", s, 0 ); |
38 | } | 36 | } |
39 | 37 | ||
40 | QString HomeApplet::tr( const char* s, const char* p ) const | 38 | QString HomeApplet::tr( const char* s, const char* p ) const |
41 | { | 39 | { |
42 | return qApp->translate( "HomeApplet", s, p ); | 40 | return qApp->translate( "HomeApplet", s, p ); |
43 | } | 41 | } |
44 | 42 | ||
45 | QIconSet HomeApplet::icon ( ) const | 43 | QIconSet HomeApplet::icon ( ) const |
46 | { | 44 | { |
47 | QPixmap pix; | 45 | QPixmap pix; |
48 | QImage img = Resource::loadImage ( "home" ); | 46 | QImage img = Resource::loadImage ( "home" ); |
49 | 47 | ||
50 | if ( !img. isNull ( )) | 48 | if ( !img. isNull ( )) |
51 | pix. convertFromImage ( img. smoothScale ( 14, 14 )); | 49 | pix. convertFromImage ( img. smoothScale ( 14, 14 )); |
52 | return pix; | 50 | return pix; |
53 | } | 51 | } |
54 | 52 | ||
55 | QPopupMenu *HomeApplet::popup ( QWidget * ) const | 53 | QPopupMenu *HomeApplet::popup ( QWidget * ) const |
56 | { | 54 | { |
57 | return 0; | 55 | return 0; |
58 | } | 56 | } |
59 | 57 | ||
60 | void HomeApplet::activated ( ) | 58 | void HomeApplet::activated ( ) |
61 | { | 59 | { |
62 | // to desktop (home) | 60 | // to desktop (home) |
63 | QCopEnvelope ( "QPE/Application/qpe", "raise()" ); | 61 | QCopEnvelope ( "QPE/Application/qpe", "raise()" ); |
64 | } | 62 | } |
65 | 63 | ||
66 | 64 | ||
67 | QRESULT HomeApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) | 65 | QRESULT HomeApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) |
68 | { | 66 | { |
69 | *iface = 0; | 67 | *iface = 0; |
70 | if ( uuid == IID_QUnknown ) | 68 | if ( uuid == IID_QUnknown ) |
71 | *iface = this; | 69 | *iface = this; |
72 | else if ( uuid == IID_MenuApplet ) | 70 | else if ( uuid == IID_MenuApplet ) |
73 | *iface = this; | 71 | *iface = this; |
74 | else | 72 | else |
75 | return QS_FALSE; | 73 | return QS_FALSE; |
76 | 74 | ||
77 | if ( *iface ) | 75 | if ( *iface ) |
78 | (*iface)-> addRef ( ); | 76 | (*iface)-> addRef ( ); |
79 | return QS_OK; | 77 | return QS_OK; |
80 | } | 78 | } |
81 | 79 | ||
82 | Q_EXPORT_INTERFACE( ) | 80 | Q_EXPORT_INTERFACE( ) |
83 | { | 81 | { |
84 | Q_CREATE_INSTANCE( HomeApplet ) | 82 | Q_CREATE_INSTANCE( HomeApplet ) |
85 | } | 83 | } |
86 | 84 | ||
87 | 85 | ||
diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp index f850424..a47f33d 100644 --- a/core/applets/irdaapplet/irda.cpp +++ b/core/applets/irdaapplet/irda.cpp | |||
@@ -1,285 +1,280 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2002 David Woodhouse <dwmw2@infradead.org> | 2 | ** Copyright (C) 2002 David Woodhouse <dwmw2@infradead.org> |
3 | ** Max Reiss <harlekin@handhelds.org> [trivial stuff] | 3 | ** Max Reiss <harlekin@handhelds.org> [trivial stuff] |
4 | ** Robert Griebl <sandman@handhelds.org> | 4 | ** Robert Griebl <sandman@handhelds.org> |
5 | ** Holger Freyther <zecke@handhelds.org> QCOP Interface | 5 | ** Holger Freyther <zecke@handhelds.org> QCOP Interface |
6 | ** | 6 | ** |
7 | ** This file may be distributed and/or modified under the terms of the | 7 | ** This file may be distributed and/or modified under the terms of the |
8 | ** GNU General Public License version 2 as published by the Free Software | 8 | ** GNU General Public License version 2 as published by the Free Software |
9 | ** Foundation and appearing in the file LICENSE.GPL included in the | 9 | ** Foundation and appearing in the file LICENSE.GPL included in the |
10 | ** packaging of this file. | 10 | ** packaging of this file. |
11 | ** | 11 | ** |
12 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 12 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
13 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 13 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
14 | ** | 14 | ** |
15 | **********************************************************************/ | 15 | **********************************************************************/ |
16 | 16 | ||
17 | #include <qcopchannel_qws.h> | ||
18 | 17 | ||
19 | #include <qpe/qpeapplication.h> | ||
20 | #include <qpe/resource.h> | 18 | #include <qpe/resource.h> |
21 | #include <qpe/ir.h> | ||
22 | #include <qpe/qcopenvelope_qws.h> | 19 | #include <qpe/qcopenvelope_qws.h> |
23 | #include <qpe/sound.h> | ||
24 | 20 | ||
25 | #include <qpainter.h> | 21 | #include <qpainter.h> |
26 | #include <qfile.h> | 22 | #include <qfile.h> |
27 | #include <qtimer.h> | 23 | #include <qtimer.h> |
28 | #include <qtextstream.h> | 24 | #include <qtextstream.h> |
29 | #include <qpopupmenu.h> | ||
30 | 25 | ||
31 | #include <unistd.h> | 26 | #include <unistd.h> |
32 | #include <net/if.h> | 27 | #include <net/if.h> |
33 | #include <netinet/in.h> | 28 | #include <netinet/in.h> |
34 | #include <sys/types.h> | 29 | #include <sys/types.h> |
35 | #include <sys/socket.h> | 30 | #include <sys/socket.h> |
36 | #include <sys/ioctl.h> | 31 | #include <sys/ioctl.h> |
37 | 32 | ||
38 | #include "irda.h" | 33 | #include "irda.h" |
39 | 34 | ||
40 | //=========================================================================== | 35 | //=========================================================================== |
41 | 36 | ||
42 | IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) | 37 | IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) |
43 | : QWidget ( parent, name ) | 38 | : QWidget ( parent, name ) |
44 | { | 39 | { |
45 | setFixedHeight ( 18 ); | 40 | setFixedHeight ( 18 ); |
46 | setFixedWidth ( 14 ); | 41 | setFixedWidth ( 14 ); |
47 | 42 | ||
48 | m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ); | 43 | m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ); |
49 | 44 | ||
50 | m_irdaOnPixmap = Resource::loadPixmap( "irdaapplet/irdaon" ); | 45 | m_irdaOnPixmap = Resource::loadPixmap( "irdaapplet/irdaon" ); |
51 | m_irdaOffPixmap = Resource::loadPixmap( "irdaapplet/irdaoff" ); | 46 | m_irdaOffPixmap = Resource::loadPixmap( "irdaapplet/irdaoff" ); |
52 | m_irdaDiscoveryOnPixmap = Resource::loadPixmap( "irdaapplet/magglass" ); | 47 | m_irdaDiscoveryOnPixmap = Resource::loadPixmap( "irdaapplet/magglass" ); |
53 | m_receiveActivePixmap = Resource::loadPixmap( "irdaapplet/receive" ); | 48 | m_receiveActivePixmap = Resource::loadPixmap( "irdaapplet/receive" ); |
54 | 49 | ||
55 | m_irda_active = false; | 50 | m_irda_active = false; |
56 | m_irda_discovery_active = false; | 51 | m_irda_discovery_active = false; |
57 | m_receive_active = false; | 52 | m_receive_active = false; |
58 | m_receive_state_changed = false; | 53 | m_receive_state_changed = false; |
59 | m_popup = 0; | 54 | m_popup = 0; |
60 | m_wasOn = false; | 55 | m_wasOn = false; |
61 | m_wasDiscover = false; | 56 | m_wasDiscover = false; |
62 | 57 | ||
63 | QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this ); | 58 | QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this ); |
64 | connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), | 59 | connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), |
65 | this, SLOT(slotMessage(const QCString&, const QByteArray& ) ) ); | 60 | this, SLOT(slotMessage(const QCString&, const QByteArray& ) ) ); |
66 | } | 61 | } |
67 | 62 | ||
68 | void IrdaApplet::show() | 63 | void IrdaApplet::show() |
69 | { | 64 | { |
70 | QWidget::show ( ); | 65 | QWidget::show ( ); |
71 | startTimer ( 2000 ); | 66 | startTimer ( 2000 ); |
72 | } | 67 | } |
73 | 68 | ||
74 | IrdaApplet::~IrdaApplet() | 69 | IrdaApplet::~IrdaApplet() |
75 | { | 70 | { |
76 | if ( m_sockfd >= 0 ) | 71 | if ( m_sockfd >= 0 ) |
77 | ::close ( m_sockfd ); | 72 | ::close ( m_sockfd ); |
78 | } | 73 | } |
79 | 74 | ||
80 | void IrdaApplet::popup ( QString message, QString icon ) | 75 | void IrdaApplet::popup ( QString message, QString icon ) |
81 | { | 76 | { |
82 | if ( !m_popup ) | 77 | if ( !m_popup ) |
83 | m_popup = new QPopupMenu ( this ); | 78 | m_popup = new QPopupMenu ( this ); |
84 | 79 | ||
85 | m_popup-> clear ( ); | 80 | m_popup-> clear ( ); |
86 | 81 | ||
87 | if ( icon. isEmpty ( )) | 82 | if ( icon. isEmpty ( )) |
88 | m_popup-> insertItem ( message, 0 ); | 83 | m_popup-> insertItem ( message, 0 ); |
89 | else | 84 | else |
90 | m_popup-> insertItem ( QIconSet ( Resource::loadPixmap ( icon )), message, 0 ); | 85 | m_popup-> insertItem ( QIconSet ( Resource::loadPixmap ( icon )), message, 0 ); |
91 | 86 | ||
92 | QPoint p = mapToGlobal ( QPoint ( 0, 0 )); | 87 | QPoint p = mapToGlobal ( QPoint ( 0, 0 )); |
93 | QSize s = m_popup-> sizeHint ( ); | 88 | QSize s = m_popup-> sizeHint ( ); |
94 | m_popup-> popup ( QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), | 89 | m_popup-> popup ( QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), |
95 | p. y ( ) - s. height ( ))); | 90 | p. y ( ) - s. height ( ))); |
96 | 91 | ||
97 | QTimer::singleShot ( 2000, this, SLOT( popupTimeout ( ))); | 92 | QTimer::singleShot ( 2000, this, SLOT( popupTimeout ( ))); |
98 | } | 93 | } |
99 | 94 | ||
100 | void IrdaApplet::popupTimeout ( ) | 95 | void IrdaApplet::popupTimeout ( ) |
101 | { | 96 | { |
102 | m_popup-> hide ( ); | 97 | m_popup-> hide ( ); |
103 | } | 98 | } |
104 | 99 | ||
105 | bool IrdaApplet::checkIrdaStatus ( ) | 100 | bool IrdaApplet::checkIrdaStatus ( ) |
106 | { | 101 | { |
107 | struct ifreq ifr; | 102 | struct ifreq ifr; |
108 | strcpy ( ifr. ifr_name, "irda0" ); | 103 | strcpy ( ifr. ifr_name, "irda0" ); |
109 | 104 | ||
110 | if ( ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 ) | 105 | if ( ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 ) |
111 | return false; | 106 | return false; |
112 | 107 | ||
113 | return ( ifr. ifr_flags & IFF_UP ); | 108 | return ( ifr. ifr_flags & IFF_UP ); |
114 | } | 109 | } |
115 | 110 | ||
116 | bool IrdaApplet::setIrdaStatus ( bool b ) | 111 | bool IrdaApplet::setIrdaStatus ( bool b ) |
117 | { | 112 | { |
118 | struct ifreq ifr; | 113 | struct ifreq ifr; |
119 | strcpy ( ifr. ifr_name, "irda0" ); | 114 | strcpy ( ifr. ifr_name, "irda0" ); |
120 | 115 | ||
121 | if ( ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 ) | 116 | if ( ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 ) |
122 | return false; | 117 | return false; |
123 | 118 | ||
124 | if ( b ) { | 119 | if ( b ) { |
125 | ifr. ifr_flags |= IFF_UP; | 120 | ifr. ifr_flags |= IFF_UP; |
126 | } | 121 | } |
127 | else { | 122 | else { |
128 | setIrdaDiscoveryStatus ( 0 ); | 123 | setIrdaDiscoveryStatus ( 0 ); |
129 | setIrdaReceiveStatus ( 0 ); | 124 | setIrdaReceiveStatus ( 0 ); |
130 | ifr. ifr_flags &= ~IFF_UP; | 125 | ifr. ifr_flags &= ~IFF_UP; |
131 | } | 126 | } |
132 | 127 | ||
133 | if ( ::ioctl ( m_sockfd, SIOCSIFFLAGS, &ifr ) < 0 ) | 128 | if ( ::ioctl ( m_sockfd, SIOCSIFFLAGS, &ifr ) < 0 ) |
134 | return false; | 129 | return false; |
135 | 130 | ||
136 | return true; | 131 | return true; |
137 | } | 132 | } |
138 | 133 | ||
139 | bool IrdaApplet::checkIrdaDiscoveryStatus ( ) | 134 | bool IrdaApplet::checkIrdaDiscoveryStatus ( ) |
140 | { | 135 | { |
141 | QFile discovery ( "/proc/sys/net/irda/discovery" ); | 136 | QFile discovery ( "/proc/sys/net/irda/discovery" ); |
142 | 137 | ||
143 | QString streamIn = "0"; | 138 | QString streamIn = "0"; |
144 | 139 | ||
145 | if ( discovery. open ( IO_ReadOnly )) { | 140 | if ( discovery. open ( IO_ReadOnly )) { |
146 | QTextStream stream ( &discovery ); | 141 | QTextStream stream ( &discovery ); |
147 | streamIn = stream. read ( ); | 142 | streamIn = stream. read ( ); |
148 | } | 143 | } |
149 | 144 | ||
150 | return streamIn. toInt ( ) > 0; | 145 | return streamIn. toInt ( ) > 0; |
151 | } | 146 | } |
152 | 147 | ||
153 | 148 | ||
154 | bool IrdaApplet::setIrdaDiscoveryStatus ( bool d ) | 149 | bool IrdaApplet::setIrdaDiscoveryStatus ( bool d ) |
155 | { | 150 | { |
156 | QFile discovery ( "/proc/sys/net/irda/discovery" ); | 151 | QFile discovery ( "/proc/sys/net/irda/discovery" ); |
157 | 152 | ||
158 | if ( discovery. open ( IO_WriteOnly | IO_Raw )) { | 153 | if ( discovery. open ( IO_WriteOnly | IO_Raw )) { |
159 | discovery.putch ( d ? '1' : '0' ); | 154 | discovery.putch ( d ? '1' : '0' ); |
160 | return true; | 155 | return true; |
161 | } | 156 | } |
162 | return false; | 157 | return false; |
163 | } | 158 | } |
164 | 159 | ||
165 | 160 | ||
166 | bool IrdaApplet::setIrdaReceiveStatus ( bool d ) | 161 | bool IrdaApplet::setIrdaReceiveStatus ( bool d ) |
167 | { | 162 | { |
168 | QCopEnvelope e ( "QPE/Obex", "receive(int)" ); | 163 | QCopEnvelope e ( "QPE/Obex", "receive(int)" ); |
169 | e << ( d ? 1 : 0 ); | 164 | e << ( d ? 1 : 0 ); |
170 | 165 | ||
171 | m_receive_active = d; | 166 | m_receive_active = d; |
172 | m_receive_state_changed = true; | 167 | m_receive_state_changed = true; |
173 | 168 | ||
174 | return true; | 169 | return true; |
175 | } | 170 | } |
176 | 171 | ||
177 | 172 | ||
178 | void IrdaApplet::showDiscovered ( ) | 173 | void IrdaApplet::showDiscovered ( ) |
179 | { | 174 | { |
180 | //static Sound snd_found ( "irdaapplet/irdaon" ); | 175 | //static Sound snd_found ( "irdaapplet/irdaon" ); |
181 | //static Sound snd_lost ( "irdaapplet/irdaoff" ); | 176 | //static Sound snd_lost ( "irdaapplet/irdaoff" ); |
182 | 177 | ||
183 | QFile discovery ( "/proc/net/irda/discovery" ); | 178 | QFile discovery ( "/proc/net/irda/discovery" ); |
184 | 179 | ||
185 | if ( discovery. open ( IO_ReadOnly )) { | 180 | if ( discovery. open ( IO_ReadOnly )) { |
186 | bool qcopsend = false; | 181 | bool qcopsend = false; |
187 | 182 | ||
188 | QString discoveredDevice; | 183 | QString discoveredDevice; |
189 | QString deviceAddr; | 184 | QString deviceAddr; |
190 | 185 | ||
191 | // since it is /proc we _must_ use QTextStream | 186 | // since it is /proc we _must_ use QTextStream |
192 | QStringList list = QStringList::split ( "\n", QTextStream ( &discovery ). read ( )); | 187 | QStringList list = QStringList::split ( "\n", QTextStream ( &discovery ). read ( )); |
193 | 188 | ||
194 | QMap <QString, QString>::Iterator it; | 189 | QMap <QString, QString>::Iterator it; |
195 | 190 | ||
196 | for ( it = m_devices. begin ( ); it != m_devices. end ( ); ++it ) | 191 | for ( it = m_devices. begin ( ); it != m_devices. end ( ); ++it ) |
197 | it. data ( ). prepend ( "+++" ); | 192 | it. data ( ). prepend ( "+++" ); |
198 | 193 | ||
199 | for ( QStringList::Iterator lit = list. begin ( ); lit != list. end ( ); ++lit ) { | 194 | for ( QStringList::Iterator lit = list. begin ( ); lit != list. end ( ); ++lit ) { |
200 | const QString &line = *lit; | 195 | const QString &line = *lit; |
201 | 196 | ||
202 | if ( line. startsWith ( "nickname:" )) { | 197 | if ( line. startsWith ( "nickname:" )) { |
203 | discoveredDevice = line. mid ( line. find ( ':' ) + 2, line. find ( ',' ) - line. find ( ':' ) - 2 ); | 198 | discoveredDevice = line. mid ( line. find ( ':' ) + 2, line. find ( ',' ) - line. find ( ':' ) - 2 ); |
204 | deviceAddr = line. mid ( line. find ( "daddr:" ) + 9, 8 ); | 199 | deviceAddr = line. mid ( line. find ( "daddr:" ) + 9, 8 ); |
205 | 200 | ||
206 | // qDebug(discoveredDevice + "(" + deviceAddr + ")"); | 201 | // qDebug(discoveredDevice + "(" + deviceAddr + ")"); |
207 | 202 | ||
208 | if ( !m_devices. contains ( deviceAddr )) { | 203 | if ( !m_devices. contains ( deviceAddr )) { |
209 | popup ( tr( "Found:" ) + " " + discoveredDevice ); | 204 | popup ( tr( "Found:" ) + " " + discoveredDevice ); |
210 | //snd_found. play ( ); | 205 | //snd_found. play ( ); |
211 | qcopsend = true; | 206 | qcopsend = true; |
212 | } | 207 | } |
213 | m_devices. replace ( deviceAddr, discoveredDevice ); | 208 | m_devices. replace ( deviceAddr, discoveredDevice ); |
214 | } | 209 | } |
215 | } | 210 | } |
216 | 211 | ||
217 | for ( it = m_devices. begin ( ); it != m_devices. end ( ); ) { | 212 | for ( it = m_devices. begin ( ); it != m_devices. end ( ); ) { |
218 | // qDebug("IrdaMon: delete " + it.currentKey() + "=" + *devicesAvailable[it.currentKey()] + "?"); | 213 | // qDebug("IrdaMon: delete " + it.currentKey() + "=" + *devicesAvailable[it.currentKey()] + "?"); |
219 | 214 | ||
220 | if ( it. data ( ). left ( 3 ) == "+++" ) { | 215 | if ( it. data ( ). left ( 3 ) == "+++" ) { |
221 | popup ( tr( "Lost:" ) + " " + it. data ( ). mid ( 3 )); | 216 | popup ( tr( "Lost:" ) + " " + it. data ( ). mid ( 3 )); |
222 | //snd_lost. play ( ); | 217 | //snd_lost. play ( ); |
223 | 218 | ||
224 | QMap <QString, QString>::Iterator tmp = it; | 219 | QMap <QString, QString>::Iterator tmp = it; |
225 | tmp++; | 220 | tmp++; |
226 | m_devices. remove ( it ); // in contrast to QValueListIterator this remove doesn't return the next Iterator | 221 | m_devices. remove ( it ); // in contrast to QValueListIterator this remove doesn't return the next Iterator |
227 | it = tmp; | 222 | it = tmp; |
228 | 223 | ||
229 | qcopsend = true; | 224 | qcopsend = true; |
230 | } | 225 | } |
231 | else | 226 | else |
232 | it++; | 227 | it++; |
233 | } | 228 | } |
234 | // XXX if( qcopsend ) { | 229 | // XXX if( qcopsend ) { |
235 | QCopEnvelope e ( "QPE/Network", "irdaSend(bool)" ); | 230 | QCopEnvelope e ( "QPE/Network", "irdaSend(bool)" ); |
236 | e << ( m_devices. count ( ) > 0 ); | 231 | e << ( m_devices. count ( ) > 0 ); |
237 | // } | 232 | // } |
238 | } | 233 | } |
239 | } | 234 | } |
240 | 235 | ||
241 | void IrdaApplet::mousePressEvent ( QMouseEvent * ) | 236 | void IrdaApplet::mousePressEvent ( QMouseEvent * ) |
242 | { | 237 | { |
243 | QPopupMenu *menu = new QPopupMenu ( this ); | 238 | QPopupMenu *menu = new QPopupMenu ( this ); |
244 | QString cmd; | 239 | QString cmd; |
245 | 240 | ||
246 | /* Refresh active state */ | 241 | /* Refresh active state */ |
247 | timerEvent ( 0 ); | 242 | timerEvent ( 0 ); |
248 | 243 | ||
249 | //menu->insertItem( tr("More..."), 4 ); | 244 | //menu->insertItem( tr("More..."), 4 ); |
250 | 245 | ||
251 | if ( m_irda_active && !m_devices. isEmpty ( )) { | 246 | if ( m_irda_active && !m_devices. isEmpty ( )) { |
252 | menu-> insertItem ( tr( "Discovered Device:" ), 9 ); | 247 | menu-> insertItem ( tr( "Discovered Device:" ), 9 ); |
253 | 248 | ||
254 | for ( QMap<QString, QString>::Iterator it = m_devices. begin ( ); it != m_devices. end ( ); ++it ) | 249 | for ( QMap<QString, QString>::Iterator it = m_devices. begin ( ); it != m_devices. end ( ); ++it ) |
255 | menu-> insertItem ( *it ); | 250 | menu-> insertItem ( *it ); |
256 | 251 | ||
257 | menu-> insertSeparator ( ); | 252 | menu-> insertSeparator ( ); |
258 | } | 253 | } |
259 | 254 | ||
260 | menu-> insertItem ( m_irda_active ? tr( "Disable IrDA" ) : tr( "Enable IrDA" ), 0 ); | 255 | menu-> insertItem ( m_irda_active ? tr( "Disable IrDA" ) : tr( "Enable IrDA" ), 0 ); |
261 | 256 | ||
262 | if ( m_irda_active ) { | 257 | if ( m_irda_active ) { |
263 | menu-> insertItem ( m_irda_discovery_active ? tr( "Disable Discovery" ) : tr( "Enable Discovery" ), 1 ); | 258 | menu-> insertItem ( m_irda_discovery_active ? tr( "Disable Discovery" ) : tr( "Enable Discovery" ), 1 ); |
264 | menu-> insertItem ( m_receive_active ? tr( "Disable Receive" ) : tr( "Enable Receive" ), 2 ); | 259 | menu-> insertItem ( m_receive_active ? tr( "Disable Receive" ) : tr( "Enable Receive" ), 2 ); |
265 | } | 260 | } |
266 | 261 | ||
267 | QPoint p = mapToGlobal ( QPoint ( 0, 0 ) ); | 262 | QPoint p = mapToGlobal ( QPoint ( 0, 0 ) ); |
268 | QSize s = menu-> sizeHint ( ); | 263 | QSize s = menu-> sizeHint ( ); |
269 | 264 | ||
270 | p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( )); | 265 | p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( )); |
271 | 266 | ||
272 | switch ( menu-> exec ( p )) { | 267 | switch ( menu-> exec ( p )) { |
273 | case 0: | 268 | case 0: |
274 | setIrdaStatus ( !m_irda_active ); | 269 | setIrdaStatus ( !m_irda_active ); |
275 | timerEvent ( 0 ); | 270 | timerEvent ( 0 ); |
276 | break; | 271 | break; |
277 | case 1: | 272 | case 1: |
278 | setIrdaDiscoveryStatus ( !m_irda_discovery_active ); | 273 | setIrdaDiscoveryStatus ( !m_irda_discovery_active ); |
279 | timerEvent ( 0 ); | 274 | timerEvent ( 0 ); |
280 | break; | 275 | break; |
281 | case 2: | 276 | case 2: |
282 | setIrdaReceiveStatus ( !m_receive_active ); | 277 | setIrdaReceiveStatus ( !m_receive_active ); |
283 | timerEvent( 0 ); | 278 | timerEvent( 0 ); |
284 | break; | 279 | break; |
285 | } | 280 | } |
diff --git a/core/applets/logoutapplet/logout.cpp b/core/applets/logoutapplet/logout.cpp index 92222c9..0ac0067 100644 --- a/core/applets/logoutapplet/logout.cpp +++ b/core/applets/logoutapplet/logout.cpp | |||
@@ -1,126 +1,124 @@ | |||
1 | #include <qpe/resource.h> | 1 | #include <qpe/resource.h> |
2 | #include <qpe/qcopenvelope_qws.h> | 2 | #include <qpe/qcopenvelope_qws.h> |
3 | 3 | ||
4 | #include <qapplication.h> | 4 | #include <qapplication.h> |
5 | #include <qiconset.h> | ||
6 | #include <qpopupmenu.h> | ||
7 | #include <qmessagebox.h> | 5 | #include <qmessagebox.h> |
8 | 6 | ||
9 | #include <unistd.h> | 7 | #include <unistd.h> |
10 | 8 | ||
11 | #include "logout.h" | 9 | #include "logout.h" |
12 | 10 | ||
13 | 11 | ||
14 | LogoutApplet::LogoutApplet ( ) | 12 | LogoutApplet::LogoutApplet ( ) |
15 | : QObject ( 0, "LogoutApplet" ) | 13 | : QObject ( 0, "LogoutApplet" ) |
16 | { | 14 | { |
17 | } | 15 | } |
18 | 16 | ||
19 | LogoutApplet::~LogoutApplet ( ) | 17 | LogoutApplet::~LogoutApplet ( ) |
20 | { | 18 | { |
21 | } | 19 | } |
22 | 20 | ||
23 | int LogoutApplet::position ( ) const | 21 | int LogoutApplet::position ( ) const |
24 | { | 22 | { |
25 | return 0; | 23 | return 0; |
26 | } | 24 | } |
27 | 25 | ||
28 | QString LogoutApplet::name ( ) const | 26 | QString LogoutApplet::name ( ) const |
29 | { | 27 | { |
30 | return tr( "Logout shortcut" ); | 28 | return tr( "Logout shortcut" ); |
31 | } | 29 | } |
32 | 30 | ||
33 | QString LogoutApplet::text ( ) const | 31 | QString LogoutApplet::text ( ) const |
34 | { | 32 | { |
35 | return tr( "Logout" ); | 33 | return tr( "Logout" ); |
36 | } | 34 | } |
37 | 35 | ||
38 | QString LogoutApplet::tr( const char* s ) const | 36 | QString LogoutApplet::tr( const char* s ) const |
39 | { | 37 | { |
40 | return qApp->translate( "LogoutApplet", s, 0 ); | 38 | return qApp->translate( "LogoutApplet", s, 0 ); |
41 | } | 39 | } |
42 | 40 | ||
43 | QString LogoutApplet::tr( const char* s, const char* p ) const | 41 | QString LogoutApplet::tr( const char* s, const char* p ) const |
44 | { | 42 | { |
45 | return qApp->translate( "LogoutApplet", s, p ); | 43 | return qApp->translate( "LogoutApplet", s, p ); |
46 | } | 44 | } |
47 | 45 | ||
48 | QIconSet LogoutApplet::icon ( ) const | 46 | QIconSet LogoutApplet::icon ( ) const |
49 | { | 47 | { |
50 | QPixmap pix; | 48 | QPixmap pix; |
51 | QImage img = Resource::loadImage ( "logout" ); | 49 | QImage img = Resource::loadImage ( "logout" ); |
52 | 50 | ||
53 | if ( !img. isNull ( )) | 51 | if ( !img. isNull ( )) |
54 | pix. convertFromImage ( img. smoothScale ( 14, 14 )); | 52 | pix. convertFromImage ( img. smoothScale ( 14, 14 )); |
55 | return pix; | 53 | return pix; |
56 | } | 54 | } |
57 | 55 | ||
58 | QPopupMenu *LogoutApplet::popup ( QWidget * ) const | 56 | QPopupMenu *LogoutApplet::popup ( QWidget * ) const |
59 | { | 57 | { |
60 | return 0; | 58 | return 0; |
61 | } | 59 | } |
62 | 60 | ||
63 | // This is a workaround for a Qt bug | 61 | // This is a workaround for a Qt bug |
64 | // clipboard applet has to stop its poll timer, or Qt/E | 62 | // clipboard applet has to stop its poll timer, or Qt/E |
65 | // will hang on quit() right before it emits aboutToQuit() | 63 | // will hang on quit() right before it emits aboutToQuit() |
66 | 64 | ||
67 | class HackApplication : public QApplication { | 65 | class HackApplication : public QApplication { |
68 | public: | 66 | public: |
69 | HackApplication ( ) : QApplication ( dummy, 0 ) | 67 | HackApplication ( ) : QApplication ( dummy, 0 ) |
70 | { | 68 | { |
71 | } | 69 | } |
72 | 70 | ||
73 | void emit_about_to_quit ( ) | 71 | void emit_about_to_quit ( ) |
74 | { | 72 | { |
75 | emit aboutToQuit ( ); | 73 | emit aboutToQuit ( ); |
76 | } | 74 | } |
77 | 75 | ||
78 | int dummy; | 76 | int dummy; |
79 | }; | 77 | }; |
80 | 78 | ||
81 | 79 | ||
82 | void LogoutApplet::activated ( ) | 80 | void LogoutApplet::activated ( ) |
83 | { | 81 | { |
84 | QMessageBox mb ( tr( "Logout" ), | 82 | QMessageBox mb ( tr( "Logout" ), |
85 | tr( "Do you really want to\nend this session ?" ), | 83 | tr( "Do you really want to\nend this session ?" ), |
86 | QMessageBox::NoIcon, | 84 | QMessageBox::NoIcon, |
87 | QMessageBox::Yes | QMessageBox::Default, | 85 | QMessageBox::Yes | QMessageBox::Default, |
88 | QMessageBox::No | QMessageBox::Escape, | 86 | QMessageBox::No | QMessageBox::Escape, |
89 | QMessageBox::NoButton ); | 87 | QMessageBox::NoButton ); |
90 | 88 | ||
91 | mb. setButtonText ( QMessageBox::Yes, "Yes" ); | 89 | mb. setButtonText ( QMessageBox::Yes, "Yes" ); |
92 | mb. setButtonText ( QMessageBox::No, "No" ); | 90 | mb. setButtonText ( QMessageBox::No, "No" ); |
93 | mb. setIconPixmap ( icon ( ). pixmap ( )); | 91 | mb. setIconPixmap ( icon ( ). pixmap ( )); |
94 | 92 | ||
95 | if ( mb. exec ( ) == QMessageBox::Yes ) { | 93 | if ( mb. exec ( ) == QMessageBox::Yes ) { |
96 | { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); } | 94 | { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); } |
97 | 95 | ||
98 | qApp-> processEvents ( ); // ensure the message goes out. | 96 | qApp-> processEvents ( ); // ensure the message goes out. |
99 | sleep ( 1 ); // You have 1 second to comply. | 97 | sleep ( 1 ); // You have 1 second to comply. |
100 | 98 | ||
101 | ((HackApplication *) qApp )-> emit_about_to_quit ( ); | 99 | ((HackApplication *) qApp )-> emit_about_to_quit ( ); |
102 | qApp-> quit(); | 100 | qApp-> quit(); |
103 | } | 101 | } |
104 | } | 102 | } |
105 | 103 | ||
106 | 104 | ||
107 | QRESULT LogoutApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) | 105 | QRESULT LogoutApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) |
108 | { | 106 | { |
109 | *iface = 0; | 107 | *iface = 0; |
110 | if ( uuid == IID_QUnknown ) | 108 | if ( uuid == IID_QUnknown ) |
111 | *iface = this; | 109 | *iface = this; |
112 | else if ( uuid == IID_MenuApplet ) | 110 | else if ( uuid == IID_MenuApplet ) |
113 | *iface = this; | 111 | *iface = this; |
114 | else | 112 | else |
115 | return QS_FALSE; | 113 | return QS_FALSE; |
116 | 114 | ||
117 | if ( *iface ) | 115 | if ( *iface ) |
118 | (*iface)-> addRef ( ); | 116 | (*iface)-> addRef ( ); |
119 | return QS_OK; | 117 | return QS_OK; |
120 | } | 118 | } |
121 | 119 | ||
122 | Q_EXPORT_INTERFACE( ) | 120 | Q_EXPORT_INTERFACE( ) |
123 | { | 121 | { |
124 | Q_CREATE_INSTANCE( LogoutApplet ) | 122 | Q_CREATE_INSTANCE( LogoutApplet ) |
125 | } | 123 | } |
126 | 124 | ||
diff --git a/core/applets/multikeyapplet/multikey.cpp b/core/applets/multikeyapplet/multikey.cpp index b36ee12..b17498d 100644 --- a/core/applets/multikeyapplet/multikey.cpp +++ b/core/applets/multikeyapplet/multikey.cpp | |||
@@ -1,149 +1,143 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2004 Anton Kachalov mouse@altlinux.ru | 2 | ** Copyright (C) 2004 Anton Kachalov mouse@altlinux.ru |
3 | ** All rights reserved. | 3 | ** All rights reserved. |
4 | ** | 4 | ** |
5 | ** This file may be distributed and/or modified under the terms of the | 5 | ** This file may be distributed and/or modified under the terms of the |
6 | ** GNU General Public License version 2 as published by the Free Software | 6 | ** GNU General Public License version 2 as published by the Free Software |
7 | ** Foundation and appearing in the file LICENSE.GPL included in the | 7 | ** Foundation and appearing in the file LICENSE.GPL included in the |
8 | ** packaging of this file. | 8 | ** packaging of this file. |
9 | ** | 9 | ** |
10 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 10 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
11 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 11 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
12 | ** | 12 | ** |
13 | **********************************************************************/ | 13 | **********************************************************************/ |
14 | 14 | ||
15 | #include "multikey.h" | 15 | #include "multikey.h" |
16 | 16 | ||
17 | /* OPIE */ | 17 | /* OPIE */ |
18 | #include <opie2/otaskbarapplet.h> | 18 | #include <opie2/otaskbarapplet.h> |
19 | #include <qpe/global.h> | ||
20 | #include <qpe/config.h> | ||
21 | #include <qpe/qcopenvelope_qws.h> | 19 | #include <qpe/qcopenvelope_qws.h> |
22 | #include <qpe/qpeapplication.h> | ||
23 | 20 | ||
24 | /* QT */ | 21 | /* QT */ |
25 | #include <qlabel.h> | ||
26 | #include <qdir.h> | 22 | #include <qdir.h> |
27 | #include <qfileinfo.h> | ||
28 | #include <qcopchannel_qws.h> | ||
29 | 23 | ||
30 | Multikey::Multikey(QWidget *parent) : QLabel(parent), popupMenu(this), current("EN") | 24 | Multikey::Multikey(QWidget *parent) : QLabel(parent), popupMenu(this), current("EN") |
31 | { | 25 | { |
32 | QCopChannel* swChannel = new QCopChannel("MultiKey/Switcher", this); | 26 | QCopChannel* swChannel = new QCopChannel("MultiKey/Switcher", this); |
33 | connect( swChannel, SIGNAL(received(const QCString &, const QByteArray &)), | 27 | connect( swChannel, SIGNAL(received(const QCString &, const QByteArray &)), |
34 | this, SLOT(message(const QCString &, const QByteArray &))); | 28 | this, SLOT(message(const QCString &, const QByteArray &))); |
35 | 29 | ||
36 | setFont( QFont( "Helvetica", 10, QFont::Normal ) ); | 30 | setFont( QFont( "Helvetica", 10, QFont::Normal ) ); |
37 | QPEApplication::setStylusOperation(this, QPEApplication::RightOnHold); | 31 | QPEApplication::setStylusOperation(this, QPEApplication::RightOnHold); |
38 | lang = 0; | 32 | lang = 0; |
39 | QCopEnvelope e("MultiKey/Keyboard", "getmultikey()"); | 33 | QCopEnvelope e("MultiKey/Keyboard", "getmultikey()"); |
40 | setText("EN"); | 34 | setText("EN"); |
41 | popupMenu.insertItem("EN", 0); | 35 | popupMenu.insertItem("EN", 0); |
42 | show(); | 36 | show(); |
43 | } | 37 | } |
44 | 38 | ||
45 | void Multikey::mousePressEvent(QMouseEvent *ev) | 39 | void Multikey::mousePressEvent(QMouseEvent *ev) |
46 | { | 40 | { |
47 | if (!sw_maps.count()) | 41 | if (!sw_maps.count()) |
48 | return; | 42 | return; |
49 | 43 | ||
50 | if (ev->button() == RightButton) { | 44 | if (ev->button() == RightButton) { |
51 | 45 | ||
52 | QPoint p = mapToGlobal(QPoint(0, 0)); | 46 | QPoint p = mapToGlobal(QPoint(0, 0)); |
53 | QSize s = popupMenu.sizeHint(); | 47 | QSize s = popupMenu.sizeHint(); |
54 | int opt = popupMenu.exec(QPoint(p.x() + (width() / 2) - (s.width() / 2), | 48 | int opt = popupMenu.exec(QPoint(p.x() + (width() / 2) - (s.width() / 2), |
55 | p.y() - s.height()), 0); | 49 | p.y() - s.height()), 0); |
56 | 50 | ||
57 | if (opt == -1) | 51 | if (opt == -1) |
58 | return; | 52 | return; |
59 | lang = opt; | 53 | lang = opt; |
60 | 54 | ||
61 | QCopEnvelope e("MultiKey/Keyboard", "setmultikey(QString)"); | 55 | QCopEnvelope e("MultiKey/Keyboard", "setmultikey(QString)"); |
62 | e << sw_maps[lang]; | 56 | e << sw_maps[lang]; |
63 | setText(labels[lang]); | 57 | setText(labels[lang]); |
64 | } | 58 | } |
65 | QWidget::mousePressEvent(ev); | 59 | QWidget::mousePressEvent(ev); |
66 | } | 60 | } |
67 | 61 | ||
68 | void Multikey::mouseReleaseEvent(QMouseEvent *ev) | 62 | void Multikey::mouseReleaseEvent(QMouseEvent *ev) |
69 | { | 63 | { |
70 | if (!sw_maps.count()) | 64 | if (!sw_maps.count()) |
71 | return; | 65 | return; |
72 | 66 | ||
73 | lang = lang < sw_maps.count()-1 ? lang+1 : 0; | 67 | lang = lang < sw_maps.count()-1 ? lang+1 : 0; |
74 | QCopEnvelope e("MultiKey/Keyboard", "setmultikey(QString)"); | 68 | QCopEnvelope e("MultiKey/Keyboard", "setmultikey(QString)"); |
75 | //qDebug("Lang=%d, count=%d, lab=%s", lang, sw_maps.count(), labels[lang].ascii()); | 69 | //qDebug("Lang=%d, count=%d, lab=%s", lang, sw_maps.count(), labels[lang].ascii()); |
76 | e << sw_maps[lang]; | 70 | e << sw_maps[lang]; |
77 | setText(labels[lang]); | 71 | setText(labels[lang]); |
78 | } | 72 | } |
79 | 73 | ||
80 | void Multikey::message(const QCString &message, const QByteArray &data) | 74 | void Multikey::message(const QCString &message, const QByteArray &data) |
81 | { | 75 | { |
82 | if ( message == "setsw(QString,QString)" ) { | 76 | if ( message == "setsw(QString,QString)" ) { |
83 | 77 | ||
84 | QDataStream stream(data, IO_ReadOnly); | 78 | QDataStream stream(data, IO_ReadOnly); |
85 | QString maps, current_map; | 79 | QString maps, current_map; |
86 | stream >> maps >> current_map; | 80 | stream >> maps >> current_map; |
87 | QStringList sw = QStringList::split(QChar('|'), maps); | 81 | QStringList sw = QStringList::split(QChar('|'), maps); |
88 | sw.append(current_map); | 82 | sw.append(current_map); |
89 | 83 | ||
90 | QDir map_dir(QPEApplication::qpeDir() + "/share/multikey/", "*.keymap"); | 84 | QDir map_dir(QPEApplication::qpeDir() + "/share/multikey/", "*.keymap"); |
91 | lang = 0; | 85 | lang = 0; |
92 | labels.clear(); | 86 | labels.clear(); |
93 | sw_maps.clear(); | 87 | sw_maps.clear(); |
94 | popupMenu.clear(); | 88 | popupMenu.clear(); |
95 | 89 | ||
96 | for (uint i = 0; i < sw.count(); ++i) { | 90 | for (uint i = 0; i < sw.count(); ++i) { |
97 | QString keymap_map; | 91 | QString keymap_map; |
98 | if (sw[i][0] != '/') { | 92 | if (sw[i][0] != '/') { |
99 | 93 | ||
100 | keymap_map = map_dir.absPath() + "/" + sw[i]; | 94 | keymap_map = map_dir.absPath() + "/" + sw[i]; |
101 | } else { | 95 | } else { |
102 | 96 | ||
103 | if ((map_dir.exists(QFileInfo(sw[i]).fileName(), false) | 97 | if ((map_dir.exists(QFileInfo(sw[i]).fileName(), false) |
104 | && i != sw.count()-1) || !QFile::exists(sw[i])) { | 98 | && i != sw.count()-1) || !QFile::exists(sw[i])) { |
105 | continue; | 99 | continue; |
106 | } | 100 | } |
107 | keymap_map = sw[i]; | 101 | keymap_map = sw[i]; |
108 | } | 102 | } |
109 | 103 | ||
110 | QFile map(keymap_map); | 104 | QFile map(keymap_map); |
111 | if (map.open(IO_ReadOnly)) { | 105 | if (map.open(IO_ReadOnly)) { |
112 | QString line; | 106 | QString line; |
113 | 107 | ||
114 | map.readLine(line, 1024); | 108 | map.readLine(line, 1024); |
115 | while (!map.atEnd()) { | 109 | while (!map.atEnd()) { |
116 | 110 | ||
117 | if (line.find(QRegExp("^sw\\s*=\\s*")) != -1) { | 111 | if (line.find(QRegExp("^sw\\s*=\\s*")) != -1) { |
118 | 112 | ||
119 | if (i != sw.count()-1) { | 113 | if (i != sw.count()-1) { |
120 | if (keymap_map == current_map) { | 114 | if (keymap_map == current_map) { |
121 | lang = i; | 115 | lang = i; |
122 | } | 116 | } |
123 | sw_maps.append(keymap_map); | 117 | sw_maps.append(keymap_map); |
124 | labels.append(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace()); | 118 | labels.append(line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace()); |
125 | popupMenu.insertItem(labels[labels.count()-1], labels.count()-1); | 119 | popupMenu.insertItem(labels[labels.count()-1], labels.count()-1); |
126 | } else { | 120 | } else { |
127 | current = line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace(); | 121 | current = line.right(line.length() - line.find(QChar('=')) - 1).stripWhiteSpace(); |
128 | } | 122 | } |
129 | break; | 123 | break; |
130 | } | 124 | } |
131 | map.readLine(line, 1024); | 125 | map.readLine(line, 1024); |
132 | } | 126 | } |
133 | map.close(); | 127 | map.close(); |
134 | } | 128 | } |
135 | } | 129 | } |
136 | 130 | ||
137 | setText(current); | 131 | setText(current); |
138 | } | 132 | } |
139 | } | 133 | } |
140 | 134 | ||
141 | int Multikey::position() | 135 | int Multikey::position() |
142 | { | 136 | { |
143 | return 10; | 137 | return 10; |
144 | } | 138 | } |
145 | 139 | ||
146 | Q_EXPORT_INTERFACE() | 140 | Q_EXPORT_INTERFACE() |
147 | { | 141 | { |
148 | Q_CREATE_INSTANCE( OTaskbarAppletWrapper<Multikey> ); | 142 | Q_CREATE_INSTANCE( OTaskbarAppletWrapper<Multikey> ); |
149 | } | 143 | } |
diff --git a/core/launcher/applauncher.cpp b/core/launcher/applauncher.cpp index c3584ad..7d3c032 100644 --- a/core/launcher/applauncher.cpp +++ b/core/launcher/applauncher.cpp | |||
@@ -1,316 +1,312 @@ | |||
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 | 20 | ||
21 | #ifndef QTOPIA_INTERNAL_PRELOADACCESS | 21 | #ifndef QTOPIA_INTERNAL_PRELOADACCESS |
22 | #define QTOPIA_INTERNAL_PRELOADACCESS | 22 | #define QTOPIA_INTERNAL_PRELOADACCESS |
23 | #endif | 23 | #endif |
24 | #ifndef QTOPIA_INTERNAL_FILEOPERATIONS | 24 | #ifndef QTOPIA_INTERNAL_FILEOPERATIONS |
25 | #define QTOPIA_INTERNAL_FILEOPERATIONS | 25 | #define QTOPIA_INTERNAL_FILEOPERATIONS |
26 | #endif | 26 | #endif |
27 | #ifndef QTOPIA_PROGRAM_MONITOR | 27 | #ifndef QTOPIA_PROGRAM_MONITOR |
28 | #define QTOPIA_PROGRAM_MONITOR | 28 | #define QTOPIA_PROGRAM_MONITOR |
29 | #endif | 29 | #endif |
30 | #include <opie2/oglobal.h> | 30 | #include <opie2/oglobal.h> |
31 | 31 | ||
32 | #ifndef Q_OS_WIN32 | 32 | #ifndef Q_OS_WIN32 |
33 | #include <sys/stat.h> | 33 | #include <sys/stat.h> |
34 | #include <sys/wait.h> | 34 | #include <sys/wait.h> |
35 | #include <sys/file.h> | 35 | #include <sys/file.h> |
36 | #include <unistd.h> | 36 | #include <unistd.h> |
37 | #include <sys/time.h> | 37 | #include <sys/time.h> |
38 | #include <sys/resource.h> | 38 | #include <sys/resource.h> |
39 | #include <errno.h> | 39 | #include <errno.h> |
40 | #else | 40 | #else |
41 | #include <process.h> | 41 | #include <process.h> |
42 | #include <windows.h> | 42 | #include <windows.h> |
43 | #include <winbase.h> | 43 | #include <winbase.h> |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | #include <signal.h> | 46 | #include <signal.h> |
47 | #include <sys/types.h> | 47 | #include <sys/types.h> |
48 | #include <stdlib.h> | 48 | #include <stdlib.h> |
49 | 49 | ||
50 | #include <qtimer.h> | 50 | #include <qtimer.h> |
51 | #include <qwindowsystem_qws.h> | 51 | #include <qwindowsystem_qws.h> |
52 | #include <qmessagebox.h> | 52 | #include <qmessagebox.h> |
53 | #include <qfile.h> | ||
54 | #include <qfileinfo.h> | 53 | #include <qfileinfo.h> |
55 | 54 | ||
56 | #include <qtopia/qcopenvelope_qws.h> | 55 | #include <qtopia/qcopenvelope_qws.h> |
57 | #include <qtopia/applnk.h> | ||
58 | #include <qtopia/qpeapplication.h> | 56 | #include <qtopia/qpeapplication.h> |
59 | #include <qtopia/config.h> | ||
60 | #include <qtopia/global.h> | ||
61 | 57 | ||
62 | #include "applauncher.h" | 58 | #include "applauncher.h" |
63 | #include "documentlist.h" | 59 | #include "documentlist.h" |
64 | 60 | ||
65 | const int AppLauncher::RAISE_TIMEOUT_MS = 5000; | 61 | const int AppLauncher::RAISE_TIMEOUT_MS = 5000; |
66 | 62 | ||
67 | //--------------------------------------------------------------------------- | 63 | //--------------------------------------------------------------------------- |
68 | 64 | ||
69 | static AppLauncher* appLauncherPtr; | 65 | static AppLauncher* appLauncherPtr; |
70 | 66 | ||
71 | const int appStopEventID = 1290; | 67 | const int appStopEventID = 1290; |
72 | 68 | ||
73 | class AppStoppedEvent : public QCustomEvent | 69 | class AppStoppedEvent : public QCustomEvent |
74 | { | 70 | { |
75 | public: | 71 | public: |
76 | AppStoppedEvent(int pid, int status) | 72 | AppStoppedEvent(int pid, int status) |
77 | : QCustomEvent( appStopEventID ), mPid(pid), mStatus(status) { } | 73 | : QCustomEvent( appStopEventID ), mPid(pid), mStatus(status) { } |
78 | 74 | ||
79 | int pid() { return mPid; } | 75 | int pid() { return mPid; } |
80 | int status() { return mStatus; } | 76 | int status() { return mStatus; } |
81 | 77 | ||
82 | private: | 78 | private: |
83 | int mPid, mStatus; | 79 | int mPid, mStatus; |
84 | }; | 80 | }; |
85 | 81 | ||
86 | AppLauncher::AppLauncher(QObject *parent, const char *name) | 82 | AppLauncher::AppLauncher(QObject *parent, const char *name) |
87 | : QObject(parent, name), qlPid(0), qlReady(FALSE), | 83 | : QObject(parent, name), qlPid(0), qlReady(FALSE), |
88 | appKillerBox(0) | 84 | appKillerBox(0) |
89 | { | 85 | { |
90 | connect(qwsServer, SIGNAL(newChannel(const QString&)), this, SLOT(newQcopChannel(const QString&))); | 86 | connect(qwsServer, SIGNAL(newChannel(const QString&)), this, SLOT(newQcopChannel(const QString&))); |
91 | connect(qwsServer, SIGNAL(removedChannel(const QString&)), this, SLOT(removedQcopChannel(const QString&))); | 87 | connect(qwsServer, SIGNAL(removedChannel(const QString&)), this, SLOT(removedQcopChannel(const QString&))); |
92 | QCopChannel* channel = new QCopChannel( "QPE/System", this ); | 88 | QCopChannel* channel = new QCopChannel( "QPE/System", this ); |
93 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), | 89 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), |
94 | this, SLOT(received(const QCString&, const QByteArray&)) ); | 90 | this, SLOT(received(const QCString&, const QByteArray&)) ); |
95 | 91 | ||
96 | channel = new QCopChannel( "QPE/Server", this ); | 92 | channel = new QCopChannel( "QPE/Server", this ); |
97 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), | 93 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), |
98 | this, SLOT(received(const QCString&, const QByteArray&)) ); | 94 | this, SLOT(received(const QCString&, const QByteArray&)) ); |
99 | 95 | ||
100 | #ifndef Q_OS_WIN32 | 96 | #ifndef Q_OS_WIN32 |
101 | signal(SIGCHLD, signalHandler); | 97 | signal(SIGCHLD, signalHandler); |
102 | #else | 98 | #else |
103 | runningAppsProc.setAutoDelete( TRUE ); | 99 | runningAppsProc.setAutoDelete( TRUE ); |
104 | #endif | 100 | #endif |
105 | QString tmp = qApp->argv()[0]; | 101 | QString tmp = qApp->argv()[0]; |
106 | int pos = tmp.findRev('/'); | 102 | int pos = tmp.findRev('/'); |
107 | if ( pos > -1 ) | 103 | if ( pos > -1 ) |
108 | tmp = tmp.mid(++pos); | 104 | tmp = tmp.mid(++pos); |
109 | runningApps[::getpid()] = tmp; | 105 | runningApps[::getpid()] = tmp; |
110 | 106 | ||
111 | appLauncherPtr = this; | 107 | appLauncherPtr = this; |
112 | 108 | ||
113 | QTimer::singleShot( 1000, this, SLOT(createQuickLauncher()) ); | 109 | QTimer::singleShot( 1000, this, SLOT(createQuickLauncher()) ); |
114 | } | 110 | } |
115 | 111 | ||
116 | AppLauncher::~AppLauncher() | 112 | AppLauncher::~AppLauncher() |
117 | { | 113 | { |
118 | appLauncherPtr = 0; | 114 | appLauncherPtr = 0; |
119 | #ifndef Q_OS_WIN32 | 115 | #ifndef Q_OS_WIN32 |
120 | signal(SIGCHLD, SIG_DFL); | 116 | signal(SIGCHLD, SIG_DFL); |
121 | #endif | 117 | #endif |
122 | if ( qlPid ) { | 118 | if ( qlPid ) { |
123 | int status; | 119 | int status; |
124 | ::kill( qlPid, SIGTERM ); | 120 | ::kill( qlPid, SIGTERM ); |
125 | waitpid( qlPid, &status, 0 ); | 121 | waitpid( qlPid, &status, 0 ); |
126 | } | 122 | } |
127 | } | 123 | } |
128 | 124 | ||
129 | /* We use the QCopChannel of the app as an indicator of when it has been launched | 125 | /* We use the QCopChannel of the app as an indicator of when it has been launched |
130 | so that we can disable the busy indicators */ | 126 | so that we can disable the busy indicators */ |
131 | void AppLauncher::newQcopChannel(const QString& channelName) | 127 | void AppLauncher::newQcopChannel(const QString& channelName) |
132 | { | 128 | { |
133 | // qDebug("channel %s added", channelName.data() ); | 129 | // qDebug("channel %s added", channelName.data() ); |
134 | QString prefix("QPE/Application/"); | 130 | QString prefix("QPE/Application/"); |
135 | if (channelName.startsWith(prefix)) { | 131 | if (channelName.startsWith(prefix)) { |
136 | { | 132 | { |
137 | QCopEnvelope e("QPE/System", "newChannel(QString)"); | 133 | QCopEnvelope e("QPE/System", "newChannel(QString)"); |
138 | e << channelName; | 134 | e << channelName; |
139 | } | 135 | } |
140 | QString appName = channelName.mid(prefix.length()); | 136 | QString appName = channelName.mid(prefix.length()); |
141 | if ( appName != "quicklauncher" ) { | 137 | if ( appName != "quicklauncher" ) { |
142 | emit connected( appName ); | 138 | emit connected( appName ); |
143 | QCopEnvelope e("QPE/System", "notBusy(QString)"); | 139 | QCopEnvelope e("QPE/System", "notBusy(QString)"); |
144 | e << appName; | 140 | e << appName; |
145 | } | 141 | } |
146 | } else if (channelName.startsWith("QPE/QuickLauncher-")) { | 142 | } else if (channelName.startsWith("QPE/QuickLauncher-")) { |
147 | qDebug("Registered %s", channelName.latin1()); | 143 | qDebug("Registered %s", channelName.latin1()); |
148 | int pid = channelName.mid(18).toInt(); | 144 | int pid = channelName.mid(18).toInt(); |
149 | if (pid == qlPid) | 145 | if (pid == qlPid) |
150 | qlReady = TRUE; | 146 | qlReady = TRUE; |
151 | } | 147 | } |
152 | } | 148 | } |
153 | 149 | ||
154 | void AppLauncher::removedQcopChannel(const QString& channelName) | 150 | void AppLauncher::removedQcopChannel(const QString& channelName) |
155 | { | 151 | { |
156 | if (channelName.startsWith("QPE/Application/")) { | 152 | if (channelName.startsWith("QPE/Application/")) { |
157 | QCopEnvelope e("QPE/System", "removedChannel(QString)"); | 153 | QCopEnvelope e("QPE/System", "removedChannel(QString)"); |
158 | e << channelName; | 154 | e << channelName; |
159 | } | 155 | } |
160 | } | 156 | } |
161 | 157 | ||
162 | void AppLauncher::received(const QCString& msg, const QByteArray& data) | 158 | void AppLauncher::received(const QCString& msg, const QByteArray& data) |
163 | { | 159 | { |
164 | QDataStream stream( data, IO_ReadOnly ); | 160 | QDataStream stream( data, IO_ReadOnly ); |
165 | if ( msg == "execute(QString)" ) { | 161 | if ( msg == "execute(QString)" ) { |
166 | QString t; | 162 | QString t; |
167 | stream >> t; | 163 | stream >> t; |
168 | if ( !executeBuiltin( t, QString::null ) ) | 164 | if ( !executeBuiltin( t, QString::null ) ) |
169 | execute(t, QString::null); | 165 | execute(t, QString::null); |
170 | } else if ( msg == "execute(QString,QString)" ) { | 166 | } else if ( msg == "execute(QString,QString)" ) { |
171 | QString t,d; | 167 | QString t,d; |
172 | stream >> t >> d; | 168 | stream >> t >> d; |
173 | if ( !executeBuiltin( t, d ) ) | 169 | if ( !executeBuiltin( t, d ) ) |
174 | execute( t, d ); | 170 | execute( t, d ); |
175 | } else if ( msg == "processQCop(QString)" ) { // from QPE/Server | 171 | } else if ( msg == "processQCop(QString)" ) { // from QPE/Server |
176 | QString t; | 172 | QString t; |
177 | stream >> t; | 173 | stream >> t; |
178 | if ( !executeBuiltin( t, QString::null ) ) | 174 | if ( !executeBuiltin( t, QString::null ) ) |
179 | execute( t, QString::null, TRUE); | 175 | execute( t, QString::null, TRUE); |
180 | } else if ( msg == "raise(QString)" ) { | 176 | } else if ( msg == "raise(QString)" ) { |
181 | QString appName; | 177 | QString appName; |
182 | stream >> appName; | 178 | stream >> appName; |
183 | 179 | ||
184 | if ( !executeBuiltin( appName, QString::null ) ) { | 180 | if ( !executeBuiltin( appName, QString::null ) ) { |
185 | if ( !waitingHeartbeat.contains( appName ) && appKillerName != appName ) { | 181 | if ( !waitingHeartbeat.contains( appName ) && appKillerName != appName ) { |
186 | //qDebug( "Raising: %s", appName.latin1() ); | 182 | //qDebug( "Raising: %s", appName.latin1() ); |
187 | QCString channel = "QPE/Application/"; | 183 | QCString channel = "QPE/Application/"; |
188 | channel += appName.latin1(); | 184 | channel += appName.latin1(); |
189 | 185 | ||
190 | // Need to lock it to avoid race conditions with QPEApplication::processQCopFile | 186 | // Need to lock it to avoid race conditions with QPEApplication::processQCopFile |
191 | QFile f("/tmp/qcop-msg-" + appName); | 187 | QFile f("/tmp/qcop-msg-" + appName); |
192 | if ( f.open(IO_WriteOnly | IO_Append) ) { | 188 | if ( f.open(IO_WriteOnly | IO_Append) ) { |
193 | #ifndef Q_OS_WIN32 | 189 | #ifndef Q_OS_WIN32 |
194 | flock(f.handle(), LOCK_EX); | 190 | flock(f.handle(), LOCK_EX); |
195 | #endif | 191 | #endif |
196 | QDataStream ds(&f); | 192 | QDataStream ds(&f); |
197 | QByteArray b; | 193 | QByteArray b; |
198 | QDataStream bstream(b, IO_WriteOnly); | 194 | QDataStream bstream(b, IO_WriteOnly); |
199 | ds << channel << QCString("raise()") << b; | 195 | ds << channel << QCString("raise()") << b; |
200 | f.flush(); | 196 | f.flush(); |
201 | #ifndef Q_OS_WIN32 | 197 | #ifndef Q_OS_WIN32 |
202 | flock(f.handle(), LOCK_UN); | 198 | flock(f.handle(), LOCK_UN); |
203 | #endif | 199 | #endif |
204 | f.close(); | 200 | f.close(); |
205 | } | 201 | } |
206 | bool alreadyRunning = isRunning( appName ); | 202 | bool alreadyRunning = isRunning( appName ); |
207 | if ( execute(appName, QString::null) ) { | 203 | if ( execute(appName, QString::null) ) { |
208 | int id = startTimer(RAISE_TIMEOUT_MS + alreadyRunning?2000:0); | 204 | int id = startTimer(RAISE_TIMEOUT_MS + alreadyRunning?2000:0); |
209 | waitingHeartbeat.insert( appName, id ); | 205 | waitingHeartbeat.insert( appName, id ); |
210 | } | 206 | } |
211 | } | 207 | } |
212 | } | 208 | } |
213 | } else if ( msg == "sendRunningApps()" ) { | 209 | } else if ( msg == "sendRunningApps()" ) { |
214 | QStringList apps; | 210 | QStringList apps; |
215 | QMap<int,QString>::Iterator it; | 211 | QMap<int,QString>::Iterator it; |
216 | for( it = runningApps.begin(); it != runningApps.end(); ++it ) | 212 | for( it = runningApps.begin(); it != runningApps.end(); ++it ) |
217 | apps.append( *it ); | 213 | apps.append( *it ); |
218 | QCopEnvelope e( "QPE/Desktop", "runningApps(QStringList)" ); | 214 | QCopEnvelope e( "QPE/Desktop", "runningApps(QStringList)" ); |
219 | e << apps; | 215 | e << apps; |
220 | } else if ( msg == "appRaised(QString)" ) { | 216 | } else if ( msg == "appRaised(QString)" ) { |
221 | QString appName; | 217 | QString appName; |
222 | stream >> appName; | 218 | stream >> appName; |
223 | qDebug("Got a heartbeat from %s", appName.latin1()); | 219 | qDebug("Got a heartbeat from %s", appName.latin1()); |
224 | QMap<QString,int>::Iterator it = waitingHeartbeat.find(appName); | 220 | QMap<QString,int>::Iterator it = waitingHeartbeat.find(appName); |
225 | if ( it != waitingHeartbeat.end() ) { | 221 | if ( it != waitingHeartbeat.end() ) { |
226 | killTimer( *it ); | 222 | killTimer( *it ); |
227 | waitingHeartbeat.remove(it); | 223 | waitingHeartbeat.remove(it); |
228 | } | 224 | } |
229 | // Check to make sure we're not waiting on user input... | 225 | // Check to make sure we're not waiting on user input... |
230 | if ( appKillerBox && appName == appKillerName ) { | 226 | if ( appKillerBox && appName == appKillerName ) { |
231 | // If we are, we kill the dialog box, and the code waiting on the result | 227 | // If we are, we kill the dialog box, and the code waiting on the result |
232 | // will clean us up (basically the user said "no"). | 228 | // will clean us up (basically the user said "no"). |
233 | delete appKillerBox; | 229 | delete appKillerBox; |
234 | appKillerBox = 0; | 230 | appKillerBox = 0; |
235 | appKillerName = QString::null; | 231 | appKillerName = QString::null; |
236 | } | 232 | } |
237 | } | 233 | } |
238 | } | 234 | } |
239 | 235 | ||
240 | void AppLauncher::signalHandler(int) | 236 | void AppLauncher::signalHandler(int) |
241 | { | 237 | { |
242 | #ifndef Q_OS_WIN32 | 238 | #ifndef Q_OS_WIN32 |
243 | int status; | 239 | int status; |
244 | pid_t pid = waitpid(-1, &status, WNOHANG); | 240 | pid_t pid = waitpid(-1, &status, WNOHANG); |
245 | /* if (pid == 0 || &status == 0 ) { | 241 | /* if (pid == 0 || &status == 0 ) { |
246 | qDebug("hmm, could not get return value from signal"); | 242 | qDebug("hmm, could not get return value from signal"); |
247 | } | 243 | } |
248 | */ | 244 | */ |
249 | QApplication::postEvent(appLauncherPtr, new AppStoppedEvent(pid, status) ); | 245 | QApplication::postEvent(appLauncherPtr, new AppStoppedEvent(pid, status) ); |
250 | #else | 246 | #else |
251 | qDebug("Unhandled signal see by AppLauncher::signalHandler(int)"); | 247 | qDebug("Unhandled signal see by AppLauncher::signalHandler(int)"); |
252 | #endif | 248 | #endif |
253 | } | 249 | } |
254 | 250 | ||
255 | bool AppLauncher::event(QEvent *e) | 251 | bool AppLauncher::event(QEvent *e) |
256 | { | 252 | { |
257 | if ( e->type() == appStopEventID ) { | 253 | if ( e->type() == appStopEventID ) { |
258 | AppStoppedEvent *ae = (AppStoppedEvent *) e; | 254 | AppStoppedEvent *ae = (AppStoppedEvent *) e; |
259 | sigStopped(ae->pid(), ae->status() ); | 255 | sigStopped(ae->pid(), ae->status() ); |
260 | return TRUE; | 256 | return TRUE; |
261 | } | 257 | } |
262 | 258 | ||
263 | return QObject::event(e); | 259 | return QObject::event(e); |
264 | } | 260 | } |
265 | 261 | ||
266 | void AppLauncher::timerEvent( QTimerEvent *e ) | 262 | void AppLauncher::timerEvent( QTimerEvent *e ) |
267 | { | 263 | { |
268 | int id = e->timerId(); | 264 | int id = e->timerId(); |
269 | QMap<QString,int>::Iterator it; | 265 | QMap<QString,int>::Iterator it; |
270 | for ( it = waitingHeartbeat.begin(); it != waitingHeartbeat.end(); ++it ) { | 266 | for ( it = waitingHeartbeat.begin(); it != waitingHeartbeat.end(); ++it ) { |
271 | if ( *it == id ) { | 267 | if ( *it == id ) { |
272 | if ( appKillerBox ) // we're already dealing with one | 268 | if ( appKillerBox ) // we're already dealing with one |
273 | return; | 269 | return; |
274 | 270 | ||
275 | appKillerName = it.key(); | 271 | appKillerName = it.key(); |
276 | killTimer( id ); | 272 | killTimer( id ); |
277 | waitingHeartbeat.remove( it ); | 273 | waitingHeartbeat.remove( it ); |
278 | 274 | ||
279 | // qDebug("Checking in on %s", appKillerName.latin1()); | 275 | // qDebug("Checking in on %s", appKillerName.latin1()); |
280 | 276 | ||
281 | // We store this incase the application responds while we're | 277 | // We store this incase the application responds while we're |
282 | // waiting for user input so we know not to delete ourselves. | 278 | // waiting for user input so we know not to delete ourselves. |
283 | appKillerBox = new QMessageBox(tr("Application Problem"), | 279 | appKillerBox = new QMessageBox(tr("Application Problem"), |
284 | tr("<p>%1 is not responding.</p>").arg(appKillerName) + | 280 | tr("<p>%1 is not responding.</p>").arg(appKillerName) + |
285 | tr("<p>Would you like to force the application to exit?</p>"), | 281 | tr("<p>Would you like to force the application to exit?</p>"), |
286 | QMessageBox::Warning, QMessageBox::Yes, | 282 | QMessageBox::Warning, QMessageBox::Yes, |
287 | QMessageBox::No | QMessageBox::Default, | 283 | QMessageBox::No | QMessageBox::Default, |
288 | QMessageBox::NoButton); | 284 | QMessageBox::NoButton); |
289 | if (appKillerBox->exec() == QMessageBox::Yes) { | 285 | if (appKillerBox->exec() == QMessageBox::Yes) { |
290 | // qDebug("Killing the app!!! Bwuhahahaha!"); | 286 | // qDebug("Killing the app!!! Bwuhahahaha!"); |
291 | int pid = pidForName(appKillerName); | 287 | int pid = pidForName(appKillerName); |
292 | if ( pid > 0 ) | 288 | if ( pid > 0 ) |
293 | kill( pid ); | 289 | kill( pid ); |
294 | } | 290 | } |
295 | appKillerName = QString::null; | 291 | appKillerName = QString::null; |
296 | delete appKillerBox; | 292 | delete appKillerBox; |
297 | appKillerBox = 0; | 293 | appKillerBox = 0; |
298 | return; | 294 | return; |
299 | } | 295 | } |
300 | } | 296 | } |
301 | 297 | ||
302 | QObject::timerEvent( e ); | 298 | QObject::timerEvent( e ); |
303 | } | 299 | } |
304 | 300 | ||
305 | #ifndef Q_OS_WIN32 | 301 | #ifndef Q_OS_WIN32 |
306 | void AppLauncher::sigStopped(int sigPid, int sigStatus) | 302 | void AppLauncher::sigStopped(int sigPid, int sigStatus) |
307 | { | 303 | { |
308 | int exitStatus = 0; | 304 | int exitStatus = 0; |
309 | 305 | ||
310 | bool crashed = WIFSIGNALED(sigStatus); | 306 | bool crashed = WIFSIGNALED(sigStatus); |
311 | if ( !crashed ) { | 307 | if ( !crashed ) { |
312 | if ( WIFEXITED(sigStatus) ) | 308 | if ( WIFEXITED(sigStatus) ) |
313 | exitStatus = WEXITSTATUS(sigStatus); | 309 | exitStatus = WEXITSTATUS(sigStatus); |
314 | } else { | 310 | } else { |
315 | exitStatus = WTERMSIG(sigStatus); | 311 | exitStatus = WTERMSIG(sigStatus); |
316 | } | 312 | } |
diff --git a/core/launcher/firstuse.cpp b/core/launcher/firstuse.cpp index e07920f..50ae6c2 100644 --- a/core/launcher/firstuse.cpp +++ b/core/launcher/firstuse.cpp | |||
@@ -1,317 +1,309 @@ | |||
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 | 20 | ||
21 | // I need access to some things you don't normally get access to. | 21 | // I need access to some things you don't normally get access to. |
22 | 22 | ||
23 | #ifndef _MSC_VER | 23 | #ifndef _MSC_VER |
24 | //### revise to allow removal of translators under MSVC | 24 | //### revise to allow removal of translators under MSVC |
25 | #define private public | 25 | #define private public |
26 | #define protected public | 26 | #define protected public |
27 | #endif | 27 | #endif |
28 | #include "firstuse.h" | 28 | #include "firstuse.h" |
29 | #include "inputmethods.h" | 29 | #include "inputmethods.h" |
30 | #include "applauncher.h" | 30 | #include "applauncher.h" |
31 | #include "serverapp.h" | 31 | #include "serverapp.h" |
32 | //#include <qtopia/custom.h> | 32 | //#include <qtopia/custom.h> |
33 | 33 | ||
34 | #include "calibrate.h" | 34 | #include "calibrate.h" |
35 | #include "documentlist.h" | 35 | #include "documentlist.h" |
36 | 36 | ||
37 | #include <qtopia/resource.h> | 37 | #include <qtopia/resource.h> |
38 | #include <qtopia/qcopenvelope_qws.h> | 38 | #include <qtopia/qcopenvelope_qws.h> |
39 | #include <qtopia/qpeapplication.h> | ||
40 | #include <qtopia/config.h> | 39 | #include <qtopia/config.h> |
41 | #include <qtopia/applnk.h> | ||
42 | #include <qtopia/mimetype.h> | ||
43 | #include <qtopia/fontmanager.h> | 40 | #include <qtopia/fontmanager.h> |
44 | 41 | ||
45 | #include <qapplication.h> | ||
46 | #include <qfile.h> | 42 | #include <qfile.h> |
47 | #include <qpainter.h> | 43 | #include <qpainter.h> |
48 | #include <qcstring.h> | ||
49 | #include <qsimplerichtext.h> | 44 | #include <qsimplerichtext.h> |
50 | #include <qcolor.h> | ||
51 | #include <qpushbutton.h> | 45 | #include <qpushbutton.h> |
52 | #include <qhbox.h> | ||
53 | #include <qlabel.h> | 46 | #include <qlabel.h> |
54 | #include <qtimer.h> | 47 | #include <qtimer.h> |
55 | 48 | ||
56 | #if defined( Q_WS_QWS ) | 49 | #if defined( Q_WS_QWS ) |
57 | #include <qwsdisplay_qws.h> | 50 | #include <qwsdisplay_qws.h> |
58 | #include <qgfx_qws.h> | 51 | #include <qgfx_qws.h> |
59 | #endif | 52 | #endif |
60 | 53 | ||
61 | #include <qwindowsystem_qws.h> | ||
62 | 54 | ||
63 | #include <stdlib.h> | 55 | #include <stdlib.h> |
64 | #include <sys/types.h> | 56 | #include <sys/types.h> |
65 | #if defined(Q_OS_LINUX) || defined(_OS_LINUX_) | 57 | #if defined(Q_OS_LINUX) || defined(_OS_LINUX_) |
66 | #include <unistd.h> | 58 | #include <unistd.h> |
67 | #endif | 59 | #endif |
68 | 60 | ||
69 | 61 | ||
70 | struct { | 62 | struct { |
71 | bool enabled; | 63 | bool enabled; |
72 | const char *app; | 64 | const char *app; |
73 | const char *start; | 65 | const char *start; |
74 | const char *stop; | 66 | const char *stop; |
75 | const char *desc; | 67 | const char *desc; |
76 | } | 68 | } |
77 | settingsTable [] = | 69 | settingsTable [] = |
78 | { | 70 | { |
79 | { FALSE, "language", "raise()", "accept()", // No tr | 71 | { FALSE, "language", "raise()", "accept()", // No tr |
80 | QT_TR_NOOP("Language") }, | 72 | QT_TR_NOOP("Language") }, |
81 | { FALSE, "doctab", "raise()", "accept()", // No tr | 73 | { FALSE, "doctab", "raise()", "accept()", // No tr |
82 | QT_TR_NOOP("DocTab") }, | 74 | QT_TR_NOOP("DocTab") }, |
83 | #ifndef Q_OS_WIN32 | 75 | #ifndef Q_OS_WIN32 |
84 | { FALSE, "systemtime", "raise()", "accept()", // No tr | 76 | { FALSE, "systemtime", "raise()", "accept()", // No tr |
85 | QT_TR_NOOP("Time and Date") }, | 77 | QT_TR_NOOP("Time and Date") }, |
86 | #endif | 78 | #endif |
87 | { FALSE, "addressbook", "editPersonalAndClose()", "accept()", // No tr | 79 | { FALSE, "addressbook", "editPersonalAndClose()", "accept()", // No tr |
88 | QT_TR_NOOP("Personal Information") }, | 80 | QT_TR_NOOP("Personal Information") }, |
89 | { FALSE, 0, 0, 0, 0 } | 81 | { FALSE, 0, 0, 0, 0 } |
90 | }; | 82 | }; |
91 | 83 | ||
92 | 84 | ||
93 | FirstUse::FirstUse(QWidget* parent, const char * name, WFlags wf) : | 85 | FirstUse::FirstUse(QWidget* parent, const char * name, WFlags wf) : |
94 | QDialog( parent, name, TRUE, wf), | 86 | QDialog( parent, name, TRUE, wf), |
95 | transApp(0), transLib(0), needCalibrate(FALSE), currApp(-1), | 87 | transApp(0), transLib(0), needCalibrate(FALSE), currApp(-1), |
96 | waitForExit(-1), waitingForLaunch(FALSE), needRestart(FALSE) | 88 | waitForExit(-1), waitingForLaunch(FALSE), needRestart(FALSE) |
97 | { | 89 | { |
98 | ServerApplication::allowRestart = FALSE; | 90 | ServerApplication::allowRestart = FALSE; |
99 | // we force our height beyound the maximum (which we set anyway) | 91 | // we force our height beyound the maximum (which we set anyway) |
100 | QRect desk = qApp->desktop()->geometry(); | 92 | QRect desk = qApp->desktop()->geometry(); |
101 | setGeometry( 0, 0, desk.width(), desk.height() ); | 93 | setGeometry( 0, 0, desk.width(), desk.height() ); |
102 | 94 | ||
103 | connect(qwsServer, SIGNAL(newChannel(const QString&)), | 95 | connect(qwsServer, SIGNAL(newChannel(const QString&)), |
104 | this, SLOT(newQcopChannel(const QString&))); | 96 | this, SLOT(newQcopChannel(const QString&))); |
105 | 97 | ||
106 | // Create a DocumentList so appLauncher has appLnkSet to search | 98 | // Create a DocumentList so appLauncher has appLnkSet to search |
107 | docList = new DocumentList( 0, FALSE ); | 99 | docList = new DocumentList( 0, FALSE ); |
108 | appLauncher = new AppLauncher( this ); | 100 | appLauncher = new AppLauncher( this ); |
109 | connect( appLauncher, SIGNAL(terminated(int, const QString&)), | 101 | connect( appLauncher, SIGNAL(terminated(int, const QString&)), |
110 | this, SLOT(terminated(int, const QString&)) ); | 102 | this, SLOT(terminated(int, const QString&)) ); |
111 | 103 | ||
112 | // more hackery | 104 | // more hackery |
113 | // I will be run as either the main server or as part of the main server | 105 | // I will be run as either the main server or as part of the main server |
114 | QWSServer::setScreenSaverIntervals(0); | 106 | QWSServer::setScreenSaverIntervals(0); |
115 | loadPixmaps(); | 107 | loadPixmaps(); |
116 | 108 | ||
117 | //check if there is a language program | 109 | //check if there is a language program |
118 | #ifndef Q_OS_WIN32 | 110 | #ifndef Q_OS_WIN32 |
119 | QString exeSuffix; | 111 | QString exeSuffix; |
120 | #else | 112 | #else |
121 | QString exeSuffix(".exe"); | 113 | QString exeSuffix(".exe"); |
122 | #endif | 114 | #endif |
123 | 115 | ||
124 | for ( int i = 0; settingsTable[i].app; i++ ) { | 116 | for ( int i = 0; settingsTable[i].app; i++ ) { |
125 | QString file = QPEApplication::qpeDir() + "bin/"; | 117 | QString file = QPEApplication::qpeDir() + "bin/"; |
126 | file += settingsTable[i].app; | 118 | file += settingsTable[i].app; |
127 | file += exeSuffix; | 119 | file += exeSuffix; |
128 | if ( QFile::exists(file) ) | 120 | if ( QFile::exists(file) ) |
129 | settingsTable[i].enabled = TRUE; | 121 | settingsTable[i].enabled = TRUE; |
130 | } | 122 | } |
131 | 123 | ||
132 | setFocusPolicy(NoFocus); | 124 | setFocusPolicy(NoFocus); |
133 | 125 | ||
134 | taskBar = new QWidget(0, 0, WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop | WGroupLeader); | 126 | taskBar = new QWidget(0, 0, WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop | WGroupLeader); |
135 | 127 | ||
136 | inputMethods = new InputMethods(taskBar); | 128 | inputMethods = new InputMethods(taskBar); |
137 | connect(inputMethods, SIGNAL(inputToggled(bool)), | 129 | connect(inputMethods, SIGNAL(inputToggled(bool)), |
138 | this, SLOT(calcMaxWindowRect())); | 130 | this, SLOT(calcMaxWindowRect())); |
139 | 131 | ||
140 | back = new QPushButton(tr("<< Back"), taskBar); | 132 | back = new QPushButton(tr("<< Back"), taskBar); |
141 | back->setFocusPolicy(NoFocus); | 133 | back->setFocusPolicy(NoFocus); |
142 | connect(back, SIGNAL(clicked()), this, SLOT(previousDialog()) ); | 134 | connect(back, SIGNAL(clicked()), this, SLOT(previousDialog()) ); |
143 | 135 | ||
144 | next = new QPushButton(tr("Next >>"), taskBar); | 136 | next = new QPushButton(tr("Next >>"), taskBar); |
145 | next->setFocusPolicy(NoFocus); | 137 | next->setFocusPolicy(NoFocus); |
146 | connect(next, SIGNAL(clicked()), this, SLOT(nextDialog()) ); | 138 | connect(next, SIGNAL(clicked()), this, SLOT(nextDialog()) ); |
147 | 139 | ||
148 | // need to set the geom to lower corner | 140 | // need to set the geom to lower corner |
149 | QSize sz = inputMethods->sizeHint(); | 141 | QSize sz = inputMethods->sizeHint(); |
150 | int buttonWidth = (width() - sz.width()) / 2; | 142 | int buttonWidth = (width() - sz.width()) / 2; |
151 | int x = 0; | 143 | int x = 0; |
152 | 144 | ||
153 | controlHeight = back->sizeHint().height(); | 145 | controlHeight = back->sizeHint().height(); |
154 | 146 | ||
155 | inputMethods->setGeometry(0,0, sz.width(), controlHeight ); | 147 | inputMethods->setGeometry(0,0, sz.width(), controlHeight ); |
156 | x += sz.width(); | 148 | x += sz.width(); |
157 | 149 | ||
158 | back->setGeometry(x, 0, buttonWidth, controlHeight); | 150 | back->setGeometry(x, 0, buttonWidth, controlHeight); |
159 | x += buttonWidth; | 151 | x += buttonWidth; |
160 | next->setGeometry(x, 0, buttonWidth, controlHeight); | 152 | next->setGeometry(x, 0, buttonWidth, controlHeight); |
161 | 153 | ||
162 | taskBar->setGeometry( 0, height() - controlHeight, desk.width(), controlHeight); | 154 | taskBar->setGeometry( 0, height() - controlHeight, desk.width(), controlHeight); |
163 | taskBar->hide(); | 155 | taskBar->hide(); |
164 | 156 | ||
165 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 157 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
166 | qDebug("Setting up QCop to QPE/System"); | 158 | qDebug("Setting up QCop to QPE/System"); |
167 | QCopChannel* sysChannel = new QCopChannel( "QPE/System", this ); | 159 | QCopChannel* sysChannel = new QCopChannel( "QPE/System", this ); |
168 | connect(sysChannel, SIGNAL(received(const QCString &, const QByteArray &)), | 160 | connect(sysChannel, SIGNAL(received(const QCString &, const QByteArray &)), |
169 | this, SLOT(message(const QCString &, const QByteArray &)) ); | 161 | this, SLOT(message(const QCString &, const QByteArray &)) ); |
170 | #endif | 162 | #endif |
171 | calcMaxWindowRect(); | 163 | calcMaxWindowRect(); |
172 | 164 | ||
173 | m_calHandler = ( QWSServer::mouseHandler() && QWSServer::mouseHandler()->inherits("QCalibratedMouseHandler") ) ? true : false; | 165 | m_calHandler = ( QWSServer::mouseHandler() && QWSServer::mouseHandler()->inherits("QCalibratedMouseHandler") ) ? true : false; |
174 | 166 | ||
175 | if ( m_calHandler) { | 167 | if ( m_calHandler) { |
176 | if ( !QFile::exists("/etc/pointercal") ) { | 168 | if ( !QFile::exists("/etc/pointercal") ) { |
177 | needCalibrate = TRUE; | 169 | needCalibrate = TRUE; |
178 | grabMouse(); | 170 | grabMouse(); |
179 | } | 171 | } |
180 | } | 172 | } |
181 | 173 | ||
182 | Config config("locale"); | 174 | Config config("locale"); |
183 | config.setGroup( "Language"); | 175 | config.setGroup( "Language"); |
184 | lang = config.readEntry( "Language", "en"); | 176 | lang = config.readEntry( "Language", "en"); |
185 | 177 | ||
186 | defaultFont = font(); | 178 | defaultFont = font(); |
187 | 179 | ||
188 | //###language/font hack; should look it up somewhere | 180 | //###language/font hack; should look it up somewhere |
189 | #ifdef Q_WS_QWS | 181 | #ifdef Q_WS_QWS |
190 | if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { | 182 | if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { |
191 | QFont fn = FontManager::unicodeFont( FontManager::Proportional ); | 183 | QFont fn = FontManager::unicodeFont( FontManager::Proportional ); |
192 | qApp->setFont( fn, TRUE ); | 184 | qApp->setFont( fn, TRUE ); |
193 | } | 185 | } |
194 | #endif | 186 | #endif |
195 | } | 187 | } |
196 | 188 | ||
197 | FirstUse::~FirstUse() | 189 | FirstUse::~FirstUse() |
198 | { | 190 | { |
199 | delete appLauncher; | 191 | delete appLauncher; |
200 | delete docList; | 192 | delete docList; |
201 | delete taskBar; | 193 | delete taskBar; |
202 | ServerApplication::allowRestart = TRUE; | 194 | ServerApplication::allowRestart = TRUE; |
203 | } | 195 | } |
204 | 196 | ||
205 | void FirstUse::calcMaxWindowRect() | 197 | void FirstUse::calcMaxWindowRect() |
206 | { | 198 | { |
207 | #ifdef Q_WS_QWS | 199 | #ifdef Q_WS_QWS |
208 | QRect wr; | 200 | QRect wr; |
209 | int displayWidth = qApp->desktop()->width(); | 201 | int displayWidth = qApp->desktop()->width(); |
210 | QRect ir = inputMethods->inputRect(); | 202 | QRect ir = inputMethods->inputRect(); |
211 | if ( ir.isValid() ) { | 203 | if ( ir.isValid() ) { |
212 | wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 ); | 204 | wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 ); |
213 | } else { | 205 | } else { |
214 | wr.setCoords( 0, 0, displayWidth-1, | 206 | wr.setCoords( 0, 0, displayWidth-1, |
215 | qApp->desktop()->height() - controlHeight-1); | 207 | qApp->desktop()->height() - controlHeight-1); |
216 | } | 208 | } |
217 | 209 | ||
218 | #if QT_VERSION < 0x030000 | 210 | #if QT_VERSION < 0x030000 |
219 | QWSServer::setMaxWindowRect( qt_screen->mapToDevice(wr, | 211 | QWSServer::setMaxWindowRect( qt_screen->mapToDevice(wr, |
220 | QSize(qt_screen->width(),qt_screen->height())) | 212 | QSize(qt_screen->width(),qt_screen->height())) |
221 | ); | 213 | ); |
222 | #else | 214 | #else |
223 | QWSServer::setMaxWindowRect( wr ); | 215 | QWSServer::setMaxWindowRect( wr ); |
224 | #endif | 216 | #endif |
225 | #endif | 217 | #endif |
226 | } | 218 | } |
227 | 219 | ||
228 | /* cancel current dialog, and bring up next */ | 220 | /* cancel current dialog, and bring up next */ |
229 | void FirstUse::nextDialog() | 221 | void FirstUse::nextDialog() |
230 | { | 222 | { |
231 | int prevApp = currApp; | 223 | int prevApp = currApp; |
232 | do { | 224 | do { |
233 | currApp++; | 225 | currApp++; |
234 | qDebug( "currApp = %d", currApp ); | 226 | qDebug( "currApp = %d", currApp ); |
235 | if ( settingsTable[currApp].app == 0 ) { | 227 | if ( settingsTable[currApp].app == 0 ) { |
236 | if ( prevApp >= 0 && appLauncher->isRunning(settingsTable[prevApp].app) ) { | 228 | if ( prevApp >= 0 && appLauncher->isRunning(settingsTable[prevApp].app) ) { |
237 | // The last application is still running. | 229 | // The last application is still running. |
238 | // Tell it to stop, and when its done we'll come back | 230 | // Tell it to stop, and when its done we'll come back |
239 | // to nextDialog and exit. | 231 | // to nextDialog and exit. |
240 | qDebug( "Waiting for %s to exit", settingsTable[prevApp].app ); | 232 | qDebug( "Waiting for %s to exit", settingsTable[prevApp].app ); |
241 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[prevApp].app, | 233 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[prevApp].app, |
242 | settingsTable[prevApp].stop ); | 234 | settingsTable[prevApp].stop ); |
243 | currApp = prevApp; | 235 | currApp = prevApp; |
244 | } else { | 236 | } else { |
245 | qDebug( "Done!" ); | 237 | qDebug( "Done!" ); |
246 | Config config( "qpe" ); | 238 | Config config( "qpe" ); |
247 | config.setGroup( "Startup" ); | 239 | config.setGroup( "Startup" ); |
248 | config.writeEntry( "FirstUse", FALSE ); | 240 | config.writeEntry( "FirstUse", FALSE ); |
249 | QPixmap pix = Resource::loadPixmap("bigwait"); | 241 | QPixmap pix = Resource::loadPixmap("bigwait"); |
250 | QLabel *lblWait = new QLabel(0, "wait hack!", // No tr | 242 | QLabel *lblWait = new QLabel(0, "wait hack!", // No tr |
251 | QWidget::WStyle_Customize | QWidget::WDestructiveClose | | 243 | QWidget::WStyle_Customize | QWidget::WDestructiveClose | |
252 | QWidget::WStyle_NoBorder | QWidget::WStyle_Tool | | 244 | QWidget::WStyle_NoBorder | QWidget::WStyle_Tool | |
253 | QWidget::WStyle_StaysOnTop); | 245 | QWidget::WStyle_StaysOnTop); |
254 | lblWait->setPixmap( pix ); | 246 | lblWait->setPixmap( pix ); |
255 | lblWait->setAlignment( QWidget::AlignCenter ); | 247 | lblWait->setAlignment( QWidget::AlignCenter ); |
256 | lblWait->setGeometry( qApp->desktop()->geometry() ); | 248 | lblWait->setGeometry( qApp->desktop()->geometry() ); |
257 | lblWait->show(); | 249 | lblWait->show(); |
258 | qApp->processEvents(); | 250 | qApp->processEvents(); |
259 | QTimer::singleShot( 1000, lblWait, SLOT(close()) ); | 251 | QTimer::singleShot( 1000, lblWait, SLOT(close()) ); |
260 | repaint(); | 252 | repaint(); |
261 | close(); | 253 | close(); |
262 | ServerApplication::allowRestart = TRUE; | 254 | ServerApplication::allowRestart = TRUE; |
263 | } | 255 | } |
264 | return; | 256 | return; |
265 | } | 257 | } |
266 | } while ( !settingsTable[currApp].enabled ); | 258 | } while ( !settingsTable[currApp].enabled ); |
267 | 259 | ||
268 | if ( prevApp >= 0 && appLauncher->isRunning(settingsTable[prevApp].app) ) { | 260 | if ( prevApp >= 0 && appLauncher->isRunning(settingsTable[prevApp].app) ) { |
269 | qDebug( "Shutdown: %s", settingsTable[prevApp].app ); | 261 | qDebug( "Shutdown: %s", settingsTable[prevApp].app ); |
270 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[prevApp].app, | 262 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[prevApp].app, |
271 | settingsTable[prevApp].stop ); | 263 | settingsTable[prevApp].stop ); |
272 | waitForExit = prevApp; | 264 | waitForExit = prevApp; |
273 | } else { | 265 | } else { |
274 | qDebug( "Startup: %s", settingsTable[currApp].app ); | 266 | qDebug( "Startup: %s", settingsTable[currApp].app ); |
275 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[currApp].app, | 267 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[currApp].app, |
276 | settingsTable[currApp].start ); | 268 | settingsTable[currApp].start ); |
277 | waitingForLaunch = TRUE; | 269 | waitingForLaunch = TRUE; |
278 | } | 270 | } |
279 | 271 | ||
280 | updateButtons(); | 272 | updateButtons(); |
281 | } | 273 | } |
282 | 274 | ||
283 | /* accept current dialog and bring up previous */ | 275 | /* accept current dialog and bring up previous */ |
284 | void FirstUse::previousDialog() | 276 | void FirstUse::previousDialog() |
285 | { | 277 | { |
286 | int prevApp = currApp; | 278 | int prevApp = currApp; |
287 | do { | 279 | do { |
288 | currApp--; | 280 | currApp--; |
289 | if ( currApp < 0 ) { | 281 | if ( currApp < 0 ) { |
290 | currApp = prevApp; | 282 | currApp = prevApp; |
291 | return; | 283 | return; |
292 | } | 284 | } |
293 | } while ( !settingsTable[currApp].enabled ); | 285 | } while ( !settingsTable[currApp].enabled ); |
294 | 286 | ||
295 | if ( prevApp >= 0 ) { | 287 | if ( prevApp >= 0 ) { |
296 | qDebug( "Shutdown: %s", settingsTable[prevApp].app ); | 288 | qDebug( "Shutdown: %s", settingsTable[prevApp].app ); |
297 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[prevApp].app, | 289 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[prevApp].app, |
298 | settingsTable[prevApp].stop ); | 290 | settingsTable[prevApp].stop ); |
299 | /* | 291 | /* |
300 | if (settingsTable[prevApp].app == QString("systemtime")) | 292 | if (settingsTable[prevApp].app == QString("systemtime")) |
301 | QCopEnvelope e("QPE/Application/citytime", "close()"); | 293 | QCopEnvelope e("QPE/Application/citytime", "close()"); |
302 | */ | 294 | */ |
303 | waitForExit = prevApp; | 295 | waitForExit = prevApp; |
304 | } else { | 296 | } else { |
305 | qDebug( "Startup: %s", settingsTable[currApp].app ); | 297 | qDebug( "Startup: %s", settingsTable[currApp].app ); |
306 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[currApp].app, | 298 | QCopEnvelope e(QCString("QPE/Application/") + settingsTable[currApp].app, |
307 | settingsTable[currApp].start ); | 299 | settingsTable[currApp].start ); |
308 | waitingForLaunch = TRUE; | 300 | waitingForLaunch = TRUE; |
309 | } | 301 | } |
310 | 302 | ||
311 | updateButtons(); | 303 | updateButtons(); |
312 | } | 304 | } |
313 | 305 | ||
314 | void FirstUse::message(const QCString &msg, const QByteArray &data) | 306 | void FirstUse::message(const QCString &msg, const QByteArray &data) |
315 | { | 307 | { |
316 | QDataStream stream( data, IO_ReadOnly ); | 308 | QDataStream stream( data, IO_ReadOnly ); |
317 | if ( msg == "timeChange(QString)" ) { | 309 | if ( msg == "timeChange(QString)" ) { |
diff --git a/core/launcher/inputmethods.cpp b/core/launcher/inputmethods.cpp index 5d8faf7..683f1e2 100644 --- a/core/launcher/inputmethods.cpp +++ b/core/launcher/inputmethods.cpp | |||
@@ -1,294 +1,288 @@ | |||
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 | 20 | ||
21 | #define QTOPIA_INTERNAL_LANGLIST | 21 | #define QTOPIA_INTERNAL_LANGLIST |
22 | #include "inputmethods.h" | 22 | #include "inputmethods.h" |
23 | 23 | ||
24 | #include <qtopia/config.h> | 24 | #include <qtopia/config.h> |
25 | #include <qtopia/qpeapplication.h> | 25 | #include <qtopia/qpeapplication.h> |
26 | #include <qtopia/inputmethodinterface.h> | ||
27 | #include <qtopia/global.h> | ||
28 | 26 | ||
29 | #include <qpopupmenu.h> | 27 | #include <qpopupmenu.h> |
30 | #include <qpushbutton.h> | ||
31 | #include <qtoolbutton.h> | 28 | #include <qtoolbutton.h> |
32 | #include <qwidgetstack.h> | 29 | #include <qwidgetstack.h> |
33 | #include <qwidget.h> | ||
34 | #include <qlayout.h> | 30 | #include <qlayout.h> |
35 | #include <qtimer.h> | ||
36 | #include <qdir.h> | 31 | #include <qdir.h> |
37 | #include <stdlib.h> | 32 | #include <stdlib.h> |
38 | #include <qtranslator.h> | ||
39 | #include <qtl.h> | 33 | #include <qtl.h> |
40 | 34 | ||
41 | #ifdef Q_WS_QWS | 35 | #ifdef Q_WS_QWS |
42 | #include <qwindowsystem_qws.h> | 36 | #include <qwindowsystem_qws.h> |
43 | #include <qwsevent_qws.h> | 37 | #include <qwsevent_qws.h> |
44 | #include <qcopchannel_qws.h> | 38 | #include <qcopchannel_qws.h> |
45 | #endif | 39 | #endif |
46 | 40 | ||
47 | /* ### SingleFloppy if someone is interested? */ | 41 | /* ### SingleFloppy if someone is interested? */ |
48 | #if 0 | 42 | #if 0 |
49 | #ifdef QT_NO_COMPONENT | 43 | #ifdef QT_NO_COMPONENT |
50 | #include "../plugins/inputmethods/handwriting/handwritingimpl.h" | 44 | #include "../plugins/inputmethods/handwriting/handwritingimpl.h" |
51 | #include "../plugins/inputmethods/keyboard/keyboardimpl.h" | 45 | #include "../plugins/inputmethods/keyboard/keyboardimpl.h" |
52 | #include "../3rdparty/plugins/inputmethods/pickboard/pickboardimpl.h" | 46 | #include "../3rdparty/plugins/inputmethods/pickboard/pickboardimpl.h" |
53 | #endif | 47 | #endif |
54 | #endif | 48 | #endif |
55 | 49 | ||
56 | /* XPM */ | 50 | /* XPM */ |
57 | static const char * tri_xpm[]={ | 51 | static const char * tri_xpm[]={ |
58 | "9 9 2 1", | 52 | "9 9 2 1", |
59 | "a c #000000", | 53 | "a c #000000", |
60 | ". c None", | 54 | ". c None", |
61 | ".........", | 55 | ".........", |
62 | ".........", | 56 | ".........", |
63 | ".........", | 57 | ".........", |
64 | "....a....", | 58 | "....a....", |
65 | "...aaa...", | 59 | "...aaa...", |
66 | "..aaaaa..", | 60 | "..aaaaa..", |
67 | ".aaaaaaa.", | 61 | ".aaaaaaa.", |
68 | ".........", | 62 | ".........", |
69 | "........."}; | 63 | "........."}; |
70 | 64 | ||
71 | int InputMethod::operator <(const InputMethod& o) const | 65 | int InputMethod::operator <(const InputMethod& o) const |
72 | { | 66 | { |
73 | return name() < o.name(); | 67 | return name() < o.name(); |
74 | } | 68 | } |
75 | int InputMethod::operator >(const InputMethod& o) const | 69 | int InputMethod::operator >(const InputMethod& o) const |
76 | { | 70 | { |
77 | return name() > o.name(); | 71 | return name() > o.name(); |
78 | } | 72 | } |
79 | int InputMethod::operator <=(const InputMethod& o) const | 73 | int InputMethod::operator <=(const InputMethod& o) const |
80 | { | 74 | { |
81 | return name() <= o.name(); | 75 | return name() <= o.name(); |
82 | } | 76 | } |
83 | 77 | ||
84 | 78 | ||
85 | /* | 79 | /* |
86 | Slightly hacky: We use WStyle_Tool as a flag to say "this widget | 80 | Slightly hacky: We use WStyle_Tool as a flag to say "this widget |
87 | belongs to the IM system, so clicking it should not cause a reset". | 81 | belongs to the IM system, so clicking it should not cause a reset". |
88 | */ | 82 | */ |
89 | class IMToolButton : public QToolButton | 83 | class IMToolButton : public QToolButton |
90 | { | 84 | { |
91 | public: | 85 | public: |
92 | IMToolButton::IMToolButton( QWidget *parent ) : QToolButton( parent ) | 86 | IMToolButton::IMToolButton( QWidget *parent ) : QToolButton( parent ) |
93 | { setWFlags( WStyle_Tool ); } | 87 | { setWFlags( WStyle_Tool ); } |
94 | }; | 88 | }; |
95 | 89 | ||
96 | 90 | ||
97 | InputMethods::InputMethods( QWidget *parent ) : | 91 | InputMethods::InputMethods( QWidget *parent ) : |
98 | QWidget( parent, "InputMethods", WStyle_Tool | WStyle_Customize ), | 92 | QWidget( parent, "InputMethods", WStyle_Tool | WStyle_Customize ), |
99 | mkeyboard(0), imethod(0) | 93 | mkeyboard(0), imethod(0) |
100 | { | 94 | { |
101 | Config cfg( "Launcher" ); | 95 | Config cfg( "Launcher" ); |
102 | cfg.setGroup( "InputMethods" ); | 96 | cfg.setGroup( "InputMethods" ); |
103 | inputWidgetStyle = QWidget::WStyle_Customize | QWidget::WStyle_StaysOnTop | QWidget::WGroupLeader | QWidget::WStyle_Tool; | 97 | inputWidgetStyle = QWidget::WStyle_Customize | QWidget::WStyle_StaysOnTop | QWidget::WGroupLeader | QWidget::WStyle_Tool; |
104 | inputWidgetStyle |= cfg.readBoolEntry( "Float", false ) ? QWidget::WStyle_DialogBorder : 0; | 98 | inputWidgetStyle |= cfg.readBoolEntry( "Float", false ) ? QWidget::WStyle_DialogBorder : 0; |
105 | inputWidgetWidth = cfg.readNumEntry( "Width", 100 ); | 99 | inputWidgetWidth = cfg.readNumEntry( "Width", 100 ); |
106 | 100 | ||
107 | setBackgroundMode( PaletteBackground ); | 101 | setBackgroundMode( PaletteBackground ); |
108 | QHBoxLayout *hbox = new QHBoxLayout( this ); | 102 | QHBoxLayout *hbox = new QHBoxLayout( this ); |
109 | 103 | ||
110 | kbdButton = new IMToolButton( this); | 104 | kbdButton = new IMToolButton( this); |
111 | kbdButton->setFocusPolicy(NoFocus); | 105 | kbdButton->setFocusPolicy(NoFocus); |
112 | kbdButton->setToggleButton( TRUE ); | 106 | kbdButton->setToggleButton( TRUE ); |
113 | if (parent->sizeHint().height() > 0) | 107 | if (parent->sizeHint().height() > 0) |
114 | kbdButton->setFixedHeight( parent->sizeHint().height() ); | 108 | kbdButton->setFixedHeight( parent->sizeHint().height() ); |
115 | kbdButton->setFixedWidth( 32 ); | 109 | kbdButton->setFixedWidth( 32 ); |
116 | kbdButton->setAutoRaise( TRUE ); | 110 | kbdButton->setAutoRaise( TRUE ); |
117 | kbdButton->setUsesBigPixmap( TRUE ); | 111 | kbdButton->setUsesBigPixmap( TRUE ); |
118 | hbox->addWidget( kbdButton ); | 112 | hbox->addWidget( kbdButton ); |
119 | connect( kbdButton, SIGNAL(toggled(bool)), this, SLOT(showKbd(bool)) ); | 113 | connect( kbdButton, SIGNAL(toggled(bool)), this, SLOT(showKbd(bool)) ); |
120 | 114 | ||
121 | kbdChoice = new IMToolButton( this ); | 115 | kbdChoice = new IMToolButton( this ); |
122 | kbdChoice->setFocusPolicy(NoFocus); | 116 | kbdChoice->setFocusPolicy(NoFocus); |
123 | kbdChoice->setPixmap( QPixmap( (const char **)tri_xpm ) ); | 117 | kbdChoice->setPixmap( QPixmap( (const char **)tri_xpm ) ); |
124 | if (parent->sizeHint().height() > 0) | 118 | if (parent->sizeHint().height() > 0) |
125 | kbdChoice->setFixedHeight( parent->sizeHint().height() ); | 119 | kbdChoice->setFixedHeight( parent->sizeHint().height() ); |
126 | kbdChoice->setFixedWidth( 13 ); | 120 | kbdChoice->setFixedWidth( 13 ); |
127 | kbdChoice->setAutoRaise( TRUE ); | 121 | kbdChoice->setAutoRaise( TRUE ); |
128 | hbox->addWidget( kbdChoice ); | 122 | hbox->addWidget( kbdChoice ); |
129 | connect( kbdChoice, SIGNAL(clicked()), this, SLOT(chooseKbd()) ); | 123 | connect( kbdChoice, SIGNAL(clicked()), this, SLOT(chooseKbd()) ); |
130 | 124 | ||
131 | connect( (QPEApplication*)qApp, SIGNAL(clientMoused()), | 125 | connect( (QPEApplication*)qApp, SIGNAL(clientMoused()), |
132 | this, SLOT(resetStates()) ); | 126 | this, SLOT(resetStates()) ); |
133 | 127 | ||
134 | 128 | ||
135 | imButton = new QWidgetStack( this ); // later a widget stack | 129 | imButton = new QWidgetStack( this ); // later a widget stack |
136 | imButton->setFocusPolicy(NoFocus); | 130 | imButton->setFocusPolicy(NoFocus); |
137 | if (parent->sizeHint().height() > 0) | 131 | if (parent->sizeHint().height() > 0) |
138 | imButton->setFixedHeight( parent->sizeHint().height() ); | 132 | imButton->setFixedHeight( parent->sizeHint().height() ); |
139 | hbox->addWidget(imButton); | 133 | hbox->addWidget(imButton); |
140 | 134 | ||
141 | imChoice = new QToolButton( this ); | 135 | imChoice = new QToolButton( this ); |
142 | imChoice->setFocusPolicy(NoFocus); | 136 | imChoice->setFocusPolicy(NoFocus); |
143 | imChoice->setPixmap( QPixmap( (const char **)tri_xpm ) ); | 137 | imChoice->setPixmap( QPixmap( (const char **)tri_xpm ) ); |
144 | if (parent->sizeHint().height() > 0) | 138 | if (parent->sizeHint().height() > 0) |
145 | imChoice->setFixedHeight( parent->sizeHint().height() ); | 139 | imChoice->setFixedHeight( parent->sizeHint().height() ); |
146 | imChoice->setFixedWidth( 13 ); | 140 | imChoice->setFixedWidth( 13 ); |
147 | imChoice->setAutoRaise( TRUE ); | 141 | imChoice->setAutoRaise( TRUE ); |
148 | hbox->addWidget( imChoice ); | 142 | hbox->addWidget( imChoice ); |
149 | connect( imChoice, SIGNAL(clicked()), this, SLOT(chooseIm()) ); | 143 | connect( imChoice, SIGNAL(clicked()), this, SLOT(chooseIm()) ); |
150 | 144 | ||
151 | loadInputMethods(); | 145 | loadInputMethods(); |
152 | 146 | ||
153 | QCopChannel *channel = new QCopChannel( "QPE/IME", this ); | 147 | QCopChannel *channel = new QCopChannel( "QPE/IME", this ); |
154 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), | 148 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), |
155 | this, SLOT(qcopReceive(const QCString&, const QByteArray&)) ); | 149 | this, SLOT(qcopReceive(const QCString&, const QByteArray&)) ); |
156 | } | 150 | } |
157 | 151 | ||
158 | InputMethods::~InputMethods() | 152 | InputMethods::~InputMethods() |
159 | { | 153 | { |
160 | Config cfg("qpe"); | 154 | Config cfg("qpe"); |
161 | cfg.setGroup("InputMethod"); | 155 | cfg.setGroup("InputMethod"); |
162 | if (imethod) | 156 | if (imethod) |
163 | cfg.writeEntry("im", imethod->name() ); | 157 | cfg.writeEntry("im", imethod->name() ); |
164 | if (mkeyboard) | 158 | if (mkeyboard) |
165 | cfg.writeEntry("current", mkeyboard->name() ); | 159 | cfg.writeEntry("current", mkeyboard->name() ); |
166 | 160 | ||
167 | unloadInputMethods(); | 161 | unloadInputMethods(); |
168 | } | 162 | } |
169 | 163 | ||
170 | void InputMethods::hideInputMethod() | 164 | void InputMethods::hideInputMethod() |
171 | { | 165 | { |
172 | kbdButton->setOn( FALSE ); | 166 | kbdButton->setOn( FALSE ); |
173 | } | 167 | } |
174 | 168 | ||
175 | void InputMethods::showInputMethod() | 169 | void InputMethods::showInputMethod() |
176 | { | 170 | { |
177 | kbdButton->setOn( TRUE ); | 171 | kbdButton->setOn( TRUE ); |
178 | } | 172 | } |
179 | 173 | ||
180 | void InputMethods::showInputMethod(const QString& name) | 174 | void InputMethods::showInputMethod(const QString& name) |
181 | { | 175 | { |
182 | int i = 0; | 176 | int i = 0; |
183 | QValueList<InputMethod>::Iterator it; | 177 | QValueList<InputMethod>::Iterator it; |
184 | InputMethod *im = 0; | 178 | InputMethod *im = 0; |
185 | for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { | 179 | for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { |
186 | QString lname = (*it).libName.mid((*it).libName.findRev('/') + 1); | 180 | QString lname = (*it).libName.mid((*it).libName.findRev('/') + 1); |
187 | if ( (*it).name() == name || lname == name ) { | 181 | if ( (*it).name() == name || lname == name ) { |
188 | im = &(*it); | 182 | im = &(*it); |
189 | break; | 183 | break; |
190 | } | 184 | } |
191 | } | 185 | } |
192 | if ( im ) | 186 | if ( im ) |
193 | chooseKeyboard(im); | 187 | chooseKeyboard(im); |
194 | } | 188 | } |
195 | 189 | ||
196 | void InputMethods::resetStates() | 190 | void InputMethods::resetStates() |
197 | { | 191 | { |
198 | if ( mkeyboard && !mkeyboard->newIM ) | 192 | if ( mkeyboard && !mkeyboard->newIM ) |
199 | mkeyboard->interface->resetState(); | 193 | mkeyboard->interface->resetState(); |
200 | } | 194 | } |
201 | 195 | ||
202 | QRect InputMethods::inputRect() const | 196 | QRect InputMethods::inputRect() const |
203 | { | 197 | { |
204 | if ( !mkeyboard || !mkeyboard->widget || !mkeyboard->widget->isVisible() ) | 198 | if ( !mkeyboard || !mkeyboard->widget || !mkeyboard->widget->isVisible() ) |
205 | return QRect(); | 199 | return QRect(); |
206 | else | 200 | else |
207 | return mkeyboard->widget->geometry(); | 201 | return mkeyboard->widget->geometry(); |
208 | } | 202 | } |
209 | 203 | ||
210 | void InputMethods::unloadInputMethods() | 204 | void InputMethods::unloadInputMethods() |
211 | { | 205 | { |
212 | unloadMethod( inputMethodList ); | 206 | unloadMethod( inputMethodList ); |
213 | unloadMethod( inputModifierList ); | 207 | unloadMethod( inputModifierList ); |
214 | inputMethodList.clear(); | 208 | inputMethodList.clear(); |
215 | inputModifierList.clear(); | 209 | inputModifierList.clear(); |
216 | 210 | ||
217 | } | 211 | } |
218 | 212 | ||
219 | void InputMethods::unloadMethod( QValueList<InputMethod>& list ) { | 213 | void InputMethods::unloadMethod( QValueList<InputMethod>& list ) { |
220 | QValueList<InputMethod>::Iterator it; | 214 | QValueList<InputMethod>::Iterator it; |
221 | 215 | ||
222 | for (it = list.begin(); it != list.end(); ++it ) | 216 | for (it = list.begin(); it != list.end(); ++it ) |
223 | (*it).releaseInterface(); | 217 | (*it).releaseInterface(); |
224 | 218 | ||
225 | } | 219 | } |
226 | 220 | ||
227 | 221 | ||
228 | QStringList InputMethods::plugins()const { | 222 | QStringList InputMethods::plugins()const { |
229 | QString path = QPEApplication::qpeDir() + "/plugins/inputmethods"; | 223 | QString path = QPEApplication::qpeDir() + "/plugins/inputmethods"; |
230 | #ifdef Q_OS_MACX | 224 | #ifdef Q_OS_MACX |
231 | QDir dir( path, "lib*.dylib" ); | 225 | QDir dir( path, "lib*.dylib" ); |
232 | #else | 226 | #else |
233 | QDir dir( path, "lib*.so" ); | 227 | QDir dir( path, "lib*.so" ); |
234 | #endif /* Q_OS_MACX */ | 228 | #endif /* Q_OS_MACX */ |
235 | return dir.entryList(); | 229 | return dir.entryList(); |
236 | } | 230 | } |
237 | 231 | ||
238 | void InputMethods::installTranslator( const QString& type ) { | 232 | void InputMethods::installTranslator( const QString& type ) { |
239 | QStringList langs = Global::languageList(); | 233 | QStringList langs = Global::languageList(); |
240 | QStringList::ConstIterator lit; | 234 | QStringList::ConstIterator lit; |
241 | for ( lit= langs.begin(); lit!=langs.end(); ++lit) { | 235 | for ( lit= langs.begin(); lit!=langs.end(); ++lit) { |
242 | QString lang = *lit; | 236 | QString lang = *lit; |
243 | QTranslator * trans = new QTranslator(qApp); | 237 | QTranslator * trans = new QTranslator(qApp); |
244 | 238 | ||
245 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; | 239 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; |
246 | 240 | ||
247 | if ( trans->load( tfn )) | 241 | if ( trans->load( tfn )) |
248 | qApp->installTranslator( trans ); | 242 | qApp->installTranslator( trans ); |
249 | else | 243 | else |
250 | delete trans; | 244 | delete trans; |
251 | } | 245 | } |
252 | } | 246 | } |
253 | 247 | ||
254 | void InputMethods::setPreferedHandlers() { | 248 | void InputMethods::setPreferedHandlers() { |
255 | Config cfg("qpe"); | 249 | Config cfg("qpe"); |
256 | cfg.setGroup("InputMethod"); | 250 | cfg.setGroup("InputMethod"); |
257 | QString current = cfg.readEntry("current"); | 251 | QString current = cfg.readEntry("current"); |
258 | QString im = cfg.readEntry("im"); | 252 | QString im = cfg.readEntry("im"); |
259 | 253 | ||
260 | QValueList<InputMethod>::Iterator it; | 254 | QValueList<InputMethod>::Iterator it; |
261 | if (!inputModifierList.isEmpty() && !im.isEmpty() ) { | 255 | if (!inputModifierList.isEmpty() && !im.isEmpty() ) { |
262 | for (it = inputModifierList.begin(); it != inputModifierList.end(); ++it ) | 256 | for (it = inputModifierList.begin(); it != inputModifierList.end(); ++it ) |
263 | if ( (*it).name() == im ) { | 257 | if ( (*it).name() == im ) { |
264 | imethod = &(*it); break; | 258 | imethod = &(*it); break; |
265 | } | 259 | } |
266 | 260 | ||
267 | } | 261 | } |
268 | if (!inputMethodList.isEmpty() && !current.isEmpty() ) { | 262 | if (!inputMethodList.isEmpty() && !current.isEmpty() ) { |
269 | for (it = inputMethodList.begin(); it != inputMethodList.end(); ++it ) | 263 | for (it = inputMethodList.begin(); it != inputMethodList.end(); ++it ) |
270 | if ( (*it).name() == current ) { | 264 | if ( (*it).name() == current ) { |
271 | qWarning("preferred keyboard is %s", current.latin1() ); | 265 | qWarning("preferred keyboard is %s", current.latin1() ); |
272 | mkeyboard = &(*it); | 266 | mkeyboard = &(*it); |
273 | kbdButton->setPixmap( *mkeyboard->icon() ); | 267 | kbdButton->setPixmap( *mkeyboard->icon() ); |
274 | break; | 268 | break; |
275 | } | 269 | } |
276 | } | 270 | } |
277 | 271 | ||
278 | } | 272 | } |
279 | 273 | ||
280 | void InputMethods::loadInputMethods() | 274 | void InputMethods::loadInputMethods() |
281 | { | 275 | { |
282 | #ifndef QT_NO_COMPONENT | 276 | #ifndef QT_NO_COMPONENT |
283 | hideInputMethod(); | 277 | hideInputMethod(); |
284 | mkeyboard = 0; | 278 | mkeyboard = 0; |
285 | 279 | ||
286 | unloadInputMethods(); | 280 | unloadInputMethods(); |
287 | 281 | ||
288 | QString path = QPEApplication::qpeDir() + "/plugins/inputmethods"; | 282 | QString path = QPEApplication::qpeDir() + "/plugins/inputmethods"; |
289 | QStringList list = plugins(); | 283 | QStringList list = plugins(); |
290 | QStringList::Iterator it; | 284 | QStringList::Iterator it; |
291 | for ( it = list.begin(); it != list.end(); ++it ) { | 285 | for ( it = list.begin(); it != list.end(); ++it ) { |
292 | InputMethodInterface *iface = 0; | 286 | InputMethodInterface *iface = 0; |
293 | ExtInputMethodInterface *eface = 0; | 287 | ExtInputMethodInterface *eface = 0; |
294 | QLibrary *lib = new QLibrary( path + "/" + *it ); | 288 | QLibrary *lib = new QLibrary( path + "/" + *it ); |
diff --git a/core/launcher/irserver.cpp b/core/launcher/irserver.cpp index 63f8d05..a0e9c16 100644 --- a/core/launcher/irserver.cpp +++ b/core/launcher/irserver.cpp | |||
@@ -1,77 +1,76 @@ | |||
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 | 20 | ||
21 | 21 | ||
22 | #include "irserver.h" | 22 | #include "irserver.h" |
23 | 23 | ||
24 | #include <qtopia/qlibrary.h> | 24 | #include <qtopia/qlibrary.h> |
25 | #include <qtopia/qpeapplication.h> | 25 | #include <qtopia/qpeapplication.h> |
26 | 26 | ||
27 | #include <qtranslator.h> | ||
28 | 27 | ||
29 | #include "obexinterface.h" | 28 | #include "obexinterface.h" |
30 | 29 | ||
31 | #include <qdir.h> | 30 | #include <qdir.h> |
32 | 31 | ||
33 | IrServer::IrServer( QObject *parent, const char *name ) | 32 | IrServer::IrServer( QObject *parent, const char *name ) |
34 | : QObject( parent, name ), obexIface(0) | 33 | : QObject( parent, name ), obexIface(0) |
35 | { | 34 | { |
36 | lib = 0; | 35 | lib = 0; |
37 | obexIface = 0; | 36 | obexIface = 0; |
38 | QString path = QPEApplication::qpeDir() + "/plugins/obex/"; | 37 | QString path = QPEApplication::qpeDir() + "/plugins/obex/"; |
39 | #ifdef Q_OS_MACX | 38 | #ifdef Q_OS_MACX |
40 | QDir dir( path, "lib*.dylib" ); | 39 | QDir dir( path, "lib*.dylib" ); |
41 | #else | 40 | #else |
42 | QDir dir( path, "lib*.so" ); | 41 | QDir dir( path, "lib*.so" ); |
43 | #endif /* Q_OS_MACX */ | 42 | #endif /* Q_OS_MACX */ |
44 | QStringList list = dir.entryList(); | 43 | QStringList list = dir.entryList(); |
45 | QStringList::Iterator it; | 44 | QStringList::Iterator it; |
46 | for ( it = list.begin(); it != list.end(); ++it ) { | 45 | for ( it = list.begin(); it != list.end(); ++it ) { |
47 | QLibrary *trylib = new QLibrary( path + *it ); | 46 | QLibrary *trylib = new QLibrary( path + *it ); |
48 | //qDebug("trying lib %s", (path + (*it)).latin1() ); | 47 | //qDebug("trying lib %s", (path + (*it)).latin1() ); |
49 | if ( trylib->queryInterface( IID_ObexInterface, (QUnknownInterface**)&obexIface ) == QS_OK ) { | 48 | if ( trylib->queryInterface( IID_ObexInterface, (QUnknownInterface**)&obexIface ) == QS_OK ) { |
50 | lib = trylib; | 49 | lib = trylib; |
51 | //qDebug("found obex lib" ); | 50 | //qDebug("found obex lib" ); |
52 | QString lang = getenv( "LANG" ); | 51 | QString lang = getenv( "LANG" ); |
53 | QTranslator * trans = new QTranslator(qApp); | 52 | QTranslator * trans = new QTranslator(qApp); |
54 | QString type = (*it).left( (*it).find(".") ); | 53 | QString type = (*it).left( (*it).find(".") ); |
55 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; | 54 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; |
56 | //qDebug("tr fpr obex: %s", tfn.latin1() ); | 55 | //qDebug("tr fpr obex: %s", tfn.latin1() ); |
57 | if ( trans->load( tfn )) | 56 | if ( trans->load( tfn )) |
58 | qApp->installTranslator( trans ); | 57 | qApp->installTranslator( trans ); |
59 | else | 58 | else |
60 | delete trans; | 59 | delete trans; |
61 | 60 | ||
62 | break; | 61 | break; |
63 | } else { | 62 | } else { |
64 | delete lib; | 63 | delete lib; |
65 | } | 64 | } |
66 | } | 65 | } |
67 | if ( !lib ) | 66 | if ( !lib ) |
68 | qDebug("could not load IR plugin" ); | 67 | qDebug("could not load IR plugin" ); |
69 | } | 68 | } |
70 | 69 | ||
71 | IrServer::~IrServer() | 70 | IrServer::~IrServer() |
72 | { | 71 | { |
73 | if ( obexIface ) | 72 | if ( obexIface ) |
74 | obexIface->release(); | 73 | obexIface->release(); |
75 | delete lib; | 74 | delete lib; |
76 | } | 75 | } |
77 | 76 | ||
diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp index 984a57d..54efb0b 100644 --- a/core/launcher/launcher.cpp +++ b/core/launcher/launcher.cpp | |||
@@ -1,302 +1,300 @@ | |||
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 | 20 | ||
21 | #include <qtopia/global.h> | 21 | #include <qtopia/global.h> |
22 | #ifdef Q_WS_QWS | 22 | #ifdef Q_WS_QWS |
23 | #include <qtopia/qcopenvelope_qws.h> | 23 | #include <qtopia/qcopenvelope_qws.h> |
24 | #endif | 24 | #endif |
25 | #include <qtopia/resource.h> | 25 | #include <qtopia/resource.h> |
26 | #include <qtopia/applnk.h> | 26 | #include <qtopia/applnk.h> |
27 | #include <qtopia/config.h> | 27 | #include <qtopia/config.h> |
28 | #include <qtopia/global.h> | ||
29 | #include <qtopia/qpeapplication.h> | 28 | #include <qtopia/qpeapplication.h> |
30 | #include <qtopia/mimetype.h> | 29 | #include <qtopia/mimetype.h> |
31 | #include <qtopia/private/categories.h> | 30 | #include <qtopia/private/categories.h> |
32 | //#include <qtopia/custom.h> | 31 | //#include <qtopia/custom.h> |
33 | 32 | ||
34 | #include <qdir.h> | 33 | #include <qdir.h> |
35 | #ifdef Q_WS_QWS | 34 | #ifdef Q_WS_QWS |
36 | #include <qwindowsystem_qws.h> | 35 | #include <qwindowsystem_qws.h> |
37 | #endif | 36 | #endif |
38 | #include <qtimer.h> | 37 | #include <qtimer.h> |
39 | #include <qcombobox.h> | 38 | #include <qcombobox.h> |
40 | #include <qvbox.h> | 39 | #include <qvbox.h> |
41 | #include <qlayout.h> | 40 | #include <qlayout.h> |
42 | #include <qstyle.h> | 41 | #include <qstyle.h> |
43 | #include <qpushbutton.h> | 42 | #include <qpushbutton.h> |
44 | #include <qtabbar.h> | 43 | #include <qtabbar.h> |
45 | #include <qwidgetstack.h> | 44 | #include <qwidgetstack.h> |
46 | #include <qlayout.h> | ||
47 | #include <qregexp.h> | 45 | #include <qregexp.h> |
48 | #include <qmessagebox.h> | 46 | #include <qmessagebox.h> |
49 | #include <qframe.h> | 47 | #include <qframe.h> |
50 | #include <qpainter.h> | 48 | #include <qpainter.h> |
51 | #include <qlabel.h> | 49 | #include <qlabel.h> |
52 | #include <qtextstream.h> | 50 | #include <qtextstream.h> |
53 | #include <qpopupmenu.h> | 51 | #include <qpopupmenu.h> |
54 | 52 | ||
55 | #include "startmenu.h" | 53 | #include "startmenu.h" |
56 | #include "taskbar.h" | 54 | #include "taskbar.h" |
57 | 55 | ||
58 | #include "serverinterface.h" | 56 | #include "serverinterface.h" |
59 | #include "launcherview.h" | 57 | #include "launcherview.h" |
60 | #include "launcher.h" | 58 | #include "launcher.h" |
61 | #include "server.h" | 59 | #include "server.h" |
62 | 60 | ||
63 | #define QTOPIA_INTERNAL_FSLP | 61 | #define QTOPIA_INTERNAL_FSLP |
64 | #include <qtopia/lnkproperties.h> | 62 | #include <qtopia/lnkproperties.h> |
65 | #include <stdlib.h> | 63 | #include <stdlib.h> |
66 | #include <assert.h> | 64 | #include <assert.h> |
67 | 65 | ||
68 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | 66 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) |
69 | #include <unistd.h> | 67 | #include <unistd.h> |
70 | #include <stdio.h> | 68 | #include <stdio.h> |
71 | #include <sys/vfs.h> | 69 | #include <sys/vfs.h> |
72 | #include <mntent.h> | 70 | #include <mntent.h> |
73 | #endif | 71 | #endif |
74 | 72 | ||
75 | #ifdef Q_WS_QWS | 73 | #ifdef Q_WS_QWS |
76 | #include <qkeyboard_qws.h> | 74 | #include <qkeyboard_qws.h> |
77 | #include <qpe/lnkproperties.h> | 75 | #include <qpe/lnkproperties.h> |
78 | #endif | 76 | #endif |
79 | 77 | ||
80 | 78 | ||
81 | static bool isVisibleWindow( int ); | 79 | static bool isVisibleWindow( int ); |
82 | //=========================================================================== | 80 | //=========================================================================== |
83 | 81 | ||
84 | LauncherTabWidget::LauncherTabWidget( Launcher* parent ) : | 82 | LauncherTabWidget::LauncherTabWidget( Launcher* parent ) : |
85 | QVBox( parent ), docview( 0 ) | 83 | QVBox( parent ), docview( 0 ) |
86 | { | 84 | { |
87 | docLoadingWidgetEnabled = false; | 85 | docLoadingWidgetEnabled = false; |
88 | docLoadingWidget = 0; | 86 | docLoadingWidget = 0; |
89 | docLoadingWidgetProgress = 0; | 87 | docLoadingWidgetProgress = 0; |
90 | launcher = parent; | 88 | launcher = parent; |
91 | categoryBar = new LauncherTabBar( this ); | 89 | categoryBar = new LauncherTabBar( this ); |
92 | QPalette pal = categoryBar->palette(); | 90 | QPalette pal = categoryBar->palette(); |
93 | pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) ); | 91 | pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) ); |
94 | pal.setColor( QColorGroup::Background, pal.active().background().light(110) ); | 92 | pal.setColor( QColorGroup::Background, pal.active().background().light(110) ); |
95 | categoryBar->setPalette( pal ); | 93 | categoryBar->setPalette( pal ); |
96 | stack = new QWidgetStack(this); | 94 | stack = new QWidgetStack(this); |
97 | connect( categoryBar, SIGNAL(selected(int)), this, SLOT(raiseTabWidget()) ); | 95 | connect( categoryBar, SIGNAL(selected(int)), this, SLOT(raiseTabWidget()) ); |
98 | categoryBar->show(); | 96 | categoryBar->show(); |
99 | stack->show(); | 97 | stack->show(); |
100 | 98 | ||
101 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 99 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
102 | QCopChannel *channel = new QCopChannel( "QPE/Launcher", this ); | 100 | QCopChannel *channel = new QCopChannel( "QPE/Launcher", this ); |
103 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), | 101 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), |
104 | this, SLOT(launcherMessage(const QCString&, const QByteArray&)) ); | 102 | this, SLOT(launcherMessage(const QCString&, const QByteArray&)) ); |
105 | connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), | 103 | connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), |
106 | this, SLOT(appMessage(const QCString&, const QByteArray&))); | 104 | this, SLOT(appMessage(const QCString&, const QByteArray&))); |
107 | #endif | 105 | #endif |
108 | 106 | ||
109 | createDocLoadingWidget(); | 107 | createDocLoadingWidget(); |
110 | } | 108 | } |
111 | 109 | ||
112 | void LauncherTabWidget::createDocLoadingWidget() | 110 | void LauncherTabWidget::createDocLoadingWidget() |
113 | { | 111 | { |
114 | // Construct the 'doc loading widget' shown when finding documents | 112 | // Construct the 'doc loading widget' shown when finding documents |
115 | 113 | ||
116 | // ### LauncherView class needs changing to be more generic so | 114 | // ### LauncherView class needs changing to be more generic so |
117 | // this widget can change its background similar to the iconviews | 115 | // this widget can change its background similar to the iconviews |
118 | // so the background for this matches | 116 | // so the background for this matches |
119 | docLoadingWidget = new LauncherView( stack ); | 117 | docLoadingWidget = new LauncherView( stack ); |
120 | docLoadingWidget->hideIcons(); | 118 | docLoadingWidget->hideIcons(); |
121 | QVBox *docLoadingVBox = new QVBox( docLoadingWidget ); | 119 | QVBox *docLoadingVBox = new QVBox( docLoadingWidget ); |
122 | 120 | ||
123 | docLoadingVBox->setSpacing( 20 ); | 121 | docLoadingVBox->setSpacing( 20 ); |
124 | docLoadingVBox->setMargin( 10 ); | 122 | docLoadingVBox->setMargin( 10 ); |
125 | 123 | ||
126 | QWidget *space1 = new QWidget( docLoadingVBox ); | 124 | QWidget *space1 = new QWidget( docLoadingVBox ); |
127 | docLoadingVBox->setStretchFactor( space1, 1 ); | 125 | docLoadingVBox->setStretchFactor( space1, 1 ); |
128 | 126 | ||
129 | QLabel *waitPixmap = new QLabel( docLoadingVBox ); | 127 | QLabel *waitPixmap = new QLabel( docLoadingVBox ); |
130 | waitPixmap->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, waitPixmap->sizePolicy().hasHeightForWidth() ) ); | 128 | waitPixmap->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, waitPixmap->sizePolicy().hasHeightForWidth() ) ); |
131 | waitPixmap->setPixmap( Resource::loadPixmap( "bigwait" ) ); | 129 | waitPixmap->setPixmap( Resource::loadPixmap( "bigwait" ) ); |
132 | waitPixmap->setAlignment( int( QLabel::AlignCenter ) ); | 130 | waitPixmap->setAlignment( int( QLabel::AlignCenter ) ); |
133 | 131 | ||
134 | Config cfg( "Launcher" ); | 132 | Config cfg( "Launcher" ); |
135 | cfg.setGroup( "DocTab" ); | 133 | cfg.setGroup( "DocTab" ); |
136 | bool docTabEnabled = cfg.readBoolEntry( "Enable", true ); | 134 | bool docTabEnabled = cfg.readBoolEntry( "Enable", true ); |
137 | 135 | ||
138 | QLabel *textLabel = new QLabel( docLoadingVBox ); | 136 | QLabel *textLabel = new QLabel( docLoadingVBox ); |
139 | textLabel->setAlignment( int( QLabel::AlignCenter ) ); | 137 | textLabel->setAlignment( int( QLabel::AlignCenter ) ); |
140 | docLoadingWidgetProgress = new QProgressBar( docLoadingVBox ); | 138 | docLoadingWidgetProgress = new QProgressBar( docLoadingVBox ); |
141 | docLoadingWidgetProgress->setProgress( 0 ); | 139 | docLoadingWidgetProgress->setProgress( 0 ); |
142 | docLoadingWidgetProgress->setCenterIndicator( TRUE ); | 140 | docLoadingWidgetProgress->setCenterIndicator( TRUE ); |
143 | docLoadingWidgetProgress->setBackgroundMode( NoBackground ); // No flicker | 141 | docLoadingWidgetProgress->setBackgroundMode( NoBackground ); // No flicker |
144 | setProgressStyle(); | 142 | setProgressStyle(); |
145 | 143 | ||
146 | if ( docTabEnabled ) | 144 | if ( docTabEnabled ) |
147 | { | 145 | { |
148 | textLabel->setText( tr( "<b>Finding Documents...</b>" ) ); | 146 | textLabel->setText( tr( "<b>Finding Documents...</b>" ) ); |
149 | } | 147 | } |
150 | else | 148 | else |
151 | { | 149 | { |
152 | textLabel->setText( tr( "<b>The Documents Tab<p>has been disabled.<p>" | 150 | textLabel->setText( tr( "<b>The Documents Tab<p>has been disabled.<p>" |
153 | "Use Settings->Launcher->DocTab<p>to reenable it.</b></center>" ) ); | 151 | "Use Settings->Launcher->DocTab<p>to reenable it.</b></center>" ) ); |
154 | docLoadingWidgetProgress->hide(); | 152 | docLoadingWidgetProgress->hide(); |
155 | docLoadingWidgetEnabled = true; | 153 | docLoadingWidgetEnabled = true; |
156 | } | 154 | } |
157 | 155 | ||
158 | QWidget *space2 = new QWidget( docLoadingVBox ); | 156 | QWidget *space2 = new QWidget( docLoadingVBox ); |
159 | docLoadingVBox->setStretchFactor( space2, 1 ); | 157 | docLoadingVBox->setStretchFactor( space2, 1 ); |
160 | 158 | ||
161 | cfg.setGroup( "Tab Documents" ); // No tr | 159 | cfg.setGroup( "Tab Documents" ); // No tr |
162 | setTabViewAppearance( docLoadingWidget, cfg ); | 160 | setTabViewAppearance( docLoadingWidget, cfg ); |
163 | 161 | ||
164 | stack->addWidget( docLoadingWidget, 0 ); | 162 | stack->addWidget( docLoadingWidget, 0 ); |
165 | } | 163 | } |
166 | 164 | ||
167 | void LauncherTabWidget::initLayout() | 165 | void LauncherTabWidget::initLayout() |
168 | { | 166 | { |
169 | layout()->activate(); | 167 | layout()->activate(); |
170 | docView()->setFocus(); | 168 | docView()->setFocus(); |
171 | categoryBar->showTab("Documents"); | 169 | categoryBar->showTab("Documents"); |
172 | } | 170 | } |
173 | 171 | ||
174 | void LauncherTabWidget::appMessage(const QCString& message, const QByteArray&) | 172 | void LauncherTabWidget::appMessage(const QCString& message, const QByteArray&) |
175 | { | 173 | { |
176 | if ( message == "nextView()" ) | 174 | if ( message == "nextView()" ) |
177 | categoryBar->nextTab(); | 175 | categoryBar->nextTab(); |
178 | } | 176 | } |
179 | 177 | ||
180 | void LauncherTabWidget::raiseTabWidget() | 178 | void LauncherTabWidget::raiseTabWidget() |
181 | { | 179 | { |
182 | if ( categoryBar->currentView() == docView() | 180 | if ( categoryBar->currentView() == docView() |
183 | && docLoadingWidgetEnabled ) { | 181 | && docLoadingWidgetEnabled ) { |
184 | stack->raiseWidget( docLoadingWidget ); | 182 | stack->raiseWidget( docLoadingWidget ); |
185 | docLoadingWidget->updateGeometry(); | 183 | docLoadingWidget->updateGeometry(); |
186 | } else { | 184 | } else { |
187 | stack->raiseWidget( categoryBar->currentView() ); | 185 | stack->raiseWidget( categoryBar->currentView() ); |
188 | } | 186 | } |
189 | } | 187 | } |
190 | 188 | ||
191 | void LauncherTabWidget::tabProperties() | 189 | void LauncherTabWidget::tabProperties() |
192 | { | 190 | { |
193 | LauncherView *view = categoryBar->currentView(); | 191 | LauncherView *view = categoryBar->currentView(); |
194 | QPopupMenu *m = new QPopupMenu( this ); | 192 | QPopupMenu *m = new QPopupMenu( this ); |
195 | m->insertItem( tr("Icon View"), LauncherView::Icon ); | 193 | m->insertItem( tr("Icon View"), LauncherView::Icon ); |
196 | m->insertItem( tr("List View"), LauncherView::List ); | 194 | m->insertItem( tr("List View"), LauncherView::List ); |
197 | m->setItemChecked( (int)view->viewMode(), TRUE ); | 195 | m->setItemChecked( (int)view->viewMode(), TRUE ); |
198 | int rv = m->exec( QCursor::pos() ); | 196 | int rv = m->exec( QCursor::pos() ); |
199 | if ( rv >= 0 && rv != view->viewMode() ) { | 197 | if ( rv >= 0 && rv != view->viewMode() ) { |
200 | view->setViewMode( (LauncherView::ViewMode)rv ); | 198 | view->setViewMode( (LauncherView::ViewMode)rv ); |
201 | } | 199 | } |
202 | 200 | ||
203 | delete m; | 201 | delete m; |
204 | } | 202 | } |
205 | 203 | ||
206 | void LauncherTabWidget::deleteView( const QString& id ) | 204 | void LauncherTabWidget::deleteView( const QString& id ) |
207 | { | 205 | { |
208 | LauncherTab *t = categoryBar->launcherTab(id); | 206 | LauncherTab *t = categoryBar->launcherTab(id); |
209 | if ( t ) { | 207 | if ( t ) { |
210 | stack->removeWidget( t->view ); | 208 | stack->removeWidget( t->view ); |
211 | delete t->view; | 209 | delete t->view; |
212 | categoryBar->removeTab( t ); | 210 | categoryBar->removeTab( t ); |
213 | } | 211 | } |
214 | } | 212 | } |
215 | 213 | ||
216 | LauncherView* LauncherTabWidget::newView( const QString& id, const QPixmap& pm, const QString& label ) | 214 | LauncherView* LauncherTabWidget::newView( const QString& id, const QPixmap& pm, const QString& label ) |
217 | { | 215 | { |
218 | LauncherView* view = new LauncherView( stack ); | 216 | LauncherView* view = new LauncherView( stack ); |
219 | connect( view, SIGNAL(clicked(const AppLnk*)), | 217 | connect( view, SIGNAL(clicked(const AppLnk*)), |
220 | this, SIGNAL(clicked(const AppLnk*))); | 218 | this, SIGNAL(clicked(const AppLnk*))); |
221 | connect( view, SIGNAL(rightPressed(AppLnk*)), | 219 | connect( view, SIGNAL(rightPressed(AppLnk*)), |
222 | this, SIGNAL(rightPressed(AppLnk*))); | 220 | this, SIGNAL(rightPressed(AppLnk*))); |
223 | 221 | ||
224 | int n = categoryBar->count(); | 222 | int n = categoryBar->count(); |
225 | stack->addWidget( view, n ); | 223 | stack->addWidget( view, n ); |
226 | 224 | ||
227 | LauncherTab *tab = new LauncherTab( id, view, pm, label ); | 225 | LauncherTab *tab = new LauncherTab( id, view, pm, label ); |
228 | categoryBar->insertTab( tab, n-1 ); | 226 | categoryBar->insertTab( tab, n-1 ); |
229 | 227 | ||
230 | if ( id == "Documents" ) | 228 | if ( id == "Documents" ) |
231 | docview = view; | 229 | docview = view; |
232 | 230 | ||
233 | qDebug("inserting %s at %d", id.latin1(), n-1 ); | 231 | qDebug("inserting %s at %d", id.latin1(), n-1 ); |
234 | 232 | ||
235 | Config cfg("Launcher"); | 233 | Config cfg("Launcher"); |
236 | setTabAppearance( tab, cfg ); | 234 | setTabAppearance( tab, cfg ); |
237 | 235 | ||
238 | cfg.setGroup( "GUI" ); | 236 | cfg.setGroup( "GUI" ); |
239 | view->setBusyIndicatorType( cfg.readEntry( "BusyType", QString::null ) ); | 237 | view->setBusyIndicatorType( cfg.readEntry( "BusyType", QString::null ) ); |
240 | 238 | ||
241 | return view; | 239 | return view; |
242 | } | 240 | } |
243 | 241 | ||
244 | LauncherView *LauncherTabWidget::view( const QString &id ) | 242 | LauncherView *LauncherTabWidget::view( const QString &id ) |
245 | { | 243 | { |
246 | LauncherTab *t = categoryBar->launcherTab(id); | 244 | LauncherTab *t = categoryBar->launcherTab(id); |
247 | if ( !t ) | 245 | if ( !t ) |
248 | return 0; | 246 | return 0; |
249 | return t->view; | 247 | return t->view; |
250 | } | 248 | } |
251 | 249 | ||
252 | LauncherView *LauncherTabWidget::docView() | 250 | LauncherView *LauncherTabWidget::docView() |
253 | { | 251 | { |
254 | return docview; | 252 | return docview; |
255 | } | 253 | } |
256 | 254 | ||
257 | void LauncherTabWidget::setLoadingWidgetEnabled( bool v ) | 255 | void LauncherTabWidget::setLoadingWidgetEnabled( bool v ) |
258 | { | 256 | { |
259 | if ( v != docLoadingWidgetEnabled && docLoadingWidget ) { | 257 | if ( v != docLoadingWidgetEnabled && docLoadingWidget ) { |
260 | docLoadingWidgetEnabled = v; | 258 | docLoadingWidgetEnabled = v; |
261 | raiseTabWidget(); | 259 | raiseTabWidget(); |
262 | } | 260 | } |
263 | } | 261 | } |
264 | 262 | ||
265 | void LauncherTabWidget::setLoadingProgress( int percent ) | 263 | void LauncherTabWidget::setLoadingProgress( int percent ) |
266 | { | 264 | { |
267 | docLoadingWidgetProgress->setProgress( (percent / 4) * 4 ); | 265 | docLoadingWidgetProgress->setProgress( (percent / 4) * 4 ); |
268 | } | 266 | } |
269 | 267 | ||
270 | // ### this function could more to LauncherView | 268 | // ### this function could more to LauncherView |
271 | void LauncherTabWidget::setTabViewAppearance( LauncherView *v, Config &cfg ) | 269 | void LauncherTabWidget::setTabViewAppearance( LauncherView *v, Config &cfg ) |
272 | { | 270 | { |
273 | // View | 271 | // View |
274 | QString view = cfg.readEntry( "View", "Icon" ); | 272 | QString view = cfg.readEntry( "View", "Icon" ); |
275 | if ( view == "List" ) // No tr | 273 | if ( view == "List" ) // No tr |
276 | v->setViewMode( LauncherView::List ); | 274 | v->setViewMode( LauncherView::List ); |
277 | QString bgType = cfg.readEntry( "BackgroundType", "Image" ); | 275 | QString bgType = cfg.readEntry( "BackgroundType", "Image" ); |
278 | if ( bgType == "Image" ) { // No tr | 276 | if ( bgType == "Image" ) { // No tr |
279 | QString pm = cfg.readEntry( "BackgroundImage", "launcher/opie-background" ); | 277 | QString pm = cfg.readEntry( "BackgroundImage", "launcher/opie-background" ); |
280 | v->setBackgroundType( LauncherView::Image, pm ); | 278 | v->setBackgroundType( LauncherView::Image, pm ); |
281 | } else if ( bgType == "SolidColor" ) { | 279 | } else if ( bgType == "SolidColor" ) { |
282 | QString c = cfg.readEntry( "BackgroundColor" ); | 280 | QString c = cfg.readEntry( "BackgroundColor" ); |
283 | v->setBackgroundType( LauncherView::SolidColor, c ); | 281 | v->setBackgroundType( LauncherView::SolidColor, c ); |
284 | } else { | 282 | } else { |
285 | v->setBackgroundType( LauncherView::Ruled, QString::null ); | 283 | v->setBackgroundType( LauncherView::Ruled, QString::null ); |
286 | } | 284 | } |
287 | QString textCol = cfg.readEntry( "TextColor" ); | 285 | QString textCol = cfg.readEntry( "TextColor" ); |
288 | if ( textCol.isEmpty() ) | 286 | if ( textCol.isEmpty() ) |
289 | v->setTextColor( QColor() ); | 287 | v->setTextColor( QColor() ); |
290 | else | 288 | else |
291 | v->setTextColor( QColor(textCol) ); | 289 | v->setTextColor( QColor(textCol) ); |
292 | // bool customFont = cfg.readBoolEntry( "CustomFont", FALSE ); | 290 | // bool customFont = cfg.readBoolEntry( "CustomFont", FALSE ); |
293 | 291 | ||
294 | 292 | ||
295 | QStringList font = cfg.readListEntry( "Font", ',' ); | 293 | QStringList font = cfg.readListEntry( "Font", ',' ); |
296 | if ( font.count() == 4 ) | 294 | if ( font.count() == 4 ) |
297 | v->setViewFont( QFont(font[0], font[1].toInt(), font[2].toInt(), font[3].toInt()!=0) ); | 295 | v->setViewFont( QFont(font[0], font[1].toInt(), font[2].toInt(), font[3].toInt()!=0) ); |
298 | 296 | ||
299 | // ### FIXME TabColor TabTextColor | 297 | // ### FIXME TabColor TabTextColor |
300 | 298 | ||
301 | } | 299 | } |
302 | 300 | ||
diff --git a/core/launcher/launcherglobal.cpp b/core/launcher/launcherglobal.cpp index 84caa93..9abcae9 100644 --- a/core/launcher/launcherglobal.cpp +++ b/core/launcher/launcherglobal.cpp | |||
@@ -1,83 +1,79 @@ | |||
1 | /* | 1 | /* |
2 | * GPLv2 only | 2 | * GPLv2 only |
3 | * | 3 | * |
4 | * TT 2002-2002,2003 | 4 | * TT 2002-2002,2003 |
5 | */ | 5 | */ |
6 | #include <qstring.h> | ||
7 | #include <qcstring.h> | ||
8 | #include <qwidget.h> | ||
9 | #include <qguardedptr.h> | ||
10 | #include <qfile.h> | 6 | #include <qfile.h> |
11 | #include <qtextstream.h> | 7 | #include <qtextstream.h> |
12 | 8 | ||
13 | #include <qtopia/mimetype.h> | 9 | #include <qtopia/mimetype.h> |
14 | 10 | ||
15 | #include "launcherglobal.h" | 11 | #include "launcherglobal.h" |
16 | 12 | ||
17 | bool Opie::Global::isAppLnkFileName( const QString& file ) { | 13 | bool Opie::Global::isAppLnkFileName( const QString& file ) { |
18 | if ( file.right(1) == "/" ) | 14 | if ( file.right(1) == "/" ) |
19 | return FALSE; | 15 | return FALSE; |
20 | 16 | ||
21 | return file.find(MimeType::appsFolderName()+"/")==0; | 17 | return file.find(MimeType::appsFolderName()+"/")==0; |
22 | } | 18 | } |
23 | 19 | ||
24 | QString Opie::Global::tempDir() { | 20 | QString Opie::Global::tempDir() { |
25 | return QString::fromLatin1("/tmp/"); | 21 | return QString::fromLatin1("/tmp/"); |
26 | } | 22 | } |
27 | 23 | ||
28 | Global::Command* Opie::Global::builtinCommands() { | 24 | Global::Command* Opie::Global::builtinCommands() { |
29 | return builtin; | 25 | return builtin; |
30 | } | 26 | } |
31 | 27 | ||
32 | QGuardedPtr<QWidget>* Opie::Global::builtinRunning() { | 28 | QGuardedPtr<QWidget>* Opie::Global::builtinRunning() { |
33 | return running; | 29 | return running; |
34 | } | 30 | } |
35 | 31 | ||
36 | QString Opie::Global::uuid() { | 32 | QString Opie::Global::uuid() { |
37 | QFile file( "/proc/sys/kernel/random/uuid" ); | 33 | QFile file( "/proc/sys/kernel/random/uuid" ); |
38 | if (!file.open(IO_ReadOnly ) ) | 34 | if (!file.open(IO_ReadOnly ) ) |
39 | return QString::null; | 35 | return QString::null; |
40 | 36 | ||
41 | QTextStream stream(&file); | 37 | QTextStream stream(&file); |
42 | 38 | ||
43 | return "{" + stream.read().stripWhiteSpace() + "}"; | 39 | return "{" + stream.read().stripWhiteSpace() + "}"; |
44 | } | 40 | } |
45 | 41 | ||
46 | QByteArray Opie::Global::encodeBase64(const QByteArray& origData ) { | 42 | QByteArray Opie::Global::encodeBase64(const QByteArray& origData ) { |
47 | // follows simple algorithm from rsync code | 43 | // follows simple algorithm from rsync code |
48 | uchar *in = (uchar*)origData.data(); | 44 | uchar *in = (uchar*)origData.data(); |
49 | 45 | ||
50 | int inbytes = origData.size(); | 46 | int inbytes = origData.size(); |
51 | int outbytes = ((inbytes * 8) + 5) / 6; | 47 | int outbytes = ((inbytes * 8) + 5) / 6; |
52 | int padding = 4-outbytes%4; if ( padding == 4 ) padding = 0; | 48 | int padding = 4-outbytes%4; if ( padding == 4 ) padding = 0; |
53 | 49 | ||
54 | QByteArray outbuf(outbytes+padding); | 50 | QByteArray outbuf(outbytes+padding); |
55 | uchar* out = (uchar*)outbuf.data(); | 51 | uchar* out = (uchar*)outbuf.data(); |
56 | 52 | ||
57 | const char *b64 = | 53 | const char *b64 = |
58 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | 54 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
59 | 55 | ||
60 | for (int i = 0; i < outbytes; i++) { | 56 | for (int i = 0; i < outbytes; i++) { |
61 | int byte = (i * 6) / 8; | 57 | int byte = (i * 6) / 8; |
62 | int bit = (i * 6) % 8; | 58 | int bit = (i * 6) % 8; |
63 | if (bit < 3) { | 59 | if (bit < 3) { |
64 | if (byte < inbytes) | 60 | if (byte < inbytes) |
65 | *out = (b64[(in[byte] >> (2 - bit)) & 0x3F]); | 61 | *out = (b64[(in[byte] >> (2 - bit)) & 0x3F]); |
66 | } else { | 62 | } else { |
67 | if (byte + 1 == inbytes) { | 63 | if (byte + 1 == inbytes) { |
68 | *out = (b64[(in[byte] << (bit - 2)) & 0x3F]); | 64 | *out = (b64[(in[byte] << (bit - 2)) & 0x3F]); |
69 | } else { | 65 | } else { |
70 | *out = (b64[(in[byte] << (bit - 2) | | 66 | *out = (b64[(in[byte] << (bit - 2) | |
71 | in[byte + 1] >> (10 - bit)) & 0x3F]); | 67 | in[byte + 1] >> (10 - bit)) & 0x3F]); |
72 | } | 68 | } |
73 | } | 69 | } |
74 | ++out; | 70 | ++out; |
75 | } | 71 | } |
76 | ASSERT(out == (uchar*)outbuf.data() + outbuf.size() - padding); | 72 | ASSERT(out == (uchar*)outbuf.data() + outbuf.size() - padding); |
77 | while ( padding-- ) | 73 | while ( padding-- ) |
78 | *out++='='; | 74 | *out++='='; |
79 | 75 | ||
80 | return outbuf; | 76 | return outbuf; |
81 | } | 77 | } |
82 | 78 | ||
83 | 79 | ||
diff --git a/core/launcher/launchertab.cpp b/core/launcher/launchertab.cpp index 10cfd5f..710f259 100644 --- a/core/launcher/launchertab.cpp +++ b/core/launcher/launchertab.cpp | |||
@@ -1,280 +1,277 @@ | |||
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 | #include "launchertab.h" | 20 | #include "launchertab.h" |
21 | #include <qapplication.h> | 21 | #include <qapplication.h> |
22 | #include <qstyle.h> | ||
23 | #include <qpainter.h> | ||
24 | #include <qbitmap.h> | ||
25 | 22 | ||
26 | 23 | ||
27 | LauncherTabBar::LauncherTabBar( QWidget *parent, const char *name ) | 24 | LauncherTabBar::LauncherTabBar( QWidget *parent, const char *name ) |
28 | : QTabBar( parent, name ) | 25 | : QTabBar( parent, name ) |
29 | { | 26 | { |
30 | setFocusPolicy( NoFocus ); | 27 | setFocusPolicy( NoFocus ); |
31 | connect( this, SIGNAL( selected(int) ), this, SLOT( layoutTabs() ) ); | 28 | connect( this, SIGNAL( selected(int) ), this, SLOT( layoutTabs() ) ); |
32 | } | 29 | } |
33 | 30 | ||
34 | LauncherTabBar::~LauncherTabBar() | 31 | LauncherTabBar::~LauncherTabBar() |
35 | { | 32 | { |
36 | } | 33 | } |
37 | 34 | ||
38 | void LauncherTabBar::insertTab( LauncherTab *t, int index ) | 35 | void LauncherTabBar::insertTab( LauncherTab *t, int index ) |
39 | { | 36 | { |
40 | if ( index < 0 ) | 37 | if ( index < 0 ) |
41 | items.append( t ); | 38 | items.append( t ); |
42 | else | 39 | else |
43 | items.insert( (uint)index, t ); | 40 | items.insert( (uint)index, t ); |
44 | tabs.insert( t->type, t ); | 41 | tabs.insert( t->type, t ); |
45 | QTabBar::insertTab( t, index ); | 42 | QTabBar::insertTab( t, index ); |
46 | } | 43 | } |
47 | 44 | ||
48 | void LauncherTabBar::removeTab( QTab *tab ) | 45 | void LauncherTabBar::removeTab( QTab *tab ) |
49 | { | 46 | { |
50 | LauncherTab *t = (LauncherTab *)tab; | 47 | LauncherTab *t = (LauncherTab *)tab; |
51 | tabs.remove( t->type ); | 48 | tabs.remove( t->type ); |
52 | items.remove( t ); | 49 | items.remove( t ); |
53 | QTabBar::removeTab( t ); | 50 | QTabBar::removeTab( t ); |
54 | } | 51 | } |
55 | 52 | ||
56 | void LauncherTabBar::prevTab() | 53 | void LauncherTabBar::prevTab() |
57 | { | 54 | { |
58 | int n = count(); | 55 | int n = count(); |
59 | int tab = currentTab(); | 56 | int tab = currentTab(); |
60 | if ( tab >= 0 ) | 57 | if ( tab >= 0 ) |
61 | setCurrentTab( (tab - 1 + n)%n ); | 58 | setCurrentTab( (tab - 1 + n)%n ); |
62 | } | 59 | } |
63 | 60 | ||
64 | void LauncherTabBar::nextTab() | 61 | void LauncherTabBar::nextTab() |
65 | { | 62 | { |
66 | int n = count(); | 63 | int n = count(); |
67 | int tab = currentTab(); | 64 | int tab = currentTab(); |
68 | setCurrentTab( (tab + 1)%n ); | 65 | setCurrentTab( (tab + 1)%n ); |
69 | } | 66 | } |
70 | 67 | ||
71 | void LauncherTabBar::showTab( const QString& id ) | 68 | void LauncherTabBar::showTab( const QString& id ) |
72 | { | 69 | { |
73 | setCurrentTab( tabs[id] ); | 70 | setCurrentTab( tabs[id] ); |
74 | } | 71 | } |
75 | 72 | ||
76 | void LauncherTabBar::layoutTabs() | 73 | void LauncherTabBar::layoutTabs() |
77 | { | 74 | { |
78 | if ( !count() ) | 75 | if ( !count() ) |
79 | return; | 76 | return; |
80 | 77 | ||
81 | int available = width()-1; | 78 | int available = width()-1; |
82 | 79 | ||
83 | QFontMetrics fm = fontMetrics(); | 80 | QFontMetrics fm = fontMetrics(); |
84 | int hiddenTabWidth = -12; | 81 | int hiddenTabWidth = -12; |
85 | LauncherTab *current = currentLauncherTab(); | 82 | LauncherTab *current = currentLauncherTab(); |
86 | int hframe, vframe, overlap; | 83 | int hframe, vframe, overlap; |
87 | style().tabbarMetrics( this, hframe, vframe, overlap ); | 84 | style().tabbarMetrics( this, hframe, vframe, overlap ); |
88 | int x = 0; | 85 | int x = 0; |
89 | QRect r; | 86 | QRect r; |
90 | LauncherTab *t; | 87 | LauncherTab *t; |
91 | QListIterator< LauncherTab > it( items ); | 88 | QListIterator< LauncherTab > it( items ); |
92 | int required = 0; | 89 | int required = 0; |
93 | int eventabwidth = (width()-1)/count(); | 90 | int eventabwidth = (width()-1)/count(); |
94 | enum Mode { HideBackText, Pack, Even } mode=Even; | 91 | enum Mode { HideBackText, Pack, Even } mode=Even; |
95 | for (it.toFirst(); it.current(); ++it ) { | 92 | for (it.toFirst(); it.current(); ++it ) { |
96 | t = it.current(); | 93 | t = it.current(); |
97 | if ( !t ) | 94 | if ( !t ) |
98 | continue; | 95 | continue; |
99 | int iw = fm.width( t->text() ) + hframe - overlap; | 96 | int iw = fm.width( t->text() ) + hframe - overlap; |
100 | if ( t != current ) { | 97 | if ( t != current ) { |
101 | available -= hiddenTabWidth + hframe - overlap; | 98 | available -= hiddenTabWidth + hframe - overlap; |
102 | if ( t->iconSet() != 0 ) | 99 | if ( t->iconSet() != 0 ) |
103 | available -= t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); | 100 | available -= t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); |
104 | } | 101 | } |
105 | if ( t->iconSet() != 0 ) | 102 | if ( t->iconSet() != 0 ) |
106 | iw += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); | 103 | iw += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); |
107 | required += iw; | 104 | required += iw; |
108 | // As space gets tight, packed looks better than even. "10" must be at least 0. | 105 | // As space gets tight, packed looks better than even. "10" must be at least 0. |
109 | if ( iw >= eventabwidth-10 ) | 106 | if ( iw >= eventabwidth-10 ) |
110 | mode = Pack; | 107 | mode = Pack; |
111 | } | 108 | } |
112 | if ( mode == Pack && required > width()-1 ) | 109 | if ( mode == Pack && required > width()-1 ) |
113 | mode = HideBackText; | 110 | mode = HideBackText; |
114 | for ( it.toFirst(); it.current(); ++it ) { | 111 | for ( it.toFirst(); it.current(); ++it ) { |
115 | t = it.current(); | 112 | t = it.current(); |
116 | if ( !t ) | 113 | if ( !t ) |
117 | continue; | 114 | continue; |
118 | if ( mode != HideBackText ) { | 115 | if ( mode != HideBackText ) { |
119 | int w = fm.width( t->text() ); | 116 | int w = fm.width( t->text() ); |
120 | int ih = 0; | 117 | int ih = 0; |
121 | if ( t->iconSet() != 0 ) { | 118 | if ( t->iconSet() != 0 ) { |
122 | w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); | 119 | w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); |
123 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); | 120 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); |
124 | } | 121 | } |
125 | int h = QMAX( fm.height(), ih ); | 122 | int h = QMAX( fm.height(), ih ); |
126 | h = QMAX( h, QApplication::globalStrut().height() ); | 123 | h = QMAX( h, QApplication::globalStrut().height() ); |
127 | 124 | ||
128 | h += vframe; | 125 | h += vframe; |
129 | w += hframe; | 126 | w += hframe; |
130 | 127 | ||
131 | QRect totr(x, 0, | 128 | QRect totr(x, 0, |
132 | mode == Even ? eventabwidth : w * (width()-1)/required, h); | 129 | mode == Even ? eventabwidth : w * (width()-1)/required, h); |
133 | t->setRect(totr); | 130 | t->setRect(totr); |
134 | x += totr.width() - overlap; | 131 | x += totr.width() - overlap; |
135 | r = r.unite(totr); | 132 | r = r.unite(totr); |
136 | } else if ( t != current ) { | 133 | } else if ( t != current ) { |
137 | int w = hiddenTabWidth; | 134 | int w = hiddenTabWidth; |
138 | int ih = 0; | 135 | int ih = 0; |
139 | if ( t->iconSet() != 0 ) { | 136 | if ( t->iconSet() != 0 ) { |
140 | w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); | 137 | w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width(); |
141 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); | 138 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); |
142 | } | 139 | } |
143 | int h = QMAX( fm.height(), ih ); | 140 | int h = QMAX( fm.height(), ih ); |
144 | h = QMAX( h, QApplication::globalStrut().height() ); | 141 | h = QMAX( h, QApplication::globalStrut().height() ); |
145 | 142 | ||
146 | h += vframe; | 143 | h += vframe; |
147 | w += hframe; | 144 | w += hframe; |
148 | 145 | ||
149 | t->setRect( QRect(x, 0, w, h) ); | 146 | t->setRect( QRect(x, 0, w, h) ); |
150 | x += t->rect().width() - overlap; | 147 | x += t->rect().width() - overlap; |
151 | r = r.unite( t->rect() ); | 148 | r = r.unite( t->rect() ); |
152 | } else { | 149 | } else { |
153 | int ih = 0; | 150 | int ih = 0; |
154 | if ( t->iconSet() != 0 ) { | 151 | if ( t->iconSet() != 0 ) { |
155 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); | 152 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); |
156 | } | 153 | } |
157 | int h = QMAX( fm.height(), ih ); | 154 | int h = QMAX( fm.height(), ih ); |
158 | h = QMAX( h, QApplication::globalStrut().height() ); | 155 | h = QMAX( h, QApplication::globalStrut().height() ); |
159 | 156 | ||
160 | h += vframe; | 157 | h += vframe; |
161 | 158 | ||
162 | t->setRect( QRect(x, 0, available, h) ); | 159 | t->setRect( QRect(x, 0, available, h) ); |
163 | x += t->rect().width() - overlap; | 160 | x += t->rect().width() - overlap; |
164 | r = r.unite( t->rect() ); | 161 | r = r.unite( t->rect() ); |
165 | } | 162 | } |
166 | } | 163 | } |
167 | 164 | ||
168 | t = it.toLast(); | 165 | t = it.toLast(); |
169 | if (t) { | 166 | if (t) { |
170 | QRect rr = t->rect(); | 167 | QRect rr = t->rect(); |
171 | rr.setRight(width()-1); | 168 | rr.setRight(width()-1); |
172 | t->setRect( rr ); | 169 | t->setRect( rr ); |
173 | } | 170 | } |
174 | 171 | ||
175 | for (it.toFirst(); it.current(); ++it ) { | 172 | for (it.toFirst(); it.current(); ++it ) { |
176 | t = it.current(); | 173 | t = it.current(); |
177 | QRect tr = t->rect(); | 174 | QRect tr = t->rect(); |
178 | tr.setHeight( r.height() ); | 175 | tr.setHeight( r.height() ); |
179 | t->setRect( tr ); | 176 | t->setRect( tr ); |
180 | } | 177 | } |
181 | 178 | ||
182 | update(); | 179 | update(); |
183 | } | 180 | } |
184 | 181 | ||
185 | void LauncherTabBar::paint( QPainter * p, QTab * t, bool selected ) const | 182 | void LauncherTabBar::paint( QPainter * p, QTab * t, bool selected ) const |
186 | { | 183 | { |
187 | LauncherTabBar *that = (LauncherTabBar *) this; | 184 | LauncherTabBar *that = (LauncherTabBar *) this; |
188 | LauncherTab *ct = (LauncherTab *)t; | 185 | LauncherTab *ct = (LauncherTab *)t; |
189 | QPalette pal = palette(); | 186 | QPalette pal = palette(); |
190 | bool setPal = FALSE; | 187 | bool setPal = FALSE; |
191 | if ( ct->bgColor.isValid() ) { | 188 | if ( ct->bgColor.isValid() ) { |
192 | pal.setColor( QPalette::Active, QColorGroup::Background, ct->bgColor ); | 189 | pal.setColor( QPalette::Active, QColorGroup::Background, ct->bgColor ); |
193 | pal.setColor( QPalette::Active, QColorGroup::Button, ct->bgColor ); | 190 | pal.setColor( QPalette::Active, QColorGroup::Button, ct->bgColor ); |
194 | pal.setColor( QPalette::Inactive, QColorGroup::Background, ct->bgColor ); | 191 | pal.setColor( QPalette::Inactive, QColorGroup::Background, ct->bgColor ); |
195 | pal.setColor( QPalette::Inactive, QColorGroup::Button, ct->bgColor ); | 192 | pal.setColor( QPalette::Inactive, QColorGroup::Button, ct->bgColor ); |
196 | that->setUpdatesEnabled( FALSE ); | 193 | that->setUpdatesEnabled( FALSE ); |
197 | that->setPalette( pal ); | 194 | that->setPalette( pal ); |
198 | setPal = TRUE; | 195 | setPal = TRUE; |
199 | } | 196 | } |
200 | #if QT_VERSION >= 0x030000 | 197 | #if QT_VERSION >= 0x030000 |
201 | QStyle::SFlags flags = QStyle::Style_Default; | 198 | QStyle::SFlags flags = QStyle::Style_Default; |
202 | if ( selected ) | 199 | if ( selected ) |
203 | flags |= QStyle::Style_Selected; | 200 | flags |= QStyle::Style_Selected; |
204 | style().drawControl( QStyle::CE_TabBarTab, p, this, t->rect(), | 201 | style().drawControl( QStyle::CE_TabBarTab, p, this, t->rect(), |
205 | colorGroup(), flags, QStyleOption(t) ); | 202 | colorGroup(), flags, QStyleOption(t) ); |
206 | #else | 203 | #else |
207 | style().drawTab( p, this, t, selected ); | 204 | style().drawTab( p, this, t, selected ); |
208 | #endif | 205 | #endif |
209 | 206 | ||
210 | QRect r( t->rect() ); | 207 | QRect r( t->rect() ); |
211 | QFont f( font() ); | 208 | QFont f( font() ); |
212 | if ( selected ) | 209 | if ( selected ) |
213 | f.setBold( TRUE ); | 210 | f.setBold( TRUE ); |
214 | p->setFont( f ); | 211 | p->setFont( f ); |
215 | 212 | ||
216 | if ( ct->fgColor.isValid() ) { | 213 | if ( ct->fgColor.isValid() ) { |
217 | pal.setColor( QPalette::Active, QColorGroup::Foreground, ct->fgColor ); | 214 | pal.setColor( QPalette::Active, QColorGroup::Foreground, ct->fgColor ); |
218 | pal.setColor( QPalette::Inactive, QColorGroup::Foreground, ct->fgColor ); | 215 | pal.setColor( QPalette::Inactive, QColorGroup::Foreground, ct->fgColor ); |
219 | that->setUpdatesEnabled( FALSE ); | 216 | that->setUpdatesEnabled( FALSE ); |
220 | that->setPalette( pal ); | 217 | that->setPalette( pal ); |
221 | setPal = TRUE; | 218 | setPal = TRUE; |
222 | } | 219 | } |
223 | int iw = 0; | 220 | int iw = 0; |
224 | int ih = 0; | 221 | int ih = 0; |
225 | if ( t->iconSet() != 0 ) { | 222 | if ( t->iconSet() != 0 ) { |
226 | iw = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 2; | 223 | iw = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 2; |
227 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); | 224 | ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); |
228 | } | 225 | } |
229 | int w = iw + p->fontMetrics().width( t->text() ) + 4; | 226 | int w = iw + p->fontMetrics().width( t->text() ) + 4; |
230 | int h = QMAX(p->fontMetrics().height() + 4, ih ); | 227 | int h = QMAX(p->fontMetrics().height() + 4, ih ); |
231 | paintLabel( p, QRect( r.left() + (r.width()-w)/2 - 3, | 228 | paintLabel( p, QRect( r.left() + (r.width()-w)/2 - 3, |
232 | r.top() + (r.height()-h)/2, w, h ), t, | 229 | r.top() + (r.height()-h)/2, w, h ), t, |
233 | #if QT_VERSION >= 0x030000 | 230 | #if QT_VERSION >= 0x030000 |
234 | t->identifier() == keyboardFocusTab() | 231 | t->identifier() == keyboardFocusTab() |
235 | #else | 232 | #else |
236 | t->identitifer() == keyboardFocusTab() | 233 | t->identitifer() == keyboardFocusTab() |
237 | #endif | 234 | #endif |
238 | ); | 235 | ); |
239 | if ( setPal ) { | 236 | if ( setPal ) { |
240 | that->unsetPalette(); | 237 | that->unsetPalette(); |
241 | that->setUpdatesEnabled( TRUE ); | 238 | that->setUpdatesEnabled( TRUE ); |
242 | } | 239 | } |
243 | } | 240 | } |
244 | 241 | ||
245 | void LauncherTabBar::paintLabel( QPainter* p, const QRect&, | 242 | void LauncherTabBar::paintLabel( QPainter* p, const QRect&, |
246 | QTab* t, bool has_focus ) const | 243 | QTab* t, bool has_focus ) const |
247 | { | 244 | { |
248 | QRect r = t->rect(); | 245 | QRect r = t->rect(); |
249 | // if ( t->id != currentTab() ) | 246 | // if ( t->id != currentTab() ) |
250 | //r.moveBy( 1, 1 ); | 247 | //r.moveBy( 1, 1 ); |
251 | // | 248 | // |
252 | if ( t->iconSet() ) { | 249 | if ( t->iconSet() ) { |
253 | // the tab has an iconset, draw it in the right mode | 250 | // the tab has an iconset, draw it in the right mode |
254 | QIconSet::Mode mode = (t->isEnabled() && isEnabled()) ? QIconSet::Normal : QIconSet::Disabled; | 251 | QIconSet::Mode mode = (t->isEnabled() && isEnabled()) ? QIconSet::Normal : QIconSet::Disabled; |
255 | if ( mode == QIconSet::Normal && has_focus ) | 252 | if ( mode == QIconSet::Normal && has_focus ) |
256 | mode = QIconSet::Active; | 253 | mode = QIconSet::Active; |
257 | QPixmap pixmap = t->iconSet()->pixmap( QIconSet::Small, mode ); | 254 | QPixmap pixmap = t->iconSet()->pixmap( QIconSet::Small, mode ); |
258 | int pixw = pixmap.width(); | 255 | int pixw = pixmap.width(); |
259 | int pixh = pixmap.height(); | 256 | int pixh = pixmap.height(); |
260 | p->drawPixmap( r.left() + 6, r.center().y() - pixh / 2 + 1, pixmap ); | 257 | p->drawPixmap( r.left() + 6, r.center().y() - pixh / 2 + 1, pixmap ); |
261 | r.setLeft( r.left() + pixw + 5 ); | 258 | r.setLeft( r.left() + pixw + 5 ); |
262 | } | 259 | } |
263 | 260 | ||
264 | QRect tr = r; | 261 | QRect tr = r; |
265 | 262 | ||
266 | if ( r.width() < 20 ) | 263 | if ( r.width() < 20 ) |
267 | return; | 264 | return; |
268 | 265 | ||
269 | if ( t->isEnabled() && isEnabled() ) { | 266 | if ( t->isEnabled() && isEnabled() ) { |
270 | #if defined(_WS_WIN32_) | 267 | #if defined(_WS_WIN32_) |
271 | if ( colorGroup().brush( QColorGroup::Button ) == colorGroup().brush( QColorGroup::Background ) ) | 268 | if ( colorGroup().brush( QColorGroup::Button ) == colorGroup().brush( QColorGroup::Background ) ) |
272 | p->setPen( colorGroup().buttonText() ); | 269 | p->setPen( colorGroup().buttonText() ); |
273 | else | 270 | else |
274 | p->setPen( colorGroup().foreground() ); | 271 | p->setPen( colorGroup().foreground() ); |
275 | #else | 272 | #else |
276 | p->setPen( colorGroup().foreground() ); | 273 | p->setPen( colorGroup().foreground() ); |
277 | #endif | 274 | #endif |
278 | p->drawText( tr, AlignCenter | AlignVCenter | ShowPrefix, t->text() ); | 275 | p->drawText( tr, AlignCenter | AlignVCenter | ShowPrefix, t->text() ); |
279 | } else { | 276 | } else { |
280 | p->setPen( palette().disabled().foreground() ); | 277 | p->setPen( palette().disabled().foreground() ); |
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp index 62c678d..513b1bd 100644 --- a/core/launcher/launcherview.cpp +++ b/core/launcher/launcherview.cpp | |||
@@ -1,302 +1,288 @@ | |||
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 | 20 | ||
21 | #include "launcherview.h" | 21 | #include "launcherview.h" |
22 | 22 | ||
23 | #include <qtopia/qpeapplication.h> | 23 | #include <qtopia/qpeapplication.h> |
24 | #include <qtopia/applnk.h> | ||
25 | #include <qtopia/qpedebug.h> | ||
26 | #include <qtopia/private/categories.h> | 24 | #include <qtopia/private/categories.h> |
27 | #include <qtopia/categoryselect.h> | 25 | #include <qtopia/categoryselect.h> |
28 | #include <qtopia/menubutton.h> | ||
29 | #include <qtopia/mimetype.h> | 26 | #include <qtopia/mimetype.h> |
30 | #include <qtopia/resource.h> | 27 | #include <qtopia/resource.h> |
31 | #include <qtopia/qpetoolbar.h> | ||
32 | //#include <qtopia/private/palmtoprecord.h> | 28 | //#include <qtopia/private/palmtoprecord.h> |
33 | 29 | ||
34 | #include <qtimer.h> | 30 | #include <qtimer.h> |
35 | #include <qtextstream.h> | ||
36 | #include <qdict.h> | ||
37 | #include <qfile.h> | ||
38 | #include <qfileinfo.h> | 31 | #include <qfileinfo.h> |
39 | #include <qhbox.h> | ||
40 | #include <qiconview.h> | 32 | #include <qiconview.h> |
41 | #include <qwidgetstack.h> | ||
42 | #include <qpainter.h> | ||
43 | #include <qregexp.h> | ||
44 | #include <qtoolbutton.h> | ||
45 | #include <qimage.h> | ||
46 | #include <qlabel.h> | ||
47 | #include <qobjectlist.h> | 33 | #include <qobjectlist.h> |
48 | 34 | ||
49 | 35 | ||
50 | // These define how the busy icon is animated and highlighted | 36 | // These define how the busy icon is animated and highlighted |
51 | #define BRIGHTEN_BUSY_ICON | 37 | #define BRIGHTEN_BUSY_ICON |
52 | //#define ALPHA_FADE_BUSY_ICON | 38 | //#define ALPHA_FADE_BUSY_ICON |
53 | //#define USE_ANIMATED_BUSY_ICON_OVERLAY | 39 | //#define USE_ANIMATED_BUSY_ICON_OVERLAY |
54 | #define BOUNCE_BUSY_ICON | 40 | #define BOUNCE_BUSY_ICON |
55 | 41 | ||
56 | 42 | ||
57 | class BgPixmap | 43 | class BgPixmap |
58 | { | 44 | { |
59 | public: | 45 | public: |
60 | BgPixmap( const QPixmap &p ) : pm(p), ref(1) {} | 46 | BgPixmap( const QPixmap &p ) : pm(p), ref(1) {} |
61 | QPixmap pm; | 47 | QPixmap pm; |
62 | int ref; | 48 | int ref; |
63 | }; | 49 | }; |
64 | 50 | ||
65 | 51 | ||
66 | static QMap<QString,BgPixmap*> *bgCache = 0; | 52 | static QMap<QString,BgPixmap*> *bgCache = 0; |
67 | 53 | ||
68 | static void cleanup_cache() | 54 | static void cleanup_cache() |
69 | { | 55 | { |
70 | QMap<QString,BgPixmap*>::Iterator it = bgCache->begin(); | 56 | QMap<QString,BgPixmap*>::Iterator it = bgCache->begin(); |
71 | while ( it != bgCache->end() ) { | 57 | while ( it != bgCache->end() ) { |
72 | QMap<QString,BgPixmap*>::Iterator curr = it; | 58 | QMap<QString,BgPixmap*>::Iterator curr = it; |
73 | ++it; | 59 | ++it; |
74 | delete (*curr); | 60 | delete (*curr); |
75 | bgCache->remove( curr ); | 61 | bgCache->remove( curr ); |
76 | } | 62 | } |
77 | delete bgCache; | 63 | delete bgCache; |
78 | bgCache = 0; | 64 | bgCache = 0; |
79 | } | 65 | } |
80 | 66 | ||
81 | 67 | ||
82 | class LauncherItem : public QIconViewItem | 68 | class LauncherItem : public QIconViewItem |
83 | { | 69 | { |
84 | public: | 70 | public: |
85 | LauncherItem( QIconView *parent, AppLnk* applnk, bool bigIcon=TRUE ); | 71 | LauncherItem( QIconView *parent, AppLnk* applnk, bool bigIcon=TRUE ); |
86 | ~LauncherItem(); | 72 | ~LauncherItem(); |
87 | 73 | ||
88 | AppLnk *appLnk() const { return app; } | 74 | AppLnk *appLnk() const { return app; } |
89 | AppLnk *takeAppLnk() { AppLnk* r=app; app=0; return r; } | 75 | AppLnk *takeAppLnk() { AppLnk* r=app; app=0; return r; } |
90 | 76 | ||
91 | void animateIcon(); | 77 | void animateIcon(); |
92 | void resetIcon(); | 78 | void resetIcon(); |
93 | 79 | ||
94 | virtual int compare ( QIconViewItem * i ) const; | 80 | virtual int compare ( QIconViewItem * i ) const; |
95 | void paintItem( QPainter *p, const QColorGroup &cg ); | 81 | void paintItem( QPainter *p, const QColorGroup &cg ); |
96 | 82 | ||
97 | void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } | 83 | void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } |
98 | protected: | 84 | protected: |
99 | bool isBigIcon; | 85 | bool isBigIcon; |
100 | int iteration; | 86 | int iteration; |
101 | AppLnk* app; | 87 | AppLnk* app; |
102 | private: | 88 | private: |
103 | void paintAnimatedIcon( QPainter *p ); | 89 | void paintAnimatedIcon( QPainter *p ); |
104 | BusyIndicatorType busyType; | 90 | BusyIndicatorType busyType; |
105 | }; | 91 | }; |
106 | 92 | ||
107 | 93 | ||
108 | class LauncherIconView : public QIconView { | 94 | class LauncherIconView : public QIconView { |
109 | public: | 95 | public: |
110 | LauncherIconView( QWidget* parent, const char* name=0 ) : | 96 | LauncherIconView( QWidget* parent, const char* name=0 ) : |
111 | QIconView(parent,name), | 97 | QIconView(parent,name), |
112 | tf(""), | 98 | tf(""), |
113 | cf(0), | 99 | cf(0), |
114 | bsy(0), | 100 | bsy(0), |
115 | busyTimer(0), | 101 | busyTimer(0), |
116 | bigIcns(TRUE), | 102 | bigIcns(TRUE), |
117 | bgColor(white) | 103 | bgColor(white) |
118 | { | 104 | { |
119 | sortmeth = Name; | 105 | sortmeth = Name; |
120 | hidden.setAutoDelete(TRUE); | 106 | hidden.setAutoDelete(TRUE); |
121 | ike = FALSE; | 107 | ike = FALSE; |
122 | calculateGrid( Bottom ); | 108 | calculateGrid( Bottom ); |
123 | } | 109 | } |
124 | 110 | ||
125 | ~LauncherIconView() | 111 | ~LauncherIconView() |
126 | { | 112 | { |
127 | #if 0 // debuggery | 113 | #if 0 // debuggery |
128 | QListIterator<AppLnk> it(hidden); | 114 | QListIterator<AppLnk> it(hidden); |
129 | AppLnk* l; | 115 | AppLnk* l; |
130 | while ((l=it.current())) { | 116 | while ((l=it.current())) { |
131 | ++it; | 117 | ++it; |
132 | //qDebug("%p: hidden (should remove)",l); | 118 | //qDebug("%p: hidden (should remove)",l); |
133 | } | 119 | } |
134 | #endif | 120 | #endif |
135 | } | 121 | } |
136 | 122 | ||
137 | QIconViewItem* busyItem() const { return bsy; } | 123 | QIconViewItem* busyItem() const { return bsy; } |
138 | #ifdef USE_ANIMATED_BUSY_ICON_OVERLAY | 124 | #ifdef USE_ANIMATED_BUSY_ICON_OVERLAY |
139 | QPixmap busyPixmap() const { return busyPix; } | 125 | QPixmap busyPixmap() const { return busyPix; } |
140 | #endif | 126 | #endif |
141 | void setBigIcons( bool bi ) { | 127 | void setBigIcons( bool bi ) { |
142 | bigIcns = bi; | 128 | bigIcns = bi; |
143 | #ifdef USE_ANIMATED_BUSY_ICON_OVERLAY | 129 | #ifdef USE_ANIMATED_BUSY_ICON_OVERLAY |
144 | busyPix.resize(0,0); | 130 | busyPix.resize(0,0); |
145 | #endif | 131 | #endif |
146 | } | 132 | } |
147 | 133 | ||
148 | void updateCategoriesAndMimeTypes(); | 134 | void updateCategoriesAndMimeTypes(); |
149 | void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } | 135 | void setBusyIndicatorType ( BusyIndicatorType t ) { busyType = t; } |
150 | void doAutoScroll() | 136 | void doAutoScroll() |
151 | { | 137 | { |
152 | // We don't want rubberbanding (yet) | 138 | // We don't want rubberbanding (yet) |
153 | } | 139 | } |
154 | 140 | ||
155 | void setBusy(bool on) | 141 | void setBusy(bool on) |
156 | { | 142 | { |
157 | #ifdef USE_ANIMATED_BUSY_ICON_OVERLAY | 143 | #ifdef USE_ANIMATED_BUSY_ICON_OVERLAY |
158 | if ( busyPix.isNull() ) { | 144 | if ( busyPix.isNull() ) { |
159 | int size = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize(); | 145 | int size = ( bigIcns ) ? AppLnk::bigIconSize() : AppLnk::smallIconSize(); |
160 | busyPix.convertFromImage( Resource::loadImage( "busy" ).smoothScale( size * 16, size ) ); | 146 | busyPix.convertFromImage( Resource::loadImage( "busy" ).smoothScale( size * 16, size ) ); |
161 | } | 147 | } |
162 | #endif | 148 | #endif |
163 | 149 | ||
164 | if ( on ) { | 150 | if ( on ) { |
165 | busyTimer = startTimer( 100 ); | 151 | busyTimer = startTimer( 100 ); |
166 | } else { | 152 | } else { |
167 | if ( busyTimer ) { | 153 | if ( busyTimer ) { |
168 | killTimer( busyTimer ); | 154 | killTimer( busyTimer ); |
169 | busyTimer = 0; | 155 | busyTimer = 0; |
170 | } | 156 | } |
171 | } | 157 | } |
172 | 158 | ||
173 | LauncherItem *c = on ? (LauncherItem*)currentItem() : 0; | 159 | LauncherItem *c = on ? (LauncherItem*)currentItem() : 0; |
174 | 160 | ||
175 | if ( bsy != c ) { | 161 | if ( bsy != c ) { |
176 | LauncherItem *oldBusy = bsy; | 162 | LauncherItem *oldBusy = bsy; |
177 | bsy = c; | 163 | bsy = c; |
178 | if ( oldBusy ) { | 164 | if ( oldBusy ) { |
179 | oldBusy->resetIcon(); | 165 | oldBusy->resetIcon(); |
180 | } | 166 | } |
181 | if ( bsy ) { | 167 | if ( bsy ) { |
182 | bsy->setBusyIndicatorType( busyType ) ; | 168 | bsy->setBusyIndicatorType( busyType ) ; |
183 | bsy->animateIcon(); | 169 | bsy->animateIcon(); |
184 | } | 170 | } |
185 | } | 171 | } |
186 | } | 172 | } |
187 | 173 | ||
188 | bool inKeyEvent() const { return ike; } | 174 | bool inKeyEvent() const { return ike; } |
189 | void keyPressEvent(QKeyEvent* e) | 175 | void keyPressEvent(QKeyEvent* e) |
190 | { | 176 | { |
191 | ike = TRUE; | 177 | ike = TRUE; |
192 | if ( e->key() == Key_F33 /* OK button */ || e->key() == Key_Space ) { | 178 | if ( e->key() == Key_F33 /* OK button */ || e->key() == Key_Space ) { |
193 | if ( (e->state() & ShiftButton) ) | 179 | if ( (e->state() & ShiftButton) ) |
194 | emit mouseButtonPressed(ShiftButton, currentItem(), QPoint() ); | 180 | emit mouseButtonPressed(ShiftButton, currentItem(), QPoint() ); |
195 | else | 181 | else |
196 | returnPressed(currentItem()); | 182 | returnPressed(currentItem()); |
197 | } | 183 | } |
198 | 184 | ||
199 | QIconView::keyPressEvent(e); | 185 | QIconView::keyPressEvent(e); |
200 | ike = FALSE; | 186 | ike = FALSE; |
201 | } | 187 | } |
202 | 188 | ||
203 | void addItem(AppLnk* app, bool resort=TRUE); | 189 | void addItem(AppLnk* app, bool resort=TRUE); |
204 | bool removeLink(const QString& linkfile); | 190 | bool removeLink(const QString& linkfile); |
205 | 191 | ||
206 | QStringList mimeTypes() const; | 192 | QStringList mimeTypes() const; |
207 | QStringList categories() const; | 193 | QStringList categories() const; |
208 | 194 | ||
209 | void clear() | 195 | void clear() |
210 | { | 196 | { |
211 | mimes.clear(); | 197 | mimes.clear(); |
212 | cats.clear(); | 198 | cats.clear(); |
213 | QIconView::clear(); | 199 | QIconView::clear(); |
214 | hidden.clear(); | 200 | hidden.clear(); |
215 | } | 201 | } |
216 | 202 | ||
217 | void addCatsAndMimes(AppLnk* app) | 203 | void addCatsAndMimes(AppLnk* app) |
218 | { | 204 | { |
219 | // QStringList c = app->categories(); | 205 | // QStringList c = app->categories(); |
220 | // for (QStringList::ConstIterator cit=c.begin(); cit!=c.end(); ++cit) { | 206 | // for (QStringList::ConstIterator cit=c.begin(); cit!=c.end(); ++cit) { |
221 | // cats.replace(*cit,(void*)1); | 207 | // cats.replace(*cit,(void*)1); |
222 | // } | 208 | // } |
223 | QString maj=app->type(); | 209 | QString maj=app->type(); |
224 | int sl=maj.find('/'); | 210 | int sl=maj.find('/'); |
225 | if (sl>=0) { | 211 | if (sl>=0) { |
226 | QString k; | 212 | QString k; |
227 | k = maj.left(12) == "application/" ? maj : maj.left(sl); | 213 | k = maj.left(12) == "application/" ? maj : maj.left(sl); |
228 | mimes.replace(k,(void*)1); | 214 | mimes.replace(k,(void*)1); |
229 | } | 215 | } |
230 | } | 216 | } |
231 | 217 | ||
232 | void setBackgroundOrigin( QWidget::BackgroundOrigin ) { | 218 | void setBackgroundOrigin( QWidget::BackgroundOrigin ) { |
233 | } | 219 | } |
234 | 220 | ||
235 | void setBackgroundPixmap( const QPixmap &pm ) { | 221 | void setBackgroundPixmap( const QPixmap &pm ) { |
236 | bgPixmap = pm; | 222 | bgPixmap = pm; |
237 | } | 223 | } |
238 | 224 | ||
239 | void setBackgroundColor( const QColor &c ) { | 225 | void setBackgroundColor( const QColor &c ) { |
240 | bgColor = c; | 226 | bgColor = c; |
241 | } | 227 | } |
242 | 228 | ||
243 | void drawBackground( QPainter *p, const QRect &r ) | 229 | void drawBackground( QPainter *p, const QRect &r ) |
244 | { | 230 | { |
245 | if ( !bgPixmap.isNull() ) { | 231 | if ( !bgPixmap.isNull() ) { |
246 | p->drawTiledPixmap( r, bgPixmap, | 232 | p->drawTiledPixmap( r, bgPixmap, |
247 | QPoint( (r.x() + contentsX()) % bgPixmap.width(), | 233 | QPoint( (r.x() + contentsX()) % bgPixmap.width(), |
248 | (r.y() + contentsY()) % bgPixmap.height() ) ); | 234 | (r.y() + contentsY()) % bgPixmap.height() ) ); |
249 | } else { | 235 | } else { |
250 | p->fillRect( r, bgColor ); | 236 | p->fillRect( r, bgColor ); |
251 | } | 237 | } |
252 | } | 238 | } |
253 | 239 | ||
254 | void setItemTextPos( ItemTextPos pos ) | 240 | void setItemTextPos( ItemTextPos pos ) |
255 | { | 241 | { |
256 | calculateGrid( pos ); | 242 | calculateGrid( pos ); |
257 | QIconView::setItemTextPos( pos ); | 243 | QIconView::setItemTextPos( pos ); |
258 | } | 244 | } |
259 | 245 | ||
260 | void hideOrShowItems(bool resort); | 246 | void hideOrShowItems(bool resort); |
261 | 247 | ||
262 | void setTypeFilter(const QString& typefilter, bool resort) | 248 | void setTypeFilter(const QString& typefilter, bool resort) |
263 | { | 249 | { |
264 | tf = QRegExp(typefilter,FALSE,TRUE); | 250 | tf = QRegExp(typefilter,FALSE,TRUE); |
265 | hideOrShowItems(resort); | 251 | hideOrShowItems(resort); |
266 | } | 252 | } |
267 | 253 | ||
268 | void setCategoryFilter( int catfilter, bool resort ) | 254 | void setCategoryFilter( int catfilter, bool resort ) |
269 | { | 255 | { |
270 | Categories cat; | 256 | Categories cat; |
271 | cat.load( categoryFileName() ); | 257 | cat.load( categoryFileName() ); |
272 | QString str; | 258 | QString str; |
273 | if ( catfilter == -2 ) | 259 | if ( catfilter == -2 ) |
274 | cf = 0; | 260 | cf = 0; |
275 | else | 261 | else |
276 | cf = catfilter; | 262 | cf = catfilter; |
277 | hideOrShowItems(resort); | 263 | hideOrShowItems(resort); |
278 | } | 264 | } |
279 | 265 | ||
280 | enum SortMethod { Name, Date, Type }; | 266 | enum SortMethod { Name, Date, Type }; |
281 | 267 | ||
282 | void setSortMethod( SortMethod m ) | 268 | void setSortMethod( SortMethod m ) |
283 | { | 269 | { |
284 | if ( sortmeth != m ) { | 270 | if ( sortmeth != m ) { |
285 | sortmeth = m; | 271 | sortmeth = m; |
286 | sort(); | 272 | sort(); |
287 | } | 273 | } |
288 | } | 274 | } |
289 | 275 | ||
290 | int compare(const AppLnk* a, const AppLnk* b) | 276 | int compare(const AppLnk* a, const AppLnk* b) |
291 | { | 277 | { |
292 | switch (sortmeth) { | 278 | switch (sortmeth) { |
293 | case Name: | 279 | case Name: |
294 | return a->name().lower().compare(b->name().lower()); | 280 | return a->name().lower().compare(b->name().lower()); |
295 | case Date: { | 281 | case Date: { |
296 | QFileInfo fa(a->linkFileKnown() ? a->linkFile() : a->file()); | 282 | QFileInfo fa(a->linkFileKnown() ? a->linkFile() : a->file()); |
297 | QFileInfo fb(b->linkFileKnown() ? b->linkFile() : b->file()); | 283 | QFileInfo fb(b->linkFileKnown() ? b->linkFile() : b->file()); |
298 | return fa.lastModified().secsTo(fb.lastModified()); | 284 | return fa.lastModified().secsTo(fb.lastModified()); |
299 | } | 285 | } |
300 | case Type: | 286 | case Type: |
301 | return a->type().compare(b->type()); | 287 | return a->type().compare(b->type()); |
302 | } | 288 | } |
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index 9e53bb0..c136bd9 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp | |||
@@ -1,295 +1,290 @@ | |||
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 | 20 | ||
21 | #ifndef QTOPIA_INTERNAL_FILEOPERATIONS | 21 | #ifndef QTOPIA_INTERNAL_FILEOPERATIONS |
22 | #define QTOPIA_INTERNAL_FILEOPERATIONS | 22 | #define QTOPIA_INTERNAL_FILEOPERATIONS |
23 | #endif | 23 | #endif |
24 | #include "server.h" | 24 | #include "server.h" |
25 | #include "serverapp.h" | 25 | #include "serverapp.h" |
26 | #include "taskbar.h" | ||
27 | #include "stabmon.h" | 26 | #include "stabmon.h" |
28 | #include "launcher.h" | ||
29 | #include "firstuse.h" | 27 | #include "firstuse.h" |
30 | 28 | ||
31 | #include <opie2/oglobal.h> | 29 | #include <opie2/oglobal.h> |
32 | 30 | ||
33 | #include <qtopia/qpeapplication.h> | ||
34 | #include <qtopia/network.h> | 31 | #include <qtopia/network.h> |
35 | #include <qtopia/config.h> | ||
36 | //#include <qtopia/custom.h> | 32 | //#include <qtopia/custom.h> |
37 | 33 | ||
38 | 34 | ||
39 | #include <qfile.h> | ||
40 | #include <qdir.h> | 35 | #include <qdir.h> |
41 | #ifdef QWS | 36 | #ifdef QWS |
42 | #include <qwindowsystem_qws.h> | 37 | #include <qwindowsystem_qws.h> |
43 | #include <qtopia/qcopenvelope_qws.h> | 38 | #include <qtopia/qcopenvelope_qws.h> |
44 | #endif | 39 | #endif |
45 | #include <qtopia/alarmserver.h> | 40 | #include <qtopia/alarmserver.h> |
46 | 41 | ||
47 | #include <stdlib.h> | 42 | #include <stdlib.h> |
48 | #include <stdio.h> | 43 | #include <stdio.h> |
49 | #include <signal.h> | 44 | #include <signal.h> |
50 | #ifndef Q_OS_WIN32 | 45 | #ifndef Q_OS_WIN32 |
51 | #include <unistd.h> | 46 | #include <unistd.h> |
52 | #else | 47 | #else |
53 | #include <process.h> | 48 | #include <process.h> |
54 | #endif | 49 | #endif |
55 | 50 | ||
56 | #include "calibrate.h" | 51 | #include "calibrate.h" |
57 | 52 | ||
58 | 53 | ||
59 | #ifdef QT_QWS_LOGIN | 54 | #ifdef QT_QWS_LOGIN |
60 | #include "../login/qdmdialogimpl.h" | 55 | #include "../login/qdmdialogimpl.h" |
61 | #endif | 56 | #endif |
62 | 57 | ||
63 | #ifdef Q_WS_QWS | 58 | #ifdef Q_WS_QWS |
64 | #include <qkeyboard_qws.h> | 59 | #include <qkeyboard_qws.h> |
65 | #endif | 60 | #endif |
66 | 61 | ||
67 | #include <qmessagebox.h> | 62 | #include <qmessagebox.h> |
68 | #include <opie2/odevice.h> | 63 | #include <opie2/odevice.h> |
69 | 64 | ||
70 | using namespace Opie; | 65 | using namespace Opie; |
71 | 66 | ||
72 | 67 | ||
73 | static void cleanup() | 68 | static void cleanup() |
74 | { | 69 | { |
75 | QDir dir( "/tmp", "qcop-msg-*" ); | 70 | QDir dir( "/tmp", "qcop-msg-*" ); |
76 | 71 | ||
77 | QStringList stale = dir.entryList(); | 72 | QStringList stale = dir.entryList(); |
78 | QStringList::Iterator it; | 73 | QStringList::Iterator it; |
79 | for ( it = stale.begin(); it != stale.end(); ++it ) { | 74 | for ( it = stale.begin(); it != stale.end(); ++it ) { |
80 | dir.remove( *it ); | 75 | dir.remove( *it ); |
81 | } | 76 | } |
82 | } | 77 | } |
83 | 78 | ||
84 | static void refreshTimeZoneConfig() | 79 | static void refreshTimeZoneConfig() |
85 | { | 80 | { |
86 | /* ### FIXME timezone handling */ | 81 | /* ### FIXME timezone handling */ |
87 | #if 0 | 82 | #if 0 |
88 | // We need to help WorldTime in setting up its configuration for | 83 | // We need to help WorldTime in setting up its configuration for |
89 | // the current translation | 84 | // the current translation |
90 | // BEGIN no tr | 85 | // BEGIN no tr |
91 | const char *defaultTz[] = { | 86 | const char *defaultTz[] = { |
92 | "America/New_York", | 87 | "America/New_York", |
93 | "America/Los_Angeles", | 88 | "America/Los_Angeles", |
94 | "Europe/Oslo", | 89 | "Europe/Oslo", |
95 | "Asia/Tokyo", | 90 | "Asia/Tokyo", |
96 | "Asia/Hong_Kong", | 91 | "Asia/Hong_Kong", |
97 | "Australia/Brisbane", | 92 | "Australia/Brisbane", |
98 | 0 | 93 | 0 |
99 | }; | 94 | }; |
100 | // END no tr | 95 | // END no tr |
101 | 96 | ||
102 | TimeZone curZone; | 97 | TimeZone curZone; |
103 | QString zoneID; | 98 | QString zoneID; |
104 | int zoneIndex; | 99 | int zoneIndex; |
105 | Config cfg = Config( "WorldTime" ); | 100 | Config cfg = Config( "WorldTime" ); |
106 | cfg.setGroup( "TimeZones" ); | 101 | cfg.setGroup( "TimeZones" ); |
107 | if (!cfg.hasKey( "Zone0" )){ | 102 | if (!cfg.hasKey( "Zone0" )){ |
108 | // We have no existing timezones use the defaults which are untranslated strings | 103 | // We have no existing timezones use the defaults which are untranslated strings |
109 | QString currTz = TimeZone::current().id(); | 104 | QString currTz = TimeZone::current().id(); |
110 | QStringList zoneDefaults; | 105 | QStringList zoneDefaults; |
111 | zoneDefaults.append( currTz ); | 106 | zoneDefaults.append( currTz ); |
112 | for ( int i = 0; defaultTz[i] && zoneDefaults.count() < 6; i++ ) { | 107 | for ( int i = 0; defaultTz[i] && zoneDefaults.count() < 6; i++ ) { |
113 | if ( defaultTz[i] != currTz ) | 108 | if ( defaultTz[i] != currTz ) |
114 | zoneDefaults.append( defaultTz[i] ); | 109 | zoneDefaults.append( defaultTz[i] ); |
115 | } | 110 | } |
116 | zoneIndex = 0; | 111 | zoneIndex = 0; |
117 | for (QStringList::Iterator it = zoneDefaults.begin(); it != zoneDefaults.end() ; ++it){ | 112 | for (QStringList::Iterator it = zoneDefaults.begin(); it != zoneDefaults.end() ; ++it){ |
118 | cfg.writeEntry( "Zone" + QString::number( zoneIndex ) , *it); | 113 | cfg.writeEntry( "Zone" + QString::number( zoneIndex ) , *it); |
119 | zoneIndex++; | 114 | zoneIndex++; |
120 | } | 115 | } |
121 | } | 116 | } |
122 | // We have an existing list of timezones refresh the | 117 | // We have an existing list of timezones refresh the |
123 | // translations of TimeZone name | 118 | // translations of TimeZone name |
124 | zoneIndex = 0; | 119 | zoneIndex = 0; |
125 | while (cfg.hasKey( "Zone"+ QString::number( zoneIndex ))){ | 120 | while (cfg.hasKey( "Zone"+ QString::number( zoneIndex ))){ |
126 | zoneID = cfg.readEntry( "Zone" + QString::number( zoneIndex )); | 121 | zoneID = cfg.readEntry( "Zone" + QString::number( zoneIndex )); |
127 | curZone = TimeZone( zoneID ); | 122 | curZone = TimeZone( zoneID ); |
128 | if ( !curZone.isValid() ){ | 123 | if ( !curZone.isValid() ){ |
129 | qDebug( "initEnvironment() Invalid TimeZone %s", zoneID.latin1() ); | 124 | qDebug( "initEnvironment() Invalid TimeZone %s", zoneID.latin1() ); |
130 | break; | 125 | break; |
131 | } | 126 | } |
132 | cfg.writeEntry( "ZoneName" + QString::number( zoneIndex ), curZone.city() ); | 127 | cfg.writeEntry( "ZoneName" + QString::number( zoneIndex ), curZone.city() ); |
133 | zoneIndex++; | 128 | zoneIndex++; |
134 | } | 129 | } |
135 | #endif | 130 | #endif |
136 | } | 131 | } |
137 | 132 | ||
138 | void initEnvironment() | 133 | void initEnvironment() |
139 | { | 134 | { |
140 | #ifdef Q_OS_WIN32 | 135 | #ifdef Q_OS_WIN32 |
141 | // Config file requires HOME dir which uses QDir which needs the winver | 136 | // Config file requires HOME dir which uses QDir which needs the winver |
142 | qt_init_winver(); | 137 | qt_init_winver(); |
143 | #endif | 138 | #endif |
144 | Config config("locale"); | 139 | Config config("locale"); |
145 | config.setGroup( "Location" ); | 140 | config.setGroup( "Location" ); |
146 | QString tz = config.readEntry( "Timezone", getenv("TZ") ).stripWhiteSpace(); | 141 | QString tz = config.readEntry( "Timezone", getenv("TZ") ).stripWhiteSpace(); |
147 | 142 | ||
148 | // if not timezone set, pick New York | 143 | // if not timezone set, pick New York |
149 | if (tz.isNull() || tz.isEmpty()) | 144 | if (tz.isNull() || tz.isEmpty()) |
150 | tz = "America/New_York"; | 145 | tz = "America/New_York"; |
151 | 146 | ||
152 | setenv( "TZ", tz, 1 ); | 147 | setenv( "TZ", tz, 1 ); |
153 | config.writeEntry( "Timezone", tz); | 148 | config.writeEntry( "Timezone", tz); |
154 | 149 | ||
155 | config.setGroup( "Language" ); | 150 | config.setGroup( "Language" ); |
156 | QString lang = config.readEntry( "Language", getenv("LANG") ).stripWhiteSpace(); | 151 | QString lang = config.readEntry( "Language", getenv("LANG") ).stripWhiteSpace(); |
157 | if( lang.isNull() || lang.isEmpty()) | 152 | if( lang.isNull() || lang.isEmpty()) |
158 | lang = "en_US"; | 153 | lang = "en_US"; |
159 | 154 | ||
160 | setenv( "LANG", lang, 1 ); | 155 | setenv( "LANG", lang, 1 ); |
161 | config.writeEntry("Language", lang); | 156 | config.writeEntry("Language", lang); |
162 | config.write(); | 157 | config.write(); |
163 | 158 | ||
164 | #if 0 | 159 | #if 0 |
165 | setenv( "QWS_SIZE", "240x320", 0 ); | 160 | setenv( "QWS_SIZE", "240x320", 0 ); |
166 | #endif | 161 | #endif |
167 | 162 | ||
168 | 163 | ||
169 | 164 | ||
170 | QString env(getenv("QWS_DISPLAY")); | 165 | QString env(getenv("QWS_DISPLAY")); |
171 | if (env.contains("Transformed")) { | 166 | if (env.contains("Transformed")) { |
172 | int rot; | 167 | int rot; |
173 | // transformed driver default rotation is controlled by the hardware. | 168 | // transformed driver default rotation is controlled by the hardware. |
174 | Config config("qpe"); | 169 | Config config("qpe"); |
175 | config.setGroup( "Rotation" ); | 170 | config.setGroup( "Rotation" ); |
176 | if ( ( rot = config.readNumEntry( "Rot", -1 ) ) == -1 ) | 171 | if ( ( rot = config.readNumEntry( "Rot", -1 ) ) == -1 ) |
177 | rot = ODevice::inst ( )-> rotation ( ) * 90; | 172 | rot = ODevice::inst ( )-> rotation ( ) * 90; |
178 | 173 | ||
179 | setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1); | 174 | setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1); |
180 | QPEApplication::defaultRotation ( ); /* to ensure deforient matches reality */ | 175 | QPEApplication::defaultRotation ( ); /* to ensure deforient matches reality */ |
181 | } | 176 | } |
182 | } | 177 | } |
183 | 178 | ||
184 | static void initKeyboard() | 179 | static void initKeyboard() |
185 | { | 180 | { |
186 | Config config("qpe"); | 181 | Config config("qpe"); |
187 | 182 | ||
188 | config.setGroup( "Keyboard" ); | 183 | config.setGroup( "Keyboard" ); |
189 | 184 | ||
190 | int ard = config.readNumEntry( "RepeatDelay" ); | 185 | int ard = config.readNumEntry( "RepeatDelay" ); |
191 | int arp = config.readNumEntry( "RepeatPeriod" ); | 186 | int arp = config.readNumEntry( "RepeatPeriod" ); |
192 | if ( ard > 0 && arp > 0 ) | 187 | if ( ard > 0 && arp > 0 ) |
193 | qwsSetKeyboardAutoRepeat( ard, arp ); | 188 | qwsSetKeyboardAutoRepeat( ard, arp ); |
194 | 189 | ||
195 | QString layout = config.readEntry( "Layout", "us101" ); | 190 | QString layout = config.readEntry( "Layout", "us101" ); |
196 | Server::setKeyboardLayout( layout ); | 191 | Server::setKeyboardLayout( layout ); |
197 | } | 192 | } |
198 | 193 | ||
199 | static bool firstUse() | 194 | static bool firstUse() |
200 | { | 195 | { |
201 | bool needFirstUse = FALSE; | 196 | bool needFirstUse = FALSE; |
202 | if ( QWSServer::mouseHandler() && | 197 | if ( QWSServer::mouseHandler() && |
203 | QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) { | 198 | QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) { |
204 | if ( !QFile::exists( "/etc/pointercal" ) ) | 199 | if ( !QFile::exists( "/etc/pointercal" ) ) |
205 | needFirstUse = TRUE; | 200 | needFirstUse = TRUE; |
206 | } | 201 | } |
207 | 202 | ||
208 | { | 203 | { |
209 | Config config( "qpe" ); | 204 | Config config( "qpe" ); |
210 | config.setGroup( "Startup" ); | 205 | config.setGroup( "Startup" ); |
211 | needFirstUse |= config.readBoolEntry( "FirstUse", TRUE ); | 206 | needFirstUse |= config.readBoolEntry( "FirstUse", TRUE ); |
212 | } | 207 | } |
213 | 208 | ||
214 | if ( !needFirstUse ) | 209 | if ( !needFirstUse ) |
215 | return FALSE; | 210 | return FALSE; |
216 | 211 | ||
217 | FirstUse *fu = new FirstUse(); | 212 | FirstUse *fu = new FirstUse(); |
218 | fu->exec(); | 213 | fu->exec(); |
219 | bool rs = fu->restartNeeded(); | 214 | bool rs = fu->restartNeeded(); |
220 | delete fu; | 215 | delete fu; |
221 | return rs; | 216 | return rs; |
222 | } | 217 | } |
223 | 218 | ||
224 | int initApplication( int argc, char ** argv ) | 219 | int initApplication( int argc, char ** argv ) |
225 | { | 220 | { |
226 | cleanup(); | 221 | cleanup(); |
227 | 222 | ||
228 | 223 | ||
229 | initEnvironment(); | 224 | initEnvironment(); |
230 | 225 | ||
231 | //Don't flicker at startup: | 226 | //Don't flicker at startup: |
232 | #ifdef QWS | 227 | #ifdef QWS |
233 | QWSServer::setDesktopBackground( QImage() ); | 228 | QWSServer::setDesktopBackground( QImage() ); |
234 | #endif | 229 | #endif |
235 | ServerApplication a( argc, argv, QApplication::GuiServer ); | 230 | ServerApplication a( argc, argv, QApplication::GuiServer ); |
236 | 231 | ||
237 | refreshTimeZoneConfig(); | 232 | refreshTimeZoneConfig(); |
238 | 233 | ||
239 | initKeyboard(); | 234 | initKeyboard(); |
240 | 235 | ||
241 | // Don't use first use under Windows | 236 | // Don't use first use under Windows |
242 | if ( firstUse() ) { | 237 | if ( firstUse() ) { |
243 | a.restart(); | 238 | a.restart(); |
244 | return 0; | 239 | return 0; |
245 | } | 240 | } |
246 | 241 | ||
247 | ODevice::inst ( )-> setSoftSuspend ( true ); | 242 | ODevice::inst ( )-> setSoftSuspend ( true ); |
248 | 243 | ||
249 | { | 244 | { |
250 | QCopEnvelope e("QPE/System", "setBacklight(int)" ); | 245 | QCopEnvelope e("QPE/System", "setBacklight(int)" ); |
251 | e << -3; // Forced on | 246 | e << -3; // Forced on |
252 | } | 247 | } |
253 | 248 | ||
254 | AlarmServer::initialize(); | 249 | AlarmServer::initialize(); |
255 | 250 | ||
256 | 251 | ||
257 | 252 | ||
258 | Server *s = new Server(); | 253 | Server *s = new Server(); |
259 | 254 | ||
260 | (void)new SysFileMonitor(s); | 255 | (void)new SysFileMonitor(s); |
261 | #ifdef QWS | 256 | #ifdef QWS |
262 | Network::createServer(s); | 257 | Network::createServer(s); |
263 | #endif | 258 | #endif |
264 | 259 | ||
265 | s->show(); | 260 | s->show(); |
266 | 261 | ||
267 | /* THE ARM rtc has problem holdings the time on reset */ | 262 | /* THE ARM rtc has problem holdings the time on reset */ |
268 | if ( QDate::currentDate ( ). year ( ) < 2000 ) { | 263 | if ( QDate::currentDate ( ). year ( ) < 2000 ) { |
269 | if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { | 264 | if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { |
270 | QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); | 265 | QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); |
271 | e << QString ( ); | 266 | e << QString ( ); |
272 | } | 267 | } |
273 | } | 268 | } |
274 | 269 | ||
275 | int rv = a.exec(); | 270 | int rv = a.exec(); |
276 | 271 | ||
277 | qDebug("exiting..."); | 272 | qDebug("exiting..."); |
278 | delete s; | 273 | delete s; |
279 | 274 | ||
280 | #ifndef Q_OS_MACX | 275 | #ifndef Q_OS_MACX |
281 | ODevice::inst()->setSoftSuspend( false ); | 276 | ODevice::inst()->setSoftSuspend( false ); |
282 | #endif | 277 | #endif |
283 | 278 | ||
284 | return rv; | 279 | return rv; |
285 | } | 280 | } |
286 | 281 | ||
287 | static const char *pidfile_path = "/var/run/opie.pid"; | 282 | static const char *pidfile_path = "/var/run/opie.pid"; |
288 | 283 | ||
289 | void create_pidfile ( ) | 284 | void create_pidfile ( ) |
290 | { | 285 | { |
291 | FILE *f; | 286 | FILE *f; |
292 | 287 | ||
293 | if (( f = ::fopen ( pidfile_path, "w" ))) { | 288 | if (( f = ::fopen ( pidfile_path, "w" ))) { |
294 | ::fprintf ( f, "%d", getpid ( )); | 289 | ::fprintf ( f, "%d", getpid ( )); |
295 | ::fclose ( f ); | 290 | ::fclose ( f ); |
diff --git a/core/launcher/packageslave.cpp b/core/launcher/packageslave.cpp index bf34368..321b5dd 100644 --- a/core/launcher/packageslave.cpp +++ b/core/launcher/packageslave.cpp | |||
@@ -1,290 +1,288 @@ | |||
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 | 20 | ||
21 | #include "packageslave.h" | 21 | #include "packageslave.h" |
22 | #include <qtopia/qprocess.h> | 22 | #include <qtopia/qprocess.h> |
23 | 23 | ||
24 | #ifdef Q_WS_QWS | 24 | #ifdef Q_WS_QWS |
25 | #include <qtopia/qcopenvelope_qws.h> | 25 | #include <qtopia/qcopenvelope_qws.h> |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #include <qdatastream.h> | ||
29 | #ifdef Q_WS_QWS | 28 | #ifdef Q_WS_QWS |
30 | #include <qcopchannel_qws.h> | 29 | #include <qcopchannel_qws.h> |
31 | #endif | 30 | #endif |
32 | 31 | ||
33 | #include <qtextstream.h> | 32 | #include <qtextstream.h> |
34 | #include <qdir.h> | ||
35 | 33 | ||
36 | #include <stdlib.h> | 34 | #include <stdlib.h> |
37 | #include <sys/stat.h> // mkdir() | 35 | #include <sys/stat.h> // mkdir() |
38 | 36 | ||
39 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | 37 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) |
40 | #include <unistd.h> | 38 | #include <unistd.h> |
41 | #include <sys/vfs.h> | 39 | #include <sys/vfs.h> |
42 | #include <mntent.h> | 40 | #include <mntent.h> |
43 | #elif defined(Q_OS_WIN32) | 41 | #elif defined(Q_OS_WIN32) |
44 | #include <windows.h> | 42 | #include <windows.h> |
45 | #include <winbase.h> | 43 | #include <winbase.h> |
46 | #elif defined(Q_OS_MACX) | 44 | #elif defined(Q_OS_MACX) |
47 | #include <unistd.h> | 45 | #include <unistd.h> |
48 | #endif | 46 | #endif |
49 | 47 | ||
50 | 48 | ||
51 | PackageHandler::PackageHandler( QObject *parent, char* name ) | 49 | PackageHandler::PackageHandler( QObject *parent, char* name ) |
52 | : QObject( parent, name ), packageChannel( 0 ), currentProcess( 0 ), mNoSpaceLeft( FALSE ) | 50 | : QObject( parent, name ), packageChannel( 0 ), currentProcess( 0 ), mNoSpaceLeft( FALSE ) |
53 | { | 51 | { |
54 | // setup qcop channel | 52 | // setup qcop channel |
55 | #ifndef QT_NO_COP | 53 | #ifndef QT_NO_COP |
56 | packageChannel = new QCopChannel( "QPE/Package", this ); | 54 | packageChannel = new QCopChannel( "QPE/Package", this ); |
57 | connect( packageChannel, SIGNAL( received(const QCString &, const QByteArray &) ), | 55 | connect( packageChannel, SIGNAL( received(const QCString &, const QByteArray &) ), |
58 | this, SLOT( qcopMessage( const QCString &, const QByteArray &) ) ); | 56 | this, SLOT( qcopMessage( const QCString &, const QByteArray &) ) ); |
59 | #endif | 57 | #endif |
60 | } | 58 | } |
61 | 59 | ||
62 | void PackageHandler::qcopMessage( const QCString &msg, const QByteArray &data ) | 60 | void PackageHandler::qcopMessage( const QCString &msg, const QByteArray &data ) |
63 | { | 61 | { |
64 | QDataStream stream( data, IO_ReadOnly ); | 62 | QDataStream stream( data, IO_ReadOnly ); |
65 | 63 | ||
66 | if ( msg == "installPackage(QString)" ) { | 64 | if ( msg == "installPackage(QString)" ) { |
67 | QString file; | 65 | QString file; |
68 | stream >> file; | 66 | stream >> file; |
69 | installPackage( file ); | 67 | installPackage( file ); |
70 | } else if ( msg == "removePackage(QString)" ) { | 68 | } else if ( msg == "removePackage(QString)" ) { |
71 | QString file; | 69 | QString file; |
72 | stream >> file; | 70 | stream >> file; |
73 | removePackage( file ); | 71 | removePackage( file ); |
74 | } else if ( msg == "addPackageFiles(QString,QString)" ) { | 72 | } else if ( msg == "addPackageFiles(QString,QString)" ) { |
75 | QString location, listfile; | 73 | QString location, listfile; |
76 | stream >> location >> listfile; | 74 | stream >> location >> listfile; |
77 | addPackageFiles( location, listfile); | 75 | addPackageFiles( location, listfile); |
78 | } else if ( msg == "addPackages(QString)" ) { | 76 | } else if ( msg == "addPackages(QString)" ) { |
79 | QString location; | 77 | QString location; |
80 | stream >> location; | 78 | stream >> location; |
81 | addPackages( location ); | 79 | addPackages( location ); |
82 | } else if ( msg == "cleanupPackageFiles(QString)" ) { | 80 | } else if ( msg == "cleanupPackageFiles(QString)" ) { |
83 | QString listfile; | 81 | QString listfile; |
84 | stream >> listfile; | 82 | stream >> listfile; |
85 | cleanupPackageFiles( listfile ); | 83 | cleanupPackageFiles( listfile ); |
86 | } else if ( msg == "cleanupPackages(QString)" ) { | 84 | } else if ( msg == "cleanupPackages(QString)" ) { |
87 | QString location; | 85 | QString location; |
88 | stream >> location; | 86 | stream >> location; |
89 | cleanupPackages( location ); | 87 | cleanupPackages( location ); |
90 | } else if ( msg == "prepareInstall(QString,QString)" ) { | 88 | } else if ( msg == "prepareInstall(QString,QString)" ) { |
91 | QString size, path; | 89 | QString size, path; |
92 | stream >> size; | 90 | stream >> size; |
93 | stream >> path; | 91 | stream >> path; |
94 | prepareInstall( size, path ); | 92 | prepareInstall( size, path ); |
95 | } | 93 | } |
96 | } | 94 | } |
97 | 95 | ||
98 | void PackageHandler::installPackage( const QString &package ) | 96 | void PackageHandler::installPackage( const QString &package ) |
99 | { | 97 | { |
100 | if ( mNoSpaceLeft ) { | 98 | if ( mNoSpaceLeft ) { |
101 | mNoSpaceLeft = FALSE; | 99 | mNoSpaceLeft = FALSE; |
102 | // Don't emit that for now, I still couldn't test it (Wener) | 100 | // Don't emit that for now, I still couldn't test it (Wener) |
103 | //sendReply( "installFailed(QString)", package ); | 101 | //sendReply( "installFailed(QString)", package ); |
104 | //return; | 102 | //return; |
105 | } | 103 | } |
106 | 104 | ||
107 | currentProcess = new QProcess( QStringList() << "ipkg" << "install" << package ); // No tr | 105 | currentProcess = new QProcess( QStringList() << "ipkg" << "install" << package ); // No tr |
108 | connect( currentProcess, SIGNAL( processExited() ), SLOT( iProcessExited() ) ); | 106 | connect( currentProcess, SIGNAL( processExited() ), SLOT( iProcessExited() ) ); |
109 | connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) ); | 107 | connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) ); |
110 | connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) ); | 108 | connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) ); |
111 | currentPackage = package; | 109 | currentPackage = package; |
112 | 110 | ||
113 | currentProcessError=""; | 111 | currentProcessError=""; |
114 | sendReply( "installStarted(QString)", package ); | 112 | sendReply( "installStarted(QString)", package ); |
115 | currentProcess->start(); | 113 | currentProcess->start(); |
116 | } | 114 | } |
117 | 115 | ||
118 | void PackageHandler::removePackage( const QString &package ) | 116 | void PackageHandler::removePackage( const QString &package ) |
119 | { | 117 | { |
120 | currentProcess = new QProcess( QStringList() << "ipkg" << "remove" << package ); // No tr | 118 | currentProcess = new QProcess( QStringList() << "ipkg" << "remove" << package ); // No tr |
121 | connect( currentProcess, SIGNAL( processExited() ), SLOT( rmProcessExited() ) ); | 119 | connect( currentProcess, SIGNAL( processExited() ), SLOT( rmProcessExited() ) ); |
122 | connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) ); | 120 | connect( currentProcess, SIGNAL( readyReadStdout() ), SLOT( readyReadStdout() ) ); |
123 | connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) ); | 121 | connect( currentProcess, SIGNAL( readyReadStderr() ), SLOT( readyReadStderr() ) ); |
124 | currentPackage = package; | 122 | currentPackage = package; |
125 | 123 | ||
126 | currentProcessError=""; | 124 | currentProcessError=""; |
127 | sendReply( "removeStarted(QString)", package ); | 125 | sendReply( "removeStarted(QString)", package ); |
128 | currentProcess->start(); | 126 | currentProcess->start(); |
129 | } | 127 | } |
130 | 128 | ||
131 | void PackageHandler::sendReply( const QCString& msg, const QString& arg ) | 129 | void PackageHandler::sendReply( const QCString& msg, const QString& arg ) |
132 | { | 130 | { |
133 | #ifndef QT_NO_COP | 131 | #ifndef QT_NO_COP |
134 | QCopEnvelope e( "QPE/Desktop", msg ); | 132 | QCopEnvelope e( "QPE/Desktop", msg ); |
135 | e << arg; | 133 | e << arg; |
136 | #endif | 134 | #endif |
137 | } | 135 | } |
138 | 136 | ||
139 | void PackageHandler::addPackageFiles( const QString &location, | 137 | void PackageHandler::addPackageFiles( const QString &location, |
140 | const QString &listfile ) | 138 | const QString &listfile ) |
141 | { | 139 | { |
142 | QFile f(listfile); | 140 | QFile f(listfile); |
143 | #ifndef Q_OS_WIN32 | 141 | #ifndef Q_OS_WIN32 |
144 | //make a copy so we can remove the symlinks later | 142 | //make a copy so we can remove the symlinks later |
145 | mkdir( ("/usr/lib/ipkg/info/"+location).ascii(), 0777 ); | 143 | mkdir( ("/usr/lib/ipkg/info/"+location).ascii(), 0777 ); |
146 | system(("cp " + f.name() + " /usr/lib/ipkg/info/"+location).ascii()); | 144 | system(("cp " + f.name() + " /usr/lib/ipkg/info/"+location).ascii()); |
147 | #else | 145 | #else |
148 | QDir d; | 146 | QDir d; |
149 | //#### revise | 147 | //#### revise |
150 | qDebug("Copy file at %s: %s", __FILE__, __LINE__ ); | 148 | qDebug("Copy file at %s: %s", __FILE__, __LINE__ ); |
151 | d.mkdir(("/usr/lib/ipkg/info/" + location).ascii()); | 149 | d.mkdir(("/usr/lib/ipkg/info/" + location).ascii()); |
152 | system(("copy " + f.name() + " /usr/lib/ipkg/info/"+location).ascii()); | 150 | system(("copy " + f.name() + " /usr/lib/ipkg/info/"+location).ascii()); |
153 | #endif | 151 | #endif |
154 | 152 | ||
155 | 153 | ||
156 | if ( f.open(IO_ReadOnly) ) { | 154 | if ( f.open(IO_ReadOnly) ) { |
157 | QTextStream ts(&f); | 155 | QTextStream ts(&f); |
158 | 156 | ||
159 | QString s; | 157 | QString s; |
160 | while ( !ts.eof() ) { // until end of file... | 158 | while ( !ts.eof() ) { // until end of file... |
161 | s = ts.readLine(); // line of text excluding '\n' | 159 | s = ts.readLine(); // line of text excluding '\n' |
162 | // for s, do link/mkdir. | 160 | // for s, do link/mkdir. |
163 | if ( s.right(1) == "/" ) { | 161 | if ( s.right(1) == "/" ) { |
164 | qDebug("do mkdir for %s", s.ascii()); | 162 | qDebug("do mkdir for %s", s.ascii()); |
165 | #ifndef Q_OS_WIN32 | 163 | #ifndef Q_OS_WIN32 |
166 | mkdir( s.ascii(), 0777 ); | 164 | mkdir( s.ascii(), 0777 ); |
167 | //possible optimization: symlink directories | 165 | //possible optimization: symlink directories |
168 | //that don't exist already. -- Risky. | 166 | //that don't exist already. -- Risky. |
169 | #else | 167 | #else |
170 | d.mkdir( s.ascii()); | 168 | d.mkdir( s.ascii()); |
171 | #endif | 169 | #endif |
172 | 170 | ||
173 | } else { | 171 | } else { |
174 | #ifndef Q_OS_WIN32 | 172 | #ifndef Q_OS_WIN32 |
175 | qDebug("do symlink for %s", s.ascii()); | 173 | qDebug("do symlink for %s", s.ascii()); |
176 | symlink( (location + s).ascii(), s.ascii() ); | 174 | symlink( (location + s).ascii(), s.ascii() ); |
177 | #else | 175 | #else |
178 | qDebug("Copy file instead of a symlink for WIN32"); | 176 | qDebug("Copy file instead of a symlink for WIN32"); |
179 | if (!CopyFile((TCHAR*)qt_winTchar((location + s), TRUE), (TCHAR*)qt_winTchar(s, TRUE), FALSE)) | 177 | if (!CopyFile((TCHAR*)qt_winTchar((location + s), TRUE), (TCHAR*)qt_winTchar(s, TRUE), FALSE)) |
180 | qWarning("Unable to create symlinkfor %s", | 178 | qWarning("Unable to create symlinkfor %s", |
181 | (location + s).ascii()); | 179 | (location + s).ascii()); |
182 | #endif | 180 | #endif |
183 | } | 181 | } |
184 | } | 182 | } |
185 | f.close(); | 183 | f.close(); |
186 | } | 184 | } |
187 | } | 185 | } |
188 | 186 | ||
189 | void PackageHandler::addPackages( const QString &location ) | 187 | void PackageHandler::addPackages( const QString &location ) |
190 | { | 188 | { |
191 | // get list of *.list in location/usr/lib/ipkg/info/*.list | 189 | // get list of *.list in location/usr/lib/ipkg/info/*.list |
192 | QDir dir(location + "/usr/lib/ipkg/info", "*.list", // No tr | 190 | QDir dir(location + "/usr/lib/ipkg/info", "*.list", // No tr |
193 | QDir::Name, QDir::Files); | 191 | QDir::Name, QDir::Files); |
194 | if ( !dir.exists() ) | 192 | if ( !dir.exists() ) |
195 | return; | 193 | return; |
196 | 194 | ||
197 | QStringList packages = dir.entryList(); | 195 | QStringList packages = dir.entryList(); |
198 | for ( QStringList::Iterator it = packages.begin(); | 196 | for ( QStringList::Iterator it = packages.begin(); |
199 | it != packages.end(); ++it ) { | 197 | it != packages.end(); ++it ) { |
200 | addPackageFiles( location, *it ); | 198 | addPackageFiles( location, *it ); |
201 | } | 199 | } |
202 | } | 200 | } |
203 | 201 | ||
204 | 202 | ||
205 | void PackageHandler::cleanupPackageFiles( const QString &listfile ) | 203 | void PackageHandler::cleanupPackageFiles( const QString &listfile ) |
206 | { | 204 | { |
207 | QFile f(listfile); | 205 | QFile f(listfile); |
208 | 206 | ||
209 | if ( f.open(IO_ReadOnly) ) { | 207 | if ( f.open(IO_ReadOnly) ) { |
210 | QTextStream ts(&f); | 208 | QTextStream ts(&f); |
211 | 209 | ||
212 | QString s; | 210 | QString s; |
213 | while ( !ts.eof() ) { // until end of file... | 211 | while ( !ts.eof() ) { // until end of file... |
214 | s = ts.readLine(); // line of text excluding '\n' | 212 | s = ts.readLine(); // line of text excluding '\n' |
215 | // for s, do link/mkdir. | 213 | // for s, do link/mkdir. |
216 | if ( s.right(1) == "/" ) { | 214 | if ( s.right(1) == "/" ) { |
217 | //should rmdir if empty, after all files have been removed | 215 | //should rmdir if empty, after all files have been removed |
218 | } else { | 216 | } else { |
219 | #ifndef Q_OS_WIN32 | 217 | #ifndef Q_OS_WIN32 |
220 | qDebug("remove symlink for %s", s.ascii()); | 218 | qDebug("remove symlink for %s", s.ascii()); |
221 | //check if it is a symlink first (don't remove /etc/passwd...) | 219 | //check if it is a symlink first (don't remove /etc/passwd...) |
222 | char buf[10]; //we don't care about the contents | 220 | char buf[10]; //we don't care about the contents |
223 | if ( ::readlink( s.ascii(),buf, 10 >= 0 ) ) | 221 | if ( ::readlink( s.ascii(),buf, 10 >= 0 ) ) |
224 | ::unlink( s.ascii() ); | 222 | ::unlink( s.ascii() ); |
225 | #else | 223 | #else |
226 | // ### revise | 224 | // ### revise |
227 | qWarning("Unable to remove symlink %s:%s", __FILE__, __LINE__); | 225 | qWarning("Unable to remove symlink %s:%s", __FILE__, __LINE__); |
228 | #endif | 226 | #endif |
229 | } | 227 | } |
230 | } | 228 | } |
231 | f.close(); | 229 | f.close(); |
232 | 230 | ||
233 | //remove the list file | 231 | //remove the list file |
234 | ::unlink( listfile.ascii() ); | 232 | ::unlink( listfile.ascii() ); |
235 | 233 | ||
236 | } | 234 | } |
237 | } | 235 | } |
238 | 236 | ||
239 | void PackageHandler::cleanupPackages( const QString &location ) | 237 | void PackageHandler::cleanupPackages( const QString &location ) |
240 | { | 238 | { |
241 | // get list of *.list in location/usr/lib/ipkg/info/*.list | 239 | // get list of *.list in location/usr/lib/ipkg/info/*.list |
242 | QDir dir( "/usr/lib/ipkg/info/"+location, "*.list", // No tr | 240 | QDir dir( "/usr/lib/ipkg/info/"+location, "*.list", // No tr |
243 | QDir::Name, QDir::Files); | 241 | QDir::Name, QDir::Files); |
244 | if ( !dir.exists() ) | 242 | if ( !dir.exists() ) |
245 | return; | 243 | return; |
246 | 244 | ||
247 | QStringList packages = dir.entryList(); | 245 | QStringList packages = dir.entryList(); |
248 | for ( QStringList::Iterator it = packages.begin(); | 246 | for ( QStringList::Iterator it = packages.begin(); |
249 | it != packages.end(); ++it ) { | 247 | it != packages.end(); ++it ) { |
250 | cleanupPackageFiles( *it ); | 248 | cleanupPackageFiles( *it ); |
251 | } | 249 | } |
252 | 250 | ||
253 | //remove the backup directory | 251 | //remove the backup directory |
254 | //### | 252 | //### |
255 | } | 253 | } |
256 | 254 | ||
257 | void PackageHandler::prepareInstall( const QString& size, const QString& path ) | 255 | void PackageHandler::prepareInstall( const QString& size, const QString& path ) |
258 | { | 256 | { |
259 | // Check whether there will be enough space to install the next package. | 257 | // Check whether there will be enough space to install the next package. |
260 | bool ok; | 258 | bool ok; |
261 | unsigned int s = size.toUInt( &ok ); | 259 | unsigned int s = size.toUInt( &ok ); |
262 | 260 | ||
263 | if ( !ok ) | 261 | if ( !ok ) |
264 | return; | 262 | return; |
265 | 263 | ||
266 | // Shamelessly stolen from the sysinfo application (Werner) | 264 | // Shamelessly stolen from the sysinfo application (Werner) |
267 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) | 265 | #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) |
268 | struct statfs fs; | 266 | struct statfs fs; |
269 | if ( statfs( path.latin1(), &fs ) == 0 ) | 267 | if ( statfs( path.latin1(), &fs ) == 0 ) |
270 | if ( s > fs.f_bsize * fs.f_bavail ) { | 268 | if ( s > fs.f_bsize * fs.f_bavail ) { |
271 | //qDebug("############### Not enough space left ###############"); | 269 | //qDebug("############### Not enough space left ###############"); |
272 | mNoSpaceLeft = TRUE; | 270 | mNoSpaceLeft = TRUE; |
273 | } | 271 | } |
274 | #endif | 272 | #endif |
275 | } | 273 | } |
276 | 274 | ||
277 | void PackageHandler::iProcessExited() | 275 | void PackageHandler::iProcessExited() |
278 | { | 276 | { |
279 | if ( currentProcess->normalExit() && currentProcess->exitStatus() == 0 ) | 277 | if ( currentProcess->normalExit() && currentProcess->exitStatus() == 0 ) |
280 | sendReply( "installDone(QString)", currentPackage ); | 278 | sendReply( "installDone(QString)", currentPackage ); |
281 | else { | 279 | else { |
282 | #ifndef QT_NO_COP | 280 | #ifndef QT_NO_COP |
283 | QCopEnvelope e( "QPE/Desktop", "installFailed(QString,int,QString)" ); | 281 | QCopEnvelope e( "QPE/Desktop", "installFailed(QString,int,QString)" ); |
284 | e << currentPackage << currentProcess->exitStatus() | 282 | e << currentPackage << currentProcess->exitStatus() |
285 | << currentProcessError; | 283 | << currentProcessError; |
286 | #endif | 284 | #endif |
287 | } | 285 | } |
288 | 286 | ||
289 | delete currentProcess; | 287 | delete currentProcess; |
290 | currentProcess = 0; | 288 | currentProcess = 0; |
diff --git a/core/launcher/qcopbridge.cpp b/core/launcher/qcopbridge.cpp index 9bca360..24f471d 100644 --- a/core/launcher/qcopbridge.cpp +++ b/core/launcher/qcopbridge.cpp | |||
@@ -1,297 +1,289 @@ | |||
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 | 20 | ||
21 | #include "qcopbridge.h" | 21 | #include "qcopbridge.h" |
22 | #include "transferserver.h" | 22 | #include "transferserver.h" |
23 | 23 | ||
24 | #include <opie2/oglobal.h> | 24 | #include <opie2/oglobal.h> |
25 | 25 | ||
26 | #ifdef Q_WS_QWS | 26 | #ifdef Q_WS_QWS |
27 | #include <qtopia/qcopenvelope_qws.h> | 27 | #include <qtopia/qcopenvelope_qws.h> |
28 | #endif | 28 | #endif |
29 | #include <qtopia/qpeapplication.h> | 29 | #include <qtopia/qpeapplication.h> |
30 | 30 | ||
31 | #include <qtopia/version.h> | 31 | #include <qtopia/version.h> |
32 | #include <qtopia/config.h> | ||
33 | 32 | ||
34 | #include <qdir.h> | ||
35 | #include <qfile.h> | ||
36 | #include <qtextstream.h> | 33 | #include <qtextstream.h> |
37 | #include <qdatastream.h> | ||
38 | #include <qcstring.h> | ||
39 | #include <qstringlist.h> | ||
40 | #include <qfileinfo.h> | ||
41 | #include <qregexp.h> | ||
42 | #include <qtimer.h> | 34 | #include <qtimer.h> |
43 | #ifdef Q_WS_QWS | 35 | #ifdef Q_WS_QWS |
44 | #include <qcopchannel_qws.h> | 36 | #include <qcopchannel_qws.h> |
45 | #endif | 37 | #endif |
46 | 38 | ||
47 | #ifndef _XOPEN_SOURCE | 39 | #ifndef _XOPEN_SOURCE |
48 | #define _XOPEN_SOURCE | 40 | #define _XOPEN_SOURCE |
49 | #endif | 41 | #endif |
50 | #ifndef Q_OS_WIN32 | 42 | #ifndef Q_OS_WIN32 |
51 | #include <pwd.h> | 43 | #include <pwd.h> |
52 | #include <unistd.h> | 44 | #include <unistd.h> |
53 | #include <sys/types.h> | 45 | #include <sys/types.h> |
54 | #endif | 46 | #endif |
55 | 47 | ||
56 | #if defined(_OS_LINUX_) | 48 | #if defined(_OS_LINUX_) |
57 | #include <shadow.h> | 49 | #include <shadow.h> |
58 | #endif | 50 | #endif |
59 | 51 | ||
60 | 52 | ||
61 | //#define INSECURE | 53 | //#define INSECURE |
62 | 54 | ||
63 | const int block_size = 51200; | 55 | const int block_size = 51200; |
64 | 56 | ||
65 | QCopBridge::QCopBridge( Q_UINT16 port, QObject *parent, | 57 | QCopBridge::QCopBridge( Q_UINT16 port, QObject *parent, |
66 | const char* name ) | 58 | const char* name ) |
67 | : QServerSocket( port, 1, parent, name ), | 59 | : QServerSocket( port, 1, parent, name ), |
68 | desktopChannel( 0 ), | 60 | desktopChannel( 0 ), |
69 | cardChannel( 0 ) | 61 | cardChannel( 0 ) |
70 | { | 62 | { |
71 | if ( !ok() ) | 63 | if ( !ok() ) |
72 | qWarning( "Failed to bind to port %d", port ); | 64 | qWarning( "Failed to bind to port %d", port ); |
73 | else { | 65 | else { |
74 | #ifndef QT_NO_COP | 66 | #ifndef QT_NO_COP |
75 | desktopChannel = new QCopChannel( "QPE/Desktop", this ); | 67 | desktopChannel = new QCopChannel( "QPE/Desktop", this ); |
76 | connect( desktopChannel, SIGNAL(received(const QCString &, const QByteArray &)), | 68 | connect( desktopChannel, SIGNAL(received(const QCString &, const QByteArray &)), |
77 | this, SLOT(desktopMessage( const QCString &, const QByteArray &)) ); | 69 | this, SLOT(desktopMessage( const QCString &, const QByteArray &)) ); |
78 | cardChannel = new QCopChannel( "QPE/Card", this ); | 70 | cardChannel = new QCopChannel( "QPE/Card", this ); |
79 | connect( cardChannel, SIGNAL(received(const QCString &, const QByteArray &)), | 71 | connect( cardChannel, SIGNAL(received(const QCString &, const QByteArray &)), |
80 | this, SLOT(desktopMessage( const QCString &, const QByteArray &)) ); | 72 | this, SLOT(desktopMessage( const QCString &, const QByteArray &)) ); |
81 | #endif | 73 | #endif |
82 | } | 74 | } |
83 | sendSync = FALSE; | 75 | sendSync = FALSE; |
84 | openConnections.setAutoDelete( TRUE ); | 76 | openConnections.setAutoDelete( TRUE ); |
85 | authorizeConnections(); | 77 | authorizeConnections(); |
86 | } | 78 | } |
87 | 79 | ||
88 | QCopBridge::~QCopBridge() | 80 | QCopBridge::~QCopBridge() |
89 | { | 81 | { |
90 | #ifndef QT_NO_COP | 82 | #ifndef QT_NO_COP |
91 | delete desktopChannel; | 83 | delete desktopChannel; |
92 | #endif | 84 | #endif |
93 | } | 85 | } |
94 | 86 | ||
95 | void QCopBridge::authorizeConnections() | 87 | void QCopBridge::authorizeConnections() |
96 | { | 88 | { |
97 | Config cfg("Security"); | 89 | Config cfg("Security"); |
98 | cfg.setGroup("SyncMode"); | 90 | cfg.setGroup("SyncMode"); |
99 | m_mode = Mode(cfg.readNumEntry("Mode", Sharp )); | 91 | m_mode = Mode(cfg.readNumEntry("Mode", Sharp )); |
100 | QListIterator<QCopBridgePI> it(openConnections); | 92 | QListIterator<QCopBridgePI> it(openConnections); |
101 | while ( it.current() ) { | 93 | while ( it.current() ) { |
102 | if ( !it.current()->verifyAuthorised() ) { | 94 | if ( !it.current()->verifyAuthorised() ) { |
103 | disconnect ( it.current(), SIGNAL( connectionClosed( QCopBridgePI *) ), this, SLOT( closed( QCopBridgePI *) ) ); | 95 | disconnect ( it.current(), SIGNAL( connectionClosed( QCopBridgePI *) ), this, SLOT( closed( QCopBridgePI *) ) ); |
104 | openConnections.removeRef( it.current() ); | 96 | openConnections.removeRef( it.current() ); |
105 | } else | 97 | } else |
106 | ++it; | 98 | ++it; |
107 | } | 99 | } |
108 | } | 100 | } |
109 | 101 | ||
110 | void QCopBridge::newConnection( int socket ) | 102 | void QCopBridge::newConnection( int socket ) |
111 | { | 103 | { |
112 | QCopBridgePI *pi = new QCopBridgePI( socket, this ); | 104 | QCopBridgePI *pi = new QCopBridgePI( socket, this ); |
113 | openConnections.append( pi ); | 105 | openConnections.append( pi ); |
114 | connect ( pi, SIGNAL( connectionClosed( QCopBridgePI *) ), this, SLOT( closed( QCopBridgePI *) ) ); | 106 | connect ( pi, SIGNAL( connectionClosed( QCopBridgePI *) ), this, SLOT( closed( QCopBridgePI *) ) ); |
115 | 107 | ||
116 | /* ### libqtopia merge FIXME */ | 108 | /* ### libqtopia merge FIXME */ |
117 | #if 0 | 109 | #if 0 |
118 | QPEApplication::setTempScreenSaverMode( QPEApplication::DisableSuspend ); | 110 | QPEApplication::setTempScreenSaverMode( QPEApplication::DisableSuspend ); |
119 | #endif | 111 | #endif |
120 | #ifndef QT_NO_COP | 112 | #ifndef QT_NO_COP |
121 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::DisableSuspend; | 113 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::DisableSuspend; |
122 | #endif | 114 | #endif |
123 | 115 | ||
124 | if ( sendSync ) { | 116 | if ( sendSync ) { |
125 | pi ->startSync(); | 117 | pi ->startSync(); |
126 | sendSync = FALSE; | 118 | sendSync = FALSE; |
127 | } | 119 | } |
128 | } | 120 | } |
129 | 121 | ||
130 | void QCopBridge::closed( QCopBridgePI *pi ) | 122 | void QCopBridge::closed( QCopBridgePI *pi ) |
131 | { | 123 | { |
132 | emit connectionClosed( pi->peerAddress() ); | 124 | emit connectionClosed( pi->peerAddress() ); |
133 | openConnections.removeRef( pi ); | 125 | openConnections.removeRef( pi ); |
134 | if ( openConnections.count() == 0 ) { | 126 | if ( openConnections.count() == 0 ) { |
135 | /* ### FIXME libqtopia merge */ | 127 | /* ### FIXME libqtopia merge */ |
136 | #if 0 | 128 | #if 0 |
137 | QPEApplication::setTempScreenSaverMode( QPEApplication::Enable ); | 129 | QPEApplication::setTempScreenSaverMode( QPEApplication::Enable ); |
138 | #endif | 130 | #endif |
139 | #ifndef QT_NO_COP | 131 | #ifndef QT_NO_COP |
140 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | 132 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; |
141 | #endif | 133 | #endif |
142 | } | 134 | } |
143 | } | 135 | } |
144 | 136 | ||
145 | void QCopBridge::closeOpenConnections() | 137 | void QCopBridge::closeOpenConnections() |
146 | { | 138 | { |
147 | QCopBridgePI *pi; | 139 | QCopBridgePI *pi; |
148 | for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) | 140 | for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) |
149 | pi->close(); | 141 | pi->close(); |
150 | } | 142 | } |
151 | 143 | ||
152 | 144 | ||
153 | void QCopBridge::desktopMessage( const QCString &command, const QByteArray &data ) | 145 | void QCopBridge::desktopMessage( const QCString &command, const QByteArray &data ) |
154 | { | 146 | { |
155 | if ( command == "startSync()" ) { | 147 | if ( command == "startSync()" ) { |
156 | // we need to buffer it a bit | 148 | // we need to buffer it a bit |
157 | sendSync = TRUE; | 149 | sendSync = TRUE; |
158 | startTimer( 20000 ); | 150 | startTimer( 20000 ); |
159 | } | 151 | } |
160 | 152 | ||
161 | if ( m_mode & Qtopia1_7 ) { | 153 | if ( m_mode & Qtopia1_7 ) { |
162 | // send the command to all open connections | 154 | // send the command to all open connections |
163 | QCopBridgePI *pi; | 155 | QCopBridgePI *pi; |
164 | for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) { | 156 | for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) { |
165 | pi->sendDesktopMessage( command, data ); | 157 | pi->sendDesktopMessage( command, data ); |
166 | } | 158 | } |
167 | } | 159 | } |
168 | if ( ( m_mode & Sharp ) || (m_mode & IntelliSync) ) | 160 | if ( ( m_mode & Sharp ) || (m_mode & IntelliSync) ) |
169 | sendDesktopMessageOld( command, data ); | 161 | sendDesktopMessageOld( command, data ); |
170 | } | 162 | } |
171 | 163 | ||
172 | #ifndef OPIE_NO_OLD_SYNC_CODE | 164 | #ifndef OPIE_NO_OLD_SYNC_CODE |
173 | /* | 165 | /* |
174 | * Old compat mode | 166 | * Old compat mode |
175 | */ | 167 | */ |
176 | void QCopBridge::sendDesktopMessageOld( const QCString& command, const QByteArray& args) { | 168 | void QCopBridge::sendDesktopMessageOld( const QCString& command, const QByteArray& args) { |
177 | command.stripWhiteSpace(); | 169 | command.stripWhiteSpace(); |
178 | 170 | ||
179 | int paren = command.find( "(" ); | 171 | int paren = command.find( "(" ); |
180 | if ( paren <= 0 ) { | 172 | if ( paren <= 0 ) { |
181 | qDebug("DesktopMessage: bad qcop syntax"); | 173 | qDebug("DesktopMessage: bad qcop syntax"); |
182 | return; | 174 | return; |
183 | } | 175 | } |
184 | 176 | ||
185 | QString params = command.mid( paren + 1 ); | 177 | QString params = command.mid( paren + 1 ); |
186 | if ( params[params.length()-1] != ')' ) { | 178 | if ( params[params.length()-1] != ')' ) { |
187 | qDebug("DesktopMessage: bad qcop syntax"); | 179 | qDebug("DesktopMessage: bad qcop syntax"); |
188 | return; | 180 | return; |
189 | } | 181 | } |
190 | 182 | ||
191 | params.truncate( params.length()-1 ); | 183 | params.truncate( params.length()-1 ); |
192 | 184 | ||
193 | QStringList paramList = QStringList::split( ",", params ); | 185 | QStringList paramList = QStringList::split( ",", params ); |
194 | QString data; | 186 | QString data; |
195 | if ( paramList.count() ) { | 187 | if ( paramList.count() ) { |
196 | QDataStream stream( args, IO_ReadOnly ); | 188 | QDataStream stream( args, IO_ReadOnly ); |
197 | for ( QStringList::Iterator it = paramList.begin(); it != paramList.end(); ++it ) { | 189 | for ( QStringList::Iterator it = paramList.begin(); it != paramList.end(); ++it ) { |
198 | QString str; | 190 | QString str; |
199 | if ( *it == "QString" ) { | 191 | if ( *it == "QString" ) { |
200 | stream >> str; | 192 | stream >> str; |
201 | } else if ( *it == "QCString" ) { | 193 | } else if ( *it == "QCString" ) { |
202 | QCString cstr; | 194 | QCString cstr; |
203 | stream >> cstr; | 195 | stream >> cstr; |
204 | str = QString::fromLocal8Bit( cstr ); | 196 | str = QString::fromLocal8Bit( cstr ); |
205 | } else if ( *it == "int" ) { | 197 | } else if ( *it == "int" ) { |
206 | int i; | 198 | int i; |
207 | stream >> i; | 199 | stream >> i; |
208 | str = QString::number( i ); | 200 | str = QString::number( i ); |
209 | } else if ( *it == "bool" ) { | 201 | } else if ( *it == "bool" ) { |
210 | int i; | 202 | int i; |
211 | stream >> i; | 203 | stream >> i; |
212 | str = QString::number( i ); | 204 | str = QString::number( i ); |
213 | } else { | 205 | } else { |
214 | qDebug(" cannot route the argument type %s throught the qcop bridge", (*it).latin1() ); | 206 | qDebug(" cannot route the argument type %s throught the qcop bridge", (*it).latin1() ); |
215 | return; | 207 | return; |
216 | } | 208 | } |
217 | QString estr; | 209 | QString estr; |
218 | for (int i=0; i<(int)str.length(); i++) { | 210 | for (int i=0; i<(int)str.length(); i++) { |
219 | QChar ch = str[i]; | 211 | QChar ch = str[i]; |
220 | if ( ch.row() ) | 212 | if ( ch.row() ) |
221 | goto quick; | 213 | goto quick; |
222 | switch (ch.cell()) { | 214 | switch (ch.cell()) { |
223 | case '&': | 215 | case '&': |
224 | estr.append( "&" ); | 216 | estr.append( "&" ); |
225 | break; | 217 | break; |
226 | case ' ': | 218 | case ' ': |
227 | estr.append( "&0x20;" ); | 219 | estr.append( "&0x20;" ); |
228 | break; | 220 | break; |
229 | case '\n': | 221 | case '\n': |
230 | estr.append( "&0x0d;" ); | 222 | estr.append( "&0x0d;" ); |
231 | break; | 223 | break; |
232 | case '\r': | 224 | case '\r': |
233 | estr.append( "&0x0a;" ); | 225 | estr.append( "&0x0a;" ); |
234 | break; | 226 | break; |
235 | default: quick: | 227 | default: quick: |
236 | estr.append(ch); | 228 | estr.append(ch); |
237 | } | 229 | } |
238 | } | 230 | } |
239 | data += " " + estr; | 231 | data += " " + estr; |
240 | } | 232 | } |
241 | } | 233 | } |
242 | QString sendCommand = QString(command.data()) + data; | 234 | QString sendCommand = QString(command.data()) + data; |
243 | 235 | ||
244 | 236 | ||
245 | // send the command to all open connections | 237 | // send the command to all open connections |
246 | QCopBridgePI *pi; | 238 | QCopBridgePI *pi; |
247 | for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) | 239 | for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) |
248 | pi->sendDesktopMessage( sendCommand ); | 240 | pi->sendDesktopMessage( sendCommand ); |
249 | 241 | ||
250 | } | 242 | } |
251 | #endif | 243 | #endif |
252 | 244 | ||
253 | 245 | ||
254 | void QCopBridge::timerEvent( QTimerEvent * ) | 246 | void QCopBridge::timerEvent( QTimerEvent * ) |
255 | { | 247 | { |
256 | sendSync = FALSE; | 248 | sendSync = FALSE; |
257 | killTimers(); | 249 | killTimers(); |
258 | } | 250 | } |
259 | 251 | ||
260 | 252 | ||
261 | QCopBridgePI::QCopBridgePI( int socket, QObject *parent, const char* name ) | 253 | QCopBridgePI::QCopBridgePI( int socket, QObject *parent, const char* name ) |
262 | : QSocket( parent, name ) | 254 | : QSocket( parent, name ) |
263 | { | 255 | { |
264 | setSocket( socket ); | 256 | setSocket( socket ); |
265 | 257 | ||
266 | peerport = peerPort(); | 258 | peerport = peerPort(); |
267 | peeraddress = peerAddress(); | 259 | peeraddress = peerAddress(); |
268 | 260 | ||
269 | #ifndef INSECURE | 261 | #ifndef INSECURE |
270 | if ( !SyncAuthentication::isAuthorized(peeraddress) ) { | 262 | if ( !SyncAuthentication::isAuthorized(peeraddress) ) { |
271 | state = Forbidden; | 263 | state = Forbidden; |
272 | close(); | 264 | close(); |
273 | } else | 265 | } else |
274 | #endif | 266 | #endif |
275 | { | 267 | { |
276 | state = Connected; | 268 | state = Connected; |
277 | connect( this, SIGNAL( readyRead() ), SLOT( read() ) ); | 269 | connect( this, SIGNAL( readyRead() ), SLOT( read() ) ); |
278 | QString intro="220 Qtopia "; | 270 | QString intro="220 Qtopia "; |
279 | intro += QPE_VERSION; intro += ";"; | 271 | intro += QPE_VERSION; intro += ";"; |
280 | intro += "challenge="; intro += SyncAuthentication::serverId(); intro += ";"; // No tr | 272 | intro += "challenge="; intro += SyncAuthentication::serverId(); intro += ";"; // No tr |
281 | intro += "loginname="; intro += SyncAuthentication::loginName(); intro += ";"; | 273 | intro += "loginname="; intro += SyncAuthentication::loginName(); intro += ";"; |
282 | intro += "displayname="; intro += SyncAuthentication::ownerName(); intro += ";"; | 274 | intro += "displayname="; intro += SyncAuthentication::ownerName(); intro += ";"; |
283 | send( intro ); | 275 | send( intro ); |
284 | state = Wait_USER; | 276 | state = Wait_USER; |
285 | } | 277 | } |
286 | sendSync = FALSE; | 278 | sendSync = FALSE; |
287 | connect( this, SIGNAL( connectionClosed() ), SLOT( myConnectionClosed() ) ); | 279 | connect( this, SIGNAL( connectionClosed() ), SLOT( myConnectionClosed() ) ); |
288 | 280 | ||
289 | // idle timer to close connections when not used anymore | 281 | // idle timer to close connections when not used anymore |
290 | timer = new QTimer(this); | 282 | timer = new QTimer(this); |
291 | connect( timer, SIGNAL(timeout()), this, SLOT(myConnectionClosed()) ); | 283 | connect( timer, SIGNAL(timeout()), this, SLOT(myConnectionClosed()) ); |
292 | timer->start( 300000, TRUE ); | 284 | timer->start( 300000, TRUE ); |
293 | } | 285 | } |
294 | 286 | ||
295 | 287 | ||
296 | QCopBridgePI::~QCopBridgePI() | 288 | QCopBridgePI::~QCopBridgePI() |
297 | { | 289 | { |
diff --git a/core/launcher/runningappbar.cpp b/core/launcher/runningappbar.cpp index 1fda5a4..11d10dc 100644 --- a/core/launcher/runningappbar.cpp +++ b/core/launcher/runningappbar.cpp | |||
@@ -1,179 +1,172 @@ | |||
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 | 20 | ||
21 | #define QTOPIA_INTERNAL_PRELOADACCESS | 21 | #define QTOPIA_INTERNAL_PRELOADACCESS |
22 | 22 | ||
23 | #include <qtopia/global.h> | ||
24 | 23 | ||
25 | #include <stdlib.h> | 24 | #include <stdlib.h> |
26 | 25 | ||
27 | #include <qtimer.h> | ||
28 | #include <qpopupmenu.h> | ||
29 | #include <qpainter.h> | 26 | #include <qpainter.h> |
30 | #include <qmessagebox.h> | ||
31 | 27 | ||
32 | #include <qtopia/qpeapplication.h> | ||
33 | #include <qtopia/applnk.h> | ||
34 | #include <qtopia/qcopenvelope_qws.h> | 28 | #include <qtopia/qcopenvelope_qws.h> |
35 | #include <qtopia/mimetype.h> | ||
36 | 29 | ||
37 | #include "runningappbar.h" | 30 | #include "runningappbar.h" |
38 | #include "serverinterface.h" | 31 | #include "serverinterface.h" |
39 | 32 | ||
40 | RunningAppBar::RunningAppBar(QWidget* parent) | 33 | RunningAppBar::RunningAppBar(QWidget* parent) |
41 | : QFrame(parent), selectedAppIndex(-1) | 34 | : QFrame(parent), selectedAppIndex(-1) |
42 | { | 35 | { |
43 | QCopChannel* channel = new QCopChannel( "QPE/System", this ); | 36 | QCopChannel* channel = new QCopChannel( "QPE/System", this ); |
44 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), | 37 | connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), |
45 | this, SLOT(received(const QCString&, const QByteArray&)) ); | 38 | this, SLOT(received(const QCString&, const QByteArray&)) ); |
46 | 39 | ||
47 | spacing = AppLnk::smallIconSize()+3; | 40 | spacing = AppLnk::smallIconSize()+3; |
48 | } | 41 | } |
49 | 42 | ||
50 | RunningAppBar::~RunningAppBar() | 43 | RunningAppBar::~RunningAppBar() |
51 | { | 44 | { |
52 | } | 45 | } |
53 | 46 | ||
54 | void RunningAppBar::received(const QCString& msg, const QByteArray& data) { | 47 | void RunningAppBar::received(const QCString& msg, const QByteArray& data) { |
55 | // Since fast apps appear and disappear without disconnecting from their | 48 | // Since fast apps appear and disappear without disconnecting from their |
56 | // channel we need to watch for the showing/hiding events and update according. | 49 | // channel we need to watch for the showing/hiding events and update according. |
57 | QDataStream stream( data, IO_ReadOnly ); | 50 | QDataStream stream( data, IO_ReadOnly ); |
58 | if ( msg == "fastAppShowing(QString)") { | 51 | if ( msg == "fastAppShowing(QString)") { |
59 | QString appName; | 52 | QString appName; |
60 | stream >> appName; | 53 | stream >> appName; |
61 | // qDebug("fastAppShowing %s", appName.data() ); | 54 | // qDebug("fastAppShowing %s", appName.data() ); |
62 | const AppLnk* f = ServerInterface::appLnks().findExec(appName); | 55 | const AppLnk* f = ServerInterface::appLnks().findExec(appName); |
63 | if ( f ) addTask(*f); | 56 | if ( f ) addTask(*f); |
64 | } else if ( msg == "fastAppHiding(QString)") { | 57 | } else if ( msg == "fastAppHiding(QString)") { |
65 | QString appName; | 58 | QString appName; |
66 | stream >> appName; | 59 | stream >> appName; |
67 | const AppLnk* f = ServerInterface::appLnks().findExec(appName); | 60 | const AppLnk* f = ServerInterface::appLnks().findExec(appName); |
68 | if ( f ) removeTask(*f); | 61 | if ( f ) removeTask(*f); |
69 | } | 62 | } |
70 | } | 63 | } |
71 | 64 | ||
72 | void RunningAppBar::addTask(const AppLnk& appLnk) { | 65 | void RunningAppBar::addTask(const AppLnk& appLnk) { |
73 | qDebug("Added %s to app list.", appLnk.name().latin1()); | 66 | qDebug("Added %s to app list.", appLnk.name().latin1()); |
74 | AppLnk* newApp = new AppLnk(appLnk); | 67 | AppLnk* newApp = new AppLnk(appLnk); |
75 | newApp->setExec(appLnk.exec()); | 68 | newApp->setExec(appLnk.exec()); |
76 | appList.prepend(newApp); | 69 | appList.prepend(newApp); |
77 | update(); | 70 | update(); |
78 | } | 71 | } |
79 | 72 | ||
80 | void RunningAppBar::removeTask(const AppLnk& appLnk) { | 73 | void RunningAppBar::removeTask(const AppLnk& appLnk) { |
81 | unsigned int i = 0; | 74 | unsigned int i = 0; |
82 | for (; i < appList.count() ; i++) { | 75 | for (; i < appList.count() ; i++) { |
83 | AppLnk* target = appList.at(i); | 76 | AppLnk* target = appList.at(i); |
84 | if (target->exec() == appLnk.exec()) { | 77 | if (target->exec() == appLnk.exec()) { |
85 | qDebug("Removing %s from app list.", appLnk.name().latin1()); | 78 | qDebug("Removing %s from app list.", appLnk.name().latin1()); |
86 | appList.remove(); | 79 | appList.remove(); |
87 | delete target; | 80 | delete target; |
88 | } | 81 | } |
89 | } | 82 | } |
90 | update(); | 83 | update(); |
91 | } | 84 | } |
92 | 85 | ||
93 | void RunningAppBar::mousePressEvent(QMouseEvent *e) | 86 | void RunningAppBar::mousePressEvent(QMouseEvent *e) |
94 | { | 87 | { |
95 | // Find out if the user is clicking on an app icon... | 88 | // Find out if the user is clicking on an app icon... |
96 | // If so, snag the index so when we repaint we show it | 89 | // If so, snag the index so when we repaint we show it |
97 | // as highlighed. | 90 | // as highlighed. |
98 | selectedAppIndex = 0; | 91 | selectedAppIndex = 0; |
99 | int x=0; | 92 | int x=0; |
100 | QListIterator<AppLnk> it( appList ); | 93 | QListIterator<AppLnk> it( appList ); |
101 | for ( ; it.current(); ++it,++selectedAppIndex,x+=spacing ) { | 94 | for ( ; it.current(); ++it,++selectedAppIndex,x+=spacing ) { |
102 | if ( x + spacing <= width() ) { | 95 | if ( x + spacing <= width() ) { |
103 | if ( e->x() >= x && e->x() < x+spacing ) { | 96 | if ( e->x() >= x && e->x() < x+spacing ) { |
104 | if ( selectedAppIndex < (int)appList.count() ) { | 97 | if ( selectedAppIndex < (int)appList.count() ) { |
105 | repaint(FALSE); | 98 | repaint(FALSE); |
106 | return; | 99 | return; |
107 | } | 100 | } |
108 | } | 101 | } |
109 | } else { | 102 | } else { |
110 | break; | 103 | break; |
111 | } | 104 | } |
112 | } | 105 | } |
113 | selectedAppIndex = -1; | 106 | selectedAppIndex = -1; |
114 | repaint( FALSE ); | 107 | repaint( FALSE ); |
115 | } | 108 | } |
116 | 109 | ||
117 | void RunningAppBar::mouseReleaseEvent(QMouseEvent *e) | 110 | void RunningAppBar::mouseReleaseEvent(QMouseEvent *e) |
118 | { | 111 | { |
119 | if (e->button() == QMouseEvent::RightButton) | 112 | if (e->button() == QMouseEvent::RightButton) |
120 | return; | 113 | return; |
121 | if ( selectedAppIndex >= 0 ) { | 114 | if ( selectedAppIndex >= 0 ) { |
122 | QString app = appList.at(selectedAppIndex)->exec(); | 115 | QString app = appList.at(selectedAppIndex)->exec(); |
123 | QCopEnvelope e("QPE/System", "raise(QString)"); | 116 | QCopEnvelope e("QPE/System", "raise(QString)"); |
124 | e << app; | 117 | e << app; |
125 | selectedAppIndex = -1; | 118 | selectedAppIndex = -1; |
126 | update(); | 119 | update(); |
127 | } | 120 | } |
128 | } | 121 | } |
129 | 122 | ||
130 | void RunningAppBar::paintEvent( QPaintEvent * ) | 123 | void RunningAppBar::paintEvent( QPaintEvent * ) |
131 | { | 124 | { |
132 | QPainter p( this ); | 125 | QPainter p( this ); |
133 | AppLnk *curApp; | 126 | AppLnk *curApp; |
134 | int x = 0; | 127 | int x = 0; |
135 | int y = (height() - AppLnk::smallIconSize()) / 2; | 128 | int y = (height() - AppLnk::smallIconSize()) / 2; |
136 | int i = 0; | 129 | int i = 0; |
137 | 130 | ||
138 | p.fillRect( 0, 0, width(), height(), colorGroup().background() ); | 131 | p.fillRect( 0, 0, width(), height(), colorGroup().background() ); |
139 | 132 | ||
140 | QListIterator<AppLnk> it(appList); | 133 | QListIterator<AppLnk> it(appList); |
141 | 134 | ||
142 | for (; it.current(); i++, ++it ) { | 135 | for (; it.current(); i++, ++it ) { |
143 | if ( x + spacing <= width() ) { | 136 | if ( x + spacing <= width() ) { |
144 | curApp = it.current(); | 137 | curApp = it.current(); |
145 | qWarning("Drawing %s", curApp->name().latin1() ); | 138 | qWarning("Drawing %s", curApp->name().latin1() ); |
146 | if ( (int)i == selectedAppIndex ) | 139 | if ( (int)i == selectedAppIndex ) |
147 | p.fillRect( x, y, spacing, curApp->pixmap().height()+1, colorGroup().highlight() ); | 140 | p.fillRect( x, y, spacing, curApp->pixmap().height()+1, colorGroup().highlight() ); |
148 | else | 141 | else |
149 | p.eraseRect( x, y, spacing, curApp->pixmap().height()+1 ); | 142 | p.eraseRect( x, y, spacing, curApp->pixmap().height()+1 ); |
150 | p.drawPixmap( x, y, curApp->pixmap() ); | 143 | p.drawPixmap( x, y, curApp->pixmap() ); |
151 | x += spacing; | 144 | x += spacing; |
152 | } | 145 | } |
153 | } | 146 | } |
154 | } | 147 | } |
155 | 148 | ||
156 | QSize RunningAppBar::sizeHint() const | 149 | QSize RunningAppBar::sizeHint() const |
157 | { | 150 | { |
158 | return QSize( frameWidth(), AppLnk::smallIconSize()+frameWidth()*2+3 ); | 151 | return QSize( frameWidth(), AppLnk::smallIconSize()+frameWidth()*2+3 ); |
159 | } | 152 | } |
160 | 153 | ||
161 | void RunningAppBar::applicationLaunched(const QString &appName) | 154 | void RunningAppBar::applicationLaunched(const QString &appName) |
162 | { | 155 | { |
163 | qDebug("desktop:: app: %s launched with pid ", appName.data() ); | 156 | qDebug("desktop:: app: %s launched with pid ", appName.data() ); |
164 | const AppLnk* newGuy = ServerInterface::appLnks().findExec(appName); | 157 | const AppLnk* newGuy = ServerInterface::appLnks().findExec(appName); |
165 | if ( newGuy && !newGuy->isPreloaded() ) { | 158 | if ( newGuy && !newGuy->isPreloaded() ) { |
166 | addTask( *newGuy ); | 159 | addTask( *newGuy ); |
167 | } | 160 | } |
168 | } | 161 | } |
169 | 162 | ||
170 | void RunningAppBar::applicationTerminated(const QString &app) | 163 | void RunningAppBar::applicationTerminated(const QString &app) |
171 | { | 164 | { |
172 | const AppLnk* gone = ServerInterface::appLnks().findExec(app); | 165 | const AppLnk* gone = ServerInterface::appLnks().findExec(app); |
173 | if ( gone ) { | 166 | if ( gone ) { |
174 | removeTask(*gone); | 167 | removeTask(*gone); |
175 | } | 168 | } |
176 | } | 169 | } |
177 | 170 | ||
178 | 171 | ||
179 | 172 | ||
diff --git a/core/launcher/screensaver.cpp b/core/launcher/screensaver.cpp index 1146dcd..e544c61 100644 --- a/core/launcher/screensaver.cpp +++ b/core/launcher/screensaver.cpp | |||
@@ -1,261 +1,260 @@ | |||
1 | 1 | ||
2 | #include "screensaver.h" | 2 | #include "screensaver.h" |
3 | 3 | ||
4 | #include <qpe/config.h> | 4 | #include <qpe/config.h> |
5 | #include <qpe/power.h> | ||
6 | #include <qpe/network.h> | 5 | #include <qpe/network.h> |
7 | 6 | ||
8 | #include <opie2/odevice.h> | 7 | #include <opie2/odevice.h> |
9 | 8 | ||
10 | 9 | ||
11 | using namespace Opie; | 10 | using namespace Opie; |
12 | 11 | ||
13 | 12 | ||
14 | 13 | ||
15 | OpieScreenSaver::OpieScreenSaver ( ) | 14 | OpieScreenSaver::OpieScreenSaver ( ) |
16 | : QObject ( 0, "screensaver" ), QWSScreenSaver ( ) | 15 | : QObject ( 0, "screensaver" ), QWSScreenSaver ( ) |
17 | { | 16 | { |
18 | m_disable_suspend = 100; | 17 | m_disable_suspend = 100; |
19 | m_enable_dim = false; | 18 | m_enable_dim = false; |
20 | m_enable_lightoff = false; | 19 | m_enable_lightoff = false; |
21 | m_enable_suspend = false; | 20 | m_enable_suspend = false; |
22 | m_onlylcdoff = false; | 21 | m_onlylcdoff = false; |
23 | 22 | ||
24 | m_enable_dim_ac = false; | 23 | m_enable_dim_ac = false; |
25 | m_enable_lightoff_ac = false; | 24 | m_enable_lightoff_ac = false; |
26 | m_enable_suspend_ac = false; | 25 | m_enable_suspend_ac = false; |
27 | m_onlylcdoff_ac = false; | 26 | m_onlylcdoff_ac = false; |
28 | 27 | ||
29 | m_use_light_sensor = false; | 28 | m_use_light_sensor = false; |
30 | m_backlight_sensor = -1; | 29 | m_backlight_sensor = -1; |
31 | ::memset ( m_sensordata, 0xff, LS_Count * sizeof( m_sensordata [0] )); | 30 | ::memset ( m_sensordata, 0xff, LS_Count * sizeof( m_sensordata [0] )); |
32 | 31 | ||
33 | m_lcd_status = true; | 32 | m_lcd_status = true; |
34 | 33 | ||
35 | m_backlight_normal = -1; | 34 | m_backlight_normal = -1; |
36 | m_backlight_current = -1; | 35 | m_backlight_current = -1; |
37 | m_backlight_forcedoff = false; | 36 | m_backlight_forcedoff = false; |
38 | 37 | ||
39 | m_on_ac = false; | 38 | m_on_ac = false; |
40 | 39 | ||
41 | m_level = -1; | 40 | m_level = -1; |
42 | 41 | ||
43 | // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) | 42 | // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) |
44 | ODevice::inst ( )-> setDisplayStatus ( true ); | 43 | ODevice::inst ( )-> setDisplayStatus ( true ); |
45 | setBacklight ( -1 ); | 44 | setBacklight ( -1 ); |
46 | } | 45 | } |
47 | 46 | ||
48 | 47 | ||
49 | /** | 48 | /** |
50 | * Stops the screen saver | 49 | * Stops the screen saver |
51 | */ | 50 | */ |
52 | void OpieScreenSaver::restore() | 51 | void OpieScreenSaver::restore() |
53 | { | 52 | { |
54 | m_level = -1; | 53 | m_level = -1; |
55 | 54 | ||
56 | if ( !m_lcd_status ) { // We must have turned it off | 55 | if ( !m_lcd_status ) { // We must have turned it off |
57 | ODevice::inst ( ) -> setDisplayStatus ( true ); | 56 | ODevice::inst ( ) -> setDisplayStatus ( true ); |
58 | m_lcd_status = true; | 57 | m_lcd_status = true; |
59 | } | 58 | } |
60 | 59 | ||
61 | setBacklightInternal ( -1 ); | 60 | setBacklightInternal ( -1 ); |
62 | } | 61 | } |
63 | 62 | ||
64 | 63 | ||
65 | /** | 64 | /** |
66 | * Starts the screen saver | 65 | * Starts the screen saver |
67 | * | 66 | * |
68 | * @param level what level of screen saving should happen (0=lowest non-off, 1=off, | 67 | * @param level what level of screen saving should happen (0=lowest non-off, 1=off, |
69 | * 2=suspend whole machine) | 68 | * 2=suspend whole machine) |
70 | * @returns true on success | 69 | * @returns true on success |
71 | */ | 70 | */ |
72 | bool OpieScreenSaver::save( int level ) | 71 | bool OpieScreenSaver::save( int level ) |
73 | { | 72 | { |
74 | m_level = level; | 73 | m_level = level; |
75 | 74 | ||
76 | switch ( level ) { | 75 | switch ( level ) { |
77 | case 0: | 76 | case 0: |
78 | if (( m_on_ac && m_enable_dim_ac ) || | 77 | if (( m_on_ac && m_enable_dim_ac ) || |
79 | ( !m_on_ac && m_enable_dim )) { | 78 | ( !m_on_ac && m_enable_dim )) { |
80 | if (( m_disable_suspend > 0 ) && ( m_backlight_current > 1 ) && !m_use_light_sensor ) | 79 | if (( m_disable_suspend > 0 ) && ( m_backlight_current > 1 ) && !m_use_light_sensor ) |
81 | setBacklightInternal ( 1 ); // lowest non-off | 80 | setBacklightInternal ( 1 ); // lowest non-off |
82 | } | 81 | } |
83 | return true; | 82 | return true; |
84 | break; | 83 | break; |
85 | 84 | ||
86 | case 1: | 85 | case 1: |
87 | if (( m_on_ac && m_enable_lightoff_ac ) || | 86 | if (( m_on_ac && m_enable_lightoff_ac ) || |
88 | ( !m_on_ac && m_enable_lightoff )) { | 87 | ( !m_on_ac && m_enable_lightoff )) { |
89 | if ( m_disable_suspend > 1 ) | 88 | if ( m_disable_suspend > 1 ) |
90 | setBacklightInternal ( 0 ); // off | 89 | setBacklightInternal ( 0 ); // off |
91 | } | 90 | } |
92 | return true; | 91 | return true; |
93 | break; | 92 | break; |
94 | 93 | ||
95 | case 2: | 94 | case 2: |
96 | if (( m_on_ac && !m_enable_suspend_ac ) || | 95 | if (( m_on_ac && !m_enable_suspend_ac ) || |
97 | ( !m_on_ac && !m_enable_suspend )) { | 96 | ( !m_on_ac && !m_enable_suspend )) { |
98 | return true; | 97 | return true; |
99 | } | 98 | } |
100 | 99 | ||
101 | if (( m_on_ac && m_onlylcdoff_ac ) || | 100 | if (( m_on_ac && m_onlylcdoff_ac ) || |
102 | ( !m_on_ac && m_onlylcdoff )) { | 101 | ( !m_on_ac && m_onlylcdoff )) { |
103 | ODevice::inst ( ) -> setDisplayStatus ( false ); | 102 | ODevice::inst ( ) -> setDisplayStatus ( false ); |
104 | m_lcd_status = false; | 103 | m_lcd_status = false; |
105 | return true; | 104 | return true; |
106 | } | 105 | } |
107 | 106 | ||
108 | // We're going to suspend the whole machine | 107 | // We're going to suspend the whole machine |
109 | 108 | ||
110 | if (( m_disable_suspend > 2 ) && !Network::networkOnline ( )) { | 109 | if (( m_disable_suspend > 2 ) && !Network::networkOnline ( )) { |
111 | // TODO: why is this key F34 hard coded? -- schurig | 110 | // TODO: why is this key F34 hard coded? -- schurig |
112 | // Does this now only work an devices with a ODevice::filter? | 111 | // Does this now only work an devices with a ODevice::filter? |
113 | QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); | 112 | QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); |
114 | return true; | 113 | return true; |
115 | } | 114 | } |
116 | 115 | ||
117 | break; | 116 | break; |
118 | } | 117 | } |
119 | return false; | 118 | return false; |
120 | } | 119 | } |
121 | 120 | ||
122 | 121 | ||
123 | /** | 122 | /** |
124 | * Set intervals in seconds for automatic dimming, light off and suspend | 123 | * Set intervals in seconds for automatic dimming, light off and suspend |
125 | * | 124 | * |
126 | * This function also sets the member variables m_m_enable_dim[_ac], | 125 | * This function also sets the member variables m_m_enable_dim[_ac], |
127 | * m_enable_lightoff[_ac], m_enable_suspend[_ac], m_onlylcdoff[_ac] | 126 | * m_enable_lightoff[_ac], m_enable_suspend[_ac], m_onlylcdoff[_ac] |
128 | * | 127 | * |
129 | * @param dim time in seconds to dim, -1 to read value from config file, | 128 | * @param dim time in seconds to dim, -1 to read value from config file, |
130 | * 0 to disable | 129 | * 0 to disable |
131 | * @param lightoff time in seconds to turn LCD backlight off, -1 to | 130 | * @param lightoff time in seconds to turn LCD backlight off, -1 to |
132 | * read value from config file, 0 to disable | 131 | * read value from config file, 0 to disable |
133 | * @param suspend time in seconds to do an APM suspend, -1 to | 132 | * @param suspend time in seconds to do an APM suspend, -1 to |
134 | * read value from config file, 0 to disable | 133 | * read value from config file, 0 to disable |
135 | */ | 134 | */ |
136 | void OpieScreenSaver::setIntervals ( int dim, int lightoff, int suspend ) | 135 | void OpieScreenSaver::setIntervals ( int dim, int lightoff, int suspend ) |
137 | { | 136 | { |
138 | Config config ( "apm" ); | 137 | Config config ( "apm" ); |
139 | config. setGroup ( m_on_ac ? "AC" : "Battery" ); | 138 | config. setGroup ( m_on_ac ? "AC" : "Battery" ); |
140 | 139 | ||
141 | int v[ 4 ]; | 140 | int v[ 4 ]; |
142 | if ( dim < 0 ) | 141 | if ( dim < 0 ) |
143 | dim = config. readNumEntry ( "Dim", m_on_ac ? 60 : 30 ); | 142 | dim = config. readNumEntry ( "Dim", m_on_ac ? 60 : 30 ); |
144 | if ( lightoff < 0 ) | 143 | if ( lightoff < 0 ) |
145 | lightoff = config. readNumEntry ( "LightOff", m_on_ac ? 120 : 20 ); | 144 | lightoff = config. readNumEntry ( "LightOff", m_on_ac ? 120 : 20 ); |
146 | if ( suspend < 0 ) | 145 | if ( suspend < 0 ) |
147 | suspend = config. readNumEntry ( "Suspend", m_on_ac ? 0 : 60 ); | 146 | suspend = config. readNumEntry ( "Suspend", m_on_ac ? 0 : 60 ); |
148 | 147 | ||
149 | if ( m_on_ac ) { | 148 | if ( m_on_ac ) { |
150 | m_enable_dim_ac = ( dim > 0 ); | 149 | m_enable_dim_ac = ( dim > 0 ); |
151 | m_enable_lightoff_ac = ( lightoff > 0 ); | 150 | m_enable_lightoff_ac = ( lightoff > 0 ); |
152 | m_enable_suspend_ac = ( suspend > 0 ); | 151 | m_enable_suspend_ac = ( suspend > 0 ); |
153 | m_onlylcdoff_ac = config.readBoolEntry ( "LcdOffOnly", false ); | 152 | m_onlylcdoff_ac = config.readBoolEntry ( "LcdOffOnly", false ); |
154 | } | 153 | } |
155 | else { | 154 | else { |
156 | m_enable_dim = ( dim > 0 ); | 155 | m_enable_dim = ( dim > 0 ); |
157 | m_enable_lightoff = ( lightoff > 0 ); | 156 | m_enable_lightoff = ( lightoff > 0 ); |
158 | m_enable_suspend = ( suspend > 0 ); | 157 | m_enable_suspend = ( suspend > 0 ); |
159 | m_onlylcdoff = config.readBoolEntry ( "LcdOffOnly", false ); | 158 | m_onlylcdoff = config.readBoolEntry ( "LcdOffOnly", false ); |
160 | } | 159 | } |
161 | 160 | ||
162 | //qDebug("screen saver intervals: %d %d %d", dim, lightoff, suspend); | 161 | //qDebug("screen saver intervals: %d %d %d", dim, lightoff, suspend); |
163 | 162 | ||
164 | v [ 0 ] = QMAX( 1000 * dim, 100 ); | 163 | v [ 0 ] = QMAX( 1000 * dim, 100 ); |
165 | v [ 1 ] = QMAX( 1000 * lightoff, 100 ); | 164 | v [ 1 ] = QMAX( 1000 * lightoff, 100 ); |
166 | v [ 2 ] = QMAX( 1000 * suspend, 100 ); | 165 | v [ 2 ] = QMAX( 1000 * suspend, 100 ); |
167 | v [ 3 ] = 0; | 166 | v [ 3 ] = 0; |
168 | 167 | ||
169 | if ( !dim && !lightoff && !suspend ) | 168 | if ( !dim && !lightoff && !suspend ) |
170 | QWSServer::setScreenSaverInterval( 0 ); | 169 | QWSServer::setScreenSaverInterval( 0 ); |
171 | else | 170 | else |
172 | QWSServer::setScreenSaverIntervals( v ); | 171 | QWSServer::setScreenSaverIntervals( v ); |
173 | } | 172 | } |
174 | 173 | ||
175 | 174 | ||
176 | /** | 175 | /** |
177 | * Set suspend time. Will read the dim and lcd-off times from the config file. | 176 | * Set suspend time. Will read the dim and lcd-off times from the config file. |
178 | * | 177 | * |
179 | * @param suspend time in seconds to go into APM suspend, -1 to | 178 | * @param suspend time in seconds to go into APM suspend, -1 to |
180 | * read value from config file, 0 to disable | 179 | * read value from config file, 0 to disable |
181 | */ | 180 | */ |
182 | void OpieScreenSaver::setInterval ( int interval ) | 181 | void OpieScreenSaver::setInterval ( int interval ) |
183 | { | 182 | { |
184 | setIntervals ( -1, -1, interval ); | 183 | setIntervals ( -1, -1, interval ); |
185 | } | 184 | } |
186 | 185 | ||
187 | 186 | ||
188 | void OpieScreenSaver::setMode ( int mode ) | 187 | void OpieScreenSaver::setMode ( int mode ) |
189 | { | 188 | { |
190 | if ( mode > m_disable_suspend ) | 189 | if ( mode > m_disable_suspend ) |
191 | setInterval ( -1 ); | 190 | setInterval ( -1 ); |
192 | m_disable_suspend = mode; | 191 | m_disable_suspend = mode; |
193 | } | 192 | } |
194 | 193 | ||
195 | 194 | ||
196 | /** | 195 | /** |
197 | * Set display brightness | 196 | * Set display brightness |
198 | * | 197 | * |
199 | * Get's default values for backlight, contrast and light sensor from config file. | 198 | * Get's default values for backlight, contrast and light sensor from config file. |
200 | * | 199 | * |
201 | * @param bright desired brighness (-1 to use automatic sensor data or value | 200 | * @param bright desired brighness (-1 to use automatic sensor data or value |
202 | * from config file, -2 to toggle backlight on and off, -3 to | 201 | * from config file, -2 to toggle backlight on and off, -3 to |
203 | * force backlight off) | 202 | * force backlight off) |
204 | */ | 203 | */ |
205 | void OpieScreenSaver::setBacklight ( int bright ) | 204 | void OpieScreenSaver::setBacklight ( int bright ) |
206 | { | 205 | { |
207 | // Read from config | 206 | // Read from config |
208 | Config config ( "apm" ); | 207 | Config config ( "apm" ); |
209 | config. setGroup ( m_on_ac ? "AC" : "Battery" ); | 208 | config. setGroup ( m_on_ac ? "AC" : "Battery" ); |
210 | m_backlight_normal = config. readNumEntry ( "Brightness", m_on_ac ? 255 : 127 ); | 209 | m_backlight_normal = config. readNumEntry ( "Brightness", m_on_ac ? 255 : 127 ); |
211 | int contrast = config. readNumEntry ( "Contrast", 127); | 210 | int contrast = config. readNumEntry ( "Contrast", 127); |
212 | m_use_light_sensor = config. readBoolEntry ( "LightSensor", false ); | 211 | m_use_light_sensor = config. readBoolEntry ( "LightSensor", false ); |
213 | 212 | ||
214 | //qDebug ( "setBacklight: %d (norm: %d) (ls: %d)", bright, m_backlight_normal, m_use_light_sensor ? 1 : 0 ); | 213 | //qDebug ( "setBacklight: %d (norm: %d) (ls: %d)", bright, m_backlight_normal, m_use_light_sensor ? 1 : 0 ); |
215 | 214 | ||
216 | killTimers ( ); | 215 | killTimers ( ); |
217 | if (( bright < 0 ) && m_use_light_sensor ) { | 216 | if (( bright < 0 ) && m_use_light_sensor ) { |
218 | QStringList sl = config. readListEntry ( "LightSensorData", ';' ); | 217 | QStringList sl = config. readListEntry ( "LightSensorData", ';' ); |
219 | 218 | ||
220 | m_sensordata [LS_SensorMin] = 40; | 219 | m_sensordata [LS_SensorMin] = 40; |
221 | m_sensordata [LS_SensorMax] = 215; | 220 | m_sensordata [LS_SensorMax] = 215; |
222 | m_sensordata [LS_LightMin] = 1; | 221 | m_sensordata [LS_LightMin] = 1; |
223 | m_sensordata [LS_LightMax] = 255; | 222 | m_sensordata [LS_LightMax] = 255; |
224 | m_sensordata [LS_Steps] = 12; | 223 | m_sensordata [LS_Steps] = 12; |
225 | m_sensordata [LS_Interval] = 2000; | 224 | m_sensordata [LS_Interval] = 2000; |
226 | 225 | ||
227 | for ( uint i = 0; i < LS_Count; i++ ) { | 226 | for ( uint i = 0; i < LS_Count; i++ ) { |
228 | if ( i < sl. count ( )) | 227 | if ( i < sl. count ( )) |
229 | m_sensordata [i] = sl [i]. toInt ( ); | 228 | m_sensordata [i] = sl [i]. toInt ( ); |
230 | } | 229 | } |
231 | if ( m_sensordata [LS_Steps] < 2 ) // sanity check to avoid SIGFPE | 230 | if ( m_sensordata [LS_Steps] < 2 ) // sanity check to avoid SIGFPE |
232 | m_sensordata [LS_Steps] = 2; | 231 | m_sensordata [LS_Steps] = 2; |
233 | 232 | ||
234 | timerEvent ( 0 ); | 233 | timerEvent ( 0 ); |
235 | startTimer ( m_sensordata [LS_Interval] ); | 234 | startTimer ( m_sensordata [LS_Interval] ); |
236 | } | 235 | } |
237 | 236 | ||
238 | setBacklightInternal ( bright ); | 237 | setBacklightInternal ( bright ); |
239 | ODevice::inst ( )-> setDisplayContrast(contrast); | 238 | ODevice::inst ( )-> setDisplayContrast(contrast); |
240 | } | 239 | } |
241 | 240 | ||
242 | 241 | ||
243 | /** | 242 | /** |
244 | * Internal brightness setting method | 243 | * Internal brightness setting method |
245 | * | 244 | * |
246 | * Get's default values for backlight and light sensor from config file. | 245 | * Get's default values for backlight and light sensor from config file. |
247 | * | 246 | * |
248 | * @param bright desired brighness (-1 to use automatic sensor data or value | 247 | * @param bright desired brighness (-1 to use automatic sensor data or value |
249 | * from config file, -2 to toggle backlight on and off, -3 to | 248 | * from config file, -2 to toggle backlight on and off, -3 to |
250 | * force backlight off) | 249 | * force backlight off) |
251 | */ | 250 | */ |
252 | void OpieScreenSaver::setBacklightInternal ( int bright ) | 251 | void OpieScreenSaver::setBacklightInternal ( int bright ) |
253 | { | 252 | { |
254 | if ( bright == -3 ) { | 253 | if ( bright == -3 ) { |
255 | // Forced on | 254 | // Forced on |
256 | m_backlight_forcedoff = false; | 255 | m_backlight_forcedoff = false; |
257 | bright = -1; | 256 | bright = -1; |
258 | } | 257 | } |
259 | if ( m_backlight_forcedoff && bright != -2 ) | 258 | if ( m_backlight_forcedoff && bright != -2 ) |
260 | return ; | 259 | return ; |
261 | if ( bright == -2 ) { | 260 | if ( bright == -2 ) { |
diff --git a/core/launcher/server.cpp b/core/launcher/server.cpp index 32fcdd0..068d716 100644 --- a/core/launcher/server.cpp +++ b/core/launcher/server.cpp | |||
@@ -1,288 +1,287 @@ | |||
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 | 20 | ||
21 | #include "server.h" | 21 | #include "server.h" |
22 | #include "serverapp.h" | 22 | #include "serverapp.h" |
23 | #include "launcher.h" | ||
24 | #include "startmenu.h" | 23 | #include "startmenu.h" |
24 | #include "launcher.h" | ||
25 | #include "transferserver.h" | 25 | #include "transferserver.h" |
26 | #include "qcopbridge.h" | 26 | #include "qcopbridge.h" |
27 | #include "irserver.h" | 27 | #include "irserver.h" |
28 | #include "packageslave.h" | 28 | #include "packageslave.h" |
29 | #include "calibrate.h" | 29 | #include "calibrate.h" |
30 | #include "qrsync.h" | 30 | #include "qrsync.h" |
31 | #include "syncdialog.h" | 31 | #include "syncdialog.h" |
32 | #include "launcher.h" | ||
33 | #include "shutdownimpl.h" | 32 | #include "shutdownimpl.h" |
34 | #include "applauncher.h" | 33 | #include "applauncher.h" |
35 | #if 0 | 34 | #if 0 |
36 | #include "suspendmonitor.h" | 35 | #include "suspendmonitor.h" |
37 | #endif | 36 | #endif |
38 | #include "documentlist.h" | 37 | #include "documentlist.h" |
39 | 38 | ||
40 | #include <qtopia/applnk.h> | 39 | #include <qtopia/applnk.h> |
41 | #include <qtopia/private/categories.h> | 40 | #include <qtopia/private/categories.h> |
42 | #include <qtopia/mimetype.h> | 41 | #include <qtopia/mimetype.h> |
43 | #include <qtopia/config.h> | 42 | #include <qtopia/config.h> |
44 | #include <qtopia/resource.h> | 43 | #include <qtopia/resource.h> |
45 | #include <qtopia/version.h> | 44 | #include <qtopia/version.h> |
46 | #include <qtopia/storage.h> | 45 | #include <qtopia/storage.h> |
47 | 46 | ||
48 | #include <qtopia/qcopenvelope_qws.h> | 47 | #include <qtopia/qcopenvelope_qws.h> |
49 | #include <qwindowsystem_qws.h> | 48 | #include <qwindowsystem_qws.h> |
50 | #include <qgfx_qws.h> | 49 | #include <qgfx_qws.h> |
51 | #include <qtopia/global.h> | 50 | #include <qtopia/global.h> |
52 | //#include <qtopia/custom.h> | 51 | //#include <qtopia/custom.h> |
53 | 52 | ||
54 | #include <opie2/odevicebutton.h> | 53 | #include <opie2/odevicebutton.h> |
55 | #include <opie2/odevice.h> | 54 | #include <opie2/odevice.h> |
56 | 55 | ||
57 | #include <unistd.h> | 56 | #include <unistd.h> |
58 | #include <qmainwindow.h> | 57 | #include <qmainwindow.h> |
59 | #include <qmessagebox.h> | 58 | #include <qmessagebox.h> |
60 | #include <qtimer.h> | 59 | #include <qtimer.h> |
61 | #include <qtextstream.h> | 60 | #include <qtextstream.h> |
62 | 61 | ||
63 | #include <stdlib.h> | 62 | #include <stdlib.h> |
64 | 63 | ||
65 | extern QRect qt_maxWindowRect; | 64 | extern QRect qt_maxWindowRect; |
66 | 65 | ||
67 | using namespace Opie; | 66 | using namespace Opie; |
68 | 67 | ||
69 | static QWidget *calibrate(bool) | 68 | static QWidget *calibrate(bool) |
70 | { | 69 | { |
71 | #ifdef Q_WS_QWS | 70 | #ifdef Q_WS_QWS |
72 | Calibrate *c = new Calibrate; | 71 | Calibrate *c = new Calibrate; |
73 | c->show(); | 72 | c->show(); |
74 | return c; | 73 | return c; |
75 | #else | 74 | #else |
76 | return 0; | 75 | return 0; |
77 | #endif | 76 | #endif |
78 | } | 77 | } |
79 | 78 | ||
80 | #define FACTORY(T) \ | 79 | #define FACTORY(T) \ |
81 | static QWidget *new##T( bool maximized ) { \ | 80 | static QWidget *new##T( bool maximized ) { \ |
82 | QWidget *w = new T( 0, 0, QWidget::WDestructiveClose | QWidget::WGroupLeader ); \ | 81 | QWidget *w = new T( 0, 0, QWidget::WDestructiveClose | QWidget::WGroupLeader ); \ |
83 | if ( maximized ) { \ | 82 | if ( maximized ) { \ |
84 | if ( qApp->desktop()->width() <= 350 ) { \ | 83 | if ( qApp->desktop()->width() <= 350 ) { \ |
85 | w->showMaximized(); \ | 84 | w->showMaximized(); \ |
86 | } else { \ | 85 | } else { \ |
87 | w->resize( QSize( 300, 300 ) ); \ | 86 | w->resize( QSize( 300, 300 ) ); \ |
88 | } \ | 87 | } \ |
89 | } \ | 88 | } \ |
90 | w->show(); \ | 89 | w->show(); \ |
91 | return w; \ | 90 | return w; \ |
92 | } | 91 | } |
93 | 92 | ||
94 | 93 | ||
95 | #ifdef SINGLE_APP | 94 | #ifdef SINGLE_APP |
96 | #define APP(a,b,c,d) FACTORY(b) | 95 | #define APP(a,b,c,d) FACTORY(b) |
97 | #include "apps.h" | 96 | #include "apps.h" |
98 | #undef APP | 97 | #undef APP |
99 | #endif // SINGLE_APP | 98 | #endif // SINGLE_APP |
100 | 99 | ||
101 | static Global::Command builtins[] = { | 100 | static Global::Command builtins[] = { |
102 | 101 | ||
103 | #ifdef SINGLE_APP | 102 | #ifdef SINGLE_APP |
104 | #define APP(a,b,c,d) { a, new##b, c, d }, | 103 | #define APP(a,b,c,d) { a, new##b, c, d }, |
105 | #include "apps.h" | 104 | #include "apps.h" |
106 | #undef APP | 105 | #undef APP |
107 | #endif | 106 | #endif |
108 | 107 | ||
109 | /* FIXME defines need to be defined*/ | 108 | /* FIXME defines need to be defined*/ |
110 | #if !defined(OPIE_NO_BUILTIN_CALIBRATE) | 109 | #if !defined(OPIE_NO_BUILTIN_CALIBRATE) |
111 | { "calibrate", calibrate, 1, 0 }, // No tr | 110 | { "calibrate", calibrate, 1, 0 }, // No tr |
112 | #endif | 111 | #endif |
113 | #if !defined(OPIE_NO_BUILTIN_SHUTDOWN) | 112 | #if !defined(OPIE_NO_BUILTIN_SHUTDOWN) |
114 | { "shutdown", Global::shutdown, 1, 0 }, // No tr | 113 | { "shutdown", Global::shutdown, 1, 0 }, // No tr |
115 | // { "run", run, 1, 0 }, // No tr | 114 | // { "run", run, 1, 0 }, // No tr |
116 | #endif | 115 | #endif |
117 | 116 | ||
118 | { 0, calibrate,0, 0 }, | 117 | { 0, calibrate,0, 0 }, |
119 | }; | 118 | }; |
120 | 119 | ||
121 | 120 | ||
122 | //--------------------------------------------------------------------------- | 121 | //--------------------------------------------------------------------------- |
123 | 122 | ||
124 | 123 | ||
125 | //=========================================================================== | 124 | //=========================================================================== |
126 | 125 | ||
127 | Server::Server() : | 126 | Server::Server() : |
128 | QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), | 127 | QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), |
129 | qcopBridge( 0 ), | 128 | qcopBridge( 0 ), |
130 | transferServer( 0 ), | 129 | transferServer( 0 ), |
131 | packageHandler( 0 ), | 130 | packageHandler( 0 ), |
132 | syncDialog( 0 ) | 131 | syncDialog( 0 ) |
133 | { | 132 | { |
134 | Global::setBuiltinCommands(builtins); | 133 | Global::setBuiltinCommands(builtins); |
135 | 134 | ||
136 | tid_xfer = 0; | 135 | tid_xfer = 0; |
137 | /* ### FIXME ### */ | 136 | /* ### FIXME ### */ |
138 | /* tid_today = startTimer(3600*2*1000);*/ | 137 | /* tid_today = startTimer(3600*2*1000);*/ |
139 | last_today_show = QDate::currentDate(); | 138 | last_today_show = QDate::currentDate(); |
140 | 139 | ||
141 | #if 0 | 140 | #if 0 |
142 | tsmMonitor = new TempScreenSaverMode(); | 141 | tsmMonitor = new TempScreenSaverMode(); |
143 | connect( tsmMonitor, SIGNAL(forceSuspend()), qApp, SIGNAL(power()) ); | 142 | connect( tsmMonitor, SIGNAL(forceSuspend()), qApp, SIGNAL(power()) ); |
144 | #endif | 143 | #endif |
145 | 144 | ||
146 | serverGui = new Launcher; | 145 | serverGui = new Launcher; |
147 | serverGui->createGUI(); | 146 | serverGui->createGUI(); |
148 | 147 | ||
149 | docList = new DocumentList( serverGui ); | 148 | docList = new DocumentList( serverGui ); |
150 | appLauncher = new AppLauncher(this); | 149 | appLauncher = new AppLauncher(this); |
151 | connect(appLauncher, SIGNAL(launched(int, const QString &)), this, SLOT(applicationLaunched(int, const QString &)) ); | 150 | connect(appLauncher, SIGNAL(launched(int, const QString &)), this, SLOT(applicationLaunched(int, const QString &)) ); |
152 | connect(appLauncher, SIGNAL(terminated(int, const QString &)), this, SLOT(applicationTerminated(int, const QString &)) ); | 151 | connect(appLauncher, SIGNAL(terminated(int, const QString &)), this, SLOT(applicationTerminated(int, const QString &)) ); |
153 | connect(appLauncher, SIGNAL(connected(const QString &)), this, SLOT(applicationConnected(const QString &)) ); | 152 | connect(appLauncher, SIGNAL(connected(const QString &)), this, SLOT(applicationConnected(const QString &)) ); |
154 | 153 | ||
155 | storage = new StorageInfo( this ); | 154 | storage = new StorageInfo( this ); |
156 | connect( storage, SIGNAL(disksChanged()), this, SLOT(storageChanged()) ); | 155 | connect( storage, SIGNAL(disksChanged()), this, SLOT(storageChanged()) ); |
157 | 156 | ||
158 | // start services | 157 | // start services |
159 | startTransferServer(); | 158 | startTransferServer(); |
160 | (void) new IrServer( this ); | 159 | (void) new IrServer( this ); |
161 | 160 | ||
162 | packageHandler = new PackageHandler( this ); | 161 | packageHandler = new PackageHandler( this ); |
163 | connect(qApp, SIGNAL(activate(const Opie::ODeviceButton*,bool)), | 162 | connect(qApp, SIGNAL(activate(const Opie::ODeviceButton*,bool)), |
164 | this,SLOT(activate(const Opie::ODeviceButton*,bool))); | 163 | this,SLOT(activate(const Opie::ODeviceButton*,bool))); |
165 | 164 | ||
166 | setGeometry( -10, -10, 9, 9 ); | 165 | setGeometry( -10, -10, 9, 9 ); |
167 | 166 | ||
168 | QCopChannel *channel = new QCopChannel("QPE/System", this); | 167 | QCopChannel *channel = new QCopChannel("QPE/System", this); |
169 | connect(channel, SIGNAL(received(const QCString &, const QByteArray &)), | 168 | connect(channel, SIGNAL(received(const QCString &, const QByteArray &)), |
170 | this, SLOT(systemMsg(const QCString &, const QByteArray &)) ); | 169 | this, SLOT(systemMsg(const QCString &, const QByteArray &)) ); |
171 | 170 | ||
172 | QCopChannel *tbChannel = new QCopChannel( "QPE/TaskBar", this ); | 171 | QCopChannel *tbChannel = new QCopChannel( "QPE/TaskBar", this ); |
173 | connect( tbChannel, SIGNAL(received(const QCString&, const QByteArray&)), | 172 | connect( tbChannel, SIGNAL(received(const QCString&, const QByteArray&)), |
174 | this, SLOT(receiveTaskBar(const QCString&, const QByteArray&)) ); | 173 | this, SLOT(receiveTaskBar(const QCString&, const QByteArray&)) ); |
175 | 174 | ||
176 | connect( qApp, SIGNAL(prepareForRestart()), this, SLOT(terminateServers()) ); | 175 | connect( qApp, SIGNAL(prepareForRestart()), this, SLOT(terminateServers()) ); |
177 | connect( qApp, SIGNAL(timeChanged()), this, SLOT(pokeTimeMonitors()) ); | 176 | connect( qApp, SIGNAL(timeChanged()), this, SLOT(pokeTimeMonitors()) ); |
178 | 177 | ||
179 | preloadApps(); | 178 | preloadApps(); |
180 | } | 179 | } |
181 | 180 | ||
182 | void Server::show() | 181 | void Server::show() |
183 | { | 182 | { |
184 | ServerApplication::login(TRUE); | 183 | ServerApplication::login(TRUE); |
185 | QWidget::show(); | 184 | QWidget::show(); |
186 | } | 185 | } |
187 | 186 | ||
188 | Server::~Server() | 187 | Server::~Server() |
189 | { | 188 | { |
190 | serverGui->destroyGUI(); | 189 | serverGui->destroyGUI(); |
191 | delete docList; | 190 | delete docList; |
192 | delete qcopBridge; | 191 | delete qcopBridge; |
193 | delete transferServer; | 192 | delete transferServer; |
194 | delete serverGui; | 193 | delete serverGui; |
195 | #if 0 | 194 | #if 0 |
196 | delete tsmMonitor; | 195 | delete tsmMonitor; |
197 | #endif | 196 | #endif |
198 | } | 197 | } |
199 | 198 | ||
200 | static bool hasVisibleWindow(const QString& clientname, bool partial) | 199 | static bool hasVisibleWindow(const QString& clientname, bool partial) |
201 | { | 200 | { |
202 | #ifdef QWS | 201 | #ifdef QWS |
203 | const QList<QWSWindow> &list = qwsServer->clientWindows(); | 202 | const QList<QWSWindow> &list = qwsServer->clientWindows(); |
204 | QWSWindow* w; | 203 | QWSWindow* w; |
205 | for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { | 204 | for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { |
206 | if ( w->client()->identity() == clientname ) { | 205 | if ( w->client()->identity() == clientname ) { |
207 | if ( partial && !w->isFullyObscured() ) | 206 | if ( partial && !w->isFullyObscured() ) |
208 | return TRUE; | 207 | return TRUE; |
209 | if ( !partial && !w->isFullyObscured() && !w->isPartiallyObscured() ) { | 208 | if ( !partial && !w->isFullyObscured() && !w->isPartiallyObscured() ) { |
210 | # if QT_VERSION < 0x030000 | 209 | # if QT_VERSION < 0x030000 |
211 | QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect, | 210 | QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect, |
212 | QSize(qt_screen->width(),qt_screen->height()) ); | 211 | QSize(qt_screen->width(),qt_screen->height()) ); |
213 | # else | 212 | # else |
214 | QRect mwr = qt_maxWindowRect; | 213 | QRect mwr = qt_maxWindowRect; |
215 | # endif | 214 | # endif |
216 | if ( mwr.contains(w->requested().boundingRect()) ) | 215 | if ( mwr.contains(w->requested().boundingRect()) ) |
217 | return TRUE; | 216 | return TRUE; |
218 | } | 217 | } |
219 | } | 218 | } |
220 | } | 219 | } |
221 | #endif | 220 | #endif |
222 | return FALSE; | 221 | return FALSE; |
223 | } | 222 | } |
224 | 223 | ||
225 | void Server::activate(const Opie::ODeviceButton* button, bool held) | 224 | void Server::activate(const Opie::ODeviceButton* button, bool held) |
226 | { | 225 | { |
227 | Global::terminateBuiltin("calibrate"); // No tr | 226 | Global::terminateBuiltin("calibrate"); // No tr |
228 | Opie::OQCopMessage om; | 227 | Opie::OQCopMessage om; |
229 | if ( held ) { | 228 | if ( held ) { |
230 | om = button->heldAction(); | 229 | om = button->heldAction(); |
231 | } else { | 230 | } else { |
232 | om = button->pressedAction(); | 231 | om = button->pressedAction(); |
233 | } | 232 | } |
234 | 233 | ||
235 | if ( om.channel() != "ignore" ) | 234 | if ( om.channel() != "ignore" ) |
236 | om.send(); | 235 | om.send(); |
237 | 236 | ||
238 | // A button with no action defined, will return a null ServiceRequest. Don't attempt | 237 | // A button with no action defined, will return a null ServiceRequest. Don't attempt |
239 | // to send/do anything with this as it will crash | 238 | // to send/do anything with this as it will crash |
240 | /* ### FIXME */ | 239 | /* ### FIXME */ |
241 | #if 0 | 240 | #if 0 |
242 | if ( !sr.isNull() ) { | 241 | if ( !sr.isNull() ) { |
243 | QString app = sr.app(); | 242 | QString app = sr.app(); |
244 | bool vis = hasVisibleWindow(app, app != "qpe"); | 243 | bool vis = hasVisibleWindow(app, app != "qpe"); |
245 | if ( sr.message() == "raise()" && vis ) { | 244 | if ( sr.message() == "raise()" && vis ) { |
246 | sr.setMessage("nextView()"); | 245 | sr.setMessage("nextView()"); |
247 | } else { | 246 | } else { |
248 | // "back door" | 247 | // "back door" |
249 | sr << (int)vis; | 248 | sr << (int)vis; |
250 | } | 249 | } |
251 | 250 | ||
252 | sr.send(); | 251 | sr.send(); |
253 | } | 252 | } |
254 | #endif | 253 | #endif |
255 | } | 254 | } |
256 | 255 | ||
257 | 256 | ||
258 | #ifdef Q_WS_QWS | 257 | #ifdef Q_WS_QWS |
259 | 258 | ||
260 | 259 | ||
261 | typedef struct KeyOverride { | 260 | typedef struct KeyOverride { |
262 | ushort scan_code; | 261 | ushort scan_code; |
263 | QWSServer::KeyMap map; | 262 | QWSServer::KeyMap map; |
264 | }; | 263 | }; |
265 | 264 | ||
266 | 265 | ||
267 | static const KeyOverride jp109keys[] = { | 266 | static const KeyOverride jp109keys[] = { |
268 | { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } }, | 267 | { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } }, |
269 | { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } }, | 268 | { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } }, |
270 | { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } }, | 269 | { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } }, |
271 | { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } }, | 270 | { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } }, |
272 | { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } }, | 271 | { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } }, |
273 | { 0x0b, { Qt::Key_0, '0' , 0xffff , 0xffff } }, | 272 | { 0x0b, { Qt::Key_0, '0' , 0xffff , 0xffff } }, |
274 | { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } }, | 273 | { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } }, |
275 | { 0x0d, { Qt::Key_AsciiCircum,'^' , '~' , '^' - 64 } }, | 274 | { 0x0d, { Qt::Key_AsciiCircum,'^' , '~' , '^' - 64 } }, |
276 | { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } }, | 275 | { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } }, |
277 | { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '[' - 64 } }, | 276 | { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '[' - 64 } }, |
278 | { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } }, | 277 | { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } }, |
279 | { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } }, | 278 | { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } }, |
280 | { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff , 0xffff , 0xffff } }, | 279 | { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff , 0xffff , 0xffff } }, |
281 | { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } }, | 280 | { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } }, |
282 | { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff , 0xffff , 0xffff } }, | 281 | { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff , 0xffff , 0xffff } }, |
283 | { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } }, | 282 | { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } }, |
284 | { 0x79, { Qt::Key_Henkan, 0xffff , 0xffff , 0xffff } }, | 283 | { 0x79, { Qt::Key_Henkan, 0xffff , 0xffff , 0xffff } }, |
285 | { 0x7b, { Qt::Key_Muhenkan, 0xffff , 0xffff , 0xffff } }, | 284 | { 0x7b, { Qt::Key_Muhenkan, 0xffff , 0xffff , 0xffff } }, |
286 | { 0x7d, { Qt::Key_yen, 0x00a5 , '|' , 0xffff } }, | 285 | { 0x7d, { Qt::Key_yen, 0x00a5 , '|' , 0xffff } }, |
287 | { 0x00, { 0, 0xffff , 0xffff , 0xffff } } | 286 | { 0x00, { 0, 0xffff , 0xffff , 0xffff } } |
288 | }; | 287 | }; |
diff --git a/core/launcher/shutdownimpl.cpp b/core/launcher/shutdownimpl.cpp index 899d9ac..f43a2a3 100644 --- a/core/launcher/shutdownimpl.cpp +++ b/core/launcher/shutdownimpl.cpp | |||
@@ -1,174 +1,173 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of 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 | 20 | ||
21 | #include "shutdownimpl.h" | 21 | #include "shutdownimpl.h" |
22 | 22 | ||
23 | #include <qpe/global.h> | 23 | #include <qpe/global.h> |
24 | #include <qpe/qcopenvelope_qws.h> | 24 | #include <qpe/qcopenvelope_qws.h> |
25 | 25 | ||
26 | #include <qtimer.h> | 26 | #include <qtimer.h> |
27 | #include <qprogressbar.h> | 27 | #include <qprogressbar.h> |
28 | #include <qpushbutton.h> | 28 | #include <qpushbutton.h> |
29 | #include <qbuttongroup.h> | 29 | #include <qbuttongroup.h> |
30 | #include <qlabel.h> | 30 | #include <qlabel.h> |
31 | #include <qlayout.h> | 31 | #include <qlayout.h> |
32 | #include <qpalette.h> | ||
33 | 32 | ||
34 | 33 | ||
35 | static void changeButtonColor ( QPushButton *btn, const QColor &col ) | 34 | static void changeButtonColor ( QPushButton *btn, const QColor &col ) |
36 | { | 35 | { |
37 | QPalette pal = btn-> palette ( ); | 36 | QPalette pal = btn-> palette ( ); |
38 | 37 | ||
39 | pal. setColor ( QPalette::Active, QColorGroup::Button, col ); | 38 | pal. setColor ( QPalette::Active, QColorGroup::Button, col ); |
40 | pal. setColor ( QPalette::Disabled, QColorGroup::Button, col ); | 39 | pal. setColor ( QPalette::Disabled, QColorGroup::Button, col ); |
41 | pal. setColor ( QPalette::Inactive, QColorGroup::Button, col ); | 40 | pal. setColor ( QPalette::Inactive, QColorGroup::Button, col ); |
42 | 41 | ||
43 | btn-> setPalette ( pal ); | 42 | btn-> setPalette ( pal ); |
44 | } | 43 | } |
45 | 44 | ||
46 | 45 | ||
47 | ShutdownImpl::ShutdownImpl( QWidget* parent, const char *name, WFlags fl ) | 46 | ShutdownImpl::ShutdownImpl( QWidget* parent, const char *name, WFlags fl ) |
48 | : QWidget ( parent, name, fl ) | 47 | : QWidget ( parent, name, fl ) |
49 | { | 48 | { |
50 | setCaption ( tr( "Shutdown..." ) ); | 49 | setCaption ( tr( "Shutdown..." ) ); |
51 | 50 | ||
52 | QVBoxLayout *vbox = new QVBoxLayout ( this ); | 51 | QVBoxLayout *vbox = new QVBoxLayout ( this ); |
53 | vbox-> setSpacing ( 3 ); | 52 | vbox-> setSpacing ( 3 ); |
54 | vbox-> setMargin ( 6 ); | 53 | vbox-> setMargin ( 6 ); |
55 | 54 | ||
56 | QButtonGroup *btngrp = new QButtonGroup ( this ); | 55 | QButtonGroup *btngrp = new QButtonGroup ( this ); |
57 | 56 | ||
58 | btngrp-> setTitle ( tr( "Terminate" ) ); | 57 | btngrp-> setTitle ( tr( "Terminate" ) ); |
59 | btngrp-> setColumnLayout ( 0, Qt::Vertical ); | 58 | btngrp-> setColumnLayout ( 0, Qt::Vertical ); |
60 | btngrp-> layout ( ) -> setSpacing ( 0 ); | 59 | btngrp-> layout ( ) -> setSpacing ( 0 ); |
61 | btngrp-> layout ( ) -> setMargin ( 0 ); | 60 | btngrp-> layout ( ) -> setMargin ( 0 ); |
62 | 61 | ||
63 | QGridLayout *grid = new QGridLayout ( btngrp-> layout ( ) ); | 62 | QGridLayout *grid = new QGridLayout ( btngrp-> layout ( ) ); |
64 | grid-> setAlignment ( Qt::AlignTop ); | 63 | grid-> setAlignment ( Qt::AlignTop ); |
65 | grid-> setSpacing ( 3 ); | 64 | grid-> setSpacing ( 3 ); |
66 | grid-> setMargin ( 7 ); | 65 | grid-> setMargin ( 7 ); |
67 | 66 | ||
68 | QPushButton *quit = new QPushButton ( tr( "Terminate Opie" ), btngrp, "quit" ); | 67 | QPushButton *quit = new QPushButton ( tr( "Terminate Opie" ), btngrp, "quit" ); |
69 | changeButtonColor ( quit, QColor ( 236, 236, 179 ) ); | 68 | changeButtonColor ( quit, QColor ( 236, 236, 179 ) ); |
70 | btngrp-> insert ( quit, 4 ); | 69 | btngrp-> insert ( quit, 4 ); |
71 | grid-> addWidget ( quit, 1, 1 ); | 70 | grid-> addWidget ( quit, 1, 1 ); |
72 | 71 | ||
73 | QPushButton *reboot = new QPushButton ( tr( "Reboot" ), btngrp, "reboot" ); | 72 | QPushButton *reboot = new QPushButton ( tr( "Reboot" ), btngrp, "reboot" ); |
74 | changeButtonColor ( reboot, QColor( 236, 183, 181 ) ); | 73 | changeButtonColor ( reboot, QColor( 236, 183, 181 ) ); |
75 | btngrp-> insert ( reboot, 2 ); | 74 | btngrp-> insert ( reboot, 2 ); |
76 | grid-> addWidget( reboot, 1, 0 ); | 75 | grid-> addWidget( reboot, 1, 0 ); |
77 | 76 | ||
78 | QPushButton *restart = new QPushButton ( tr( "Restart Opie" ), btngrp, "restart" ); | 77 | QPushButton *restart = new QPushButton ( tr( "Restart Opie" ), btngrp, "restart" ); |
79 | changeButtonColor ( restart, QColor( 236, 236, 179 ) ); | 78 | changeButtonColor ( restart, QColor( 236, 236, 179 ) ); |
80 | btngrp-> insert ( restart, 3 ); | 79 | btngrp-> insert ( restart, 3 ); |
81 | grid-> addWidget ( restart, 0, 1 ); | 80 | grid-> addWidget ( restart, 0, 1 ); |
82 | 81 | ||
83 | QPushButton *shutdown = new QPushButton( tr( "Shutdown" ), btngrp, "shutdown" ); | 82 | QPushButton *shutdown = new QPushButton( tr( "Shutdown" ), btngrp, "shutdown" ); |
84 | changeButtonColor ( shutdown, QColor( 236, 183, 181 ) ); | 83 | changeButtonColor ( shutdown, QColor( 236, 183, 181 ) ); |
85 | btngrp-> insert ( shutdown, 1 ); | 84 | btngrp-> insert ( shutdown, 1 ); |
86 | grid-> addWidget ( shutdown, 0, 0 ); | 85 | grid-> addWidget ( shutdown, 0, 0 ); |
87 | 86 | ||
88 | vbox-> addWidget ( btngrp ); | 87 | vbox-> addWidget ( btngrp ); |
89 | 88 | ||
90 | m_info = new QLabel ( this, "info" ); | 89 | m_info = new QLabel ( this, "info" ); |
91 | m_info-> setText( tr( "<p>\n" "These termination options are provided primarily for use while developing and testing the Opie system. In a normal environment, these concepts are unnecessary." ) ); | 90 | m_info-> setText( tr( "<p>\n" "These termination options are provided primarily for use while developing and testing the Opie system. In a normal environment, these concepts are unnecessary." ) ); |
92 | vbox-> addWidget ( m_info ); | 91 | vbox-> addWidget ( m_info ); |
93 | 92 | ||
94 | m_progress = new QProgressBar ( this, "progressBar" ); | 93 | m_progress = new QProgressBar ( this, "progressBar" ); |
95 | m_progress-> setFrameShape ( QProgressBar::Panel ); | 94 | m_progress-> setFrameShape ( QProgressBar::Panel ); |
96 | m_progress-> setFrameShadow ( QProgressBar::Sunken ); | 95 | m_progress-> setFrameShadow ( QProgressBar::Sunken ); |
97 | m_progress-> setTotalSteps ( 20 ); | 96 | m_progress-> setTotalSteps ( 20 ); |
98 | m_progress-> setIndicatorFollowsStyle ( false ); | 97 | m_progress-> setIndicatorFollowsStyle ( false ); |
99 | vbox-> addWidget ( m_progress ); | 98 | vbox-> addWidget ( m_progress ); |
100 | 99 | ||
101 | vbox-> addItem ( new QSpacerItem ( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); | 100 | vbox-> addItem ( new QSpacerItem ( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); |
102 | 101 | ||
103 | QPushButton *cancel = new QPushButton ( tr( "Cancel" ), this, "cancel" ); | 102 | QPushButton *cancel = new QPushButton ( tr( "Cancel" ), this, "cancel" ); |
104 | changeButtonColor ( cancel, QColor( 181, 222, 178 ) ); | 103 | changeButtonColor ( cancel, QColor( 181, 222, 178 ) ); |
105 | cancel-> setDefault ( true ); | 104 | cancel-> setDefault ( true ); |
106 | cancel-> setSizePolicy ( QSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Expanding, cancel-> sizePolicy ( ). hasHeightForWidth ( ) ) ); | 105 | cancel-> setSizePolicy ( QSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Expanding, cancel-> sizePolicy ( ). hasHeightForWidth ( ) ) ); |
107 | vbox-> addWidget ( cancel ); | 106 | vbox-> addWidget ( cancel ); |
108 | 107 | ||
109 | m_timer = new QTimer ( this ); | 108 | m_timer = new QTimer ( this ); |
110 | connect ( m_timer, SIGNAL( timeout ( ) ), this, SLOT( timeout ( ) ) ); | 109 | connect ( m_timer, SIGNAL( timeout ( ) ), this, SLOT( timeout ( ) ) ); |
111 | 110 | ||
112 | connect ( btngrp, SIGNAL( clicked ( int ) ), this, SLOT( buttonClicked ( int ) ) ); | 111 | connect ( btngrp, SIGNAL( clicked ( int ) ), this, SLOT( buttonClicked ( int ) ) ); |
113 | connect ( cancel, SIGNAL( clicked ( ) ), this, SLOT( cancelClicked ( ) ) ); | 112 | connect ( cancel, SIGNAL( clicked ( ) ), this, SLOT( cancelClicked ( ) ) ); |
114 | 113 | ||
115 | m_progress-> hide ( ); | 114 | m_progress-> hide ( ); |
116 | Global::hideInputMethod ( ); | 115 | Global::hideInputMethod ( ); |
117 | } | 116 | } |
118 | 117 | ||
119 | void ShutdownImpl::buttonClicked ( int b ) | 118 | void ShutdownImpl::buttonClicked ( int b ) |
120 | { | 119 | { |
121 | m_counter = 0; | 120 | m_counter = 0; |
122 | 121 | ||
123 | switch ( b ) { | 122 | switch ( b ) { |
124 | case 1: | 123 | case 1: |
125 | m_operation = ShutdownSystem; | 124 | m_operation = ShutdownSystem; |
126 | break; | 125 | break; |
127 | case 2: | 126 | case 2: |
128 | m_operation = RebootSystem; | 127 | m_operation = RebootSystem; |
129 | break; | 128 | break; |
130 | case 3: | 129 | case 3: |
131 | m_operation = RestartDesktop; | 130 | m_operation = RestartDesktop; |
132 | break; | 131 | break; |
133 | case 4: | 132 | case 4: |
134 | m_operation = TerminateDesktop; | 133 | m_operation = TerminateDesktop; |
135 | break; | 134 | break; |
136 | } | 135 | } |
137 | m_info-> hide ( ); | 136 | m_info-> hide ( ); |
138 | m_progress-> show ( ); | 137 | m_progress-> show ( ); |
139 | m_timer-> start ( 300 ); | 138 | m_timer-> start ( 300 ); |
140 | timeout ( ); | 139 | timeout ( ); |
141 | } | 140 | } |
142 | 141 | ||
143 | void ShutdownImpl::cancelClicked ( ) | 142 | void ShutdownImpl::cancelClicked ( ) |
144 | { | 143 | { |
145 | m_progress-> hide ( ); | 144 | m_progress-> hide ( ); |
146 | m_info-> show ( ); | 145 | m_info-> show ( ); |
147 | if ( m_timer-> isActive ( ) ) | 146 | if ( m_timer-> isActive ( ) ) |
148 | m_timer-> stop ( ); | 147 | m_timer-> stop ( ); |
149 | else | 148 | else |
150 | close ( ); | 149 | close ( ); |
151 | } | 150 | } |
152 | 151 | ||
153 | void ShutdownImpl::timeout ( ) | 152 | void ShutdownImpl::timeout ( ) |
154 | { | 153 | { |
155 | if ( ( m_counter += 2 ) > m_progress-> totalSteps ( ) ) { | 154 | if ( ( m_counter += 2 ) > m_progress-> totalSteps ( ) ) { |
156 | m_progress-> hide ( ); | 155 | m_progress-> hide ( ); |
157 | m_timer-> stop ( ); | 156 | m_timer-> stop ( ); |
158 | emit shutdown ( m_operation ); | 157 | emit shutdown ( m_operation ); |
159 | } | 158 | } |
160 | else | 159 | else |
161 | m_progress-> setProgress ( m_counter ); | 160 | m_progress-> setProgress ( m_counter ); |
162 | } | 161 | } |
163 | 162 | ||
164 | void ShutdownImpl::hide ( ) | 163 | void ShutdownImpl::hide ( ) |
165 | { | 164 | { |
166 | if ( isVisible ( )) { | 165 | if ( isVisible ( )) { |
167 | // hack - shutdown is a launcher dialog, but treated like a standalone app | 166 | // hack - shutdown is a launcher dialog, but treated like a standalone app |
168 | QCopEnvelope e( "QPE/System", "closing(QString)" ); | 167 | QCopEnvelope e( "QPE/System", "closing(QString)" ); |
169 | e << QString ( "shutdown" ); | 168 | e << QString ( "shutdown" ); |
170 | 169 | ||
171 | } | 170 | } |
172 | QWidget::hide ( ); | 171 | QWidget::hide ( ); |
173 | } | 172 | } |
174 | 173 | ||
diff --git a/core/launcher/stabmon.cpp b/core/launcher/stabmon.cpp index 4e5f290..f2d694b 100644 --- a/core/launcher/stabmon.cpp +++ b/core/launcher/stabmon.cpp | |||
@@ -1,102 +1,101 @@ | |||
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 | 20 | ||
21 | 21 | ||
22 | #include "stabmon.h" | 22 | #include "stabmon.h" |
23 | 23 | ||
24 | #ifdef QWS | 24 | #ifdef QWS |
25 | #include <qtopia/qcopenvelope_qws.h> | 25 | #include <qtopia/qcopenvelope_qws.h> |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #include <qfile.h> | 28 | #include <qfile.h> |
29 | #include <qcstring.h> | ||
30 | 29 | ||
31 | #include <sys/stat.h> | 30 | #include <sys/stat.h> |
32 | #if defined(Q_OS_LINUX) || defined(_OS_LINUX_) | 31 | #if defined(Q_OS_LINUX) || defined(_OS_LINUX_) |
33 | #include <unistd.h> | 32 | #include <unistd.h> |
34 | #endif | 33 | #endif |
35 | #include <stdlib.h> | 34 | #include <stdlib.h> |
36 | 35 | ||
37 | SysFileMonitor::SysFileMonitor(QObject* parent) : | 36 | SysFileMonitor::SysFileMonitor(QObject* parent) : |
38 | QObject(parent) | 37 | QObject(parent) |
39 | { | 38 | { |
40 | startTimer(2000); | 39 | startTimer(2000); |
41 | } | 40 | } |
42 | 41 | ||
43 | const char * stab0 = "/var/run/stab"; | 42 | const char * stab0 = "/var/run/stab"; |
44 | const char * stab1 = "/var/state/pcmcia/stab"; | 43 | const char * stab1 = "/var/state/pcmcia/stab"; |
45 | const char * stab2 = "/var/lib/pcmcia/stab"; | 44 | const char * stab2 = "/var/lib/pcmcia/stab"; |
46 | 45 | ||
47 | void SysFileMonitor::timerEvent(QTimerEvent*) | 46 | void SysFileMonitor::timerEvent(QTimerEvent*) |
48 | { | 47 | { |
49 | struct stat s; | 48 | struct stat s; |
50 | 49 | ||
51 | static const char * tab [] = { | 50 | static const char * tab [] = { |
52 | stab0, | 51 | stab0, |
53 | stab1, | 52 | stab1, |
54 | stab2 | 53 | stab2 |
55 | }; | 54 | }; |
56 | static const int nstab = sizeof(tab)/sizeof(const char *); | 55 | static const int nstab = sizeof(tab)/sizeof(const char *); |
57 | static int last[nstab]; | 56 | static int last[nstab]; |
58 | 57 | ||
59 | bool ch = FALSE; | 58 | bool ch = FALSE; |
60 | for ( int i=0; i<nstab; i++ ) { | 59 | for ( int i=0; i<nstab; i++ ) { |
61 | if ( ::stat(tab[i], &s)==0 && (long)s.st_mtime != last[i] ) { | 60 | if ( ::stat(tab[i], &s)==0 && (long)s.st_mtime != last[i] ) { |
62 | last[i] = (long)s.st_mtime; | 61 | last[i] = (long)s.st_mtime; |
63 | ch=TRUE; | 62 | ch=TRUE; |
64 | } | 63 | } |
65 | if ( ch ) { | 64 | if ( ch ) { |
66 | #ifndef QT_NO_COP | 65 | #ifndef QT_NO_COP |
67 | QCopEnvelope("QPE/Card", "stabChanged()" ); | 66 | QCopEnvelope("QPE/Card", "stabChanged()" ); |
68 | #endif | 67 | #endif |
69 | break; | 68 | break; |
70 | } | 69 | } |
71 | } | 70 | } |
72 | 71 | ||
73 | // st_size is no use, it's 0 for /proc/mounts too. Read it all. | 72 | // st_size is no use, it's 0 for /proc/mounts too. Read it all. |
74 | static int mtabSize = 0; | 73 | static int mtabSize = 0; |
75 | QFile f( "/proc/mounts" ); | 74 | QFile f( "/proc/mounts" ); |
76 | if ( f.open(IO_ReadOnly) ) { | 75 | if ( f.open(IO_ReadOnly) ) { |
77 | #if 0 | 76 | #if 0 |
78 | // readAll does not work correctly on sequential devices (as eg. /proc files) | 77 | // readAll does not work correctly on sequential devices (as eg. /proc files) |
79 | QByteArray ba = f.readAll(); | 78 | QByteArray ba = f.readAll(); |
80 | if ( (int)ba.size() != mtabSize ) { | 79 | if ( (int)ba.size() != mtabSize ) { |
81 | mtabSize = (int)ba.size(); | 80 | mtabSize = (int)ba.size(); |
82 | #ifndef QT_NO_COP | 81 | #ifndef QT_NO_COP |
83 | QCopEnvelope("QPE/Card", "mtabChanged()" ); | 82 | QCopEnvelope("QPE/Card", "mtabChanged()" ); |
84 | #endif | 83 | #endif |
85 | } | 84 | } |
86 | #else | 85 | #else |
87 | QString s; | 86 | QString s; |
88 | while( !f.atEnd() ) { | 87 | while( !f.atEnd() ) { |
89 | QString tmp; | 88 | QString tmp; |
90 | f.readLine( tmp, 1024 ); | 89 | f.readLine( tmp, 1024 ); |
91 | s += tmp; | 90 | s += tmp; |
92 | } | 91 | } |
93 | if ( (int)s.length() != mtabSize ) { | 92 | if ( (int)s.length() != mtabSize ) { |
94 | mtabSize = (int)s.length(); | 93 | mtabSize = (int)s.length(); |
95 | #ifndef QT_NO_COP | 94 | #ifndef QT_NO_COP |
96 | QCopEnvelope("QPE/Card", "mtabChanged()" ); | 95 | QCopEnvelope("QPE/Card", "mtabChanged()" ); |
97 | #endif | 96 | #endif |
98 | } | 97 | } |
99 | #endif | 98 | #endif |
100 | } | 99 | } |
101 | } | 100 | } |
102 | 101 | ||
diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp index c199063..f3a7651 100644 --- a/core/launcher/startmenu.cpp +++ b/core/launcher/startmenu.cpp | |||
@@ -1,295 +1,291 @@ | |||
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 | 20 | ||
21 | // TODO. During startup | 21 | // TODO. During startup |
22 | // Launcher::typeAdded | 22 | // Launcher::typeAdded |
23 | // is called for each new tab and calls then each time the refresh of startmenu | 23 | // is called for each new tab and calls then each time the refresh of startmenu |
24 | // suboptimal | 24 | // suboptimal |
25 | 25 | ||
26 | #define INCLUDE_MENUITEM_DEF | 26 | #define INCLUDE_MENUITEM_DEF |
27 | 27 | ||
28 | #include "startmenu.h" | 28 | #include "startmenu.h" |
29 | 29 | ||
30 | #include <qtopia/qpeapplication.h> | 30 | #include <qtopia/qpeapplication.h> |
31 | #include <qtopia/config.h> | 31 | #include <qtopia/config.h> |
32 | #include <qtopia/applnk.h> | ||
33 | #include <qtopia/global.h> | ||
34 | #include <qtopia/resource.h> | 32 | #include <qtopia/resource.h> |
35 | #include <qtopia/mimetype.h> | 33 | #include <qtopia/mimetype.h> |
36 | #include <qtopia/qlibrary.h> | 34 | #include <qtopia/qlibrary.h> |
37 | 35 | ||
38 | #include <qdict.h> | ||
39 | #include <qdir.h> | ||
40 | //#include <qpainter.h> | 36 | //#include <qpainter.h> |
41 | 37 | ||
42 | //#include <stdlib.h> | 38 | //#include <stdlib.h> |
43 | 39 | ||
44 | 40 | ||
45 | #define APPLNK_ID_OFFSET 250 | 41 | #define APPLNK_ID_OFFSET 250 |
46 | #define NO_ID -1 | 42 | #define NO_ID -1 |
47 | 43 | ||
48 | 44 | ||
49 | void StartPopupMenu::keyPressEvent( QKeyEvent *e ) | 45 | void StartPopupMenu::keyPressEvent( QKeyEvent *e ) |
50 | { | 46 | { |
51 | if ( e->key() == Key_F33 || e->key() == Key_Space ) { | 47 | if ( e->key() == Key_F33 || e->key() == Key_Space ) { |
52 | // "OK" button, little hacky | 48 | // "OK" button, little hacky |
53 | QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0); | 49 | QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0); |
54 | QPopupMenu::keyPressEvent( &ke ); | 50 | QPopupMenu::keyPressEvent( &ke ); |
55 | } else { | 51 | } else { |
56 | QPopupMenu::keyPressEvent( e ); | 52 | QPopupMenu::keyPressEvent( e ); |
57 | } | 53 | } |
58 | } | 54 | } |
59 | 55 | ||
60 | //--------------------------------------------------------------------------- | 56 | //--------------------------------------------------------------------------- |
61 | 57 | ||
62 | StartMenu::StartMenu(QWidget *parent) : QLabel( parent ) | 58 | StartMenu::StartMenu(QWidget *parent) : QLabel( parent ) |
63 | { | 59 | { |
64 | startButtonPixmap = "go"; // No tr | 60 | startButtonPixmap = "go"; // No tr |
65 | 61 | ||
66 | int sz = AppLnk::smallIconSize()+3; | 62 | int sz = AppLnk::smallIconSize()+3; |
67 | QPixmap pm; | 63 | QPixmap pm; |
68 | pm.convertFromImage(Resource::loadImage( startButtonPixmap).smoothScale( sz,sz) ); | 64 | pm.convertFromImage(Resource::loadImage( startButtonPixmap).smoothScale( sz,sz) ); |
69 | setPixmap(pm); | 65 | setPixmap(pm); |
70 | setFocusPolicy( NoFocus ); | 66 | setFocusPolicy( NoFocus ); |
71 | 67 | ||
72 | useWidePopupMenu = true; | 68 | useWidePopupMenu = true; |
73 | launchMenu = 0; | 69 | launchMenu = 0; |
74 | refreshMenu(); | 70 | refreshMenu(); |
75 | } | 71 | } |
76 | 72 | ||
77 | 73 | ||
78 | void StartMenu::mousePressEvent( QMouseEvent * ) | 74 | void StartMenu::mousePressEvent( QMouseEvent * ) |
79 | { | 75 | { |
80 | launch(); | 76 | launch(); |
81 | } | 77 | } |
82 | 78 | ||
83 | 79 | ||
84 | StartMenu::~StartMenu() | 80 | StartMenu::~StartMenu() |
85 | { | 81 | { |
86 | clearApplets(); | 82 | clearApplets(); |
87 | } | 83 | } |
88 | 84 | ||
89 | void StartMenu::createMenu() | 85 | void StartMenu::createMenu() |
90 | { | 86 | { |
91 | clearApplets(); | 87 | clearApplets(); |
92 | delete launchMenu; | 88 | delete launchMenu; |
93 | 89 | ||
94 | launchMenu = new StartPopupMenu( this ); | 90 | launchMenu = new StartPopupMenu( this ); |
95 | loadMenu( launchMenu ); | 91 | loadMenu( launchMenu ); |
96 | loadApplets(); | 92 | loadApplets(); |
97 | 93 | ||
98 | bool result = currentItem || menuApplets.count(); | 94 | bool result = currentItem || menuApplets.count(); |
99 | if ( result ) | 95 | if ( result ) |
100 | connect( launchMenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); | 96 | connect( launchMenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); |
101 | } | 97 | } |
102 | 98 | ||
103 | void StartMenu::refreshMenu() | 99 | void StartMenu::refreshMenu() |
104 | { | 100 | { |
105 | Config cfg( "StartMenu" ); | 101 | Config cfg( "StartMenu" ); |
106 | cfg.setGroup( "Menu" ); | 102 | cfg.setGroup( "Menu" ); |
107 | bool ltabs = cfg.readBoolEntry( "LauncherTabs", TRUE ); | 103 | bool ltabs = cfg.readBoolEntry( "LauncherTabs", TRUE ); |
108 | bool lot = cfg.readBoolEntry( "LauncherOther", TRUE ); | 104 | bool lot = cfg.readBoolEntry( "LauncherOther", TRUE ); |
109 | useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE ); | 105 | useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE ); |
110 | 106 | ||
111 | if ( launchMenu && !(ltabs || lot) ) return; // nothing to do | 107 | if ( launchMenu && !(ltabs || lot) ) return; // nothing to do |
112 | 108 | ||
113 | createMenu(); | 109 | createMenu(); |
114 | } | 110 | } |
115 | 111 | ||
116 | void StartMenu::itemSelected( int id ) | 112 | void StartMenu::itemSelected( int id ) |
117 | { | 113 | { |
118 | if ( id == NO_ID ) return; | 114 | if ( id == NO_ID ) return; |
119 | 115 | ||
120 | if ( id < 0 ) { | 116 | if ( id < 0 ) { |
121 | MenuApplet *applet = menuApplets.find( id ); | 117 | MenuApplet *applet = menuApplets.find( id ); |
122 | if ( applet ) { | 118 | if ( applet ) { |
123 | applet->iface->activated(); | 119 | applet->iface->activated(); |
124 | } | 120 | } |
125 | } else if ( id >= APPLNK_ID_OFFSET ) { | 121 | } else if ( id >= APPLNK_ID_OFFSET ) { |
126 | AppLnk * appLnk = appLnks.find( id ); | 122 | AppLnk * appLnk = appLnks.find( id ); |
127 | if ( appLnk ) { | 123 | if ( appLnk ) { |
128 | appLnk->execute(); | 124 | appLnk->execute(); |
129 | } | 125 | } |
130 | } else { | 126 | } else { |
131 | QString *tabName = tabNames.find( id ); | 127 | QString *tabName = tabNames.find( id ); |
132 | if ( tabName ) { | 128 | if ( tabName ) { |
133 | emit tabSelected( *tabName ); | 129 | emit tabSelected( *tabName ); |
134 | } | 130 | } |
135 | } | 131 | } |
136 | } | 132 | } |
137 | 133 | ||
138 | void StartMenu::createAppEntry( QPopupMenu *menu, QDir dir, QString file ) | 134 | void StartMenu::createAppEntry( QPopupMenu *menu, QDir dir, QString file ) |
139 | { | 135 | { |
140 | if ( file.right(8) == ".desktop" ) { | 136 | if ( file.right(8) == ".desktop" ) { |
141 | AppLnk* applnk = new AppLnk( dir.path() + "/" + file ); | 137 | AppLnk* applnk = new AppLnk( dir.path() + "/" + file ); |
142 | if ( !applnk->isValid() ) { | 138 | if ( !applnk->isValid() ) { |
143 | delete applnk; | 139 | delete applnk; |
144 | return; | 140 | return; |
145 | } | 141 | } |
146 | 142 | ||
147 | if ( applnk->type() == "Separator" ) { // No tr | 143 | if ( applnk->type() == "Separator" ) { // No tr |
148 | menu->insertSeparator(); | 144 | menu->insertSeparator(); |
149 | delete applnk; | 145 | delete applnk; |
150 | } else { | 146 | } else { |
151 | QPixmap test; | 147 | QPixmap test; |
152 | QImage img = Resource::loadImage( applnk->icon() ); | 148 | QImage img = Resource::loadImage( applnk->icon() ); |
153 | if(!img.isNull() ) | 149 | if(!img.isNull() ) |
154 | test.convertFromImage( | 150 | test.convertFromImage( |
155 | img.smoothScale( | 151 | img.smoothScale( |
156 | AppLnk::smallIconSize(), AppLnk::smallIconSize() ), 0 ); | 152 | AppLnk::smallIconSize(), AppLnk::smallIconSize() ), 0 ); |
157 | 153 | ||
158 | menu->insertItem( test, applnk->name(), | 154 | menu->insertItem( test, applnk->name(), |
159 | currentItem + APPLNK_ID_OFFSET ); | 155 | currentItem + APPLNK_ID_OFFSET ); |
160 | appLnks.insert( currentItem + APPLNK_ID_OFFSET, applnk ); | 156 | appLnks.insert( currentItem + APPLNK_ID_OFFSET, applnk ); |
161 | currentItem++; | 157 | currentItem++; |
162 | } | 158 | } |
163 | } | 159 | } |
164 | 160 | ||
165 | } | 161 | } |
166 | 162 | ||
167 | void StartMenu::createDirEntry( QPopupMenu *menu, QDir dir, QString file, bool lot ) | 163 | void StartMenu::createDirEntry( QPopupMenu *menu, QDir dir, QString file, bool lot ) |
168 | { | 164 | { |
169 | // do some sanity checks and collect information | 165 | // do some sanity checks and collect information |
170 | 166 | ||
171 | if ( file == "." || file == ".." ) return; | 167 | if ( file == "." || file == ".." ) return; |
172 | 168 | ||
173 | Config cfg( dir.path() + "/" + file + "/.directory", Config::File ); | 169 | Config cfg( dir.path() + "/" + file + "/.directory", Config::File ); |
174 | if ( !cfg.isValid() ) return; | 170 | if ( !cfg.isValid() ) return; |
175 | 171 | ||
176 | QString name = cfg.readEntry( "Name" ); | 172 | QString name = cfg.readEntry( "Name" ); |
177 | QString icon = cfg.readEntry( "Icon" ); | 173 | QString icon = cfg.readEntry( "Icon" ); |
178 | if ( !name || !icon ) return; | 174 | if ( !name || !icon ) return; |
179 | 175 | ||
180 | QDir subdir = QDir( dir ); | 176 | QDir subdir = QDir( dir ); |
181 | subdir.cd( file ); | 177 | subdir.cd( file ); |
182 | subdir.setFilter( QDir::Files ); | 178 | subdir.setFilter( QDir::Files ); |
183 | subdir.setNameFilter( "*.desktop" ); | 179 | subdir.setNameFilter( "*.desktop" ); |
184 | // we don' t show the menu if there are no entries | 180 | // we don' t show the menu if there are no entries |
185 | // perhaps one should check if there exist subsubdirs with entries... | 181 | // perhaps one should check if there exist subsubdirs with entries... |
186 | if ( subdir.entryList().isEmpty() ) return; | 182 | if ( subdir.entryList().isEmpty() ) return; |
187 | 183 | ||
188 | // checks were ok | 184 | // checks were ok |
189 | 185 | ||
190 | QPixmap test; | 186 | QPixmap test; |
191 | test.convertFromImage( Resource::loadImage( icon ).smoothScale( | 187 | test.convertFromImage( Resource::loadImage( icon ).smoothScale( |
192 | AppLnk::smallIconSize(), AppLnk::smallIconSize() ), 0 ); | 188 | AppLnk::smallIconSize(), AppLnk::smallIconSize() ), 0 ); |
193 | 189 | ||
194 | if ( useWidePopupMenu ) { | 190 | if ( useWidePopupMenu ) { |
195 | // generate submenu | 191 | // generate submenu |
196 | QPopupMenu *submenu = new QPopupMenu( menu ); | 192 | QPopupMenu *submenu = new QPopupMenu( menu ); |
197 | connect( submenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); | 193 | connect( submenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); |
198 | menu->insertItem( test, name, submenu, NO_ID ); | 194 | menu->insertItem( test, name, submenu, NO_ID ); |
199 | 195 | ||
200 | // ltabs is true cause else we wouldn't stuck around.. | 196 | // ltabs is true cause else we wouldn't stuck around.. |
201 | createMenuEntries( submenu, subdir, true, lot ); | 197 | createMenuEntries( submenu, subdir, true, lot ); |
202 | } else { | 198 | } else { |
203 | // no submenus - just bring corresponding tab to front | 199 | // no submenus - just bring corresponding tab to front |
204 | menu->insertItem( test, name, currentItem ); | 200 | menu->insertItem( test, name, currentItem ); |
205 | tabNames.insert( currentItem, new QString( file ) ); | 201 | tabNames.insert( currentItem, new QString( file ) ); |
206 | currentItem++; | 202 | currentItem++; |
207 | } | 203 | } |
208 | } | 204 | } |
209 | 205 | ||
210 | void StartMenu::createMenuEntries( QPopupMenu *menu, QDir dir, bool ltabs, bool lot ) | 206 | void StartMenu::createMenuEntries( QPopupMenu *menu, QDir dir, bool ltabs, bool lot ) |
211 | { | 207 | { |
212 | if ( lot ) { | 208 | if ( lot ) { |
213 | dir.setFilter( QDir::Files ); | 209 | dir.setFilter( QDir::Files ); |
214 | dir.setNameFilter( "*.desktop" ); | 210 | dir.setNameFilter( "*.desktop" ); |
215 | QStringList files = dir.entryList(); | 211 | QStringList files = dir.entryList(); |
216 | files.sort(); | 212 | files.sort(); |
217 | 213 | ||
218 | for ( QStringList::Iterator it = files.begin(); it != files.end(); it++ ) { | 214 | for ( QStringList::Iterator it = files.begin(); it != files.end(); it++ ) { |
219 | createAppEntry( menu, dir, *it ); | 215 | createAppEntry( menu, dir, *it ); |
220 | } | 216 | } |
221 | } | 217 | } |
222 | if ( ltabs ) { | 218 | if ( ltabs ) { |
223 | dir.setNameFilter( "*" ); | 219 | dir.setNameFilter( "*" ); |
224 | dir.setFilter( QDir::Dirs ); | 220 | dir.setFilter( QDir::Dirs ); |
225 | QStringList dirs = dir.entryList(); | 221 | QStringList dirs = dir.entryList(); |
226 | dirs.sort(); | 222 | dirs.sort(); |
227 | 223 | ||
228 | for ( QStringList::Iterator it = dirs.begin(); it != dirs.end(); it++ ) { | 224 | for ( QStringList::Iterator it = dirs.begin(); it != dirs.end(); it++ ) { |
229 | createDirEntry( menu, dir, *it, lot ); | 225 | createDirEntry( menu, dir, *it, lot ); |
230 | } | 226 | } |
231 | } | 227 | } |
232 | } | 228 | } |
233 | 229 | ||
234 | bool StartMenu::loadMenu( QPopupMenu *menu ) | 230 | bool StartMenu::loadMenu( QPopupMenu *menu ) |
235 | { | 231 | { |
236 | Config cfg("StartMenu"); | 232 | Config cfg("StartMenu"); |
237 | cfg.setGroup("Menu"); | 233 | cfg.setGroup("Menu"); |
238 | 234 | ||
239 | bool ltabs = cfg.readBoolEntry("LauncherTabs", TRUE); | 235 | bool ltabs = cfg.readBoolEntry("LauncherTabs", TRUE); |
240 | bool lot = cfg.readBoolEntry("LauncherOther", TRUE); | 236 | bool lot = cfg.readBoolEntry("LauncherOther", TRUE); |
241 | useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE ); | 237 | useWidePopupMenu = cfg.readBoolEntry( "LauncherSubPopup", TRUE ); |
242 | bool sepfirst = !ltabs && !lot; | 238 | bool sepfirst = !ltabs && !lot; |
243 | 239 | ||
244 | currentItem = 0; | 240 | currentItem = 0; |
245 | launchMenu->clear(); | 241 | launchMenu->clear(); |
246 | 242 | ||
247 | appLnks.setAutoDelete( true ); | 243 | appLnks.setAutoDelete( true ); |
248 | tabNames.setAutoDelete( true ); | 244 | tabNames.setAutoDelete( true ); |
249 | appLnks.clear(); | 245 | appLnks.clear(); |
250 | tabNames.clear(); | 246 | tabNames.clear(); |
251 | appLnks.setAutoDelete( false ); | 247 | appLnks.setAutoDelete( false ); |
252 | tabNames.setAutoDelete( false ); | 248 | tabNames.setAutoDelete( false ); |
253 | 249 | ||
254 | QDir dir( MimeType::appsFolderName(), QString::null, QDir::Name ); | 250 | QDir dir( MimeType::appsFolderName(), QString::null, QDir::Name ); |
255 | createMenuEntries( menu, dir, ltabs, lot ); | 251 | createMenuEntries( menu, dir, ltabs, lot ); |
256 | 252 | ||
257 | if ( !menu->count() ) sepfirst = TRUE; | 253 | if ( !menu->count() ) sepfirst = TRUE; |
258 | 254 | ||
259 | launchMenu->setName( sepfirst ? "accessories" : "accessories_need_sep" ); // No tr | 255 | launchMenu->setName( sepfirst ? "accessories" : "accessories_need_sep" ); // No tr |
260 | 256 | ||
261 | return currentItem; | 257 | return currentItem; |
262 | } | 258 | } |
263 | 259 | ||
264 | 260 | ||
265 | void StartMenu::launch() | 261 | void StartMenu::launch() |
266 | { | 262 | { |
267 | int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height(); | 263 | int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height(); |
268 | 264 | ||
269 | if ( launchMenu->isVisible() ) | 265 | if ( launchMenu->isVisible() ) |
270 | launchMenu->hide(); | 266 | launchMenu->hide(); |
271 | else | 267 | else |
272 | launchMenu->popup( QPoint( 1, y ) ); | 268 | launchMenu->popup( QPoint( 1, y ) ); |
273 | } | 269 | } |
274 | 270 | ||
275 | 271 | ||
276 | 272 | ||
277 | 273 | ||
278 | static int compareAppletPositions(const void *b, const void *a) | 274 | static int compareAppletPositions(const void *b, const void *a) |
279 | { | 275 | { |
280 | const MenuApplet* aa = *(const MenuApplet**)a; | 276 | const MenuApplet* aa = *(const MenuApplet**)a; |
281 | const MenuApplet* ab = *(const MenuApplet**)b; | 277 | const MenuApplet* ab = *(const MenuApplet**)b; |
282 | int d = aa->iface->position() - ab->iface->position(); | 278 | int d = aa->iface->position() - ab->iface->position(); |
283 | if ( d ) return d; | 279 | if ( d ) return d; |
284 | return QString::compare(aa->library->library(),ab->library->library()); | 280 | return QString::compare(aa->library->library(),ab->library->library()); |
285 | } | 281 | } |
286 | 282 | ||
287 | void StartMenu::clearApplets() | 283 | void StartMenu::clearApplets() |
288 | { | 284 | { |
289 | if ( launchMenu ) | 285 | if ( launchMenu ) |
290 | launchMenu-> hide(); | 286 | launchMenu-> hide(); |
291 | 287 | ||
292 | for ( QIntDictIterator<MenuApplet> it( menuApplets ); it.current(); ++it ) { | 288 | for ( QIntDictIterator<MenuApplet> it( menuApplets ); it.current(); ++it ) { |
293 | MenuApplet *applet = it.current(); | 289 | MenuApplet *applet = it.current(); |
294 | if ( launchMenu ) { | 290 | if ( launchMenu ) { |
295 | launchMenu->removeItem( applet-> id ); | 291 | launchMenu->removeItem( applet-> id ); |
diff --git a/core/launcher/syncdialog.cpp b/core/launcher/syncdialog.cpp index 6f6c781..4a2b8ff 100644 --- a/core/launcher/syncdialog.cpp +++ b/core/launcher/syncdialog.cpp | |||
@@ -1,184 +1,183 @@ | |||
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 | 20 | ||
21 | #include "syncdialog.h" | 21 | #include "syncdialog.h" |
22 | 22 | ||
23 | #include <qtopia/resource.h> | 23 | #include <qtopia/resource.h> |
24 | 24 | ||
25 | #include <qimage.h> | ||
26 | #include <qpainter.h> | 25 | #include <qpainter.h> |
27 | #include <qapplication.h> | 26 | #include <qapplication.h> |
28 | #include <qpushbutton.h> | 27 | #include <qpushbutton.h> |
29 | #include <qfile.h> | 28 | #include <qfile.h> |
30 | 29 | ||
31 | 30 | ||
32 | SyncDialog::SyncDialog( QWidget *parent, const QString &w ) | 31 | SyncDialog::SyncDialog( QWidget *parent, const QString &w ) |
33 | : QDialog( parent, "SyncDialog", FALSE, WStyle_Tool | WStyle_Customize | | 32 | : QDialog( parent, "SyncDialog", FALSE, WStyle_Tool | WStyle_Customize | |
34 | WStyle_StaysOnTop ), what(w), nextPt(0), rev(FALSE), hideDot(TRUE) | 33 | WStyle_StaysOnTop ), what(w), nextPt(0), rev(FALSE), hideDot(TRUE) |
35 | { | 34 | { |
36 | QFont f( font() ); | 35 | QFont f( font() ); |
37 | f.setPointSize( 16 ); | 36 | f.setPointSize( 16 ); |
38 | setFont(f); | 37 | setFont(f); |
39 | 38 | ||
40 | loadPath(); | 39 | loadPath(); |
41 | 40 | ||
42 | QSize ds = qApp->desktop()->size(); | 41 | QSize ds = qApp->desktop()->size(); |
43 | setGeometry( 0, 0, ds.width(), ds.height() ); | 42 | setGeometry( 0, 0, ds.width(), ds.height() ); |
44 | img = Resource::loadImage( "SyncScreen" ); | 43 | img = Resource::loadImage( "SyncScreen" ); |
45 | if ( img.width() > ds.width() || img.height() > ds.height() ) { | 44 | if ( img.width() > ds.width() || img.height() > ds.height() ) { |
46 | path = scalePath( path, ds.width(), img.width(), ds.height(), img.height() ); | 45 | path = scalePath( path, ds.width(), img.width(), ds.height(), img.height() ); |
47 | img = img.smoothScale( ds.width(), ds.height() ); | 46 | img = img.smoothScale( ds.width(), ds.height() ); |
48 | } | 47 | } |
49 | dot = Resource::loadImage( "syncdot" ); | 48 | dot = Resource::loadImage( "syncdot" ); |
50 | setBackgroundColor( white ); | 49 | setBackgroundColor( white ); |
51 | 50 | ||
52 | QPushButton *pb = new QPushButton( tr("Abort"), this, "CancelSync" ); | 51 | QPushButton *pb = new QPushButton( tr("Abort"), this, "CancelSync" ); |
53 | QSize bs = pb->sizeHint(); | 52 | QSize bs = pb->sizeHint(); |
54 | bs.rwidth() += 10; | 53 | bs.rwidth() += 10; |
55 | bs.rheight() += 5; | 54 | bs.rheight() += 5; |
56 | pb->setGeometry( (ds.width()-bs.width())/2, 4*ds.height()/5, | 55 | pb->setGeometry( (ds.width()-bs.width())/2, 4*ds.height()/5, |
57 | bs.width(), bs.height() ); | 56 | bs.width(), bs.height() ); |
58 | connect( pb, SIGNAL(clicked()), this, SIGNAL(cancel()) ); | 57 | connect( pb, SIGNAL(clicked()), this, SIGNAL(cancel()) ); |
59 | 58 | ||
60 | if ( path.count() >= 2 ) { | 59 | if ( path.count() >= 2 ) { |
61 | path = generatePath( path, 8 ); | 60 | path = generatePath( path, 8 ); |
62 | startTimer( 200 ); | 61 | startTimer( 200 ); |
63 | } | 62 | } |
64 | } | 63 | } |
65 | 64 | ||
66 | void SyncDialog::paintEvent( QPaintEvent *pe ) | 65 | void SyncDialog::paintEvent( QPaintEvent *pe ) |
67 | { | 66 | { |
68 | QPainter p(this ); | 67 | QPainter p(this ); |
69 | p.setClipRect( pe->rect() ); | 68 | p.setClipRect( pe->rect() ); |
70 | int ox = (width() - img.width())/2; | 69 | int ox = (width() - img.width())/2; |
71 | int oy = (height() - img.height())/2; | 70 | int oy = (height() - img.height())/2; |
72 | 71 | ||
73 | QRect ir = QRect(ox, oy, img.width(), img.height()) & pe->rect(); | 72 | QRect ir = QRect(ox, oy, img.width(), img.height()) & pe->rect(); |
74 | 73 | ||
75 | if ( ir.isValid() ) | 74 | if ( ir.isValid() ) |
76 | p.drawImage( ir.x(), ir.y(), img, ir.x()-ox, ir.y()-oy, ir.width(), ir.height() ); | 75 | p.drawImage( ir.x(), ir.y(), img, ir.x()-ox, ir.y()-oy, ir.width(), ir.height() ); |
77 | 76 | ||
78 | QString syncMsg = tr("Syncing:"); | 77 | QString syncMsg = tr("Syncing:"); |
79 | p.setPen( black ); | 78 | p.setPen( black ); |
80 | QRect r( 0, 0, width()/2-5, QMAX(oy,80) ); | 79 | QRect r( 0, 0, width()/2-5, QMAX(oy,80) ); |
81 | p.drawText( r, AlignRight | AlignVCenter, syncMsg ); | 80 | p.drawText( r, AlignRight | AlignVCenter, syncMsg ); |
82 | r.moveBy( width()/2, 0 ); | 81 | r.moveBy( width()/2, 0 ); |
83 | QFont f( font() ); | 82 | QFont f( font() ); |
84 | f.setWeight( QFont::Bold ); | 83 | f.setWeight( QFont::Bold ); |
85 | p.setFont( f ); | 84 | p.setFont( f ); |
86 | p.drawText( r, AlignLeft | AlignVCenter, what ); | 85 | p.drawText( r, AlignLeft | AlignVCenter, what ); |
87 | 86 | ||
88 | if ( !hideDot ) | 87 | if ( !hideDot ) |
89 | p.drawImage( ox+path[nextPt].x()-dot.width()/2, oy+path[nextPt].y()-dot.height()/2, dot ); | 88 | p.drawImage( ox+path[nextPt].x()-dot.width()/2, oy+path[nextPt].y()-dot.height()/2, dot ); |
90 | } | 89 | } |
91 | 90 | ||
92 | void SyncDialog::timerEvent( QTimerEvent * ) | 91 | void SyncDialog::timerEvent( QTimerEvent * ) |
93 | { | 92 | { |
94 | int ox = (width() - img.width())/2; | 93 | int ox = (width() - img.width())/2; |
95 | int oy = (height() - img.height())/2; | 94 | int oy = (height() - img.height())/2; |
96 | int oldPt = nextPt; | 95 | int oldPt = nextPt; |
97 | 96 | ||
98 | if ( !rev ) { | 97 | if ( !rev ) { |
99 | nextPt++; | 98 | nextPt++; |
100 | if ( nextPt == (int)path.count() ) { | 99 | if ( nextPt == (int)path.count() ) { |
101 | nextPt -= 2; | 100 | nextPt -= 2; |
102 | rev = TRUE; | 101 | rev = TRUE; |
103 | } | 102 | } |
104 | } else { | 103 | } else { |
105 | nextPt--; | 104 | nextPt--; |
106 | if ( nextPt < 0 ) { | 105 | if ( nextPt < 0 ) { |
107 | nextPt = 1; | 106 | nextPt = 1; |
108 | rev = FALSE; | 107 | rev = FALSE; |
109 | } | 108 | } |
110 | } | 109 | } |
111 | 110 | ||
112 | hideDot = FALSE; | 111 | hideDot = FALSE; |
113 | repaint( ox+path[nextPt].x()-dot.width()/2, oy+path[nextPt].y()-dot.height()/2, | 112 | repaint( ox+path[nextPt].x()-dot.width()/2, oy+path[nextPt].y()-dot.height()/2, |
114 | dot.width(), dot.height() ); | 113 | dot.width(), dot.height() ); |
115 | hideDot = TRUE; | 114 | hideDot = TRUE; |
116 | repaint( ox+path[oldPt].x()-dot.width()/2, oy+path[oldPt].y()-dot.height()/2, | 115 | repaint( ox+path[oldPt].x()-dot.width()/2, oy+path[oldPt].y()-dot.height()/2, |
117 | dot.width(), dot.height() ); | 116 | dot.width(), dot.height() ); |
118 | } | 117 | } |
119 | 118 | ||
120 | void SyncDialog::loadPath() | 119 | void SyncDialog::loadPath() |
121 | { | 120 | { |
122 | QString pfile = Resource::findPixmap( "syncdot" ); | 121 | QString pfile = Resource::findPixmap( "syncdot" ); |
123 | if ( pfile.isEmpty() ) | 122 | if ( pfile.isEmpty() ) |
124 | return; | 123 | return; |
125 | int dp = pfile.findRev('.'); | 124 | int dp = pfile.findRev('.'); |
126 | pfile.replace( dp, pfile.length()-dp, ".path" ); | 125 | pfile.replace( dp, pfile.length()-dp, ".path" ); |
127 | 126 | ||
128 | int count = 0; | 127 | int count = 0; |
129 | QFile file( pfile ); | 128 | QFile file( pfile ); |
130 | if ( file.open( IO_ReadOnly ) ) { | 129 | if ( file.open( IO_ReadOnly ) ) { |
131 | QString line; | 130 | QString line; |
132 | while ( file.readLine( line, 256 ) > 0 ) { | 131 | while ( file.readLine( line, 256 ) > 0 ) { |
133 | int x, y; | 132 | int x, y; |
134 | if ( sscanf( line.latin1(), "%d %d", &x, &y ) == 2 ) { | 133 | if ( sscanf( line.latin1(), "%d %d", &x, &y ) == 2 ) { |
135 | path.resize( count+1 ); | 134 | path.resize( count+1 ); |
136 | path[count++] = QPoint(x, y); | 135 | path[count++] = QPoint(x, y); |
137 | } | 136 | } |
138 | } | 137 | } |
139 | } | 138 | } |
140 | } | 139 | } |
141 | 140 | ||
142 | QPointArray SyncDialog::scalePath( const QPointArray &pa, int xn, int xd, int yn, int yd ) | 141 | QPointArray SyncDialog::scalePath( const QPointArray &pa, int xn, int xd, int yn, int yd ) |
143 | { | 142 | { |
144 | QPointArray sa( pa.size() ); | 143 | QPointArray sa( pa.size() ); |
145 | 144 | ||
146 | for ( unsigned i = 0; i < pa.count(); i++ ) { | 145 | for ( unsigned i = 0; i < pa.count(); i++ ) { |
147 | int x = xn * pa[int(i)].x() / xd; | 146 | int x = xn * pa[int(i)].x() / xd; |
148 | int y = yn * pa[int(i)].y() / yd; | 147 | int y = yn * pa[int(i)].y() / yd; |
149 | sa[int(i)] = QPoint( x, y ); | 148 | sa[int(i)] = QPoint( x, y ); |
150 | } | 149 | } |
151 | 150 | ||
152 | return sa; | 151 | return sa; |
153 | } | 152 | } |
154 | 153 | ||
155 | QPointArray SyncDialog::generatePath( const QPointArray &pa, int dist ) | 154 | QPointArray SyncDialog::generatePath( const QPointArray &pa, int dist ) |
156 | { | 155 | { |
157 | if ( pa.count() < 2 ) | 156 | if ( pa.count() < 2 ) |
158 | return pa; | 157 | return pa; |
159 | 158 | ||
160 | QPointArray fa; | 159 | QPointArray fa; |
161 | int count = 0; | 160 | int count = 0; |
162 | fa.resize( count+1 ); | 161 | fa.resize( count+1 ); |
163 | fa[count++] = pa[0]; | 162 | fa[count++] = pa[0]; |
164 | for ( unsigned i = 0; i < pa.count()-1; i++ ) { | 163 | for ( unsigned i = 0; i < pa.count()-1; i++ ) { |
165 | int x1 = pa[int(i)].x(); | 164 | int x1 = pa[int(i)].x(); |
166 | int y1 = pa[int(i)].y(); | 165 | int y1 = pa[int(i)].y(); |
167 | int x2 = pa[int(i+1)].x(); | 166 | int x2 = pa[int(i+1)].x(); |
168 | int y2 = pa[int(i+1)].y(); | 167 | int y2 = pa[int(i+1)].y(); |
169 | int dx = x2 - x1; | 168 | int dx = x2 - x1; |
170 | int dy = y2 - y1; | 169 | int dy = y2 - y1; |
171 | int pts = (QMAX(QABS(dx),QABS(dy)) + dist/2 )/dist; | 170 | int pts = (QMAX(QABS(dx),QABS(dy)) + dist/2 )/dist; |
172 | for ( int j = 1; j < pts; j++ ) { | 171 | for ( int j = 1; j < pts; j++ ) { |
173 | int x = j * dx / pts; | 172 | int x = j * dx / pts; |
174 | int y = j * dy / pts; | 173 | int y = j * dy / pts; |
175 | fa.resize( count+1 ); | 174 | fa.resize( count+1 ); |
176 | fa[count++] = pa[int(i)] + QPoint( x, y ); | 175 | fa[count++] = pa[int(i)] + QPoint( x, y ); |
177 | } | 176 | } |
178 | fa.resize( count+1 ); | 177 | fa.resize( count+1 ); |
179 | fa[count++] = pa[int(i+1)]; | 178 | fa[count++] = pa[int(i+1)]; |
180 | } | 179 | } |
181 | 180 | ||
182 | return fa; | 181 | return fa; |
183 | } | 182 | } |
184 | 183 | ||
diff --git a/core/launcher/systray.cpp b/core/launcher/systray.cpp index 691f6b8..6cc1446 100644 --- a/core/launcher/systray.cpp +++ b/core/launcher/systray.cpp | |||
@@ -1,154 +1,152 @@ | |||
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 | 20 | ||
21 | #include <qtopia/qpeapplication.h> | 21 | #include <qtopia/qpeapplication.h> |
22 | #include <qtopia/qlibrary.h> | 22 | #include <qtopia/qlibrary.h> |
23 | #include <qtopia/config.h> | 23 | #include <qtopia/config.h> |
24 | 24 | ||
25 | #include <qlayout.h> | 25 | #include <qlayout.h> |
26 | #include <qdir.h> | 26 | #include <qdir.h> |
27 | #include <qmessagebox.h> | ||
28 | #include <qtranslator.h> | ||
29 | 27 | ||
30 | #include "systray.h" | 28 | #include "systray.h" |
31 | 29 | ||
32 | #include <stdlib.h> | 30 | #include <stdlib.h> |
33 | 31 | ||
34 | /* ### Single build floppies ### */ | 32 | /* ### Single build floppies ### */ |
35 | #if 0 | 33 | #if 0 |
36 | #ifdef QT_NO_COMPONENTS | 34 | #ifdef QT_NO_COMPONENTS |
37 | #include "../plugins/applets/clockapplet/clockappletimpl.h" | 35 | #include "../plugins/applets/clockapplet/clockappletimpl.h" |
38 | #endif | 36 | #endif |
39 | #endif | 37 | #endif |
40 | 38 | ||
41 | SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0) | 39 | SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0) |
42 | { | 40 | { |
43 | //setFrameStyle( QFrame::Panel | QFrame::Sunken ); | 41 | //setFrameStyle( QFrame::Panel | QFrame::Sunken ); |
44 | loadApplets(); | 42 | loadApplets(); |
45 | } | 43 | } |
46 | 44 | ||
47 | SysTray::~SysTray() | 45 | SysTray::~SysTray() |
48 | { | 46 | { |
49 | clearApplets(); | 47 | clearApplets(); |
50 | } | 48 | } |
51 | 49 | ||
52 | static int compareAppletPositions(const void *a, const void *b) | 50 | static int compareAppletPositions(const void *a, const void *b) |
53 | { | 51 | { |
54 | const TaskbarApplet* aa = *(const TaskbarApplet**)a; | 52 | const TaskbarApplet* aa = *(const TaskbarApplet**)a; |
55 | const TaskbarApplet* ab = *(const TaskbarApplet**)b; | 53 | const TaskbarApplet* ab = *(const TaskbarApplet**)b; |
56 | int d = ab->iface->position() - aa->iface->position(); | 54 | int d = ab->iface->position() - aa->iface->position(); |
57 | if ( d ) return d; | 55 | if ( d ) return d; |
58 | return QString::compare(ab->name,aa->name); | 56 | return QString::compare(ab->name,aa->name); |
59 | } | 57 | } |
60 | 58 | ||
61 | void SysTray::loadApplets() | 59 | void SysTray::loadApplets() |
62 | { | 60 | { |
63 | hide(); | 61 | hide(); |
64 | clearApplets(); | 62 | clearApplets(); |
65 | addApplets(); | 63 | addApplets(); |
66 | } | 64 | } |
67 | 65 | ||
68 | void SysTray::clearApplets() | 66 | void SysTray::clearApplets() |
69 | { | 67 | { |
70 | #ifndef QT_NO_COMPONENTS | 68 | #ifndef QT_NO_COMPONENTS |
71 | 69 | ||
72 | /* | 70 | /* |
73 | * Note on clearing. SOme applets delete their | 71 | * Note on clearing. SOme applets delete their |
74 | * applets themselves some don't do it | 72 | * applets themselves some don't do it |
75 | * and on restart this can crash. If we delete it | 73 | * and on restart this can crash. If we delete it |
76 | * here we might end up in a double deletion. We could | 74 | * here we might end up in a double deletion. We could |
77 | * use QGuardedPtr but that would be one QOBject | 75 | * use QGuardedPtr but that would be one QOBject |
78 | * for every applet more but only useful for restart | 76 | * for every applet more but only useful for restart |
79 | */ | 77 | */ |
80 | QValueList<TaskbarApplet>::Iterator mit; | 78 | QValueList<TaskbarApplet>::Iterator mit; |
81 | for ( mit = appletList.begin(); mit != appletList.end(); ++mit ) { | 79 | for ( mit = appletList.begin(); mit != appletList.end(); ++mit ) { |
82 | (*mit).iface->release(); | 80 | (*mit).iface->release(); |
83 | (*mit).library->unload(); | 81 | (*mit).library->unload(); |
84 | delete (*mit).library; | 82 | delete (*mit).library; |
85 | } | 83 | } |
86 | 84 | ||
87 | #endif | 85 | #endif |
88 | appletList.clear(); | 86 | appletList.clear(); |
89 | if ( layout ) | 87 | if ( layout ) |
90 | delete layout; | 88 | delete layout; |
91 | layout = new QHBoxLayout( this, 0, 1 ); | 89 | layout = new QHBoxLayout( this, 0, 1 ); |
92 | layout->setAutoAdd(TRUE); | 90 | layout->setAutoAdd(TRUE); |
93 | } | 91 | } |
94 | 92 | ||
95 | void SysTray::addApplets() | 93 | void SysTray::addApplets() |
96 | { | 94 | { |
97 | hide(); | 95 | hide(); |
98 | #ifndef QT_NO_COMPONENTS | 96 | #ifndef QT_NO_COMPONENTS |
99 | Config cfg( "Taskbar" ); | 97 | Config cfg( "Taskbar" ); |
100 | cfg.setGroup( "Applets" ); | 98 | cfg.setGroup( "Applets" ); |
101 | QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); | 99 | QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); |
102 | 100 | ||
103 | QString lang = getenv( "LANG" ); | 101 | QString lang = getenv( "LANG" ); |
104 | QString path = QPEApplication::qpeDir() + "/plugins/applets"; | 102 | QString path = QPEApplication::qpeDir() + "/plugins/applets"; |
105 | #ifdef Q_OS_MACX | 103 | #ifdef Q_OS_MACX |
106 | QDir dir( path, "lib*.dylib" ); | 104 | QDir dir( path, "lib*.dylib" ); |
107 | #else | 105 | #else |
108 | QDir dir( path, "lib*.so" ); | 106 | QDir dir( path, "lib*.so" ); |
109 | #endif /* Q_OS_MACX */ | 107 | #endif /* Q_OS_MACX */ |
110 | QStringList list = dir.entryList(); | 108 | QStringList list = dir.entryList(); |
111 | QStringList::Iterator it; | 109 | QStringList::Iterator it; |
112 | int napplets=0; | 110 | int napplets=0; |
113 | TaskbarApplet* *applets = new TaskbarApplet*[list.count()]; | 111 | TaskbarApplet* *applets = new TaskbarApplet*[list.count()]; |
114 | for ( it = list.begin(); it != list.end(); ++it ) { | 112 | for ( it = list.begin(); it != list.end(); ++it ) { |
115 | if ( exclude.find( *it ) != exclude.end() ) | 113 | if ( exclude.find( *it ) != exclude.end() ) |
116 | continue; | 114 | continue; |
117 | qWarning( "Found Applet: %s", (*it).latin1() ); | 115 | qWarning( "Found Applet: %s", (*it).latin1() ); |
118 | TaskbarAppletInterface *iface = 0; | 116 | TaskbarAppletInterface *iface = 0; |
119 | QLibrary *lib = new QLibrary( path + "/" + *it ); | 117 | QLibrary *lib = new QLibrary( path + "/" + *it ); |
120 | if (( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { | 118 | if (( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { |
121 | TaskbarApplet *applet = new TaskbarApplet; | 119 | TaskbarApplet *applet = new TaskbarApplet; |
122 | applets[napplets++] = applet; | 120 | applets[napplets++] = applet; |
123 | applet->library = lib; | 121 | applet->library = lib; |
124 | applet->iface = iface; | 122 | applet->iface = iface; |
125 | 123 | ||
126 | QTranslator *trans = new QTranslator(qApp); | 124 | QTranslator *trans = new QTranslator(qApp); |
127 | QString type = (*it).left( (*it).find(".") ); | 125 | QString type = (*it).left( (*it).find(".") ); |
128 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; | 126 | QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; |
129 | if ( trans->load( tfn )) | 127 | if ( trans->load( tfn )) |
130 | qApp->installTranslator( trans ); | 128 | qApp->installTranslator( trans ); |
131 | else | 129 | else |
132 | delete trans; | 130 | delete trans; |
133 | } else { | 131 | } else { |
134 | exclude += *it; | 132 | exclude += *it; |
135 | delete lib; | 133 | delete lib; |
136 | } | 134 | } |
137 | } | 135 | } |
138 | cfg.writeEntry( "ExcludeApplets", exclude, ',' ); | 136 | cfg.writeEntry( "ExcludeApplets", exclude, ',' ); |
139 | qsort(applets,napplets,sizeof(applets[0]),compareAppletPositions); | 137 | qsort(applets,napplets,sizeof(applets[0]),compareAppletPositions); |
140 | while (napplets--) { | 138 | while (napplets--) { |
141 | TaskbarApplet *applet = applets[napplets]; | 139 | TaskbarApplet *applet = applets[napplets]; |
142 | applet->applet = applet->iface->applet( this ); | 140 | applet->applet = applet->iface->applet( this ); |
143 | appletList.append(*applet); | 141 | appletList.append(*applet); |
144 | } | 142 | } |
145 | delete [] applets; | 143 | delete [] applets; |
146 | #else /* ## FIXME single app */ | 144 | #else /* ## FIXME single app */ |
147 | TaskbarApplet * const applet = new TaskbarApplet(); | 145 | TaskbarApplet * const applet = new TaskbarApplet(); |
148 | applet->iface = new ClockAppletImpl(); | 146 | applet->iface = new ClockAppletImpl(); |
149 | applet->applet = applet->iface->applet( this ); | 147 | applet->applet = applet->iface->applet( this ); |
150 | appletList.append( applet ); | 148 | appletList.append( applet ); |
151 | #endif | 149 | #endif |
152 | show(); | 150 | show(); |
153 | } | 151 | } |
154 | 152 | ||
diff --git a/core/launcher/transferserver.cpp b/core/launcher/transferserver.cpp index 8367a62..b998e95 100644 --- a/core/launcher/transferserver.cpp +++ b/core/launcher/transferserver.cpp | |||
@@ -1,316 +1,306 @@ | |||
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 | //#define _XOPEN_SOURCE | 20 | //#define _XOPEN_SOURCE |
21 | 21 | ||
22 | #include <opie2/oglobal.h> | 22 | #include <opie2/oglobal.h> |
23 | #include <qtopia/qpeapplication.h> | ||
24 | 23 | ||
25 | #ifndef Q_OS_WIN32 | 24 | #ifndef Q_OS_WIN32 |
26 | #include <pwd.h> | 25 | #include <pwd.h> |
27 | #include <sys/types.h> | 26 | #include <sys/types.h> |
28 | #include <unistd.h> | 27 | #include <unistd.h> |
29 | #include <stdlib.h> | 28 | #include <stdlib.h> |
30 | #include <time.h> | 29 | #include <time.h> |
31 | 30 | ||
32 | #ifndef Q_OS_MACX | 31 | #ifndef Q_OS_MACX |
33 | #include <shadow.h> | 32 | #include <shadow.h> |
34 | #include <crypt.h> | 33 | #include <crypt.h> |
35 | #endif /* Q_OS_MACX */ | 34 | #endif /* Q_OS_MACX */ |
36 | 35 | ||
37 | #else | 36 | #else |
38 | #include <stdlib.h> | 37 | #include <stdlib.h> |
39 | #include <time.h> | 38 | #include <time.h> |
40 | #endif | 39 | #endif |
41 | 40 | ||
42 | 41 | ||
43 | #if defined(_OS_LINUX_) | 42 | #if defined(_OS_LINUX_) |
44 | #include <shadow.h> | 43 | #include <shadow.h> |
45 | #endif | 44 | #endif |
46 | 45 | ||
47 | #include <qdir.h> | ||
48 | #include <qfile.h> | ||
49 | #include <qtextstream.h> | 46 | #include <qtextstream.h> |
50 | #include <qdatastream.h> | ||
51 | #include <qmessagebox.h> | 47 | #include <qmessagebox.h> |
52 | #include <qstringlist.h> | ||
53 | #include <qfileinfo.h> | ||
54 | #include <qregexp.h> | ||
55 | //#include <qtopia/qcopchannel_qws.h> | 48 | //#include <qtopia/qcopchannel_qws.h> |
56 | #include <qtopia/process.h> | 49 | #include <qtopia/process.h> |
57 | #include <qtopia/global.h> | ||
58 | #include <qtopia/config.h> | ||
59 | #include <qtopia/private/contact.h> | 50 | #include <qtopia/private/contact.h> |
60 | #include <qtopia/quuid.h> | ||
61 | #include <qtopia/version.h> | 51 | #include <qtopia/version.h> |
62 | #ifdef Q_WS_QWS | 52 | #ifdef Q_WS_QWS |
63 | #include <qtopia/qcopenvelope_qws.h> | 53 | #include <qtopia/qcopenvelope_qws.h> |
64 | #endif | 54 | #endif |
65 | 55 | ||
66 | 56 | ||
67 | #include "transferserver.h" | 57 | #include "transferserver.h" |
68 | #include <qtopia/qprocess.h> | 58 | #include <qtopia/qprocess.h> |
69 | 59 | ||
70 | const int block_size = 51200; | 60 | const int block_size = 51200; |
71 | 61 | ||
72 | TransferServer::TransferServer( Q_UINT16 port, QObject *parent, | 62 | TransferServer::TransferServer( Q_UINT16 port, QObject *parent, |
73 | const char* name) | 63 | const char* name) |
74 | : QServerSocket( port, 1, parent, name ) | 64 | : QServerSocket( port, 1, parent, name ) |
75 | { | 65 | { |
76 | connections.setAutoDelete( TRUE ); | 66 | connections.setAutoDelete( TRUE ); |
77 | if ( !ok() ) | 67 | if ( !ok() ) |
78 | qWarning( "Failed to bind to port %d", port ); | 68 | qWarning( "Failed to bind to port %d", port ); |
79 | } | 69 | } |
80 | 70 | ||
81 | void TransferServer::authorizeConnections() | 71 | void TransferServer::authorizeConnections() |
82 | { | 72 | { |
83 | QListIterator<ServerPI> it(connections); | 73 | QListIterator<ServerPI> it(connections); |
84 | while ( it.current() ) { | 74 | while ( it.current() ) { |
85 | if ( !it.current()->verifyAuthorised() ) { | 75 | if ( !it.current()->verifyAuthorised() ) { |
86 | disconnect( it.current(), SIGNAL(connectionClosed(ServerPI *)), this, SLOT( closed(ServerPI *)) ); | 76 | disconnect( it.current(), SIGNAL(connectionClosed(ServerPI *)), this, SLOT( closed(ServerPI *)) ); |
87 | connections.removeRef( it.current() ); | 77 | connections.removeRef( it.current() ); |
88 | } else | 78 | } else |
89 | ++it; | 79 | ++it; |
90 | } | 80 | } |
91 | } | 81 | } |
92 | 82 | ||
93 | void TransferServer::closed(ServerPI *item) | 83 | void TransferServer::closed(ServerPI *item) |
94 | { | 84 | { |
95 | connections.removeRef(item); | 85 | connections.removeRef(item); |
96 | } | 86 | } |
97 | 87 | ||
98 | TransferServer::~TransferServer() | 88 | TransferServer::~TransferServer() |
99 | { | 89 | { |
100 | } | 90 | } |
101 | 91 | ||
102 | void TransferServer::newConnection( int socket ) | 92 | void TransferServer::newConnection( int socket ) |
103 | { | 93 | { |
104 | ServerPI *ptr = new ServerPI( socket, this ); | 94 | ServerPI *ptr = new ServerPI( socket, this ); |
105 | connect( ptr, SIGNAL(connectionClosed(ServerPI *)), this, SLOT( closed(ServerPI *)) ); | 95 | connect( ptr, SIGNAL(connectionClosed(ServerPI *)), this, SLOT( closed(ServerPI *)) ); |
106 | connections.append( ptr ); | 96 | connections.append( ptr ); |
107 | } | 97 | } |
108 | 98 | ||
109 | QString SyncAuthentication::serverId() | 99 | QString SyncAuthentication::serverId() |
110 | { | 100 | { |
111 | Config cfg("Security"); | 101 | Config cfg("Security"); |
112 | cfg.setGroup("Sync"); | 102 | cfg.setGroup("Sync"); |
113 | QString r = cfg.readEntry("serverid"); | 103 | QString r = cfg.readEntry("serverid"); |
114 | 104 | ||
115 | if ( r.isEmpty() ) { | 105 | if ( r.isEmpty() ) { |
116 | r = OGlobal::generateUuid(); | 106 | r = OGlobal::generateUuid(); |
117 | cfg.writeEntry("serverid", r ); | 107 | cfg.writeEntry("serverid", r ); |
118 | } | 108 | } |
119 | return r; | 109 | return r; |
120 | } | 110 | } |
121 | 111 | ||
122 | QString SyncAuthentication::ownerName() | 112 | QString SyncAuthentication::ownerName() |
123 | { | 113 | { |
124 | QString vfilename = Global::applicationFileName("addressbook", | 114 | QString vfilename = Global::applicationFileName("addressbook", |
125 | "businesscard.vcf"); | 115 | "businesscard.vcf"); |
126 | if (QFile::exists(vfilename)) { | 116 | if (QFile::exists(vfilename)) { |
127 | Contact c; | 117 | Contact c; |
128 | c = Contact::readVCard( vfilename )[0]; | 118 | c = Contact::readVCard( vfilename )[0]; |
129 | return c.fullName(); | 119 | return c.fullName(); |
130 | } | 120 | } |
131 | 121 | ||
132 | return QString::null; | 122 | return QString::null; |
133 | } | 123 | } |
134 | 124 | ||
135 | QString SyncAuthentication::loginName() | 125 | QString SyncAuthentication::loginName() |
136 | { | 126 | { |
137 | struct passwd *pw = 0L; | 127 | struct passwd *pw = 0L; |
138 | #ifndef Q_OS_WIN32 | 128 | #ifndef Q_OS_WIN32 |
139 | pw = getpwuid( geteuid() ); | 129 | pw = getpwuid( geteuid() ); |
140 | return QString::fromLocal8Bit( pw->pw_name ); | 130 | return QString::fromLocal8Bit( pw->pw_name ); |
141 | #else | 131 | #else |
142 | //### revise | 132 | //### revise |
143 | return QString(); | 133 | return QString(); |
144 | #endif | 134 | #endif |
145 | } | 135 | } |
146 | 136 | ||
147 | int SyncAuthentication::isAuthorized(QHostAddress peeraddress) | 137 | int SyncAuthentication::isAuthorized(QHostAddress peeraddress) |
148 | { | 138 | { |
149 | Config cfg("Security"); | 139 | Config cfg("Security"); |
150 | cfg.setGroup("Sync"); | 140 | cfg.setGroup("Sync"); |
151 | // QString allowedstr = cfg.readEntry("auth_peer","192.168.1.0"); | 141 | // QString allowedstr = cfg.readEntry("auth_peer","192.168.1.0"); |
152 | uint auth_peer = cfg.readNumEntry("auth_peer", 0xc0a80100); | 142 | uint auth_peer = cfg.readNumEntry("auth_peer", 0xc0a80100); |
153 | 143 | ||
154 | // QHostAddress allowed; | 144 | // QHostAddress allowed; |
155 | // allowed.setAddress(allowedstr); | 145 | // allowed.setAddress(allowedstr); |
156 | // uint auth_peer = allowed.ip4Addr(); | 146 | // uint auth_peer = allowed.ip4Addr(); |
157 | uint auth_peer_bits = cfg.readNumEntry("auth_peer_bits", 24); | 147 | uint auth_peer_bits = cfg.readNumEntry("auth_peer_bits", 24); |
158 | uint mask = auth_peer_bits >= 32 // shifting by 32 is not defined | 148 | uint mask = auth_peer_bits >= 32 // shifting by 32 is not defined |
159 | ? 0xffffffff : (((1 << auth_peer_bits) - 1) << (32 - auth_peer_bits)); | 149 | ? 0xffffffff : (((1 << auth_peer_bits) - 1) << (32 - auth_peer_bits)); |
160 | 150 | ||
161 | return (peeraddress.ip4Addr() & mask) == auth_peer; | 151 | return (peeraddress.ip4Addr() & mask) == auth_peer; |
162 | } | 152 | } |
163 | 153 | ||
164 | bool SyncAuthentication::checkUser( const QString& user ) | 154 | bool SyncAuthentication::checkUser( const QString& user ) |
165 | { | 155 | { |
166 | if ( user.isEmpty() ) return FALSE; | 156 | if ( user.isEmpty() ) return FALSE; |
167 | QString euser = loginName(); | 157 | QString euser = loginName(); |
168 | return user == euser; | 158 | return user == euser; |
169 | } | 159 | } |
170 | 160 | ||
171 | bool SyncAuthentication::checkPassword( const QString& password ) | 161 | bool SyncAuthentication::checkPassword( const QString& password ) |
172 | { | 162 | { |
173 | #ifdef ALLOW_UNIX_USER_FTP | 163 | #ifdef ALLOW_UNIX_USER_FTP |
174 | // First, check system password... | 164 | // First, check system password... |
175 | 165 | ||
176 | struct passwd *pw = 0; | 166 | struct passwd *pw = 0; |
177 | struct spwd *spw = 0; | 167 | struct spwd *spw = 0; |
178 | 168 | ||
179 | pw = getpwuid( geteuid() ); | 169 | pw = getpwuid( geteuid() ); |
180 | spw = getspnam( pw->pw_name ); | 170 | spw = getspnam( pw->pw_name ); |
181 | 171 | ||
182 | QString cpwd = QString::fromLocal8Bit( pw->pw_passwd ); | 172 | QString cpwd = QString::fromLocal8Bit( pw->pw_passwd ); |
183 | if ( cpwd == "x" && spw ) | 173 | if ( cpwd == "x" && spw ) |
184 | cpwd = QString::fromLocal8Bit( spw->sp_pwdp ); | 174 | cpwd = QString::fromLocal8Bit( spw->sp_pwdp ); |
185 | 175 | ||
186 | // Note: some systems use more than crypt for passwords. | 176 | // Note: some systems use more than crypt for passwords. |
187 | QString cpassword = QString::fromLocal8Bit( crypt( password.local8Bit(), cpwd.local8Bit() ) ); | 177 | QString cpassword = QString::fromLocal8Bit( crypt( password.local8Bit(), cpwd.local8Bit() ) ); |
188 | if ( cpwd == cpassword ) | 178 | if ( cpwd == cpassword ) |
189 | return TRUE; | 179 | return TRUE; |
190 | #endif | 180 | #endif |
191 | 181 | ||
192 | static int lastdenial=0; | 182 | static int lastdenial=0; |
193 | static int denials=0; | 183 | static int denials=0; |
194 | int now = time(0); | 184 | int now = time(0); |
195 | 185 | ||
196 | Config cfg("Security"); | 186 | Config cfg("Security"); |
197 | cfg.setGroup("SyncMode"); | 187 | cfg.setGroup("SyncMode"); |
198 | int mode = cfg.readNumEntry("Mode", 0x02 ); | 188 | int mode = cfg.readNumEntry("Mode", 0x02 ); |
199 | 189 | ||
200 | //No pass word needed if the user really needs it | 190 | //No pass word needed if the user really needs it |
201 | if (mode & 0x04) { | 191 | if (mode & 0x04) { |
202 | QMessageBox unauth( | 192 | QMessageBox unauth( |
203 | tr("Sync Connection"), | 193 | tr("Sync Connection"), |
204 | tr("<qt><p>An unauthorized system is requesting access to this device." | 194 | tr("<qt><p>An unauthorized system is requesting access to this device." |
205 | "<p>You chose IntelliSync so you may I allow or deny this connection.</qt>" ), | 195 | "<p>You chose IntelliSync so you may I allow or deny this connection.</qt>" ), |
206 | QMessageBox::Warning, | 196 | QMessageBox::Warning, |
207 | QMessageBox::Ok, QMessageBox::Cancel|QMessageBox::Default, QMessageBox::NoButton, | 197 | QMessageBox::Ok, QMessageBox::Cancel|QMessageBox::Default, QMessageBox::NoButton, |
208 | 0, QString::null, TRUE, WStyle_StaysOnTop); | 198 | 0, QString::null, TRUE, WStyle_StaysOnTop); |
209 | unauth.setButtonText(QMessageBox::Ok, tr("Allow" ) ); | 199 | unauth.setButtonText(QMessageBox::Ok, tr("Allow" ) ); |
210 | unauth.setButtonText(QMessageBox::Cancel, tr("Deny")); | 200 | unauth.setButtonText(QMessageBox::Cancel, tr("Deny")); |
211 | switch( unauth.exec() ) { | 201 | switch( unauth.exec() ) { |
212 | case QMessageBox::Ok: | 202 | case QMessageBox::Ok: |
213 | return TRUE; | 203 | return TRUE; |
214 | break; | 204 | break; |
215 | case QMessageBox::Cancel: | 205 | case QMessageBox::Cancel: |
216 | default: | 206 | default: |
217 | denials++; | 207 | denials++; |
218 | lastdenial=now; | 208 | lastdenial=now; |
219 | return FALSE; | 209 | return FALSE; |
220 | } | 210 | } |
221 | } | 211 | } |
222 | 212 | ||
223 | // Detect old Qtopia Desktop (no password) and fail | 213 | // Detect old Qtopia Desktop (no password) and fail |
224 | if ( password.isEmpty() ) { | 214 | if ( password.isEmpty() ) { |
225 | if ( denials < 3 || now > lastdenial+600 ) { | 215 | if ( denials < 3 || now > lastdenial+600 ) { |
226 | QMessageBox unauth( | 216 | QMessageBox unauth( |
227 | tr("Sync Connection"), | 217 | tr("Sync Connection"), |
228 | tr("<p>An unauthorized system is requesting access to this device." | 218 | tr("<p>An unauthorized system is requesting access to this device." |
229 | "<p>If you are using a version of Qtopia Desktop older than 1.5.1, " | 219 | "<p>If you are using a version of Qtopia Desktop older than 1.5.1, " |
230 | "please upgrade or change the security setting to use IntelliSync." ), | 220 | "please upgrade or change the security setting to use IntelliSync." ), |
231 | QMessageBox::Warning, | 221 | QMessageBox::Warning, |
232 | QMessageBox::Cancel, QMessageBox::NoButton, QMessageBox::NoButton, | 222 | QMessageBox::Cancel, QMessageBox::NoButton, QMessageBox::NoButton, |
233 | 0, QString::null, TRUE, WStyle_StaysOnTop); | 223 | 0, QString::null, TRUE, WStyle_StaysOnTop); |
234 | unauth.setButtonText(QMessageBox::Cancel, tr("Deny")); | 224 | unauth.setButtonText(QMessageBox::Cancel, tr("Deny")); |
235 | unauth.exec(); | 225 | unauth.exec(); |
236 | 226 | ||
237 | denials++; | 227 | denials++; |
238 | lastdenial=now; | 228 | lastdenial=now; |
239 | } | 229 | } |
240 | return FALSE; | 230 | return FALSE; |
241 | 231 | ||
242 | } | 232 | } |
243 | 233 | ||
244 | // Second, check sync password... | 234 | // Second, check sync password... |
245 | 235 | ||
246 | static int lock=0; | 236 | static int lock=0; |
247 | if ( lock ) return FALSE; | 237 | if ( lock ) return FALSE; |
248 | 238 | ||
249 | ++lock; | 239 | ++lock; |
250 | 240 | ||
251 | /* | 241 | /* |
252 | * we need to support old Sync software and QtopiaDesktop | 242 | * we need to support old Sync software and QtopiaDesktop |
253 | */ | 243 | */ |
254 | if ( password.left(6) == "Qtopia" || password.left(6) == "rootme" ) { | 244 | if ( password.left(6) == "Qtopia" || password.left(6) == "rootme" ) { |
255 | Config cfg( "Security" ); | 245 | Config cfg( "Security" ); |
256 | cfg.setGroup("Sync"); | 246 | cfg.setGroup("Sync"); |
257 | QStringList pwds = cfg.readListEntry("Passwords",' '); | 247 | QStringList pwds = cfg.readListEntry("Passwords",' '); |
258 | for (QStringList::ConstIterator it=pwds.begin(); it!=pwds.end(); ++it) { | 248 | for (QStringList::ConstIterator it=pwds.begin(); it!=pwds.end(); ++it) { |
259 | #ifndef Q_OS_WIN32 | 249 | #ifndef Q_OS_WIN32 |
260 | QString cpassword = QString::fromLocal8Bit( | 250 | QString cpassword = QString::fromLocal8Bit( |
261 | crypt( password.mid(8).local8Bit(), (*it).left(2).latin1() ) ); | 251 | crypt( password.mid(8).local8Bit(), (*it).left(2).latin1() ) ); |
262 | #else | 252 | #else |
263 | // ### revise | 253 | // ### revise |
264 | QString cpassword(""); | 254 | QString cpassword(""); |
265 | #endif | 255 | #endif |
266 | if ( *it == cpassword ) { | 256 | if ( *it == cpassword ) { |
267 | lock--; | 257 | lock--; |
268 | return TRUE; | 258 | return TRUE; |
269 | } | 259 | } |
270 | } | 260 | } |
271 | 261 | ||
272 | // Unrecognized system. Be careful... | 262 | // Unrecognized system. Be careful... |
273 | QMessageBox unrecbox( | 263 | QMessageBox unrecbox( |
274 | tr("Sync Connection"), | 264 | tr("Sync Connection"), |
275 | tr("<p>An unrecognized system is requesting access to this device." | 265 | tr("<p>An unrecognized system is requesting access to this device." |
276 | "<p>If you have just initiated a Sync for the first time, this is normal."), | 266 | "<p>If you have just initiated a Sync for the first time, this is normal."), |
277 | QMessageBox::Warning, | 267 | QMessageBox::Warning, |
278 | QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton, | 268 | QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton, |
279 | 0, QString::null, TRUE, WStyle_StaysOnTop); | 269 | 0, QString::null, TRUE, WStyle_StaysOnTop); |
280 | unrecbox.setButtonText(QMessageBox::Cancel, tr("Deny")); | 270 | unrecbox.setButtonText(QMessageBox::Cancel, tr("Deny")); |
281 | unrecbox.setButtonText(QMessageBox::Yes, tr("Allow")); | 271 | unrecbox.setButtonText(QMessageBox::Yes, tr("Allow")); |
282 | 272 | ||
283 | if ( (denials > 2 && now < lastdenial+600) | 273 | if ( (denials > 2 && now < lastdenial+600) |
284 | || unrecbox.exec() != QMessageBox::Yes) | 274 | || unrecbox.exec() != QMessageBox::Yes) |
285 | { | 275 | { |
286 | denials++; | 276 | denials++; |
287 | lastdenial=now; | 277 | lastdenial=now; |
288 | lock--; | 278 | lock--; |
289 | return FALSE; | 279 | return FALSE; |
290 | } else { | 280 | } else { |
291 | const char salty[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/."; | 281 | const char salty[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/."; |
292 | char salt[2]; | 282 | char salt[2]; |
293 | salt[0]= salty[rand() % (sizeof(salty)-1)]; | 283 | salt[0]= salty[rand() % (sizeof(salty)-1)]; |
294 | salt[1]= salty[rand() % (sizeof(salty)-1)]; | 284 | salt[1]= salty[rand() % (sizeof(salty)-1)]; |
295 | #ifndef Q_OS_WIN32 | 285 | #ifndef Q_OS_WIN32 |
296 | QString cpassword = QString::fromLocal8Bit( | 286 | QString cpassword = QString::fromLocal8Bit( |
297 | crypt( password.mid(8).local8Bit(), salt ) ); | 287 | crypt( password.mid(8).local8Bit(), salt ) ); |
298 | #else | 288 | #else |
299 | //### revise | 289 | //### revise |
300 | QString cpassword(""); | 290 | QString cpassword(""); |
301 | #endif | 291 | #endif |
302 | denials=0; | 292 | denials=0; |
303 | pwds.prepend(cpassword); | 293 | pwds.prepend(cpassword); |
304 | cfg.writeEntry("Passwords",pwds,' '); | 294 | cfg.writeEntry("Passwords",pwds,' '); |
305 | lock--; | 295 | lock--; |
306 | return TRUE; | 296 | return TRUE; |
307 | } | 297 | } |
308 | } | 298 | } |
309 | lock--; | 299 | lock--; |
310 | 300 | ||
311 | return FALSE; | 301 | return FALSE; |
312 | } | 302 | } |
313 | 303 | ||
314 | 304 | ||
315 | ServerPI::ServerPI( int socket, QObject *parent, const char* name ) | 305 | ServerPI::ServerPI( int socket, QObject *parent, const char* name ) |
316 | : QSocket( parent, name ) , dtp( 0 ), serversocket( 0 ), waitsocket( 0 ), | 306 | : QSocket( parent, name ) , dtp( 0 ), serversocket( 0 ), waitsocket( 0 ), |
diff --git a/core/launcher/wait.cpp b/core/launcher/wait.cpp index 34ffd1a..4148e57 100644 --- a/core/launcher/wait.cpp +++ b/core/launcher/wait.cpp | |||
@@ -1,78 +1,74 @@ | |||
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 | 20 | ||
21 | #include "wait.h" | 21 | #include "wait.h" |
22 | 22 | ||
23 | #include <qtopia/resource.h> | ||
24 | #include <qtopia/config.h> | 23 | #include <qtopia/config.h> |
25 | 24 | ||
26 | #include <opie2/owait.h> | 25 | #include <opie2/owait.h> |
27 | 26 | ||
28 | #include <qwidget.h> | ||
29 | #include <qpixmap.h> | ||
30 | #include <qpainter.h> | ||
31 | 27 | ||
32 | 28 | ||
33 | Wait *lastWaitObject = NULL; | 29 | Wait *lastWaitObject = NULL; |
34 | 30 | ||
35 | 31 | ||
36 | Wait::Wait( QWidget *parent ) : QWidget( parent ), | 32 | Wait::Wait( QWidget *parent ) : QWidget( parent ), |
37 | pm( Resource::loadPixmap( "wait" ) ), waiting( FALSE ) | 33 | pm( Resource::loadPixmap( "wait" ) ), waiting( FALSE ) |
38 | { | 34 | { |
39 | setFixedSize( pm.size() ); | 35 | setFixedSize( pm.size() ); |
40 | lastWaitObject = this; | 36 | lastWaitObject = this; |
41 | m_centralWait = new OWait( 0l ); | 37 | m_centralWait = new OWait( 0l ); |
42 | m_centralWait->hide(); | 38 | m_centralWait->hide(); |
43 | hide(); | 39 | hide(); |
44 | } | 40 | } |
45 | 41 | ||
46 | 42 | ||
47 | Wait *Wait::getWaitObject() | 43 | Wait *Wait::getWaitObject() |
48 | { | 44 | { |
49 | return lastWaitObject; | 45 | return lastWaitObject; |
50 | } | 46 | } |
51 | 47 | ||
52 | 48 | ||
53 | void Wait::setWaiting( bool w ) | 49 | void Wait::setWaiting( bool w ) |
54 | { | 50 | { |
55 | Config cfg ( "Launcher" ); | 51 | Config cfg ( "Launcher" ); |
56 | cfg.setGroup("GUI"); | 52 | cfg.setGroup("GUI"); |
57 | 53 | ||
58 | 54 | ||
59 | waiting = w; | 55 | waiting = w; |
60 | if ( w ) { | 56 | if ( w ) { |
61 | if ( cfg. readBoolEntry( "BigBusy" ) ) | 57 | if ( cfg. readBoolEntry( "BigBusy" ) ) |
62 | m_centralWait->show(); | 58 | m_centralWait->show(); |
63 | else | 59 | else |
64 | show(); | 60 | show(); |
65 | }else{ | 61 | }else{ |
66 | m_centralWait->hide(); | 62 | m_centralWait->hide(); |
67 | hide(); | 63 | hide(); |
68 | } | 64 | } |
69 | } | 65 | } |
70 | 66 | ||
71 | 67 | ||
72 | void Wait::paintEvent( QPaintEvent * ) | 68 | void Wait::paintEvent( QPaintEvent * ) |
73 | { | 69 | { |
74 | QPainter p( this ); | 70 | QPainter p( this ); |
75 | p.drawPixmap( 0, 0, pm ); | 71 | p.drawPixmap( 0, 0, pm ); |
76 | } | 72 | } |
77 | 73 | ||
78 | 74 | ||