summaryrefslogtreecommitdiff
authorzecke <zecke>2005-03-03 21:01:18 (UTC)
committer zecke <zecke>2005-03-03 21:01:18 (UTC)
commit67ddc501f2a52c7f35ca4044fb0094e759a45d76 (patch) (unidiff)
tree7c863f306e6fb7c1aecfb2f8c1ff4a217bfefa1c
parent585c9fe0efbc0cf4037a79cac3b22ac38c08fec2 (diff)
downloadopie-67ddc501f2a52c7f35ca4044fb0094e759a45d76.zip
opie-67ddc501f2a52c7f35ca4044fb0094e759a45d76.tar.gz
opie-67ddc501f2a52c7f35ca4044fb0094e759a45d76.tar.bz2
Start and Restart the QSound-Server
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/server.cpp22
-rw-r--r--core/launcher/server.h7
2 files changed, 28 insertions, 1 deletions
diff --git a/core/launcher/server.cpp b/core/launcher/server.cpp
index 15cd686..921b790 100644
--- a/core/launcher/server.cpp
+++ b/core/launcher/server.cpp
@@ -1,986 +1,1006 @@
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 "startmenu.h" 23#include "startmenu.h"
24#include "launcher.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 "shutdownimpl.h" 32#include "shutdownimpl.h"
33#include "applauncher.h" 33#include "applauncher.h"
34#if 0 34#if 0
35#include "suspendmonitor.h" 35#include "suspendmonitor.h"
36#endif 36#endif
37#include "documentlist.h" 37#include "documentlist.h"
38#include "qrr.h" 38#include "qrr.h"
39 39
40/* OPIE */ 40/* OPIE */
41#include <opie2/odebug.h> 41#include <opie2/odebug.h>
42#include <opie2/odevicebutton.h> 42#include <opie2/odevicebutton.h>
43#include <opie2/odevice.h> 43#include <opie2/odevice.h>
44#include <opie2/oprocess.h>
45
44#include <qtopia/applnk.h> 46#include <qtopia/applnk.h>
45#include <qtopia/private/categories.h> 47#include <qtopia/private/categories.h>
46#include <qtopia/mimetype.h> 48#include <qtopia/mimetype.h>
47#include <qtopia/config.h> 49#include <qtopia/config.h>
48#include <qtopia/resource.h> 50#include <qtopia/resource.h>
49#include <qtopia/version.h> 51#include <qtopia/version.h>
50#include <qtopia/storage.h> 52#include <qtopia/storage.h>
51#include <qtopia/qcopenvelope_qws.h> 53#include <qtopia/qcopenvelope_qws.h>
52#include <qtopia/global.h> 54#include <qtopia/global.h>
53using namespace Opie::Core; 55using namespace Opie::Core;
54 56
55/* QT */ 57/* QT */
56#include <qmainwindow.h> 58#include <qmainwindow.h>
57#include <qmessagebox.h> 59#include <qmessagebox.h>
58#include <qtimer.h> 60#include <qtimer.h>
59#include <qtextstream.h> 61#include <qtextstream.h>
60#include <qwindowsystem_qws.h> 62#include <qwindowsystem_qws.h>
61#include <qgfx_qws.h> 63#include <qgfx_qws.h>
62 64
63/* STD */ 65/* STD */
64#include <unistd.h> 66#include <unistd.h>
65#include <stdlib.h> 67#include <stdlib.h>
66 68
67extern QRect qt_maxWindowRect; 69extern QRect qt_maxWindowRect;
68 70
69static QWidget *calibrate(bool) 71static QWidget *calibrate(bool)
70{ 72{
71#ifdef Q_WS_QWS 73#ifdef Q_WS_QWS
72 Calibrate *c = new Calibrate; 74 Calibrate *c = new Calibrate;
73 c->show(); 75 c->show();
74 return c; 76 return c;
75#else 77#else
76 return 0; 78 return 0;
77#endif 79#endif
78} 80}
79 81
80#define FACTORY(T) \ 82#define FACTORY(T) \
81 static QWidget *new##T( bool maximized ) { \ 83 static QWidget *new##T( bool maximized ) { \
82 QWidget *w = new T( 0, 0, QWidget::WDestructiveClose | QWidget::WGroupLeader ); \ 84 QWidget *w = new T( 0, 0, QWidget::WDestructiveClose | QWidget::WGroupLeader ); \
83 if ( maximized ) { \ 85 if ( maximized ) { \
84 if ( qApp->desktop()->width() <= 350 ) { \ 86 if ( qApp->desktop()->width() <= 350 ) { \
85 w->showMaximized(); \ 87 w->showMaximized(); \
86 } else { \ 88 } else { \
87 w->resize( QSize( 300, 300 ) ); \ 89 w->resize( QSize( 300, 300 ) ); \
88 } \ 90 } \
89 } \ 91 } \
90 w->show(); \ 92 w->show(); \
91 return w; \ 93 return w; \
92 } 94 }
93 95
94 96
95#ifdef SINGLE_APP 97#ifdef SINGLE_APP
96#define APP(a,b,c,d) FACTORY(b) 98#define APP(a,b,c,d) FACTORY(b)
97#include "apps.h" 99#include "apps.h"
98#undef APP 100#undef APP
99#endif // SINGLE_APP 101#endif // SINGLE_APP
100 102
101static Global::Command builtins[] = { 103static Global::Command builtins[] = {
102 104
103#ifdef SINGLE_APP 105#ifdef SINGLE_APP
104#define APP(a,b,c,d) { a, new##b, c, d }, 106#define APP(a,b,c,d) { a, new##b, c, d },
105#include "apps.h" 107#include "apps.h"
106#undef APP 108#undef APP
107#endif 109#endif
108 110
109 /* FIXME defines need to be defined*/ 111 /* FIXME defines need to be defined*/
110#if !defined(OPIE_NO_BUILTIN_CALIBRATE) 112#if !defined(OPIE_NO_BUILTIN_CALIBRATE)
111 { "calibrate", calibrate, 1, 0 }, // No tr 113 { "calibrate", calibrate, 1, 0 }, // No tr
112#endif 114#endif
113#if !defined(OPIE_NO_BUILTIN_SHUTDOWN) 115#if !defined(OPIE_NO_BUILTIN_SHUTDOWN)
114 { "shutdown", Global::shutdown, 1, 0 }, // No tr 116 { "shutdown", Global::shutdown, 1, 0 }, // No tr
115// { "run", run, 1, 0 }, // No tr 117// { "run", run, 1, 0 }, // No tr
116#endif 118#endif
117 119
118 { 0, calibrate, 0, 0 }, 120 { 0, calibrate, 0, 0 },
119}; 121};
120 122
121#ifdef QPE_HAVE_DIRECT_ACCESS 123#ifdef QPE_HAVE_DIRECT_ACCESS
122extern void readyDirectAccess(QString cardInfo, QString installLocations); 124extern void readyDirectAccess(QString cardInfo, QString installLocations);
123extern const char *directAccessQueueFile(); 125extern const char *directAccessQueueFile();
124#endif 126#endif
125 127
126//--------------------------------------------------------------------------- 128//---------------------------------------------------------------------------
127 129
128 130
129//=========================================================================== 131//===========================================================================
130 132
131Server::Server() : 133Server::Server() :
132 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), 134 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ),
133 qcopBridge( 0 ), 135 qcopBridge( 0 ),
134 transferServer( 0 ), 136 transferServer( 0 ),
135 packageHandler( 0 ), 137 packageHandler( 0 ),
136 syncDialog( 0 ) 138 syncDialog( 0 ),
139 process( 0 )
137{ 140{
138 Global::setBuiltinCommands(builtins); 141 Global::setBuiltinCommands(builtins);
139 142
140 tid_xfer = 0; 143 tid_xfer = 0;
141 /* ### FIXME ### */ 144 /* ### FIXME ### */
142/* tid_today = startTimer(3600*2*1000);*/ 145/* tid_today = startTimer(3600*2*1000);*/
143 last_today_show = QDate::currentDate(); 146 last_today_show = QDate::currentDate();
144 147
145#warning FIXME support TempScreenSaverMode 148#warning FIXME support TempScreenSaverMode
146#if 0 149#if 0
147 tsmMonitor = new TempScreenSaverMode(); 150 tsmMonitor = new TempScreenSaverMode();
148 connect( tsmMonitor, SIGNAL(forceSuspend()), qApp, SIGNAL(power()) ); 151 connect( tsmMonitor, SIGNAL(forceSuspend()), qApp, SIGNAL(power()) );
149#endif 152#endif
150 153
151 serverGui = new Launcher; 154 serverGui = new Launcher;
152 serverGui->createGUI(); 155 serverGui->createGUI();
153 156
154 docList = new DocumentList( serverGui ); 157 docList = new DocumentList( serverGui );
155 appLauncher = new AppLauncher(this); 158 appLauncher = new AppLauncher(this);
156 connect(appLauncher, SIGNAL(launched(int,const QString&)), this, SLOT(applicationLaunched(int,const QString&)) ); 159 connect(appLauncher, SIGNAL(launched(int,const QString&)), this, SLOT(applicationLaunched(int,const QString&)) );
157 connect(appLauncher, SIGNAL(terminated(int,const QString&)), this, SLOT(applicationTerminated(int,const QString&)) ); 160 connect(appLauncher, SIGNAL(terminated(int,const QString&)), this, SLOT(applicationTerminated(int,const QString&)) );
158 connect(appLauncher, SIGNAL(connected(const QString&)), this, SLOT(applicationConnected(const QString&)) ); 161 connect(appLauncher, SIGNAL(connected(const QString&)), this, SLOT(applicationConnected(const QString&)) );
159 162
160 storage = new StorageInfo( this ); 163 storage = new StorageInfo( this );
161 connect( storage, SIGNAL(disksChanged()), this, SLOT(storageChanged()) ); 164 connect( storage, SIGNAL(disksChanged()), this, SLOT(storageChanged()) );
162 165
163 166
164#ifdef QPE_HAVE_DIRECT_ACCESS 167#ifdef QPE_HAVE_DIRECT_ACCESS
165 QCopChannel *desktopChannel = new QCopChannel( "QPE/Desktop", this ); 168 QCopChannel *desktopChannel = new QCopChannel( "QPE/Desktop", this );
166 connect( desktopChannel, SIGNAL(received( const QCString &, const QByteArray & )), 169 connect( desktopChannel, SIGNAL(received( const QCString &, const QByteArray & )),
167 this, SLOT(desktopMessage( const QCString &, const QByteArray & )) ); 170 this, SLOT(desktopMessage( const QCString &, const QByteArray & )) );
168#endif 171#endif
169 172
173 soundServerExited();
174
170 // start services 175 // start services
171 startTransferServer(); 176 startTransferServer();
172 (void) new IrServer( this ); 177 (void) new IrServer( this );
173 178
174 packageHandler = new PackageHandler( this ); 179 packageHandler = new PackageHandler( this );
175 connect(qApp, SIGNAL(activate(const Opie::Core::ODeviceButton*,bool)), 180 connect(qApp, SIGNAL(activate(const Opie::Core::ODeviceButton*,bool)),
176 this,SLOT(activate(const Opie::Core::ODeviceButton*,bool))); 181 this,SLOT(activate(const Opie::Core::ODeviceButton*,bool)));
177 182
178 setGeometry( -10, -10, 9, 9 ); 183 setGeometry( -10, -10, 9, 9 );
179 184
180 QCopChannel *channel = new QCopChannel("QPE/System", this); 185 QCopChannel *channel = new QCopChannel("QPE/System", this);
181 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)), 186 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)),
182 this, SLOT(systemMsg(const QCString&,const QByteArray&)) ); 187 this, SLOT(systemMsg(const QCString&,const QByteArray&)) );
183 188
184 QCopChannel *tbChannel = new QCopChannel( "QPE/TaskBar", this ); 189 QCopChannel *tbChannel = new QCopChannel( "QPE/TaskBar", this );
185 connect( tbChannel, SIGNAL(received(const QCString&,const QByteArray&)), 190 connect( tbChannel, SIGNAL(received(const QCString&,const QByteArray&)),
186 this, SLOT(receiveTaskBar(const QCString&,const QByteArray&)) ); 191 this, SLOT(receiveTaskBar(const QCString&,const QByteArray&)) );
187 192
188 connect( qApp, SIGNAL(prepareForRestart()), this, SLOT(terminateServers()) ); 193 connect( qApp, SIGNAL(prepareForRestart()), this, SLOT(terminateServers()) );
189 connect( qApp, SIGNAL(timeChanged()), this, SLOT(pokeTimeMonitors()) ); 194 connect( qApp, SIGNAL(timeChanged()), this, SLOT(pokeTimeMonitors()) );
190 195
191 preloadApps(); 196 preloadApps();
192} 197}
193 198
194void Server::show() 199void Server::show()
195{ 200{
196 ServerApplication::login(TRUE); 201 ServerApplication::login(TRUE);
197 QWidget::show(); 202 QWidget::show();
198} 203}
199 204
200Server::~Server() 205Server::~Server()
201{ 206{
202 serverGui->destroyGUI(); 207 serverGui->destroyGUI();
203 delete docList; 208 delete docList;
204 delete qcopBridge; 209 delete qcopBridge;
205 delete transferServer; 210 delete transferServer;
206 delete serverGui; 211 delete serverGui;
207#if 0 212#if 0
208 delete tsmMonitor; 213 delete tsmMonitor;
209#endif 214#endif
210} 215}
211 216
212 217
213static bool hasVisibleWindow(const QString& clientname, bool partial) 218static bool hasVisibleWindow(const QString& clientname, bool partial)
214{ 219{
215#ifdef QWS 220#ifdef QWS
216 const QList<QWSWindow> &list = qwsServer->clientWindows(); 221 const QList<QWSWindow> &list = qwsServer->clientWindows();
217 QWSWindow* w; 222 QWSWindow* w;
218 for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { 223 for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
219 if ( w->client()->identity() == clientname ) { 224 if ( w->client()->identity() == clientname ) {
220 if ( partial && !w->isFullyObscured() ) 225 if ( partial && !w->isFullyObscured() )
221 return TRUE; 226 return TRUE;
222 if ( !partial && !w->isFullyObscured() && !w->isPartiallyObscured() ) { 227 if ( !partial && !w->isFullyObscured() && !w->isPartiallyObscured() ) {
223# if QT_VERSION < 0x030000 228# if QT_VERSION < 0x030000
224 QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect, 229 QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect,
225 QSize(qt_screen->width(),qt_screen->height()) ); 230 QSize(qt_screen->width(),qt_screen->height()) );
226# else 231# else
227 QRect mwr = qt_maxWindowRect; 232 QRect mwr = qt_maxWindowRect;
228# endif 233# endif
229 if ( mwr.contains(w->requested().boundingRect()) ) 234 if ( mwr.contains(w->requested().boundingRect()) )
230 return TRUE; 235 return TRUE;
231 } 236 }
232 } 237 }
233 } 238 }
234#endif 239#endif
235 return FALSE; 240 return FALSE;
236} 241}
237 242
238void Server::activate(const ODeviceButton* button, bool held) 243void Server::activate(const ODeviceButton* button, bool held)
239{ 244{
240 Global::terminateBuiltin("calibrate"); // No tr 245 Global::terminateBuiltin("calibrate"); // No tr
241 OQCopMessage om; 246 OQCopMessage om;
242 if ( held ) { 247 if ( held ) {
243 om = button->heldAction(); 248 om = button->heldAction();
244 } else { 249 } else {
245 om = button->pressedAction(); 250 om = button->pressedAction();
246 } 251 }
247 252
248 if ( om.channel() != "ignore" ) 253 if ( om.channel() != "ignore" )
249 om.send(); 254 om.send();
250 255
251 // A button with no action defined, will return a null ServiceRequest. Don't attempt 256 // A button with no action defined, will return a null ServiceRequest. Don't attempt
252 // to send/do anything with this as it will crash 257 // to send/do anything with this as it will crash
253 /* ### FIXME */ 258 /* ### FIXME */
254#if 0 259#if 0
255 if ( !sr.isNull() ) { 260 if ( !sr.isNull() ) {
256 QString app = sr.app(); 261 QString app = sr.app();
257 bool vis = hasVisibleWindow(app, app != "qpe"); 262 bool vis = hasVisibleWindow(app, app != "qpe");
258 if ( sr.message() == "raise()" && vis ) { 263 if ( sr.message() == "raise()" && vis ) {
259 sr.setMessage("nextView()"); 264 sr.setMessage("nextView()");
260 } else { 265 } else {
261 // "back door" 266 // "back door"
262 sr << (int)vis; 267 sr << (int)vis;
263 } 268 }
264 269
265 sr.send(); 270 sr.send();
266 } 271 }
267#endif 272#endif
268} 273}
269 274
270 275
271#ifdef Q_WS_QWS 276#ifdef Q_WS_QWS
272 277
273typedef struct KeyOverride { 278typedef struct KeyOverride {
274 ushort scan_code; 279 ushort scan_code;
275 QWSServer::KeyMap map; 280 QWSServer::KeyMap map;
276}; 281};
277 282
278 283
279static const KeyOverride jp109keys[] = { 284static const KeyOverride jp109keys[] = {
280 { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } }, 285 { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } },
281 { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } }, 286 { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } },
282 { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } }, 287 { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } },
283 { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } }, 288 { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } },
284 { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } }, 289 { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } },
285 { 0x0b, { Qt::Key_0, '0' , 0xffff, 0xffff } }, 290 { 0x0b, { Qt::Key_0, '0' , 0xffff, 0xffff } },
286 { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } }, 291 { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } },
287 { 0x0d, { Qt::Key_AsciiCircum, '^' , '~' , '^'-64 } }, 292 { 0x0d, { Qt::Key_AsciiCircum, '^' , '~' , '^'-64 } },
288 { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } }, 293 { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } },
289 { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '['-64 } }, 294 { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '['-64 } },
290 { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } }, 295 { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } },
291 { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } }, 296 { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } },
292 { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff, 0xffff, 0xffff } }, 297 { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff, 0xffff, 0xffff } },
293 { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } }, 298 { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } },
294 { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff, 0xffff, 0xffff } }, 299 { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff, 0xffff, 0xffff } },
295 { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } }, 300 { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } },
296 { 0x79, { Qt::Key_Henkan, 0xffff, 0xffff, 0xffff } }, 301 { 0x79, { Qt::Key_Henkan, 0xffff, 0xffff, 0xffff } },
297 { 0x7b, { Qt::Key_Muhenkan, 0xffff, 0xffff, 0xffff } }, 302 { 0x7b, { Qt::Key_Muhenkan, 0xffff, 0xffff, 0xffff } },
298 { 0x7d, { Qt::Key_yen, 0x00a5, '|' , 0xffff } }, 303 { 0x7d, { Qt::Key_yen, 0x00a5, '|' , 0xffff } },
299 { 0x00, { 0, 0xffff, 0xffff, 0xffff } } 304 { 0x00, { 0, 0xffff, 0xffff, 0xffff } }
300}; 305};
301 306
302bool Server::setKeyboardLayout( const QString &kb ) 307bool Server::setKeyboardLayout( const QString &kb )
303{ 308{
304 //quick demo version that can be extended 309 //quick demo version that can be extended
305 310
306 QIntDict<QWSServer::KeyMap> *om = 0; 311 QIntDict<QWSServer::KeyMap> *om = 0;
307 if ( kb == "us101" ) { // No tr 312 if ( kb == "us101" ) { // No tr
308 om = 0; 313 om = 0;
309 } else if ( kb == "jp109" ) { 314 } else if ( kb == "jp109" ) {
310 om = new QIntDict<QWSServer::KeyMap>(37); 315 om = new QIntDict<QWSServer::KeyMap>(37);
311 const KeyOverride *k = jp109keys; 316 const KeyOverride *k = jp109keys;
312 while ( k->scan_code ) { 317 while ( k->scan_code ) {
313 om->insert( k->scan_code, &k->map ); 318 om->insert( k->scan_code, &k->map );
314 k++; 319 k++;
315 } 320 }
316 } 321 }
317 QWSServer::setOverrideKeys( om ); 322 QWSServer::setOverrideKeys( om );
318 323
319 return TRUE; 324 return TRUE;
320} 325}
321#endif 326#endif
322 327
323void Server::systemMsg(const QCString &msg, const QByteArray &data) 328void Server::systemMsg(const QCString &msg, const QByteArray &data)
324{ 329{
325 QDataStream stream( data, IO_ReadOnly ); 330 QDataStream stream( data, IO_ReadOnly );
326 331
327 if ( msg == "securityChanged()" ) { 332 if ( msg == "securityChanged()" ) {
328 if ( transferServer ) 333 if ( transferServer )
329 transferServer->authorizeConnections(); 334 transferServer->authorizeConnections();
330 335
331 if ( qcopBridge ) 336 if ( qcopBridge )
332 qcopBridge->authorizeConnections(); 337 qcopBridge->authorizeConnections();
333#warning FIXME support TempScreenSaverMode 338#warning FIXME support TempScreenSaverMode
334#if 0 339#if 0
335 } else if ( msg == "setTempScreenSaverMode(int,int)" ) { 340 } else if ( msg == "setTempScreenSaverMode(int,int)" ) {
336 int mode, pid; 341 int mode, pid;
337 stream >> mode >> pid; 342 stream >> mode >> pid;
338 tsmMonitor->setTempMode(mode, pid); 343 tsmMonitor->setTempMode(mode, pid);
339#endif 344#endif
340 } else if ( msg == "linkChanged(QString)" ) { 345 } else if ( msg == "linkChanged(QString)" ) {
341 QString link; 346 QString link;
342 stream >> link; 347 stream >> link;
343 odebug << "desktop.cpp systemMsg -> linkchanged( " << link << " )" << oendl; 348 odebug << "desktop.cpp systemMsg -> linkchanged( " << link << " )" << oendl;
344 docList->linkChanged(link); 349 docList->linkChanged(link);
345 } else if (msg =="reforceDocuments()") { 350 } else if (msg =="reforceDocuments()") {
346 docList->reforceDocuments(); 351 docList->reforceDocuments();
347 } else if ( msg == "serviceChanged(QString)" ) { 352 } else if ( msg == "serviceChanged(QString)" ) {
348 MimeType::updateApplications(); 353 MimeType::updateApplications();
349 } else if ( msg == "mkdir(QString)" ) { 354 } else if ( msg == "mkdir(QString)" ) {
350 QString dir; 355 QString dir;
351 stream >> dir; 356 stream >> dir;
352 if ( !dir.isEmpty() ) 357 if ( !dir.isEmpty() )
353 mkdir( dir ); 358 mkdir( dir );
354 } else if ( msg == "rdiffGenSig(QString,QString)" ) { 359 } else if ( msg == "rdiffGenSig(QString,QString)" ) {
355 QString baseFile, sigFile; 360 QString baseFile, sigFile;
356 stream >> baseFile >> sigFile; 361 stream >> baseFile >> sigFile;
357 QRsync::generateSignature( baseFile, sigFile ); 362 QRsync::generateSignature( baseFile, sigFile );
358 } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) { 363 } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) {
359 QString baseFile, sigFile, deltaFile; 364 QString baseFile, sigFile, deltaFile;
360 stream >> baseFile >> sigFile >> deltaFile; 365 stream >> baseFile >> sigFile >> deltaFile;
361 QRsync::generateDiff( baseFile, sigFile, deltaFile ); 366 QRsync::generateDiff( baseFile, sigFile, deltaFile );
362 } else if ( msg == "rdiffApplyPatch(QString,QString)" ) { 367 } else if ( msg == "rdiffApplyPatch(QString,QString)" ) {
363 QString baseFile, deltaFile; 368 QString baseFile, deltaFile;
364 stream >> baseFile >> deltaFile; 369 stream >> baseFile >> deltaFile;
365 if ( !QFile::exists( baseFile ) ) { 370 if ( !QFile::exists( baseFile ) ) {
366 QFile f( baseFile ); 371 QFile f( baseFile );
367 f.open( IO_WriteOnly ); 372 f.open( IO_WriteOnly );
368 f.close(); 373 f.close();
369 } 374 }
370 QRsync::applyDiff( baseFile, deltaFile ); 375 QRsync::applyDiff( baseFile, deltaFile );
371#ifndef QT_NO_COP 376#ifndef QT_NO_COP
372 QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" ); 377 QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" );
373 e << baseFile; 378 e << baseFile;
374#endif 379#endif
375 } else if ( msg == "rdiffCleanup()" ) { 380 } else if ( msg == "rdiffCleanup()" ) {
376 mkdir( "/tmp/rdiff" ); 381 mkdir( "/tmp/rdiff" );
377 QDir dir; 382 QDir dir;
378 dir.setPath( "/tmp/rdiff" ); 383 dir.setPath( "/tmp/rdiff" );
379 QStringList entries = dir.entryList(); 384 QStringList entries = dir.entryList();
380 for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it ) 385 for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it )
381 dir.remove( *it ); 386 dir.remove( *it );
382 } else if ( msg == "sendHandshakeInfo()" ) { 387 } else if ( msg == "sendHandshakeInfo()" ) {
383 QString home = getenv( "HOME" ); 388 QString home = getenv( "HOME" );
384#ifndef QT_NO_COP 389#ifndef QT_NO_COP
385 QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" ); 390 QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" );
386 e << home; 391 e << home;
387 int locked = (int) ServerApplication::screenLocked(); 392 int locked = (int) ServerApplication::screenLocked();
388 e << locked; 393 e << locked;
389#endif 394#endif
390 } else if ( msg == "sendVersionInfo()" ) { 395 } else if ( msg == "sendVersionInfo()" ) {
391 /* 396 /*
392 * @&$*! Qtopiadesktop relies on the major number 397 * @&$*! Qtopiadesktop relies on the major number
393 * to start with 1. (or 2 as the case of version 2.1 will be) 398 * to start with 1. (or 2 as the case of version 2.1 will be)
394 * we need to fake 1.7 to be able 399 * we need to fake 1.7 to be able
395 * to sync with Qtopiadesktop 1.7. 400 * to sync with Qtopiadesktop 1.7.
396 * We'll send it Opie's version in the platform string for now, 401 * We'll send it Opie's version in the platform string for now,
397 * until such time when QD gets rewritten correctly. 402 * until such time when QD gets rewritten correctly.
398 */ 403 */
399 QCopEnvelope e( "QPE/Desktop", "versionInfo(QString,QString)" ); 404 QCopEnvelope e( "QPE/Desktop", "versionInfo(QString,QString)" );
400 405
401 QString opiename = "Opie "+QString(QPE_VERSION); 406 QString opiename = "Opie "+QString(QPE_VERSION);
402 QString QDVersion="1.7"; 407 QString QDVersion="1.7";
403 e << QDVersion << opiename; 408 e << QDVersion << opiename;
404 409
405 } else if ( msg == "sendCardInfo()" ) { 410 } else if ( msg == "sendCardInfo()" ) {
406#ifndef QT_NO_COP 411#ifndef QT_NO_COP
407 QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" ); 412 QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" );
408#endif 413#endif
409 storage->update(); 414 storage->update();
410 const QList<FileSystem> &fs = storage->fileSystems(); 415 const QList<FileSystem> &fs = storage->fileSystems();
411 QListIterator<FileSystem> it ( fs ); 416 QListIterator<FileSystem> it ( fs );
412 QString s; 417 QString s;
413 QString homeDir = getenv("HOME"); 418 QString homeDir = getenv("HOME");
414 QString homeFs, homeFsPath; 419 QString homeFs, homeFsPath;
415 for ( ; it.current(); ++it ) { 420 for ( ; it.current(); ++it ) {
416 int k4 = (*it)->blockSize()/256; 421 int k4 = (*it)->blockSize()/256;
417 if ( (*it)->isRemovable() ) { 422 if ( (*it)->isRemovable() ) {
418 s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr 423 s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr
419 + QString::number( (*it)->availBlocks() * k4/4 ) 424 + QString::number( (*it)->availBlocks() * k4/4 )
420 + "K " + (*it)->options() + ";"; 425 + "K " + (*it)->options() + ";";
421 } else if ( homeDir.contains( (*it)->path() ) && 426 } else if ( homeDir.contains( (*it)->path() ) &&
422 (*it)->path().length() > homeFsPath.length() ) { 427 (*it)->path().length() > homeFsPath.length() ) {
423 homeFsPath = (*it)->path(); 428 homeFsPath = (*it)->path();
424 homeFs = 429 homeFs =
425 (*it)->name() + "=" + homeDir + "/Documents " // No tr 430 (*it)->name() + "=" + homeDir + "/Documents " // No tr
426 + QString::number( (*it)->availBlocks() * k4/4 ) 431 + QString::number( (*it)->availBlocks() * k4/4 )
427 + "K " + (*it)->options() + ";"; 432 + "K " + (*it)->options() + ";";
428 } 433 }
429 } 434 }
430 if ( !homeFs.isEmpty() ) 435 if ( !homeFs.isEmpty() )
431 s += homeFs; 436 s += homeFs;
432#ifndef QT_NO_COP 437#ifndef QT_NO_COP
433 e << s; 438 e << s;
434#endif 439#endif
435 } else if ( msg == "sendInstallLocations()" ) { 440 } else if ( msg == "sendInstallLocations()" ) {
436#ifndef QT_NO_COP 441#ifndef QT_NO_COP
437 QCopEnvelope e( "QPE/Desktop", "installLocations(QString)" ); 442 QCopEnvelope e( "QPE/Desktop", "installLocations(QString)" );
438 e << installLocationsString(); 443 e << installLocationsString();
439#endif 444#endif
440 } else if ( msg == "sendSyncDate(QString)" ) { 445 } else if ( msg == "sendSyncDate(QString)" ) {
441 QString app; 446 QString app;
442 stream >> app; 447 stream >> app;
443 Config cfg( "qpe" ); 448 Config cfg( "qpe" );
444 cfg.setGroup("SyncDate"); 449 cfg.setGroup("SyncDate");
445#ifndef QT_NO_COP 450#ifndef QT_NO_COP
446 QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" ); 451 QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" );
447 e << app << cfg.readEntry( app ); 452 e << app << cfg.readEntry( app );
448#endif 453#endif
449 //odebug << "QPE/System sendSyncDate for " << app.latin1() << ": response " 454 //odebug << "QPE/System sendSyncDate for " << app.latin1() << ": response "
450 // << cfg.readEntry( app ).latin1() << oendl; 455 // << cfg.readEntry( app ).latin1() << oendl;
451 } else if ( msg == "setSyncDate(QString,QString)" ) { 456 } else if ( msg == "setSyncDate(QString,QString)" ) {
452 QString app, date; 457 QString app, date;
453 stream >> app >> date; 458 stream >> app >> date;
454 Config cfg( "qpe" ); 459 Config cfg( "qpe" );
455 cfg.setGroup("SyncDate"); 460 cfg.setGroup("SyncDate");
456 cfg.writeEntry( app, date ); 461 cfg.writeEntry( app, date );
457 //odebug << "setSyncDate(QString,QString) " << app << " " << date << "" << oendl; 462 //odebug << "setSyncDate(QString,QString) " << app << " " << date << "" << oendl;
458 } else if ( msg == "startSync(QString)" ) { 463 } else if ( msg == "startSync(QString)" ) {
459 QString what; 464 QString what;
460 stream >> what; 465 stream >> what;
461 delete syncDialog; 466 delete syncDialog;
462 syncDialog = new SyncDialog( this, what ); 467 syncDialog = new SyncDialog( this, what );
463 syncDialog->show(); 468 syncDialog->show();
464 connect( syncDialog, SIGNAL(cancel()), SLOT(cancelSync()) ); 469 connect( syncDialog, SIGNAL(cancel()), SLOT(cancelSync()) );
465 } else if ( msg == "stopSync()") { 470 } else if ( msg == "stopSync()") {
466 delete syncDialog; 471 delete syncDialog;
467 syncDialog = 0; 472 syncDialog = 0;
468 } else if (msg == "restoreDone(QString)") { 473 } else if (msg == "restoreDone(QString)") {
469 docList->restoreDone(); 474 docList->restoreDone();
470 } else if ( msg == "getAllDocLinks()" ) { 475 } else if ( msg == "getAllDocLinks()" ) {
471 docList->sendAllDocLinks(); 476 docList->sendAllDocLinks();
472 } 477 }
473#ifdef QPE_HAVE_DIRECT_ACCESS 478#ifdef QPE_HAVE_DIRECT_ACCESS
474 else if ( msg == "prepareDirectAccess()" ) { 479 else if ( msg == "prepareDirectAccess()" ) {
475 prepareDirectAccess(); 480 prepareDirectAccess();
476 } else if ( msg == "postDirectAccess()" ) { 481 } else if ( msg == "postDirectAccess()" ) {
477 postDirectAccess(); 482 postDirectAccess();
478 } 483 }
479#endif 484#endif
480#ifdef Q_WS_QWS 485#ifdef Q_WS_QWS
481 486
482 else if ( msg == "setMouseProto(QString)" ) { 487 else if ( msg == "setMouseProto(QString)" ) {
483 QString mice; 488 QString mice;
484 stream >> mice; 489 stream >> mice;
485 setenv("QWS_MOUSE_PROTO",mice.latin1(),1); 490 setenv("QWS_MOUSE_PROTO",mice.latin1(),1);
486 qwsServer->openMouse(); 491 qwsServer->openMouse();
487 } else if ( msg == "setKeyboard(QString)" ) { 492 } else if ( msg == "setKeyboard(QString)" ) {
488 QString kb; 493 QString kb;
489 stream >> kb; 494 stream >> kb;
490 setenv("QWS_KEYBOARD",kb.latin1(),1); 495 setenv("QWS_KEYBOARD",kb.latin1(),1);
491 qwsServer->openKeyboard(); 496 qwsServer->openKeyboard();
492 } else if ( msg == "setKeyboardAutoRepeat(int,int)" ) { 497 } else if ( msg == "setKeyboardAutoRepeat(int,int)" ) {
493 int delay, period; 498 int delay, period;
494 stream >> delay >> period; 499 stream >> delay >> period;
495 qwsSetKeyboardAutoRepeat( delay, period ); 500 qwsSetKeyboardAutoRepeat( delay, period );
496 Config cfg( "qpe" ); 501 Config cfg( "qpe" );
497 cfg.setGroup("Keyboard"); 502 cfg.setGroup("Keyboard");
498 cfg.writeEntry( "RepeatDelay", delay ); 503 cfg.writeEntry( "RepeatDelay", delay );
499 cfg.writeEntry( "RepeatPeriod", period ); 504 cfg.writeEntry( "RepeatPeriod", period );
500 } else if ( msg == "setKeyboardLayout(QString)" ) { 505 } else if ( msg == "setKeyboardLayout(QString)" ) {
501 QString kb; 506 QString kb;
502 stream >> kb; 507 stream >> kb;
503 setKeyboardLayout( kb ); 508 setKeyboardLayout( kb );
504 Config cfg( "qpe" ); 509 Config cfg( "qpe" );
505 cfg.setGroup("Keyboard"); 510 cfg.setGroup("Keyboard");
506 cfg.writeEntry( "Layout", kb ); 511 cfg.writeEntry( "Layout", kb );
507 } else if ( msg == "autoStart(QString)" ) { 512 } else if ( msg == "autoStart(QString)" ) {
508 QString appName; 513 QString appName;
509 stream >> appName; 514 stream >> appName;
510 Config cfg( "autostart" ); 515 Config cfg( "autostart" );
511 cfg.setGroup( "AutoStart" ); 516 cfg.setGroup( "AutoStart" );
512 if ( appName.compare("clear") == 0){ 517 if ( appName.compare("clear") == 0){
513 cfg.writeEntry("Apps", ""); 518 cfg.writeEntry("Apps", "");
514 } 519 }
515 } else if ( msg == "autoStart(QString,QString)" ) { 520 } else if ( msg == "autoStart(QString,QString)" ) {
516 QString modifier, appName; 521 QString modifier, appName;
517 stream >> modifier >> appName; 522 stream >> modifier >> appName;
518 Config cfg( "autostart" ); 523 Config cfg( "autostart" );
519 cfg.setGroup( "AutoStart" ); 524 cfg.setGroup( "AutoStart" );
520 if ( modifier.compare("add") == 0 ){ 525 if ( modifier.compare("add") == 0 ){
521 // only add if appname is entered 526 // only add if appname is entered
522 if (!appName.isEmpty()) { 527 if (!appName.isEmpty()) {
523 cfg.writeEntry("Apps", appName); 528 cfg.writeEntry("Apps", appName);
524 } 529 }
525 } else if (modifier.compare("remove") == 0 ) { 530 } else if (modifier.compare("remove") == 0 ) {
526 // need to change for multiple entries 531 // need to change for multiple entries
527 // actually remove is right now simular to clear, but in future there 532 // actually remove is right now simular to clear, but in future there
528 // should be multiple apps in autostart possible. 533 // should be multiple apps in autostart possible.
529 QString checkName; 534 QString checkName;
530 checkName = cfg.readEntry("Apps", ""); 535 checkName = cfg.readEntry("Apps", "");
531 if (checkName == appName) { 536 if (checkName == appName) {
532 cfg.writeEntry("Apps", ""); 537 cfg.writeEntry("Apps", "");
533 } 538 }
534 } 539 }
535 // case the autostart feature should be delayed 540 // case the autostart feature should be delayed
536 } else if ( msg == "autoStart(QString,QString,QString)") { 541 } else if ( msg == "autoStart(QString,QString,QString)") {
537 QString modifier, appName, delay; 542 QString modifier, appName, delay;
538 stream >> modifier >> appName >> delay; 543 stream >> modifier >> appName >> delay;
539 Config cfg( "autostart" ); 544 Config cfg( "autostart" );
540 545
541 cfg.setGroup( "AutoStart" ); 546 cfg.setGroup( "AutoStart" );
542 if ( modifier.compare("add") == 0 ){ 547 if ( modifier.compare("add") == 0 ){
543 // only add it appname is entered 548 // only add it appname is entered
544 if (!appName.isEmpty()) { 549 if (!appName.isEmpty()) {
545 cfg.writeEntry("Apps", appName); 550 cfg.writeEntry("Apps", appName);
546 cfg.writeEntry("Delay", delay); 551 cfg.writeEntry("Delay", delay);
547 } 552 }
548 } 553 }
549 } 554 }
550#endif 555#endif
551} 556}
552 557
553QString Server::cardInfoString() 558QString Server::cardInfoString()
554{ 559{
555 storage->update(); 560 storage->update();
556 const QList<FileSystem> &fs = storage->fileSystems(); 561 const QList<FileSystem> &fs = storage->fileSystems();
557 QListIterator<FileSystem> it ( fs ); 562 QListIterator<FileSystem> it ( fs );
558 QString s; 563 QString s;
559 QString homeDir = getenv("HOME"); 564 QString homeDir = getenv("HOME");
560 QString homeFs, homeFsPath; 565 QString homeFs, homeFsPath;
561 for ( ; it.current(); ++it ) { 566 for ( ; it.current(); ++it ) {
562 int k4 = (*it)->blockSize()/256; 567 int k4 = (*it)->blockSize()/256;
563 if ( (*it)->isRemovable() ) { 568 if ( (*it)->isRemovable() ) {
564 s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr 569 s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr
565 + QString::number( (*it)->availBlocks() * k4/4 ) 570 + QString::number( (*it)->availBlocks() * k4/4 )
566 + "K " + (*it)->options() + ";"; 571 + "K " + (*it)->options() + ";";
567 } else if ( homeDir.contains( (*it)->path() ) && 572 } else if ( homeDir.contains( (*it)->path() ) &&
568 (*it)->path().length() > homeFsPath.length() ) { 573 (*it)->path().length() > homeFsPath.length() ) {
569 homeFsPath = (*it)->path(); 574 homeFsPath = (*it)->path();
570 homeFs = 575 homeFs =
571 (*it)->name() + "=" + homeDir + "/Documents " // No tr 576 (*it)->name() + "=" + homeDir + "/Documents " // No tr
572 + QString::number( (*it)->availBlocks() * k4/4 ) 577 + QString::number( (*it)->availBlocks() * k4/4 )
573 + "K " + (*it)->options() + ";"; 578 + "K " + (*it)->options() + ";";
574 } 579 }
575 } 580 }
576 if ( !homeFs.isEmpty() ) 581 if ( !homeFs.isEmpty() )
577 s += homeFs; 582 s += homeFs;
578 return s; 583 return s;
579} 584}
580 585
581QString Server::installLocationsString() 586QString Server::installLocationsString()
582{ 587{
583 storage->update(); 588 storage->update();
584 const QList<FileSystem> &fs = storage->fileSystems(); 589 const QList<FileSystem> &fs = storage->fileSystems();
585 QListIterator<FileSystem> it ( fs ); 590 QListIterator<FileSystem> it ( fs );
586 QString s; 591 QString s;
587 QString homeDir = getenv("HOME"); 592 QString homeDir = getenv("HOME");
588 QString homeFs, homeFsPath; 593 QString homeFs, homeFsPath;
589 for ( ; it.current(); ++it ) { 594 for ( ; it.current(); ++it ) {
590 int k4 = (*it)->blockSize()/256; 595 int k4 = (*it)->blockSize()/256;
591 if ( (*it)->isRemovable() ) { 596 if ( (*it)->isRemovable() ) {
592 s += (*it)->name() + "=" + (*it)->path() + " " // No tr 597 s += (*it)->name() + "=" + (*it)->path() + " " // No tr
593 + QString::number( (*it)->availBlocks() * k4/4 ) 598 + QString::number( (*it)->availBlocks() * k4/4 )
594 + "K " + (*it)->options() + ";"; 599 + "K " + (*it)->options() + ";";
595 } else if ( homeDir.contains( (*it)->path() ) && 600 } else if ( homeDir.contains( (*it)->path() ) &&
596 (*it)->path().length() > homeFsPath.length() ) { 601 (*it)->path().length() > homeFsPath.length() ) {
597 homeFsPath = (*it)->path(); 602 homeFsPath = (*it)->path();
598 homeFs = 603 homeFs =
599 (*it)->name() + "=" + homeDir + " " // No tr 604 (*it)->name() + "=" + homeDir + " " // No tr
600 + QString::number( (*it)->availBlocks() * k4/4 ) 605 + QString::number( (*it)->availBlocks() * k4/4 )
601 + "K " + (*it)->options() + ";"; 606 + "K " + (*it)->options() + ";";
602 } 607 }
603 } 608 }
604 if ( !homeFs.isEmpty() ) 609 if ( !homeFs.isEmpty() )
605 s = homeFs + s; 610 s = homeFs + s;
606 return s; 611 return s;
607} 612}
608 613
609void Server::receiveTaskBar(const QCString &msg, const QByteArray &data) 614void Server::receiveTaskBar(const QCString &msg, const QByteArray &data)
610{ 615{
611 QDataStream stream( data, IO_ReadOnly ); 616 QDataStream stream( data, IO_ReadOnly );
612 617
613 if ( msg == "reloadApps()" ) { 618 if ( msg == "reloadApps()" ) {
614 docList->reloadAppLnks(); 619 docList->reloadAppLnks();
615 } else if ( msg == "soundAlarm()" ) { 620 } else if ( msg == "soundAlarm()" ) {
616 ServerApplication::soundAlarm(); 621 ServerApplication::soundAlarm();
617 } else if ( msg == "setLed(int,bool)" ) { 622 } else if ( msg == "setLed(int,bool)" ) {
618 int led, status; 623 int led, status;
619 stream >> led >> status; 624 stream >> led >> status;
620 625
621 QValueList <OLed> ll = ODevice::inst ( )-> ledList ( ); 626 QValueList <OLed> ll = ODevice::inst ( )-> ledList ( );
622 if ( ll. count ( )) { 627 if ( ll. count ( )) {
623 OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0]; 628 OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0];
624 bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow ); 629 bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow );
625 630
626 ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off ); 631 ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off );
627 } 632 }
628 } 633 }
629} 634}
630 635
631void Server::cancelSync() 636void Server::cancelSync()
632{ 637{
633#ifndef QT_NO_COP 638#ifndef QT_NO_COP
634 QCopEnvelope e( "QPE/Desktop", "cancelSync()" ); 639 QCopEnvelope e( "QPE/Desktop", "cancelSync()" );
635#endif 640#endif
636 delete syncDialog; 641 delete syncDialog;
637 syncDialog = 0; 642 syncDialog = 0;
638} 643}
639 644
640bool Server::mkdir(const QString &localPath) 645bool Server::mkdir(const QString &localPath)
641{ 646{
642 QDir fullDir(localPath); 647 QDir fullDir(localPath);
643 if (fullDir.exists()) 648 if (fullDir.exists())
644 return true; 649 return true;
645 650
646 // at this point the directory doesn't exist 651 // at this point the directory doesn't exist
647 // go through the directory tree and start creating the direcotories 652 // go through the directory tree and start creating the direcotories
648 // that don't exist; if we can't create the directories, return false 653 // that don't exist; if we can't create the directories, return false
649 654
650 QString dirSeps = "/"; 655 QString dirSeps = "/";
651 int dirIndex = localPath.find(dirSeps); 656 int dirIndex = localPath.find(dirSeps);
652 QString checkedPath; 657 QString checkedPath;
653 658
654 // didn't find any seps; weird, use the cur dir instead 659 // didn't find any seps; weird, use the cur dir instead
655 if (dirIndex == -1) { 660 if (dirIndex == -1) {
656 //odebug << "No seperators found in path " << localPath << "" << oendl; 661 //odebug << "No seperators found in path " << localPath << "" << oendl;
657 checkedPath = QDir::currentDirPath(); 662 checkedPath = QDir::currentDirPath();
658 } 663 }
659 664
660 while (checkedPath != localPath) { 665 while (checkedPath != localPath) {
661 // no more seperators found, use the local path 666 // no more seperators found, use the local path
662 if (dirIndex == -1) { 667 if (dirIndex == -1) {
663 checkedPath = localPath; 668 checkedPath = localPath;
664 } else { 669 } else {
665 // the next directory to check 670 // the next directory to check
666 checkedPath = localPath.left(dirIndex) + "/"; 671 checkedPath = localPath.left(dirIndex) + "/";
667 // advance the iterator; the next dir seperator 672 // advance the iterator; the next dir seperator
668 dirIndex = localPath.find(dirSeps, dirIndex+1); 673 dirIndex = localPath.find(dirSeps, dirIndex+1);
669 } 674 }
670 675
671 QDir checkDir(checkedPath); 676 QDir checkDir(checkedPath);
672 if (!checkDir.exists()) { 677 if (!checkDir.exists()) {
673 //odebug << "mkdir making dir " << checkedPath << "" << oendl; 678 //odebug << "mkdir making dir " << checkedPath << "" << oendl;
674 679
675 if (!checkDir.mkdir(checkedPath)) { 680 if (!checkDir.mkdir(checkedPath)) {
676 odebug << "Unable to make directory " << checkedPath << "" << oendl; 681 odebug << "Unable to make directory " << checkedPath << "" << oendl;
677 return FALSE; 682 return FALSE;
678 } 683 }
679 } 684 }
680 685
681 } 686 }
682 return TRUE; 687 return TRUE;
683} 688}
684 689
685void Server::styleChange( QStyle &s ) 690void Server::styleChange( QStyle &s )
686{ 691{
687 QWidget::styleChange( s ); 692 QWidget::styleChange( s );
688} 693}
689 694
690void Server::startTransferServer() 695void Server::startTransferServer()
691{ 696{
692 if ( !qcopBridge ) { 697 if ( !qcopBridge ) {
693 // start qcop bridge server 698 // start qcop bridge server
694 qcopBridge = new QCopBridge( 4243 ); 699 qcopBridge = new QCopBridge( 4243 );
695 if ( qcopBridge->ok() ) { 700 if ( qcopBridge->ok() ) {
696 // ... OK 701 // ... OK
697 connect( qcopBridge, SIGNAL(connectionClosed(const QHostAddress&)), 702 connect( qcopBridge, SIGNAL(connectionClosed(const QHostAddress&)),
698 this, SLOT(syncConnectionClosed(const QHostAddress&)) ); 703 this, SLOT(syncConnectionClosed(const QHostAddress&)) );
699 } else { 704 } else {
700 delete qcopBridge; 705 delete qcopBridge;
701 qcopBridge = 0; 706 qcopBridge = 0;
702 } 707 }
703 } 708 }
704 709
705 if ( !transferServer ) { 710 if ( !transferServer ) {
706 // start transfer server 711 // start transfer server
707 transferServer = new TransferServer( 4242 ); 712 transferServer = new TransferServer( 4242 );
708 if ( transferServer->ok() ) { 713 if ( transferServer->ok() ) {
709 // ... OK 714 // ... OK
710 } else { 715 } else {
711 delete transferServer; 716 delete transferServer;
712 transferServer = 0; 717 transferServer = 0;
713 } 718 }
714 719
715 if ( !qcopBridge ) 720 if ( !qcopBridge )
716 tid_xfer = startTimer( 2000 ); 721 tid_xfer = startTimer( 2000 );
717 } 722 }
718} 723}
719 724
720void Server::timerEvent( QTimerEvent *e ) 725void Server::timerEvent( QTimerEvent *e )
721{ 726{
722 if ( e->timerId() == tid_xfer ) { 727 if ( e->timerId() == tid_xfer ) {
723 killTimer( tid_xfer ); 728 killTimer( tid_xfer );
724 tid_xfer = 0; 729 tid_xfer = 0;
725 startTransferServer(); 730 startTransferServer();
726 } 731 }
727#if 0 732#if 0
728 /* ### FIXME today startin */ 733 /* ### FIXME today startin */
729 else if ( e->timerId() == tid_today ) { 734 else if ( e->timerId() == tid_today ) {
730 QDate today = QDate::currentDate(); 735 QDate today = QDate::currentDate();
731 if ( today != last_today_show ) { 736 if ( today != last_today_show ) {
732 last_today_show = today; 737 last_today_show = today;
733 Config cfg("today"); 738 Config cfg("today");
734 cfg.setGroup("Start"); 739 cfg.setGroup("Start");
735#ifndef QPE_DEFAULT_TODAY_MODE 740#ifndef QPE_DEFAULT_TODAY_MODE
736#define QPE_DEFAULT_TODAY_MODE "Never" 741#define QPE_DEFAULT_TODAY_MODE "Never"
737#endif 742#endif
738 if ( cfg.readEntry("Mode",QPE_DEFAULT_TODAY_MODE) == "Daily" ) { 743 if ( cfg.readEntry("Mode",QPE_DEFAULT_TODAY_MODE) == "Daily" ) {
739 QCopEnvelope env(Service::channel("today"),"raise()"); 744 QCopEnvelope env(Service::channel("today"),"raise()");
740 } 745 }
741 } 746 }
742 } 747 }
743#endif 748#endif
744} 749}
745 750
746void Server::terminateServers() 751void Server::terminateServers()
747{ 752{
748 delete transferServer; 753 delete transferServer;
749 delete qcopBridge; 754 delete qcopBridge;
750 transferServer = 0; 755 transferServer = 0;
751 qcopBridge = 0; 756 qcopBridge = 0;
752} 757}
753 758
754void Server::syncConnectionClosed( const QHostAddress & ) 759void Server::syncConnectionClosed( const QHostAddress & )
755{ 760{
756 odebug << "Lost sync connection" << oendl; 761 odebug << "Lost sync connection" << oendl;
757 delete syncDialog; 762 delete syncDialog;
758 syncDialog = 0; 763 syncDialog = 0;
759} 764}
760 765
761void Server::pokeTimeMonitors() 766void Server::pokeTimeMonitors()
762{ 767{
763#if 0 768#if 0
764 // inform all TimeMonitors 769 // inform all TimeMonitors
765 QStrList tms = Service::channels("TimeMonitor"); 770 QStrList tms = Service::channels("TimeMonitor");
766 for (const char* ch = tms.first(); ch; ch=tms.next()) { 771 for (const char* ch = tms.first(); ch; ch=tms.next()) {
767 QString t = getenv("TZ"); 772 QString t = getenv("TZ");
768 QCopEnvelope e(ch, "timeChange(QString)"); 773 QCopEnvelope e(ch, "timeChange(QString)");
769 e << t; 774 e << t;
770 } 775 }
771#endif 776#endif
772} 777}
773 778
774void Server::applicationLaunched(int, const QString &app) 779void Server::applicationLaunched(int, const QString &app)
775{ 780{
776 serverGui->applicationStateChanged( app, ServerInterface::Launching ); 781 serverGui->applicationStateChanged( app, ServerInterface::Launching );
777} 782}
778 783
779void Server::applicationTerminated(int pid, const QString &app) 784void Server::applicationTerminated(int pid, const QString &app)
780{ 785{
781 serverGui->applicationStateChanged( app, ServerInterface::Terminated ); 786 serverGui->applicationStateChanged( app, ServerInterface::Terminated );
782#if 0 787#if 0
783 tsmMonitor->applicationTerminated( pid ); 788 tsmMonitor->applicationTerminated( pid );
784#else 789#else
785 Q_UNUSED( pid ) 790 Q_UNUSED( pid )
786#endif 791#endif
787} 792}
788 793
789void Server::applicationConnected(const QString &app) 794void Server::applicationConnected(const QString &app)
790{ 795{
791 serverGui->applicationStateChanged( app, ServerInterface::Running ); 796 serverGui->applicationStateChanged( app, ServerInterface::Running );
792} 797}
793 798
794void Server::storageChanged() 799void Server::storageChanged()
795{ 800{
796 system( "opie-update-symlinks" ); 801 system( "opie-update-symlinks" );
797 serverGui->storageChanged( storage->fileSystems() ); 802 serverGui->storageChanged( storage->fileSystems() );
798 docList->storageChanged(); 803 docList->storageChanged();
799} 804}
800 805
801 806
802 807
803void Server::preloadApps() 808void Server::preloadApps()
804{ 809{
805 Config cfg("Launcher"); 810 Config cfg("Launcher");
806 cfg.setGroup("Preload"); 811 cfg.setGroup("Preload");
807 QStringList apps = cfg.readListEntry("Apps",','); 812 QStringList apps = cfg.readListEntry("Apps",',');
808 for (QStringList::ConstIterator it=apps.begin(); it!=apps.end(); ++it) { 813 for (QStringList::ConstIterator it=apps.begin(); it!=apps.end(); ++it) {
809#ifndef QT_NO_COP 814#ifndef QT_NO_COP
810 QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()"); 815 QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()");
811#endif 816#endif
812 } 817 }
813} 818}
814 819
815// This is only called if QPE_HAVE_DIRECT_ACCESS is defined 820// This is only called if QPE_HAVE_DIRECT_ACCESS is defined
816void Server::prepareDirectAccess() 821void Server::prepareDirectAccess()
817{ 822{
818 qDebug( "Server::prepareDirectAccess()" ); 823 qDebug( "Server::prepareDirectAccess()" );
819 // Put up a pretty dialog 824 // Put up a pretty dialog
820 syncDialog = new SyncDialog( this, tr("USB Lock") ); 825 syncDialog = new SyncDialog( this, tr("USB Lock") );
821 syncDialog->show(); 826 syncDialog->show();
822 827
823 // Prevent the PDA from acting as a PDA 828 // Prevent the PDA from acting as a PDA
824 terminateServers(); 829 terminateServers();
825 830
826 // suspend the mtab monitor 831 // suspend the mtab monitor
827#ifndef QT_NO_COP 832#ifndef QT_NO_COP
828 { 833 {
829 QCopEnvelope e( "QPE/Stabmon", "suspendMonitor()" ); 834 QCopEnvelope e( "QPE/Stabmon", "suspendMonitor()" );
830 } 835 }
831#endif 836#endif
832 837
833 // send out a flush message 838 // send out a flush message
834 // once flushes are done call runDirectAccess() 839 // once flushes are done call runDirectAccess()
835 // We just count the number of apps and set a timer. 840 // We just count the number of apps and set a timer.
836 // Either the timer expires or the correct number of apps responds. 841 // Either the timer expires or the correct number of apps responds.
837 // Note: quicklauncher isn't in the runningApps list but it responds 842 // Note: quicklauncher isn't in the runningApps list but it responds
838 // to the flush so we start the counter at 1 843 // to the flush so we start the counter at 1
839 pendingFlushes = 1; 844 pendingFlushes = 1;
840 directAccessRun = FALSE; 845 directAccessRun = FALSE;
841 for ( QMap<int,QString>::ConstIterator it = 846 for ( QMap<int,QString>::ConstIterator it =
842 appLauncher->runningApplications().begin(); 847 appLauncher->runningApplications().begin();
843 it != appLauncher->runningApplications().end(); 848 it != appLauncher->runningApplications().end();
844 ++it ) { 849 ++it ) {
845 pendingFlushes++; 850 pendingFlushes++;
846 } 851 }
847#ifndef QT_NO_COP 852#ifndef QT_NO_COP
848 QCopEnvelope e1( "QPE/System", "flush()" ); 853 QCopEnvelope e1( "QPE/System", "flush()" );
849#endif 854#endif
850 QTimer::singleShot( 10000, this, SLOT(runDirectAccess()) ); 855 QTimer::singleShot( 10000, this, SLOT(runDirectAccess()) );
851#warning FIXME support TempScreenSaverMode 856#warning FIXME support TempScreenSaverMode
852#if 0 857#if 0
853 QPEApplication::setTempScreenSaverMode(QPEApplication::DisableSuspend); 858 QPEApplication::setTempScreenSaverMode(QPEApplication::DisableSuspend);
854#endif 859#endif
855} 860}
856 861
857// This is only connected if QPE_HAVE_DIRECT_ACCESS is defined 862// This is only connected if QPE_HAVE_DIRECT_ACCESS is defined
858// It fakes the presence of Qtopia Desktop 863// It fakes the presence of Qtopia Desktop
859void Server::desktopMessage( const QCString &message, const QByteArray &data ) 864void Server::desktopMessage( const QCString &message, const QByteArray &data )
860{ 865{
861 QDataStream stream( data, IO_ReadOnly ); 866 QDataStream stream( data, IO_ReadOnly );
862 if ( message == "flushDone(QString)" ) { 867 if ( message == "flushDone(QString)" ) {
863 QString app; 868 QString app;
864 stream >> app; 869 stream >> app;
865 qDebug( "flushDone from %s", app.latin1() ); 870 qDebug( "flushDone from %s", app.latin1() );
866 if ( --pendingFlushes == 0 ) { 871 if ( --pendingFlushes == 0 ) {
867 qDebug( "pendingFlushes == 0, all the apps responded" ); 872 qDebug( "pendingFlushes == 0, all the apps responded" );
868 runDirectAccess(); 873 runDirectAccess();
869 } 874 }
870 } else if ( message == "installStarted(QString)" ) { 875 } else if ( message == "installStarted(QString)" ) {
871 QString package; 876 QString package;
872 stream >> package; 877 stream >> package;
873 qDebug( "\tInstall Started for package %s", package.latin1() ); 878 qDebug( "\tInstall Started for package %s", package.latin1() );
874 } else if ( message == "installStep(QString)" ) { 879 } else if ( message == "installStep(QString)" ) {
875 QString step; 880 QString step;
876 stream >> step; 881 stream >> step;
877 qDebug( "\tInstall Step %s", step.latin1() ); 882 qDebug( "\tInstall Step %s", step.latin1() );
878 } else if ( message == "installDone(QString)" ) { 883 } else if ( message == "installDone(QString)" ) {
879 QString package; 884 QString package;
880 stream >> package; 885 stream >> package;
881 qDebug( "\tInstall Finished for package %s", package.latin1() ); 886 qDebug( "\tInstall Finished for package %s", package.latin1() );
882 } else if ( message == "installFailed(QString,int,QString)" ) { 887 } else if ( message == "installFailed(QString,int,QString)" ) {
883 QString package, error; 888 QString package, error;
884 int status; 889 int status;
885 stream >> package >> status >> error; 890 stream >> package >> status >> error;
886 qDebug( "\tInstall Failed for package %s with error code %d and error message %s", 891 qDebug( "\tInstall Failed for package %s with error code %d and error message %s",
887 package.latin1(), status, error.latin1() ); 892 package.latin1(), status, error.latin1() );
888 } else if ( message == "removeStarted(QString)" ) { 893 } else if ( message == "removeStarted(QString)" ) {
889 QString package; 894 QString package;
890 stream >> package; 895 stream >> package;
891 qDebug( "\tRemove Started for package %s", package.latin1() ); 896 qDebug( "\tRemove Started for package %s", package.latin1() );
892 } else if ( message == "removeDone(QString)" ) { 897 } else if ( message == "removeDone(QString)" ) {
893 QString package; 898 QString package;
894 stream >> package; 899 stream >> package;
895 qDebug( "\tRemove Finished for package %s", package.latin1() ); 900 qDebug( "\tRemove Finished for package %s", package.latin1() );
896 } else if ( message == "removeFailed(QString)" ) { 901 } else if ( message == "removeFailed(QString)" ) {
897 QString package; 902 QString package;
898 stream >> package; 903 stream >> package;
899 qDebug( "\tRemove Failed for package %s", package.latin1() ); 904 qDebug( "\tRemove Failed for package %s", package.latin1() );
900 } 905 }
901 906
902 if ( qrr && qrr->waitingForMessages ) 907 if ( qrr && qrr->waitingForMessages )
903 qrr->desktopMessage( message, data ); 908 qrr->desktopMessage( message, data );
904} 909}
905 910
906 911
907// This is only connected if QPE_HAVE_DIRECT_ACCESS is defined 912// This is only connected if QPE_HAVE_DIRECT_ACCESS is defined
908void Server::runDirectAccess() 913void Server::runDirectAccess()
909{ 914{
910#ifdef QPE_HAVE_DIRECT_ACCESS 915#ifdef QPE_HAVE_DIRECT_ACCESS
911 // The timer must have fired after all the apps responded 916 // The timer must have fired after all the apps responded
912 // with flushDone(). Just ignore it. 917 // with flushDone(). Just ignore it.
913 if ( directAccessRun ) 918 if ( directAccessRun )
914 return; 919 return;
915 920
916 directAccessRun = TRUE; 921 directAccessRun = TRUE;
917 ::readyDirectAccess(cardInfoString(), installLocationsString()); 922 ::readyDirectAccess(cardInfoString(), installLocationsString());
918#endif 923#endif
919} 924}
920 925
921// This is only called if QPE_HAVE_DIRECT_ACCESS is defined 926// This is only called if QPE_HAVE_DIRECT_ACCESS is defined
922void Server::postDirectAccess() 927void Server::postDirectAccess()
923{ 928{
924#ifdef QPE_HAVE_DIRECT_ACCESS 929#ifdef QPE_HAVE_DIRECT_ACCESS
925 qDebug( "Server::postDirectAccess()" ); 930 qDebug( "Server::postDirectAccess()" );
926 931
927 // Categories may have changed 932 // Categories may have changed
928 QCopEnvelope e1( "QPE/System", "categoriesChanged()" ); 933 QCopEnvelope e1( "QPE/System", "categoriesChanged()" );
929 // Apps need to reload their data 934 // Apps need to reload their data
930 QCopEnvelope e2( "QPE/System", "reload()" ); 935 QCopEnvelope e2( "QPE/System", "reload()" );
931 // Reload DocLinks 936 // Reload DocLinks
932 docList->storageChanged(); 937 docList->storageChanged();
933 // Restart the PDA server stuff 938 // Restart the PDA server stuff
934 startTransferServer(); 939 startTransferServer();
935 940
936 // restart the mtab monitor 941 // restart the mtab monitor
937#ifndef QT_NO_COP 942#ifndef QT_NO_COP
938 { 943 {
939 QCopEnvelope e( "QPE/Stabmon", "restartMonitor()" ); 944 QCopEnvelope e( "QPE/Stabmon", "restartMonitor()" );
940 } 945 }
941#endif 946#endif
942 947
943 // Process queued requests 948 // Process queued requests
944 const char *queueFile = ::directAccessQueueFile(); 949 const char *queueFile = ::directAccessQueueFile();
945 QFile *file = new QFile( queueFile ); 950 QFile *file = new QFile( queueFile );
946 if ( !file->exists() ) { 951 if ( !file->exists() ) {
947 delete file; 952 delete file;
948 // Get rid of the dialog 953 // Get rid of the dialog
949 if ( syncDialog ) { 954 if ( syncDialog ) {
950 delete syncDialog; 955 delete syncDialog;
951 syncDialog = 0; 956 syncDialog = 0;
952 } 957 }
953#warning FIXME support TempScreenSaverMode 958#warning FIXME support TempScreenSaverMode
954#if 0 959#if 0
955 QPEApplication::setTempScreenSaverMode(QPEApplication::Enable); 960 QPEApplication::setTempScreenSaverMode(QPEApplication::Enable);
956#endif 961#endif
957 } else { 962 } else {
958 qrr = new QueuedRequestRunner( file, syncDialog ); 963 qrr = new QueuedRequestRunner( file, syncDialog );
959 connect( qrr, SIGNAL(finished()), 964 connect( qrr, SIGNAL(finished()),
960 this, SLOT(finishedQueuedRequests()) ); 965 this, SLOT(finishedQueuedRequests()) );
961 QTimer::singleShot( 100, qrr, SLOT(process()) ); 966 QTimer::singleShot( 100, qrr, SLOT(process()) );
962 // qrr will remove the sync dialog later 967 // qrr will remove the sync dialog later
963 } 968 }
964#endif 969#endif
965} 970}
966 971
967void Server::finishedQueuedRequests() 972void Server::finishedQueuedRequests()
968{ 973{
969 if ( qrr->readyToDelete ) { 974 if ( qrr->readyToDelete ) {
970 delete qrr; 975 delete qrr;
971 qrr = 0; 976 qrr = 0;
972 // Get rid of the dialog 977 // Get rid of the dialog
973 if ( syncDialog ) { 978 if ( syncDialog ) {
974 delete syncDialog; 979 delete syncDialog;
975 syncDialog = 0; 980 syncDialog = 0;
976 } 981 }
977#warning FIXME support TempScreenSaverMode 982#warning FIXME support TempScreenSaverMode
978#if 0 983#if 0
979 QPEApplication::setTempScreenSaverMode(QPEApplication::Enable); 984 QPEApplication::setTempScreenSaverMode(QPEApplication::Enable);
980#endif 985#endif
981 } else { 986 } else {
982 qrr->readyToDelete = TRUE; 987 qrr->readyToDelete = TRUE;
983 QTimer::singleShot( 0, this, SLOT(finishedQueuedRequests()) ); 988 QTimer::singleShot( 0, this, SLOT(finishedQueuedRequests()) );
984 } 989 }
985} 990}
986 991
992void Server::startSoundServer() {
993 if ( !process ) {
994 process = new Opie::Core::OProcess( this );
995 connect(process, SIGNAL(processExited(Opie::Core::OProcess*)),
996 SLOT(soundServerExited()));
997 }
998
999 process->clearArguments();
1000 *process << QPEApplication::qpeDir() + "bin/qss";
1001 process->start();
1002}
1003
1004void Server::soundServerExited() {
1005 QTimer::singleShot(5000, this, SLOT(startSoundServer()));
1006}
diff --git a/core/launcher/server.h b/core/launcher/server.h
index d71d68a..5b2f995 100644
--- a/core/launcher/server.h
+++ b/core/launcher/server.h
@@ -1,111 +1,118 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef DESKTOP_H 20#ifndef DESKTOP_H
21#define DESKTOP_H 21#define DESKTOP_H
22 22
23#include <qwidget.h> 23#include <qwidget.h>
24#include <qdatetime.h> 24#include <qdatetime.h>
25 25
26//#include "qcopbridge.h" 26//#include "qcopbridge.h"
27 27
28class QCopBridge; 28class QCopBridge;
29class QHostAddress; 29class QHostAddress;
30class TransferServer; 30class TransferServer;
31class PackageHandler; 31class PackageHandler;
32class ServiceRequest; 32class ServiceRequest;
33class TempScreenSaverMonitor; 33class TempScreenSaverMonitor;
34class AppLauncher; 34class AppLauncher;
35class AppLnkSet; 35class AppLnkSet;
36class StorageInfo; 36class StorageInfo;
37class SyncDialog; 37class SyncDialog;
38class DocumentList; 38class DocumentList;
39class ServerInterface; 39class ServerInterface;
40class QueuedRequestRunner; 40class QueuedRequestRunner;
41namespace Opie { 41namespace Opie {
42namespace Core { 42namespace Core {
43 class ODeviceButton; 43 class ODeviceButton;
44 class OProcess;
44} 45}
45} 46}
46 47
47class Server : public QWidget { 48class Server : public QWidget {
48 Q_OBJECT 49 Q_OBJECT
49public: 50public:
50 Server(); 51 Server();
51 ~Server(); 52 ~Server();
52 53
53 static bool mkdir(const QString &path); 54 static bool mkdir(const QString &path);
54 55
55 void show(); 56 void show();
56 57
57 static bool setKeyboardLayout( const QString &kb ); 58 static bool setKeyboardLayout( const QString &kb );
58 59
59public slots: 60public slots:
60 void systemMsg(const QCString &, const QByteArray &); 61 void systemMsg(const QCString &, const QByteArray &);
61 void receiveTaskBar(const QCString &msg, const QByteArray &data); 62 void receiveTaskBar(const QCString &msg, const QByteArray &data);
62 void terminateServers(); 63 void terminateServers();
63 void pokeTimeMonitors(); 64 void pokeTimeMonitors();
64 65
65private slots: 66private slots:
67 //@{
68 void startSoundServer();
69 void soundServerExited();
70 //@}
66 void activate(const Opie::Core::ODeviceButton*,bool); 71 void activate(const Opie::Core::ODeviceButton*,bool);
67 void syncConnectionClosed( const QHostAddress & ); 72 void syncConnectionClosed( const QHostAddress & );
68 void applicationLaunched(int pid, const QString &app); 73 void applicationLaunched(int pid, const QString &app);
69 void applicationTerminated(int pid, const QString &app); 74 void applicationTerminated(int pid, const QString &app);
70 void applicationConnected(const QString &app); 75 void applicationConnected(const QString &app);
71 void storageChanged(); 76 void storageChanged();
72 void cancelSync(); 77 void cancelSync();
73 void desktopMessage( const QCString &, const QByteArray & ); 78 void desktopMessage( const QCString &, const QByteArray & );
74 void runDirectAccess(); 79 void runDirectAccess();
75 void finishedQueuedRequests(); 80 void finishedQueuedRequests();
76 81
77protected: 82protected:
78 void styleChange( QStyle & ); 83 void styleChange( QStyle & );
79 void timerEvent( QTimerEvent *e ); 84 void timerEvent( QTimerEvent *e );
80 85
81private: 86private:
82 void layout(); 87 void layout();
83 void startTransferServer(); 88 void startTransferServer();
84 void preloadApps(); 89 void preloadApps();
85 void prepareDirectAccess(); 90 void prepareDirectAccess();
86 void postDirectAccess(); 91 void postDirectAccess();
87 QString cardInfoString(); 92 QString cardInfoString();
88 QString installLocationsString(); 93 QString installLocationsString();
89 94
90 QCopBridge *qcopBridge; 95 QCopBridge *qcopBridge;
91 TransferServer *transferServer; 96 TransferServer *transferServer;
92 PackageHandler *packageHandler; 97 PackageHandler *packageHandler;
93 QDate last_today_show; 98 QDate last_today_show;
94 int tid_xfer; 99 int tid_xfer;
95 /* ### FIXME two below### */ 100 /* ### FIXME two below### */
96// int tid_today; 101// int tid_today;
97// TempScreenSaverMonitor *tsmMonitor; 102// TempScreenSaverMonitor *tsmMonitor;
98 StorageInfo *storage; 103 StorageInfo *storage;
99 SyncDialog *syncDialog; 104 SyncDialog *syncDialog;
100 AppLauncher *appLauncher; 105 AppLauncher *appLauncher;
101 DocumentList *docList; 106 DocumentList *docList;
102 ServerInterface *serverGui; 107 ServerInterface *serverGui;
103 108
104 int pendingFlushes; 109 int pendingFlushes;
105 bool directAccessRun; 110 bool directAccessRun;
106 QueuedRequestRunner *qrr; 111 QueuedRequestRunner *qrr;
112
113 Opie::Core::OProcess *process;
107}; 114};
108 115
109 116
110#endif // DESKTOP_H 117#endif // DESKTOP_H
111 118