summaryrefslogtreecommitdiff
Unidiff
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,361 +1,366 @@
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 );
@@ -795,192 +800,207 @@ void 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