summaryrefslogtreecommitdiff
authorchicken <chicken>2004-03-01 16:12:01 (UTC)
committer chicken <chicken>2004-03-01 16:12:01 (UTC)
commit9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38 (patch) (unidiff)
tree62527c430eb2f6c62ac01c11cdfea06494101a0e
parent931c55406a043195712955c732a875e17899df90 (diff)
downloadopie-9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38.zip
opie-9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38.tar.gz
opie-9bc70bb8a0bdd3a7bc0013f2cacce7c039b88b38.tar.bz2
fix includes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/batteryapplet/battery.cpp1
-rw-r--r--core/applets/batteryapplet/batterystatus.cpp2
-rw-r--r--core/applets/cardmon/cardmon.cpp2
-rw-r--r--core/applets/homeapplet/home.cpp2
-rw-r--r--core/applets/irdaapplet/irda.cpp5
-rw-r--r--core/applets/logoutapplet/logout.cpp2
-rw-r--r--core/applets/multikeyapplet/multikey.cpp6
-rw-r--r--core/launcher/applauncher.cpp4
-rw-r--r--core/launcher/firstuse.cpp8
-rw-r--r--core/launcher/inputmethods.cpp6
-rw-r--r--core/launcher/irserver.cpp1
-rw-r--r--core/launcher/launcher.cpp2
-rw-r--r--core/launcher/launcherglobal.cpp4
-rw-r--r--core/launcher/launchertab.cpp3
-rw-r--r--core/launcher/launcherview.cpp14
-rw-r--r--core/launcher/main.cpp5
-rw-r--r--core/launcher/packageslave.cpp2
-rw-r--r--core/launcher/qcopbridge.cpp8
-rw-r--r--core/launcher/runningappbar.cpp7
-rw-r--r--core/launcher/screensaver.cpp1
-rw-r--r--core/launcher/server.cpp3
-rw-r--r--core/launcher/shutdownimpl.cpp1
-rw-r--r--core/launcher/stabmon.cpp1
-rw-r--r--core/launcher/startmenu.cpp4
-rw-r--r--core/launcher/syncdialog.cpp1
-rw-r--r--core/launcher/systray.cpp2
-rw-r--r--core/launcher/transferserver.cpp10
-rw-r--r--core/launcher/wait.cpp4
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
35BatteryMeter::BatteryMeter( QWidget *parent ) 34BatteryMeter::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
53BatteryMeter::~BatteryMeter() 52BatteryMeter::~BatteryMeter()
54{ 53{
55 delete ps; 54 delete ps;
56} 55}
57 56
58QSize BatteryMeter::sizeHint() const 57QSize 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
63void BatteryMeter::mousePressEvent( QMouseEvent* e ) 62void 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
76void BatteryMeter::mouseReleaseEvent( QMouseEvent* /*e*/ ) 75void 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
88void BatteryMeter::timerEvent( QTimerEvent * ) 87void 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
112void BatteryMeter::chargeTimeout() 111void 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
123void BatteryMeter::paintEvent( QPaintEvent* ) 122void 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
174int BatteryMeter::position() 173int BatteryMeter::position()
175{ 174{
176 return 8; 175 return 8;
177} 176}
178 177
179Q_EXPORT_INTERFACE() 178Q_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
18using namespace Opie; 16using namespace Opie;
19 17
20BatteryStatus::BatteryStatus( const PowerStatus *p, QWidget *parent ) 18BatteryStatus::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
45BatteryStatus::~BatteryStatus() 43BatteryStatus::~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 */
52bool BatteryStatus::getProcApmStatusIpaq() { 50bool 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
124void BatteryStatus::updatePercent( int pc ) { 122void BatteryStatus::updatePercent( int pc ) {
125 percent = pc; 123 percent = pc;
126 repaint(FALSE); 124 repaint(FALSE);
127} 125}
128 126
129void BatteryStatus::drawSegment( QPainter *p, const QRect &r, const QColor &topgrad, const QColor &botgrad, const QColor &highlight, int hightlight_height ) { 127void 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
149void BatteryStatus::paintEvent( QPaintEvent * ) { 147void 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
49using namespace Opie; 47using namespace Opie;
50 48
51CardMonitor::CardMonitor( QWidget * parent ) : QWidget( parent ), 49CardMonitor::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
80CardMonitor::~CardMonitor() 78CardMonitor::~CardMonitor()
81{ 79{
82 if ( popupMenu ) 80 if ( popupMenu )
83 { 81 {
84 delete popupMenu; 82 delete popupMenu;
85 } 83 }
86} 84}
87 85
88void CardMonitor::popUp( QString message, QString icon ) 86void 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
114void CardMonitor::popupTimeout() 112void CardMonitor::popupTimeout()
115{ 113{
116 popupMenu->hide(); 114 popupMenu->hide();
117} 115}
118 116
119void CardMonitor::mousePressEvent( QMouseEvent * ) 117void 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
194void CardMonitor::cardMessage( const QCString & msg, const QByteArray & ) 192void 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
208bool CardMonitor::getStatusPcmcia( int showPopUp ) 206bool 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
11HomeApplet::HomeApplet ( ) 9HomeApplet::HomeApplet ( )
12 : QObject ( 0, "HomeApplet" ) 10 : QObject ( 0, "HomeApplet" )
13{ 11{
14} 12}
15 13
16HomeApplet::~HomeApplet ( ) 14HomeApplet::~HomeApplet ( )
17{ 15{
18} 16}
19 17
20int HomeApplet::position ( ) const 18int HomeApplet::position ( ) const
21{ 19{
22 return 4; 20 return 4;
23} 21}
24 22
25QString HomeApplet::name ( ) const 23QString HomeApplet::name ( ) const
26{ 24{
27 return tr( "Home shortcut" ); 25 return tr( "Home shortcut" );
28} 26}
29 27
30QString HomeApplet::text ( ) const 28QString HomeApplet::text ( ) const
31{ 29{
32 return tr( "Desktop" ); 30 return tr( "Desktop" );
33} 31}
34 32
35QString HomeApplet::tr( const char* s ) const 33QString 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
40QString HomeApplet::tr( const char* s, const char* p ) const 38QString 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
45QIconSet HomeApplet::icon ( ) const 43QIconSet 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
55QPopupMenu *HomeApplet::popup ( QWidget * ) const 53QPopupMenu *HomeApplet::popup ( QWidget * ) const
56{ 54{
57 return 0; 55 return 0;
58} 56}
59 57
60void HomeApplet::activated ( ) 58void 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
67QRESULT HomeApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) 65QRESULT 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
82Q_EXPORT_INTERFACE( ) 80Q_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
42IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) 37IrdaApplet::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
68void IrdaApplet::show() 63void IrdaApplet::show()
69{ 64{
70 QWidget::show ( ); 65 QWidget::show ( );
71 startTimer ( 2000 ); 66 startTimer ( 2000 );
72} 67}
73 68
74IrdaApplet::~IrdaApplet() 69IrdaApplet::~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
80void IrdaApplet::popup ( QString message, QString icon ) 75void 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
100void IrdaApplet::popupTimeout ( ) 95void IrdaApplet::popupTimeout ( )
101{ 96{
102 m_popup-> hide ( ); 97 m_popup-> hide ( );
103} 98}
104 99
105bool IrdaApplet::checkIrdaStatus ( ) 100bool 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
116bool IrdaApplet::setIrdaStatus ( bool b ) 111bool 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
139bool IrdaApplet::checkIrdaDiscoveryStatus ( ) 134bool 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
154bool IrdaApplet::setIrdaDiscoveryStatus ( bool d ) 149bool 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
166bool IrdaApplet::setIrdaReceiveStatus ( bool d ) 161bool 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
178void IrdaApplet::showDiscovered ( ) 173void 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
241void IrdaApplet::mousePressEvent ( QMouseEvent * ) 236void 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
14LogoutApplet::LogoutApplet ( ) 12LogoutApplet::LogoutApplet ( )
15 : QObject ( 0, "LogoutApplet" ) 13 : QObject ( 0, "LogoutApplet" )
16{ 14{
17} 15}
18 16
19LogoutApplet::~LogoutApplet ( ) 17LogoutApplet::~LogoutApplet ( )
20{ 18{
21} 19}
22 20
23int LogoutApplet::position ( ) const 21int LogoutApplet::position ( ) const
24{ 22{
25 return 0; 23 return 0;
26} 24}
27 25
28QString LogoutApplet::name ( ) const 26QString LogoutApplet::name ( ) const
29{ 27{
30 return tr( "Logout shortcut" ); 28 return tr( "Logout shortcut" );
31} 29}
32 30
33QString LogoutApplet::text ( ) const 31QString LogoutApplet::text ( ) const
34{ 32{
35 return tr( "Logout" ); 33 return tr( "Logout" );
36} 34}
37 35
38QString LogoutApplet::tr( const char* s ) const 36QString 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
43QString LogoutApplet::tr( const char* s, const char* p ) const 41QString 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
48QIconSet LogoutApplet::icon ( ) const 46QIconSet 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
58QPopupMenu *LogoutApplet::popup ( QWidget * ) const 56QPopupMenu *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
67class HackApplication : public QApplication { 65class HackApplication : public QApplication {
68public: 66public:
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
82void LogoutApplet::activated ( ) 80void 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
107QRESULT LogoutApplet::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) 105QRESULT 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
122Q_EXPORT_INTERFACE( ) 120Q_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
30Multikey::Multikey(QWidget *parent) : QLabel(parent), popupMenu(this), current("EN") 24Multikey::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
45void Multikey::mousePressEvent(QMouseEvent *ev) 39void 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
68void Multikey::mouseReleaseEvent(QMouseEvent *ev) 62void 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
80void Multikey::message(const QCString &message, const QByteArray &data) 74void 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
141int Multikey::position() 135int Multikey::position()
142{ 136{
143 return 10; 137 return 10;
144} 138}
145 139
146Q_EXPORT_INTERFACE() 140Q_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
65const int AppLauncher::RAISE_TIMEOUT_MS = 5000; 61const int AppLauncher::RAISE_TIMEOUT_MS = 5000;
66 62
67//--------------------------------------------------------------------------- 63//---------------------------------------------------------------------------
68 64
69static AppLauncher* appLauncherPtr; 65static AppLauncher* appLauncherPtr;
70 66
71const int appStopEventID = 1290; 67const int appStopEventID = 1290;
72 68
73class AppStoppedEvent : public QCustomEvent 69class AppStoppedEvent : public QCustomEvent
74{ 70{
75public: 71public:
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
82private: 78private:
83 int mPid, mStatus; 79 int mPid, mStatus;
84}; 80};
85 81
86AppLauncher::AppLauncher(QObject *parent, const char *name) 82AppLauncher::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
116AppLauncher::~AppLauncher() 112AppLauncher::~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 */
131void AppLauncher::newQcopChannel(const QString& channelName) 127void 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
154void AppLauncher::removedQcopChannel(const QString& channelName) 150void 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
162void AppLauncher::received(const QCString& msg, const QByteArray& data) 158void 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
240void AppLauncher::signalHandler(int) 236void 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
255bool AppLauncher::event(QEvent *e) 251bool 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
266void AppLauncher::timerEvent( QTimerEvent *e ) 262void 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
306void AppLauncher::sigStopped(int sigPid, int sigStatus) 302void 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
70struct { 62struct {
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}
77settingsTable [] = 69settingsTable [] =
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
93FirstUse::FirstUse(QWidget* parent, const char * name, WFlags wf) : 85FirstUse::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
197FirstUse::~FirstUse() 189FirstUse::~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
205void FirstUse::calcMaxWindowRect() 197void 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 */
229void FirstUse::nextDialog() 221void 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 */
284void FirstUse::previousDialog() 276void 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
314void FirstUse::message(const QCString &msg, const QByteArray &data) 306void 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 */
57static const char * tri_xpm[]={ 51static 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
71int InputMethod::operator <(const InputMethod& o) const 65int InputMethod::operator <(const InputMethod& o) const
72{ 66{
73 return name() < o.name(); 67 return name() < o.name();
74} 68}
75int InputMethod::operator >(const InputMethod& o) const 69int InputMethod::operator >(const InputMethod& o) const
76{ 70{
77 return name() > o.name(); 71 return name() > o.name();
78} 72}
79int InputMethod::operator <=(const InputMethod& o) const 73int 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 */
89class IMToolButton : public QToolButton 83class IMToolButton : public QToolButton
90{ 84{
91public: 85public:
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
97InputMethods::InputMethods( QWidget *parent ) : 91InputMethods::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
158InputMethods::~InputMethods() 152InputMethods::~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
170void InputMethods::hideInputMethod() 164void InputMethods::hideInputMethod()
171{ 165{
172 kbdButton->setOn( FALSE ); 166 kbdButton->setOn( FALSE );
173} 167}
174 168
175void InputMethods::showInputMethod() 169void InputMethods::showInputMethod()
176{ 170{
177 kbdButton->setOn( TRUE ); 171 kbdButton->setOn( TRUE );
178} 172}
179 173
180void InputMethods::showInputMethod(const QString& name) 174void 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
196void InputMethods::resetStates() 190void 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
202QRect InputMethods::inputRect() const 196QRect 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
210void InputMethods::unloadInputMethods() 204void 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
219void InputMethods::unloadMethod( QValueList<InputMethod>& list ) { 213void 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
228QStringList InputMethods::plugins()const { 222QStringList 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
238void InputMethods::installTranslator( const QString& type ) { 232void 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
254void InputMethods::setPreferedHandlers() { 248void 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
280void InputMethods::loadInputMethods() 274void 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
33IrServer::IrServer( QObject *parent, const char *name ) 32IrServer::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
71IrServer::~IrServer() 70IrServer::~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
81static bool isVisibleWindow( int ); 79static bool isVisibleWindow( int );
82//=========================================================================== 80//===========================================================================
83 81
84LauncherTabWidget::LauncherTabWidget( Launcher* parent ) : 82LauncherTabWidget::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
112void LauncherTabWidget::createDocLoadingWidget() 110void 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
167void LauncherTabWidget::initLayout() 165void 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
174void LauncherTabWidget::appMessage(const QCString& message, const QByteArray&) 172void 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
180void LauncherTabWidget::raiseTabWidget() 178void 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
191void LauncherTabWidget::tabProperties() 189void 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
206void LauncherTabWidget::deleteView( const QString& id ) 204void 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
216LauncherView* LauncherTabWidget::newView( const QString& id, const QPixmap& pm, const QString& label ) 214LauncherView* 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
244LauncherView *LauncherTabWidget::view( const QString &id ) 242LauncherView *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
252LauncherView *LauncherTabWidget::docView() 250LauncherView *LauncherTabWidget::docView()
253{ 251{
254 return docview; 252 return docview;
255} 253}
256 254
257void LauncherTabWidget::setLoadingWidgetEnabled( bool v ) 255void 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
265void LauncherTabWidget::setLoadingProgress( int percent ) 263void 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
271void LauncherTabWidget::setTabViewAppearance( LauncherView *v, Config &cfg ) 269void 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
17bool Opie::Global::isAppLnkFileName( const QString& file ) { 13bool 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
24QString Opie::Global::tempDir() { 20QString Opie::Global::tempDir() {
25 return QString::fromLatin1("/tmp/"); 21 return QString::fromLatin1("/tmp/");
26} 22}
27 23
28Global::Command* Opie::Global::builtinCommands() { 24Global::Command* Opie::Global::builtinCommands() {
29 return builtin; 25 return builtin;
30} 26}
31 27
32QGuardedPtr<QWidget>* Opie::Global::builtinRunning() { 28QGuardedPtr<QWidget>* Opie::Global::builtinRunning() {
33 return running; 29 return running;
34} 30}
35 31
36QString Opie::Global::uuid() { 32QString 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
46QByteArray Opie::Global::encodeBase64(const QByteArray& origData ) { 42QByteArray 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
27LauncherTabBar::LauncherTabBar( QWidget *parent, const char *name ) 24LauncherTabBar::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
34LauncherTabBar::~LauncherTabBar() 31LauncherTabBar::~LauncherTabBar()
35{ 32{
36} 33}
37 34
38void LauncherTabBar::insertTab( LauncherTab *t, int index ) 35void 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
48void LauncherTabBar::removeTab( QTab *tab ) 45void 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
56void LauncherTabBar::prevTab() 53void 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
64void LauncherTabBar::nextTab() 61void 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
71void LauncherTabBar::showTab( const QString& id ) 68void LauncherTabBar::showTab( const QString& id )
72{ 69{
73 setCurrentTab( tabs[id] ); 70 setCurrentTab( tabs[id] );
74} 71}
75 72
76void LauncherTabBar::layoutTabs() 73void 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
185void LauncherTabBar::paint( QPainter * p, QTab * t, bool selected ) const 182void 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
245void LauncherTabBar::paintLabel( QPainter* p, const QRect&, 242void 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
57class BgPixmap 43class BgPixmap
58{ 44{
59public: 45public:
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
66static QMap<QString,BgPixmap*> *bgCache = 0; 52static QMap<QString,BgPixmap*> *bgCache = 0;
67 53
68static void cleanup_cache() 54static 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
82class LauncherItem : public QIconViewItem 68class LauncherItem : public QIconViewItem
83{ 69{
84public: 70public:
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; }
98protected: 84protected:
99 bool isBigIcon; 85 bool isBigIcon;
100 int iteration; 86 int iteration;
101 AppLnk* app; 87 AppLnk* app;
102private: 88private:
103 void paintAnimatedIcon( QPainter *p ); 89 void paintAnimatedIcon( QPainter *p );
104 BusyIndicatorType busyType; 90 BusyIndicatorType busyType;
105}; 91};
106 92
107 93
108class LauncherIconView : public QIconView { 94class LauncherIconView : public QIconView {
109public: 95public:
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
70using namespace Opie; 65using namespace Opie;
71 66
72 67
73static void cleanup() 68static 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
84static void refreshTimeZoneConfig() 79static 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
138void initEnvironment() 133void 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
184static void initKeyboard() 179static 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
199static bool firstUse() 194static 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
224int initApplication( int argc, char ** argv ) 219int 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
287static const char *pidfile_path = "/var/run/opie.pid"; 282static const char *pidfile_path = "/var/run/opie.pid";
288 283
289void create_pidfile ( ) 284void 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
51PackageHandler::PackageHandler( QObject *parent, char* name ) 49PackageHandler::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
62void PackageHandler::qcopMessage( const QCString &msg, const QByteArray &data ) 60void 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
98void PackageHandler::installPackage( const QString &package ) 96void 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
118void PackageHandler::removePackage( const QString &package ) 116void 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
131void PackageHandler::sendReply( const QCString& msg, const QString& arg ) 129void 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
139void PackageHandler::addPackageFiles( const QString &location, 137void 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
189void PackageHandler::addPackages( const QString &location ) 187void 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
205void PackageHandler::cleanupPackageFiles( const QString &listfile ) 203void 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
239void PackageHandler::cleanupPackages( const QString &location ) 237void 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
257void PackageHandler::prepareInstall( const QString& size, const QString& path ) 255void 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
277void PackageHandler::iProcessExited() 275void 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
63const int block_size = 51200; 55const int block_size = 51200;
64 56
65QCopBridge::QCopBridge( Q_UINT16 port, QObject *parent, 57QCopBridge::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
88QCopBridge::~QCopBridge() 80QCopBridge::~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
95void QCopBridge::authorizeConnections() 87void 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
110void QCopBridge::newConnection( int socket ) 102void 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
130void QCopBridge::closed( QCopBridgePI *pi ) 122void 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
145void QCopBridge::closeOpenConnections() 137void 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
153void QCopBridge::desktopMessage( const QCString &command, const QByteArray &data ) 145void 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 */
176void QCopBridge::sendDesktopMessageOld( const QCString& command, const QByteArray& args) { 168void 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( "&amp;" ); 216 estr.append( "&amp;" );
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
254void QCopBridge::timerEvent( QTimerEvent * ) 246void QCopBridge::timerEvent( QTimerEvent * )
255{ 247{
256 sendSync = FALSE; 248 sendSync = FALSE;
257 killTimers(); 249 killTimers();
258} 250}
259 251
260 252
261QCopBridgePI::QCopBridgePI( int socket, QObject *parent, const char* name ) 253QCopBridgePI::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
296QCopBridgePI::~QCopBridgePI() 288QCopBridgePI::~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
40RunningAppBar::RunningAppBar(QWidget* parent) 33RunningAppBar::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
50RunningAppBar::~RunningAppBar() 43RunningAppBar::~RunningAppBar()
51{ 44{
52} 45}
53 46
54void RunningAppBar::received(const QCString& msg, const QByteArray& data) { 47void 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
72void RunningAppBar::addTask(const AppLnk& appLnk) { 65void 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
80void RunningAppBar::removeTask(const AppLnk& appLnk) { 73void 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
93void RunningAppBar::mousePressEvent(QMouseEvent *e) 86void 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
117void RunningAppBar::mouseReleaseEvent(QMouseEvent *e) 110void 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
130void RunningAppBar::paintEvent( QPaintEvent * ) 123void 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
156QSize RunningAppBar::sizeHint() const 149QSize 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
161void RunningAppBar::applicationLaunched(const QString &appName) 154void 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
170void RunningAppBar::applicationTerminated(const QString &app) 163void 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
11using namespace Opie; 10using namespace Opie;
12 11
13 12
14 13
15OpieScreenSaver::OpieScreenSaver ( ) 14OpieScreenSaver::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 */
52void OpieScreenSaver::restore() 51void 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 */
72bool OpieScreenSaver::save( int level ) 71bool 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 */
136void OpieScreenSaver::setIntervals ( int dim, int lightoff, int suspend ) 135void 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 */
182void OpieScreenSaver::setInterval ( int interval ) 181void OpieScreenSaver::setInterval ( int interval )
183{ 182{
184 setIntervals ( -1, -1, interval ); 183 setIntervals ( -1, -1, interval );
185} 184}
186 185
187 186
188void OpieScreenSaver::setMode ( int mode ) 187void 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 */
205void OpieScreenSaver::setBacklight ( int bright ) 204void 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 */
252void OpieScreenSaver::setBacklightInternal ( int bright ) 251void 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
65extern QRect qt_maxWindowRect; 64extern QRect qt_maxWindowRect;
66 65
67using namespace Opie; 66using namespace Opie;
68 67
69static QWidget *calibrate(bool) 68static 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
101static Global::Command builtins[] = { 100static 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
127Server::Server() : 126Server::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
182void Server::show() 181void Server::show()
183{ 182{
184 ServerApplication::login(TRUE); 183 ServerApplication::login(TRUE);
185 QWidget::show(); 184 QWidget::show();
186} 185}
187 186
188Server::~Server() 187Server::~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
200static bool hasVisibleWindow(const QString& clientname, bool partial) 199static 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
225void Server::activate(const Opie::ODeviceButton* button, bool held) 224void 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
261typedef struct KeyOverride { 260typedef struct KeyOverride {
262 ushort scan_code; 261 ushort scan_code;
263 QWSServer::KeyMap map; 262 QWSServer::KeyMap map;
264}; 263};
265 264
266 265
267static const KeyOverride jp109keys[] = { 266static 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
35static void changeButtonColor ( QPushButton *btn, const QColor &col ) 34static 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
47ShutdownImpl::ShutdownImpl( QWidget* parent, const char *name, WFlags fl ) 46ShutdownImpl::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
119void ShutdownImpl::buttonClicked ( int b ) 118void 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
143void ShutdownImpl::cancelClicked ( ) 142void 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
153void ShutdownImpl::timeout ( ) 152void 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
164void ShutdownImpl::hide ( ) 163void 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
37SysFileMonitor::SysFileMonitor(QObject* parent) : 36SysFileMonitor::SysFileMonitor(QObject* parent) :
38 QObject(parent) 37 QObject(parent)
39{ 38{
40 startTimer(2000); 39 startTimer(2000);
41} 40}
42 41
43const char * stab0 = "/var/run/stab"; 42const char * stab0 = "/var/run/stab";
44const char * stab1 = "/var/state/pcmcia/stab"; 43const char * stab1 = "/var/state/pcmcia/stab";
45const char * stab2 = "/var/lib/pcmcia/stab"; 44const char * stab2 = "/var/lib/pcmcia/stab";
46 45
47void SysFileMonitor::timerEvent(QTimerEvent*) 46void 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
49void StartPopupMenu::keyPressEvent( QKeyEvent *e ) 45void 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
62StartMenu::StartMenu(QWidget *parent) : QLabel( parent ) 58StartMenu::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
78void StartMenu::mousePressEvent( QMouseEvent * ) 74void StartMenu::mousePressEvent( QMouseEvent * )
79{ 75{
80 launch(); 76 launch();
81} 77}
82 78
83 79
84StartMenu::~StartMenu() 80StartMenu::~StartMenu()
85{ 81{
86 clearApplets(); 82 clearApplets();
87} 83}
88 84
89void StartMenu::createMenu() 85void 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
103void StartMenu::refreshMenu() 99void 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
116void StartMenu::itemSelected( int id ) 112void 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
138void StartMenu::createAppEntry( QPopupMenu *menu, QDir dir, QString file ) 134void 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
167void StartMenu::createDirEntry( QPopupMenu *menu, QDir dir, QString file, bool lot ) 163void 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
210void StartMenu::createMenuEntries( QPopupMenu *menu, QDir dir, bool ltabs, bool lot ) 206void 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
234bool StartMenu::loadMenu( QPopupMenu *menu ) 230bool 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
265void StartMenu::launch() 261void 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
278static int compareAppletPositions(const void *b, const void *a) 274static 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
287void StartMenu::clearApplets() 283void 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
32SyncDialog::SyncDialog( QWidget *parent, const QString &w ) 31SyncDialog::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
66void SyncDialog::paintEvent( QPaintEvent *pe ) 65void 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
92void SyncDialog::timerEvent( QTimerEvent * ) 91void 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
120void SyncDialog::loadPath() 119void 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
142QPointArray SyncDialog::scalePath( const QPointArray &pa, int xn, int xd, int yn, int yd ) 141QPointArray 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
155QPointArray SyncDialog::generatePath( const QPointArray &pa, int dist ) 154QPointArray 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
41SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0) 39SysTray::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
47SysTray::~SysTray() 45SysTray::~SysTray()
48{ 46{
49 clearApplets(); 47 clearApplets();
50} 48}
51 49
52static int compareAppletPositions(const void *a, const void *b) 50static 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
61void SysTray::loadApplets() 59void SysTray::loadApplets()
62{ 60{
63 hide(); 61 hide();
64 clearApplets(); 62 clearApplets();
65 addApplets(); 63 addApplets();
66} 64}
67 65
68void SysTray::clearApplets() 66void 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
95void SysTray::addApplets() 93void 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
70const int block_size = 51200; 60const int block_size = 51200;
71 61
72TransferServer::TransferServer( Q_UINT16 port, QObject *parent, 62TransferServer::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
81void TransferServer::authorizeConnections() 71void 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
93void TransferServer::closed(ServerPI *item) 83void TransferServer::closed(ServerPI *item)
94{ 84{
95 connections.removeRef(item); 85 connections.removeRef(item);
96} 86}
97 87
98TransferServer::~TransferServer() 88TransferServer::~TransferServer()
99{ 89{
100} 90}
101 91
102void TransferServer::newConnection( int socket ) 92void 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
109QString SyncAuthentication::serverId() 99QString 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
122QString SyncAuthentication::ownerName() 112QString 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
135QString SyncAuthentication::loginName() 125QString 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
147int SyncAuthentication::isAuthorized(QHostAddress peeraddress) 137int 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
164bool SyncAuthentication::checkUser( const QString& user ) 154bool 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
171bool SyncAuthentication::checkPassword( const QString& password ) 161bool 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
315ServerPI::ServerPI( int socket, QObject *parent, const char* name ) 305ServerPI::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
33Wait *lastWaitObject = NULL; 29Wait *lastWaitObject = NULL;
34 30
35 31
36Wait::Wait( QWidget *parent ) : QWidget( parent ), 32Wait::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
47Wait *Wait::getWaitObject() 43Wait *Wait::getWaitObject()
48{ 44{
49 return lastWaitObject; 45 return lastWaitObject;
50} 46}
51 47
52 48
53void Wait::setWaiting( bool w ) 49void 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
72void Wait::paintEvent( QPaintEvent * ) 68void 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