summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--config.in1
-rw-r--r--core/launcher/server.cpp2
-rw-r--r--core/symlinker/Makefile160
-rw-r--r--core/symlinker/config.in5
-rw-r--r--core/symlinker/main.cpp160
-rw-r--r--core/symlinker/opie-symlinker.control9
-rw-r--r--core/symlinker/symlinker.pro15
-rw-r--r--packages1
8 files changed, 352 insertions, 1 deletions
diff --git a/config.in b/config.in
index b57488a..1a5b53b 100644
--- a/config.in
+++ b/config.in
@@ -1,254 +1,255 @@
1mainmenu "Opie Configuration" 1mainmenu "Opie Configuration"
2 2
3menu "Build Parameters" 3menu "Build Parameters"
4 4
5choice 5choice
6 prompt "Target Machine" 6 prompt "Target Machine"
7 default TARGET_X86 7 default TARGET_X86
8 help 8 help
9 Please select the architecture of the machine you will be 9 Please select the architecture of the machine you will be
10 building the OpenZaurus buildroot for. 10 building the OpenZaurus buildroot for.
11 11
12 config TARGET_X86 12 config TARGET_X86
13 boolean "Intel X86" 13 boolean "Intel X86"
14 14
15 config TARGET_MACOSX 15 config TARGET_MACOSX
16 boolean "Mac OS X (DARWIN)" 16 boolean "Mac OS X (DARWIN)"
17 17
18 config TARGET_SHARP 18 config TARGET_SHARP
19 boolean "Sharp Zaurus" 19 boolean "Sharp Zaurus"
20 20
21 config TARGET_IPAQ 21 config TARGET_IPAQ
22 boolean "iPAQ" 22 boolean "iPAQ"
23 23
24 config TARGET_RAMSES 24 config TARGET_RAMSES
25 boolean "Ramses" 25 boolean "Ramses"
26 26
27 config TARGET_SIMPAD 27 config TARGET_SIMPAD
28 boolean "SIMpad" 28 boolean "SIMpad"
29 29
30 config TARGET_YOPY 30 config TARGET_YOPY
31 boolean "Yopy 3500/3700" 31 boolean "Yopy 3500/3700"
32 32
33endchoice 33endchoice
34 34
35config OPTIMIZE 35config OPTIMIZE
36 boolean "Use optimizations" 36 boolean "Use optimizations"
37 default "y" if ! TARGET_X86 37 default "y" if ! TARGET_X86
38 38
39config DEBUG 39config DEBUG
40 boolean "Enable debug builds" 40 boolean "Enable debug builds"
41 default n 41 default n
42config RELEASE 42config RELEASE
43 bool 43 bool
44 default y 44 default y
45 depends !DEBUG 45 depends !DEBUG
46 46
47config QUICK_LAUNCH 47config QUICK_LAUNCH
48 boolean "Enable Quick Launch" 48 boolean "Enable Quick Launch"
49 default n 49 default n
50 50
51config QUICKLAUNCH_PATH 51config QUICKLAUNCH_PATH
52 string "Path to quicklauncher" 52 string "Path to quicklauncher"
53 default "./quicklauncher" if TARGET_X86 53 default "./quicklauncher" if TARGET_X86
54 default "/opt/QtPalmtop/bin/quicklauncher" if ! TARGET_X86 54 default "/opt/QtPalmtop/bin/quicklauncher" if ! TARGET_X86
55 55
56config SPECFILE 56config SPECFILE
57 string 57 string
58 default "qws/linux-generic-g++" if TARGET_X86 && (! X11) 58 default "qws/linux-generic-g++" if TARGET_X86 && (! X11)
59 default "linux-g++" if TARGET_X86 && X11 59 default "linux-g++" if TARGET_X86 && X11
60 default "qws/linux-sharp-g++" if TARGET_SHARP && (! X11) 60 default "qws/linux-sharp-g++" if TARGET_SHARP && (! X11)
61 default "linux-g++" if TARGET_SHARP && X11 61 default "linux-g++" if TARGET_SHARP && X11
62 default "qws/linux-ipaq-g++" if TARGET_IPAQ && (! X11) 62 default "qws/linux-ipaq-g++" if TARGET_IPAQ && (! X11)
63 default "linux-g++" if TARGET_IPAQ && X11 63 default "linux-g++" if TARGET_IPAQ && X11
64 default "qws/linux-ramses-g++" if TARGET_RAMSES && (! X11) 64 default "qws/linux-ramses-g++" if TARGET_RAMSES && (! X11)
65 default "linux-g++" if TARGET_RAMSES && X11 65 default "linux-g++" if TARGET_RAMSES && X11
66 default "qws/linux-simpad-g++" if TARGET_SIMPAD && (! X11) 66 default "qws/linux-simpad-g++" if TARGET_SIMPAD && (! X11)
67 default "linux-g++" if TARGET_SIMPAD && X11 67 default "linux-g++" if TARGET_SIMPAD && X11
68 default "qws/linux-yopy-g++" if TARGET_YOPY && (! X11) 68 default "qws/linux-yopy-g++" if TARGET_YOPY && (! X11)
69 default "qws/macx-generic-g++" if TARGET_MACOSX && (! X11) 69 default "qws/macx-generic-g++" if TARGET_MACOSX && (! X11)
70 70
71config CUSTOMFILE 71config CUSTOMFILE
72 string 72 string
73 default "custom-ipaq.h" if TARGET_IPAQ 73 default "custom-ipaq.h" if TARGET_IPAQ
74 default "custom-sharp.h" if TARGET_SHARP 74 default "custom-sharp.h" if TARGET_SHARP
75 default "custom-ramses.h" if TARGET_RAMSES 75 default "custom-ramses.h" if TARGET_RAMSES
76 default "custom-ipaq.h" if TARGET_SIMPAD 76 default "custom-ipaq.h" if TARGET_SIMPAD
77 default "custom-yopy.h" if TARGET_YOPY 77 default "custom-yopy.h" if TARGET_YOPY
78 78
79config OPTIMIZATIONS 79config OPTIMIZATIONS
80 string "Optimization flags" 80 string "Optimization flags"
81 depends OPTIMIZE 81 depends OPTIMIZE
82 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_IPAQ 82 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_IPAQ
83 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_YOPY 83 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_YOPY
84 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SHARP 84 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SHARP
85 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_RAMSES 85 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_RAMSES
86 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SIMPAD 86 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SIMPAD
87 87
88config EXPERIMENTAL 88config EXPERIMENTAL
89 bool "Prompt for development and/or incomplete items" 89 bool "Prompt for development and/or incomplete items"
90 default y 90 default y
91 91
92endmenu 92endmenu
93 93
94menu "Configuration" 94menu "Configuration"
95config OPIE_NO_OVERRIDE_QT 95config OPIE_NO_OVERRIDE_QT
96 boolean "Build Opie against an unpatched version of Qt" 96 boolean "Build Opie against an unpatched version of Qt"
97 default n 97 default n
98 98
99config OPIE_NO_BUILTIN_SHUTDOWN 99config OPIE_NO_BUILTIN_SHUTDOWN
100 boolean "Disable the built in shutdown application" 100 boolean "Disable the built in shutdown application"
101 default n 101 default n
102 102
103config OPIE_NO_BUILTIN_CALIBRATE 103config OPIE_NO_BUILTIN_CALIBRATE
104 boolean "Disable the built in calibrate application" 104 boolean "Disable the built in calibrate application"
105 default y if TARGET_YOPY 105 default y if TARGET_YOPY
106 default n 106 default n
107 107
108config OPIE_SOUND_FRAGMENT_SHIFT 108config OPIE_SOUND_FRAGMENT_SHIFT
109 string "The sound fragment used in Opie Player I" 109 string "The sound fragment used in Opie Player I"
110 default "14" if TARGET_IPAQ 110 default "14" if TARGET_IPAQ
111 default "16" if (!TARGET_IPAQ) 111 default "16" if (!TARGET_IPAQ)
112 112
113config USE_REALTIME_AUDIO_THREAD 113config USE_REALTIME_AUDIO_THREAD
114 boolean "Use a realtime thread in Opie Player I" 114 boolean "Use a realtime thread in Opie Player I"
115 default y if TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP 115 default y if TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP
116 default n 116 default n
117 117
118config QT_QWS_ALLOW_OVERCLOCK 118config QT_QWS_ALLOW_OVERCLOCK
119 boolean "Allow the user to overclock the device" 119 boolean "Allow the user to overclock the device"
120 depends TARGET_RAMSES 120 depends TARGET_RAMSES
121 default n 121 default n
122 122
123config OPIE_HIGH_RES_SMALL_PHY 123config OPIE_HIGH_RES_SMALL_PHY
124 boolean "Resolution is bigger than physical screen" 124 boolean "Resolution is bigger than physical screen"
125 default y if TARGET_C700 125 default y if TARGET_C700
126 default n 126 default n
127 127
128config OPIE_NEW_ALLOC 128config OPIE_NEW_ALLOC
129 boolean "Use malloc and free for the implementation" 129 boolean "Use malloc and free for the implementation"
130 default y if TARGET_RAMSES || TARGET_IPAQ || TARGET_SIMPAD || TARGET_SHARP 130 default y if TARGET_RAMSES || TARGET_IPAQ || TARGET_SIMPAD || TARGET_SHARP
131 default n 131 default n
132 132
133config OPIE_NO_SOUND_PCM_READ_BITS 133config OPIE_NO_SOUND_PCM_READ_BITS
134 boolean "There is not a pcm_read_bits io control" 134 boolean "There is not a pcm_read_bits io control"
135 default y if TARGET_SHARP 135 default y if TARGET_SHARP
136 default n 136 default n
137 137
138config OPIE_WE_VERSION 138config OPIE_WE_VERSION
139 string "The wireless extension (WE) version to build against" 139 string "The wireless extension (WE) version to build against"
140 default "15" if ! TARGET_X86 140 default "15" if ! TARGET_X86
141 default "16" if TAGET_X86 141 default "16" if TAGET_X86
142 142
143endmenu 143endmenu
144 144
145menu "Base" 145menu "Base"
146 choice 146 choice
147 prompt "Qpe Library Selection" 147 prompt "Qpe Library Selection"
148 default LIBQPE 148 default LIBQPE
149 source library/config.in 149 source library/config.in
150 source x11/config.in 150 source x11/config.in
151 endchoice 151 endchoice
152 source libopie/config.in 152 source libopie/config.in
153 source core/opie-login/config.in 153 source core/opie-login/config.in
154 source core/opiealarm/config.in 154 source core/opiealarm/config.in
155 source core/tools/quicklauncher/config.in 155 source core/tools/quicklauncher/config.in
156 source core/launcher/config.in 156 source core/launcher/config.in
157 source core/qws/config.in 157 source core/qws/config.in
158 source core/symlinker/config.in
158endmenu 159endmenu
159 160
160comment "" 161comment ""
161 162
162menu "Applets" 163menu "Applets"
163 source core/applets/config.in 164 source core/applets/config.in
164 source noncore/applets/config.in 165 source noncore/applets/config.in
165endmenu 166endmenu
166 167
167menu "Apps" 168menu "Apps"
168 source core/apps/config.in 169 source core/apps/config.in
169 source noncore/apps/config.in 170 source noncore/apps/config.in
170endmenu 171endmenu
171 172
172menu "Communications and Networking" 173menu "Communications and Networking"
173 source noncore/comm/config.in 174 source noncore/comm/config.in
174 source noncore/net/config.in 175 source noncore/net/config.in
175endmenu 176endmenu
176 177
177menu "Games" 178menu "Games"
178 source noncore/games/config.in 179 source noncore/games/config.in
179endmenu 180endmenu
180 181
181menu "Graphics and Multimedia" 182menu "Graphics and Multimedia"
182 source freetype/config.in 183 source freetype/config.in
183 source noncore/graphics/config.in 184 source noncore/graphics/config.in
184 source core/multimedia/config.in 185 source core/multimedia/config.in
185 source noncore/multimedia/config.in 186 source noncore/multimedia/config.in
186endmenu 187endmenu
187 188
188menu "Input methods" 189menu "Input methods"
189 source inputmethods/config.in 190 source inputmethods/config.in
190endmenu 191endmenu
191 192
192menu "Pim" 193menu "Pim"
193 source core/pim/config.in 194 source core/pim/config.in
194 menu "Today Plugins" 195 menu "Today Plugins"
195 source noncore/todayplugins/config.in 196 source noncore/todayplugins/config.in
196 source core/pim/today/plugins/config.in 197 source core/pim/today/plugins/config.in
197 endmenu 198 endmenu
198endmenu 199endmenu
199 200
200menu "Settings" 201menu "Settings"
201 source core/settings/config.in 202 source core/settings/config.in
202 source noncore/settings/config.in 203 source noncore/settings/config.in
203endmenu 204endmenu
204 205
205menu "Theming" 206menu "Theming"
206 source noncore/decorations/config.in 207 source noncore/decorations/config.in
207 source noncore/styles/config.in 208 source noncore/styles/config.in
208endmenu 209endmenu
209 210
210menu "Tools" 211menu "Tools"
211 source noncore/tools/config.in 212 source noncore/tools/config.in
212endmenu 213endmenu
213 214
214menu "Development" 215menu "Development"
215 source development/keyview/config.in 216 source development/keyview/config.in
216 #source development/debugviewer/config.in 217 #source development/debugviewer/config.in
217endmenu 218endmenu
218 219
219menu "Examples" 220menu "Examples"
220 config EXAMPLES 221 config EXAMPLES
221 boolean "Compile Example Application" 222 boolean "Compile Example Application"
222 source examples/config.in 223 source examples/config.in
223endmenu 224endmenu
224 225
225comment "" 226comment ""
226 227
227menu "Unsupported / Unmaintained" 228menu "Unsupported / Unmaintained"
228 source noncore/unsupported/config.in 229 source noncore/unsupported/config.in
229endmenu 230endmenu
230 231
231comment "" 232comment ""
232 depends on EXPERIMENTAL 233 depends on EXPERIMENTAL
233menu "Experimental" 234menu "Experimental"
234 depends on EXPERIMENTAL 235 depends on EXPERIMENTAL
235 source libopie2/config.in 236 source libopie2/config.in
236 source libqtaux/config.in 237 source libqtaux/config.in
237 source libslcompat/config.in 238 source libslcompat/config.in
238 239
239 config SQL_PIM_BACKEND 240 config SQL_PIM_BACKEND
240 bool "Add SQL-Backend support" 241 bool "Add SQL-Backend support"
241 default n 242 default n
242 help 243 help
243 This adds the SQL-Support, using SQLite. Which database is used 244 This adds the SQL-Support, using SQLite. Which database is used
244 by the backends is defined by the file "pimaccess.conf" in the 245 by the backends is defined by the file "pimaccess.conf" in the
245 directory "Settings". 246 directory "Settings".
246 There currently do exist to groups "[contact]" and "[todo]". You can 247 There currently do exist to groups "[contact]" and "[todo]". You can
247 select the used backend by the variable "usebackend=<type>", where 248 select the used backend by the variable "usebackend=<type>", where
248 <type> is "sql" or "xml". "xml" is the default ! 249 <type> is "sql" or "xml". "xml" is the default !
249 Important: The SQLite-library "libsqlite.so" must be installed ! 250 Important: The SQLite-library "libsqlite.so" must be installed !
250 depends ( LIBOPIE2DB ) 251 depends ( LIBOPIE2DB )
251 252
252 comment "SQL-Support needs libopie2db!" 253 comment "SQL-Support needs libopie2db!"
253 depends !( LIBOPIE2DB ) 254 depends !( LIBOPIE2DB )
254endmenu 255endmenu
diff --git a/core/launcher/server.cpp b/core/launcher/server.cpp
index 634082b..9a86a80 100644
--- a/core/launcher/server.cpp
+++ b/core/launcher/server.cpp
@@ -1,729 +1,729 @@
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 38
39#include <qtopia/applnk.h> 39#include <qtopia/applnk.h>
40#include <qtopia/private/categories.h> 40#include <qtopia/private/categories.h>
41#include <qtopia/mimetype.h> 41#include <qtopia/mimetype.h>
42#include <qtopia/config.h> 42#include <qtopia/config.h>
43#include <qtopia/resource.h> 43#include <qtopia/resource.h>
44#include <qtopia/version.h> 44#include <qtopia/version.h>
45#include <qtopia/storage.h> 45#include <qtopia/storage.h>
46 46
47#include <qtopia/qcopenvelope_qws.h> 47#include <qtopia/qcopenvelope_qws.h>
48#include <qwindowsystem_qws.h> 48#include <qwindowsystem_qws.h>
49#include <qgfx_qws.h> 49#include <qgfx_qws.h>
50#include <qtopia/global.h> 50#include <qtopia/global.h>
51//#include <qtopia/custom.h> 51//#include <qtopia/custom.h>
52 52
53#include <opie2/odevicebutton.h> 53#include <opie2/odevicebutton.h>
54#include <opie2/odevice.h> 54#include <opie2/odevice.h>
55 55
56#include <unistd.h> 56#include <unistd.h>
57#include <qmainwindow.h> 57#include <qmainwindow.h>
58#include <qmessagebox.h> 58#include <qmessagebox.h>
59#include <qtimer.h> 59#include <qtimer.h>
60#include <qtextstream.h> 60#include <qtextstream.h>
61 61
62#include <stdlib.h> 62#include <stdlib.h>
63 63
64extern QRect qt_maxWindowRect; 64extern QRect qt_maxWindowRect;
65 65
66 66
67using namespace Opie::Core; 67using namespace Opie::Core;
68static QWidget *calibrate(bool) 68static QWidget *calibrate(bool)
69{ 69{
70#ifdef Q_WS_QWS 70#ifdef Q_WS_QWS
71 Calibrate *c = new Calibrate; 71 Calibrate *c = new Calibrate;
72 c->show(); 72 c->show();
73 return c; 73 return c;
74#else 74#else
75 return 0; 75 return 0;
76#endif 76#endif
77} 77}
78 78
79#define FACTORY(T) \ 79#define FACTORY(T) \
80 static QWidget *new##T( bool maximized ) { \ 80 static QWidget *new##T( bool maximized ) { \
81 QWidget *w = new T( 0, 0, QWidget::WDestructiveClose | QWidget::WGroupLeader ); \ 81 QWidget *w = new T( 0, 0, QWidget::WDestructiveClose | QWidget::WGroupLeader ); \
82 if ( maximized ) { \ 82 if ( maximized ) { \
83 if ( qApp->desktop()->width() <= 350 ) { \ 83 if ( qApp->desktop()->width() <= 350 ) { \
84 w->showMaximized(); \ 84 w->showMaximized(); \
85 } else { \ 85 } else { \
86 w->resize( QSize( 300, 300 ) ); \ 86 w->resize( QSize( 300, 300 ) ); \
87 } \ 87 } \
88 } \ 88 } \
89 w->show(); \ 89 w->show(); \
90 return w; \ 90 return w; \
91 } 91 }
92 92
93 93
94#ifdef SINGLE_APP 94#ifdef SINGLE_APP
95#define APP(a,b,c,d) FACTORY(b) 95#define APP(a,b,c,d) FACTORY(b)
96#include "apps.h" 96#include "apps.h"
97#undef APP 97#undef APP
98#endif // SINGLE_APP 98#endif // SINGLE_APP
99 99
100static Global::Command builtins[] = { 100static Global::Command builtins[] = {
101 101
102#ifdef SINGLE_APP 102#ifdef SINGLE_APP
103#define APP(a,b,c,d) { a, new##b, c, d }, 103#define APP(a,b,c,d) { a, new##b, c, d },
104#include "apps.h" 104#include "apps.h"
105#undef APP 105#undef APP
106#endif 106#endif
107 107
108 /* FIXME defines need to be defined*/ 108 /* FIXME defines need to be defined*/
109#if !defined(OPIE_NO_BUILTIN_CALIBRATE) 109#if !defined(OPIE_NO_BUILTIN_CALIBRATE)
110 { "calibrate", calibrate, 1, 0 }, // No tr 110 { "calibrate", calibrate, 1, 0 }, // No tr
111#endif 111#endif
112#if !defined(OPIE_NO_BUILTIN_SHUTDOWN) 112#if !defined(OPIE_NO_BUILTIN_SHUTDOWN)
113 { "shutdown", Global::shutdown, 1, 0 }, // No tr 113 { "shutdown", Global::shutdown, 1, 0 }, // No tr
114 // { "run", run, 1, 0 }, // No tr 114 // { "run", run, 1, 0 }, // No tr
115#endif 115#endif
116 116
117 { 0, calibrate,0, 0 }, 117 { 0, calibrate,0, 0 },
118}; 118};
119 119
120 120
121//--------------------------------------------------------------------------- 121//---------------------------------------------------------------------------
122 122
123 123
124//=========================================================================== 124//===========================================================================
125 125
126Server::Server() : 126Server::Server() :
127 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), 127 QWidget( 0, 0, WStyle_Tool | WStyle_Customize ),
128 qcopBridge( 0 ), 128 qcopBridge( 0 ),
129 transferServer( 0 ), 129 transferServer( 0 ),
130 packageHandler( 0 ), 130 packageHandler( 0 ),
131 syncDialog( 0 ) 131 syncDialog( 0 )
132{ 132{
133 Global::setBuiltinCommands(builtins); 133 Global::setBuiltinCommands(builtins);
134 134
135 tid_xfer = 0; 135 tid_xfer = 0;
136 /* ### FIXME ### */ 136 /* ### FIXME ### */
137/* tid_today = startTimer(3600*2*1000);*/ 137/* tid_today = startTimer(3600*2*1000);*/
138 last_today_show = QDate::currentDate(); 138 last_today_show = QDate::currentDate();
139 139
140#if 0 140#if 0
141 tsmMonitor = new TempScreenSaverMode(); 141 tsmMonitor = new TempScreenSaverMode();
142 connect( tsmMonitor, SIGNAL(forceSuspend()), qApp, SIGNAL(power()) ); 142 connect( tsmMonitor, SIGNAL(forceSuspend()), qApp, SIGNAL(power()) );
143#endif 143#endif
144 144
145 serverGui = new Launcher; 145 serverGui = new Launcher;
146 serverGui->createGUI(); 146 serverGui->createGUI();
147 147
148 docList = new DocumentList( serverGui ); 148 docList = new DocumentList( serverGui );
149 appLauncher = new AppLauncher(this); 149 appLauncher = new AppLauncher(this);
150 connect(appLauncher, SIGNAL(launched(int,const QString&)), this, SLOT(applicationLaunched(int,const QString&)) ); 150 connect(appLauncher, SIGNAL(launched(int,const QString&)), this, SLOT(applicationLaunched(int,const QString&)) );
151 connect(appLauncher, SIGNAL(terminated(int,const QString&)), this, SLOT(applicationTerminated(int,const QString&)) ); 151 connect(appLauncher, SIGNAL(terminated(int,const QString&)), this, SLOT(applicationTerminated(int,const QString&)) );
152 connect(appLauncher, SIGNAL(connected(const QString&)), this, SLOT(applicationConnected(const QString&)) ); 152 connect(appLauncher, SIGNAL(connected(const QString&)), this, SLOT(applicationConnected(const QString&)) );
153 153
154 storage = new StorageInfo( this ); 154 storage = new StorageInfo( this );
155 connect( storage, SIGNAL(disksChanged()), this, SLOT(storageChanged()) ); 155 connect( storage, SIGNAL(disksChanged()), this, SLOT(storageChanged()) );
156 156
157 // start services 157 // start services
158 startTransferServer(); 158 startTransferServer();
159 (void) new IrServer( this ); 159 (void) new IrServer( this );
160 160
161 packageHandler = new PackageHandler( this ); 161 packageHandler = new PackageHandler( this );
162 connect(qApp, SIGNAL(activate(const Opie::Core::ODeviceButton*,bool)), 162 connect(qApp, SIGNAL(activate(const Opie::Core::ODeviceButton*,bool)),
163 this,SLOT(activate(const Opie::Core::ODeviceButton*,bool))); 163 this,SLOT(activate(const Opie::Core::ODeviceButton*,bool)));
164 164
165 setGeometry( -10, -10, 9, 9 ); 165 setGeometry( -10, -10, 9, 9 );
166 166
167 QCopChannel *channel = new QCopChannel("QPE/System", this); 167 QCopChannel *channel = new QCopChannel("QPE/System", this);
168 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)), 168 connect(channel, SIGNAL(received(const QCString&,const QByteArray&)),
169 this, SLOT(systemMsg(const QCString&,const QByteArray&)) ); 169 this, SLOT(systemMsg(const QCString&,const QByteArray&)) );
170 170
171 QCopChannel *tbChannel = new QCopChannel( "QPE/TaskBar", this ); 171 QCopChannel *tbChannel = new QCopChannel( "QPE/TaskBar", this );
172 connect( tbChannel, SIGNAL(received(const QCString&,const QByteArray&)), 172 connect( tbChannel, SIGNAL(received(const QCString&,const QByteArray&)),
173 this, SLOT(receiveTaskBar(const QCString&,const QByteArray&)) ); 173 this, SLOT(receiveTaskBar(const QCString&,const QByteArray&)) );
174 174
175 connect( qApp, SIGNAL(prepareForRestart()), this, SLOT(terminateServers()) ); 175 connect( qApp, SIGNAL(prepareForRestart()), this, SLOT(terminateServers()) );
176 connect( qApp, SIGNAL(timeChanged()), this, SLOT(pokeTimeMonitors()) ); 176 connect( qApp, SIGNAL(timeChanged()), this, SLOT(pokeTimeMonitors()) );
177 177
178 preloadApps(); 178 preloadApps();
179} 179}
180 180
181void Server::show() 181void Server::show()
182{ 182{
183 ServerApplication::login(TRUE); 183 ServerApplication::login(TRUE);
184 QWidget::show(); 184 QWidget::show();
185} 185}
186 186
187Server::~Server() 187Server::~Server()
188{ 188{
189 serverGui->destroyGUI(); 189 serverGui->destroyGUI();
190 delete docList; 190 delete docList;
191 delete qcopBridge; 191 delete qcopBridge;
192 delete transferServer; 192 delete transferServer;
193 delete serverGui; 193 delete serverGui;
194#if 0 194#if 0
195 delete tsmMonitor; 195 delete tsmMonitor;
196#endif 196#endif
197} 197}
198 198
199static bool hasVisibleWindow(const QString& clientname, bool partial) 199static bool hasVisibleWindow(const QString& clientname, bool partial)
200{ 200{
201#ifdef QWS 201#ifdef QWS
202 const QList<QWSWindow> &list = qwsServer->clientWindows(); 202 const QList<QWSWindow> &list = qwsServer->clientWindows();
203 QWSWindow* w; 203 QWSWindow* w;
204 for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { 204 for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
205 if ( w->client()->identity() == clientname ) { 205 if ( w->client()->identity() == clientname ) {
206 if ( partial && !w->isFullyObscured() ) 206 if ( partial && !w->isFullyObscured() )
207 return TRUE; 207 return TRUE;
208 if ( !partial && !w->isFullyObscured() && !w->isPartiallyObscured() ) { 208 if ( !partial && !w->isFullyObscured() && !w->isPartiallyObscured() ) {
209# if QT_VERSION < 0x030000 209# if QT_VERSION < 0x030000
210 QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect, 210 QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect,
211 QSize(qt_screen->width(),qt_screen->height()) ); 211 QSize(qt_screen->width(),qt_screen->height()) );
212# else 212# else
213 QRect mwr = qt_maxWindowRect; 213 QRect mwr = qt_maxWindowRect;
214# endif 214# endif
215 if ( mwr.contains(w->requested().boundingRect()) ) 215 if ( mwr.contains(w->requested().boundingRect()) )
216 return TRUE; 216 return TRUE;
217 } 217 }
218 } 218 }
219 } 219 }
220#endif 220#endif
221 return FALSE; 221 return FALSE;
222} 222}
223 223
224void Server::activate(const ODeviceButton* button, bool held) 224void Server::activate(const ODeviceButton* button, bool held)
225{ 225{
226 Global::terminateBuiltin("calibrate"); // No tr 226 Global::terminateBuiltin("calibrate"); // No tr
227 OQCopMessage om; 227 OQCopMessage om;
228 if ( held ) { 228 if ( held ) {
229 om = button->heldAction(); 229 om = button->heldAction();
230 } else { 230 } else {
231 om = button->pressedAction(); 231 om = button->pressedAction();
232 } 232 }
233 233
234 if ( om.channel() != "ignore" ) 234 if ( om.channel() != "ignore" )
235 om.send(); 235 om.send();
236 236
237 // A button with no action defined, will return a null ServiceRequest. Don't attempt 237 // A button with no action defined, will return a null ServiceRequest. Don't attempt
238 // to send/do anything with this as it will crash 238 // to send/do anything with this as it will crash
239 /* ### FIXME */ 239 /* ### FIXME */
240#if 0 240#if 0
241 if ( !sr.isNull() ) { 241 if ( !sr.isNull() ) {
242 QString app = sr.app(); 242 QString app = sr.app();
243 bool vis = hasVisibleWindow(app, app != "qpe"); 243 bool vis = hasVisibleWindow(app, app != "qpe");
244 if ( sr.message() == "raise()" && vis ) { 244 if ( sr.message() == "raise()" && vis ) {
245 sr.setMessage("nextView()"); 245 sr.setMessage("nextView()");
246 } else { 246 } else {
247 // "back door" 247 // "back door"
248 sr << (int)vis; 248 sr << (int)vis;
249 } 249 }
250 250
251 sr.send(); 251 sr.send();
252 } 252 }
253#endif 253#endif
254} 254}
255 255
256 256
257#ifdef Q_WS_QWS 257#ifdef Q_WS_QWS
258 258
259 259
260typedef struct KeyOverride { 260typedef struct KeyOverride {
261 ushort scan_code; 261 ushort scan_code;
262 QWSServer::KeyMap map; 262 QWSServer::KeyMap map;
263}; 263};
264 264
265 265
266static const KeyOverride jp109keys[] = { 266static const KeyOverride jp109keys[] = {
267 { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } }, 267 { 0x03, { Qt::Key_2, '2' , 0x22 , 0xffff } },
268 { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } }, 268 { 0x07, { Qt::Key_6, '6' , '&' , 0xffff } },
269 { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } }, 269 { 0x08, { Qt::Key_7, '7' , '\'' , 0xffff } },
270 { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } }, 270 { 0x09, { Qt::Key_8, '8' , '(' , 0xffff } },
271 { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } }, 271 { 0x0a, { Qt::Key_9, '9' , ')' , 0xffff } },
272 { 0x0b, { Qt::Key_0, '0' , 0xffff , 0xffff } }, 272 { 0x0b, { Qt::Key_0, '0' , 0xffff , 0xffff } },
273 { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } }, 273 { 0x0c, { Qt::Key_Minus, '-' , '=' , 0xffff } },
274 { 0x0d, { Qt::Key_AsciiCircum,'^' , '~' , '^' - 64 } }, 274 { 0x0d, { Qt::Key_AsciiCircum,'^' , '~' , '^' - 64 } },
275 { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } }, 275 { 0x1a, { Qt::Key_At, '@' , '`' , 0xffff } },
276 { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '[' - 64 } }, 276 { 0x1b, { Qt::Key_BraceLeft, '[' , '{' , '[' - 64 } },
277 { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } }, 277 { 0x27, { Qt::Key_Semicolon, ';' , '+' , 0xffff } },
278 { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } }, 278 { 0x28, { Qt::Key_Colon, ':' , '*' , 0xffff } },
279 { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff , 0xffff , 0xffff } }, 279 { 0x29, { Qt::Key_Zenkaku_Hankaku, 0xffff , 0xffff , 0xffff } },
280 { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } }, 280 { 0x2b, { Qt::Key_BraceRight, ']' , '}' , ']'-64 } },
281 { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff , 0xffff , 0xffff } }, 281 { 0x70, { Qt::Key_Hiragana_Katakana, 0xffff , 0xffff , 0xffff } },
282 { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } }, 282 { 0x73, { Qt::Key_Backslash, '\\' , '_' , 0xffff } },
283 { 0x79, { Qt::Key_Henkan, 0xffff , 0xffff , 0xffff } }, 283 { 0x79, { Qt::Key_Henkan, 0xffff , 0xffff , 0xffff } },
284 { 0x7b, { Qt::Key_Muhenkan, 0xffff , 0xffff , 0xffff } }, 284 { 0x7b, { Qt::Key_Muhenkan, 0xffff , 0xffff , 0xffff } },
285 { 0x7d, { Qt::Key_yen, 0x00a5 , '|' , 0xffff } }, 285 { 0x7d, { Qt::Key_yen, 0x00a5 , '|' , 0xffff } },
286 { 0x00, { 0, 0xffff , 0xffff , 0xffff } } 286 { 0x00, { 0, 0xffff , 0xffff , 0xffff } }
287}; 287};
288 288
289bool Server::setKeyboardLayout( const QString &kb ) 289bool Server::setKeyboardLayout( const QString &kb )
290{ 290{
291 //quick demo version that can be extended 291 //quick demo version that can be extended
292 292
293 QIntDict<QWSServer::KeyMap> *om = 0; 293 QIntDict<QWSServer::KeyMap> *om = 0;
294 if ( kb == "us101" ) { // No tr 294 if ( kb == "us101" ) { // No tr
295 om = 0; 295 om = 0;
296 } else if ( kb == "jp109" ) { 296 } else if ( kb == "jp109" ) {
297 om = new QIntDict<QWSServer::KeyMap>(37); 297 om = new QIntDict<QWSServer::KeyMap>(37);
298 const KeyOverride *k = jp109keys; 298 const KeyOverride *k = jp109keys;
299 while ( k->scan_code ) { 299 while ( k->scan_code ) {
300 om->insert( k->scan_code, &k->map ); 300 om->insert( k->scan_code, &k->map );
301 k++; 301 k++;
302 } 302 }
303 } 303 }
304 QWSServer::setOverrideKeys( om ); 304 QWSServer::setOverrideKeys( om );
305 305
306 return TRUE; 306 return TRUE;
307} 307}
308 308
309#endif 309#endif
310 310
311void Server::systemMsg(const QCString &msg, const QByteArray &data) 311void Server::systemMsg(const QCString &msg, const QByteArray &data)
312{ 312{
313 QDataStream stream( data, IO_ReadOnly ); 313 QDataStream stream( data, IO_ReadOnly );
314 314
315 if ( msg == "securityChanged()" ) { 315 if ( msg == "securityChanged()" ) {
316 if ( transferServer ) 316 if ( transferServer )
317 transferServer->authorizeConnections(); 317 transferServer->authorizeConnections();
318 if ( qcopBridge ) 318 if ( qcopBridge )
319 qcopBridge->authorizeConnections(); 319 qcopBridge->authorizeConnections();
320 } 320 }
321 /* ### FIXME support TempScreenSaverMode */ 321 /* ### FIXME support TempScreenSaverMode */
322#if 0 322#if 0
323 else if ( msg == "setTempScreenSaverMode(int,int)" ) { 323 else if ( msg == "setTempScreenSaverMode(int,int)" ) {
324 int mode, pid; 324 int mode, pid;
325 stream >> mode >> pid; 325 stream >> mode >> pid;
326 tsmMonitor->setTempMode(mode, pid); 326 tsmMonitor->setTempMode(mode, pid);
327 } 327 }
328#endif 328#endif
329 else if ( msg == "linkChanged(QString)" ) { 329 else if ( msg == "linkChanged(QString)" ) {
330 QString link; 330 QString link;
331 stream >> link; 331 stream >> link;
332 qDebug( "desktop.cpp systemMsg -> linkchanged( %s )", link.latin1() ); 332 qDebug( "desktop.cpp systemMsg -> linkchanged( %s )", link.latin1() );
333 docList->linkChanged(link); 333 docList->linkChanged(link);
334 } else if ( msg == "serviceChanged(QString)" ) { 334 } else if ( msg == "serviceChanged(QString)" ) {
335 MimeType::updateApplications(); 335 MimeType::updateApplications();
336 } else if ( msg == "mkdir(QString)" ) { 336 } else if ( msg == "mkdir(QString)" ) {
337 QString dir; 337 QString dir;
338 stream >> dir; 338 stream >> dir;
339 if ( !dir.isEmpty() ) 339 if ( !dir.isEmpty() )
340 mkdir( dir ); 340 mkdir( dir );
341 } else if ( msg == "rdiffGenSig(QString,QString)" ) { 341 } else if ( msg == "rdiffGenSig(QString,QString)" ) {
342 QString baseFile, sigFile; 342 QString baseFile, sigFile;
343 stream >> baseFile >> sigFile; 343 stream >> baseFile >> sigFile;
344 QRsync::generateSignature( baseFile, sigFile ); 344 QRsync::generateSignature( baseFile, sigFile );
345 } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) { 345 } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) {
346 QString baseFile, sigFile, deltaFile; 346 QString baseFile, sigFile, deltaFile;
347 stream >> baseFile >> sigFile >> deltaFile; 347 stream >> baseFile >> sigFile >> deltaFile;
348 QRsync::generateDiff( baseFile, sigFile, deltaFile ); 348 QRsync::generateDiff( baseFile, sigFile, deltaFile );
349 } else if ( msg == "rdiffApplyPatch(QString,QString)" ) { 349 } else if ( msg == "rdiffApplyPatch(QString,QString)" ) {
350 QString baseFile, deltaFile; 350 QString baseFile, deltaFile;
351 stream >> baseFile >> deltaFile; 351 stream >> baseFile >> deltaFile;
352 if ( !QFile::exists( baseFile ) ) { 352 if ( !QFile::exists( baseFile ) ) {
353 QFile f( baseFile ); 353 QFile f( baseFile );
354 f.open( IO_WriteOnly ); 354 f.open( IO_WriteOnly );
355 f.close(); 355 f.close();
356 } 356 }
357 QRsync::applyDiff( baseFile, deltaFile ); 357 QRsync::applyDiff( baseFile, deltaFile );
358#ifndef QT_NO_COP 358#ifndef QT_NO_COP
359 QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" ); 359 QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" );
360 e << baseFile; 360 e << baseFile;
361#endif 361#endif
362 } else if ( msg == "rdiffCleanup()" ) { 362 } else if ( msg == "rdiffCleanup()" ) {
363 mkdir( "/tmp/rdiff" ); 363 mkdir( "/tmp/rdiff" );
364 QDir dir; 364 QDir dir;
365 dir.setPath( "/tmp/rdiff" ); 365 dir.setPath( "/tmp/rdiff" );
366 QStringList entries = dir.entryList(); 366 QStringList entries = dir.entryList();
367 for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it ) 367 for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it )
368 dir.remove( *it ); 368 dir.remove( *it );
369 } else if ( msg == "sendHandshakeInfo()" ) { 369 } else if ( msg == "sendHandshakeInfo()" ) {
370 QString home = getenv( "HOME" ); 370 QString home = getenv( "HOME" );
371#ifndef QT_NO_COP 371#ifndef QT_NO_COP
372 QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" ); 372 QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" );
373 e << home; 373 e << home;
374 int locked = (int) ServerApplication::screenLocked(); 374 int locked = (int) ServerApplication::screenLocked();
375 e << locked; 375 e << locked;
376#endif 376#endif
377 377
378 } 378 }
379 /* 379 /*
380 * QtopiaDesktop relies on the major number 380 * QtopiaDesktop relies on the major number
381 * to start with 1. We're at 0.9 381 * to start with 1. We're at 0.9
382 * so wee need to fake at least 1.4 to be able 382 * so wee need to fake at least 1.4 to be able
383 * to sync with QtopiaDesktop1.6 383 * to sync with QtopiaDesktop1.6
384 */ 384 */
385 else if ( msg == "sendVersionInfo()" ) { 385 else if ( msg == "sendVersionInfo()" ) {
386 QCopEnvelope e( "QPE/Desktop", "versionInfo(QString,QString)" ); 386 QCopEnvelope e( "QPE/Desktop", "versionInfo(QString,QString)" );
387 /* ### FIXME Architecture ### */ 387 /* ### FIXME Architecture ### */
388 e << QString::fromLatin1("1.7") << "Uncustomized Device"; 388 e << QString::fromLatin1("1.7") << "Uncustomized Device";
389 } else if ( msg == "sendCardInfo()" ) { 389 } else if ( msg == "sendCardInfo()" ) {
390#ifndef QT_NO_COP 390#ifndef QT_NO_COP
391 QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" ); 391 QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" );
392#endif 392#endif
393 storage->update(); 393 storage->update();
394 const QList<FileSystem> &fs = storage->fileSystems(); 394 const QList<FileSystem> &fs = storage->fileSystems();
395 QListIterator<FileSystem> it ( fs ); 395 QListIterator<FileSystem> it ( fs );
396 QString s; 396 QString s;
397 QString homeDir = getenv("HOME"); 397 QString homeDir = getenv("HOME");
398 QString homeFs, homeFsPath; 398 QString homeFs, homeFsPath;
399 for ( ; it.current(); ++it ) { 399 for ( ; it.current(); ++it ) {
400 int k4 = (*it)->blockSize()/256; 400 int k4 = (*it)->blockSize()/256;
401 if ( (*it)->isRemovable() ) { 401 if ( (*it)->isRemovable() ) {
402 s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr 402 s += (*it)->name() + "=" + (*it)->path() + "/Documents " // No tr
403 + QString::number( (*it)->availBlocks() * k4/4 ) 403 + QString::number( (*it)->availBlocks() * k4/4 )
404 + "K " + (*it)->options() + ";"; 404 + "K " + (*it)->options() + ";";
405 } else if ( homeDir.contains( (*it)->path() ) && 405 } else if ( homeDir.contains( (*it)->path() ) &&
406 (*it)->path().length() > homeFsPath.length() ) { 406 (*it)->path().length() > homeFsPath.length() ) {
407 homeFsPath = (*it)->path(); 407 homeFsPath = (*it)->path();
408 homeFs = 408 homeFs =
409 (*it)->name() + "=" + homeDir + "/Documents " // No tr 409 (*it)->name() + "=" + homeDir + "/Documents " // No tr
410 + QString::number( (*it)->availBlocks() * k4/4 ) 410 + QString::number( (*it)->availBlocks() * k4/4 )
411 + "K " + (*it)->options() + ";"; 411 + "K " + (*it)->options() + ";";
412 } 412 }
413 } 413 }
414 if ( !homeFs.isEmpty() ) 414 if ( !homeFs.isEmpty() )
415 s += homeFs; 415 s += homeFs;
416 416
417#ifndef QT_NO_COP 417#ifndef QT_NO_COP
418 e << s; 418 e << s;
419#endif 419#endif
420 } else if ( msg == "sendSyncDate(QString)" ) { 420 } else if ( msg == "sendSyncDate(QString)" ) {
421 QString app; 421 QString app;
422 stream >> app; 422 stream >> app;
423 Config cfg( "qpe" ); 423 Config cfg( "qpe" );
424 cfg.setGroup("SyncDate"); 424 cfg.setGroup("SyncDate");
425#ifndef QT_NO_COP 425#ifndef QT_NO_COP
426 QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" ); 426 QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" );
427 e << app << cfg.readEntry( app ); 427 e << app << cfg.readEntry( app );
428#endif 428#endif
429 //qDebug("QPE/System sendSyncDate for %s: response %s", app.latin1(), 429 //qDebug("QPE/System sendSyncDate for %s: response %s", app.latin1(),
430 //cfg.readEntry( app ).latin1() ); 430 //cfg.readEntry( app ).latin1() );
431 } else if ( msg == "setSyncDate(QString,QString)" ) { 431 } else if ( msg == "setSyncDate(QString,QString)" ) {
432 QString app, date; 432 QString app, date;
433 stream >> app >> date; 433 stream >> app >> date;
434 Config cfg( "qpe" ); 434 Config cfg( "qpe" );
435 cfg.setGroup("SyncDate"); 435 cfg.setGroup("SyncDate");
436 cfg.writeEntry( app, date ); 436 cfg.writeEntry( app, date );
437 //qDebug("setSyncDate(QString,QString) %s %s", app.latin1(), date.latin1()); 437 //qDebug("setSyncDate(QString,QString) %s %s", app.latin1(), date.latin1());
438 } else if ( msg == "startSync(QString)" ) { 438 } else if ( msg == "startSync(QString)" ) {
439 QString what; 439 QString what;
440 stream >> what; 440 stream >> what;
441 delete syncDialog; 441 delete syncDialog;
442 syncDialog = new SyncDialog( this, what ); 442 syncDialog = new SyncDialog( this, what );
443 syncDialog->show(); 443 syncDialog->show();
444 connect( syncDialog, SIGNAL(cancel()), SLOT(cancelSync()) ); 444 connect( syncDialog, SIGNAL(cancel()), SLOT(cancelSync()) );
445 } else if ( msg == "stopSync()") { 445 } else if ( msg == "stopSync()") {
446 delete syncDialog; 446 delete syncDialog;
447 syncDialog = 0; 447 syncDialog = 0;
448 } else if (msg == "restoreDone(QString)") { 448 } else if (msg == "restoreDone(QString)") {
449 docList->restoreDone(); 449 docList->restoreDone();
450 } else if ( msg == "getAllDocLinks()" ) { 450 } else if ( msg == "getAllDocLinks()" ) {
451 docList->sendAllDocLinks(); 451 docList->sendAllDocLinks();
452 } 452 }
453#ifdef Q_WS_QWS 453#ifdef Q_WS_QWS
454 else if ( msg == "setMouseProto(QString)" ) { 454 else if ( msg == "setMouseProto(QString)" ) {
455 QString mice; 455 QString mice;
456 stream >> mice; 456 stream >> mice;
457 setenv("QWS_MOUSE_PROTO",mice.latin1(),1); 457 setenv("QWS_MOUSE_PROTO",mice.latin1(),1);
458 qwsServer->openMouse(); 458 qwsServer->openMouse();
459 } else if ( msg == "setKeyboard(QString)" ) { 459 } else if ( msg == "setKeyboard(QString)" ) {
460 QString kb; 460 QString kb;
461 stream >> kb; 461 stream >> kb;
462 setenv("QWS_KEYBOARD",kb.latin1(),1); 462 setenv("QWS_KEYBOARD",kb.latin1(),1);
463 qwsServer->openKeyboard(); 463 qwsServer->openKeyboard();
464 464
465 } else if ( msg == "setKeyboardAutoRepeat(int,int)" ) { 465 } else if ( msg == "setKeyboardAutoRepeat(int,int)" ) {
466 int delay, period; 466 int delay, period;
467 stream >> delay >> period; 467 stream >> delay >> period;
468 qwsSetKeyboardAutoRepeat( delay, period ); 468 qwsSetKeyboardAutoRepeat( delay, period );
469 Config cfg( "qpe" ); 469 Config cfg( "qpe" );
470 cfg.setGroup("Keyboard"); 470 cfg.setGroup("Keyboard");
471 cfg.writeEntry( "RepeatDelay", delay ); 471 cfg.writeEntry( "RepeatDelay", delay );
472 cfg.writeEntry( "RepeatPeriod", period ); 472 cfg.writeEntry( "RepeatPeriod", period );
473 } else if ( msg == "setKeyboardLayout(QString)" ) { 473 } else if ( msg == "setKeyboardLayout(QString)" ) {
474 QString kb; 474 QString kb;
475 stream >> kb; 475 stream >> kb;
476 setKeyboardLayout( kb ); 476 setKeyboardLayout( kb );
477 Config cfg( "qpe" ); 477 Config cfg( "qpe" );
478 cfg.setGroup("Keyboard"); 478 cfg.setGroup("Keyboard");
479 cfg.writeEntry( "Layout", kb ); 479 cfg.writeEntry( "Layout", kb );
480 } else if ( msg == "autoStart(QString)" ) { 480 } else if ( msg == "autoStart(QString)" ) {
481 QString appName; 481 QString appName;
482 stream >> appName; 482 stream >> appName;
483 Config cfg( "autostart" ); 483 Config cfg( "autostart" );
484 cfg.setGroup( "AutoStart" ); 484 cfg.setGroup( "AutoStart" );
485 if ( appName.compare("clear") == 0){ 485 if ( appName.compare("clear") == 0){
486 cfg.writeEntry("Apps", ""); 486 cfg.writeEntry("Apps", "");
487 } 487 }
488 } else if ( msg == "autoStart(QString,QString)" ) { 488 } else if ( msg == "autoStart(QString,QString)" ) {
489 QString modifier, appName; 489 QString modifier, appName;
490 stream >> modifier >> appName; 490 stream >> modifier >> appName;
491 Config cfg( "autostart" ); 491 Config cfg( "autostart" );
492 cfg.setGroup( "AutoStart" ); 492 cfg.setGroup( "AutoStart" );
493 if ( modifier.compare("add") == 0 ){ 493 if ( modifier.compare("add") == 0 ){
494 // only add if appname is entered 494 // only add if appname is entered
495 if (!appName.isEmpty()) { 495 if (!appName.isEmpty()) {
496 cfg.writeEntry("Apps", appName); 496 cfg.writeEntry("Apps", appName);
497 } 497 }
498 } else if (modifier.compare("remove") == 0 ) { 498 } else if (modifier.compare("remove") == 0 ) {
499 // need to change for multiple entries 499 // need to change for multiple entries
500 // actually remove is right now simular to clear, but in future there 500 // actually remove is right now simular to clear, but in future there
501 // should be multiple apps in autostart possible. 501 // should be multiple apps in autostart possible.
502 QString checkName; 502 QString checkName;
503 checkName = cfg.readEntry("Apps", ""); 503 checkName = cfg.readEntry("Apps", "");
504 if (checkName == appName) { 504 if (checkName == appName) {
505 cfg.writeEntry("Apps", ""); 505 cfg.writeEntry("Apps", "");
506 } 506 }
507 } 507 }
508 // case the autostart feature should be delayed 508 // case the autostart feature should be delayed
509 } else if ( msg == "autoStart(QString,QString,QString)") { 509 } else if ( msg == "autoStart(QString,QString,QString)") {
510 QString modifier, appName, delay; 510 QString modifier, appName, delay;
511 stream >> modifier >> appName >> delay; 511 stream >> modifier >> appName >> delay;
512 Config cfg( "autostart" ); 512 Config cfg( "autostart" );
513 513
514 cfg.setGroup( "AutoStart" ); 514 cfg.setGroup( "AutoStart" );
515 if ( modifier.compare("add") == 0 ){ 515 if ( modifier.compare("add") == 0 ){
516 // only add it appname is entered 516 // only add it appname is entered
517 if (!appName.isEmpty()) { 517 if (!appName.isEmpty()) {
518 cfg.writeEntry("Apps", appName); 518 cfg.writeEntry("Apps", appName);
519 cfg.writeEntry("Delay", delay); 519 cfg.writeEntry("Delay", delay);
520 } 520 }
521 } else { 521 } else {
522 } 522 }
523 } 523 }
524#endif 524#endif
525} 525}
526 526
527void Server::receiveTaskBar(const QCString &msg, const QByteArray &data) 527void Server::receiveTaskBar(const QCString &msg, const QByteArray &data)
528{ 528{
529 QDataStream stream( data, IO_ReadOnly ); 529 QDataStream stream( data, IO_ReadOnly );
530 530
531 if ( msg == "reloadApps()" ) { 531 if ( msg == "reloadApps()" ) {
532 docList->reloadAppLnks(); 532 docList->reloadAppLnks();
533 } else if ( msg == "soundAlarm()" ) { 533 } else if ( msg == "soundAlarm()" ) {
534 ServerApplication::soundAlarm(); 534 ServerApplication::soundAlarm();
535 } 535 }
536 else if ( msg == "setLed(int,bool)" ) { 536 else if ( msg == "setLed(int,bool)" ) {
537 int led, status; 537 int led, status;
538 stream >> led >> status; 538 stream >> led >> status;
539 539
540 QValueList <OLed> ll = ODevice::inst ( )-> ledList ( ); 540 QValueList <OLed> ll = ODevice::inst ( )-> ledList ( );
541 if ( ll. count ( )){ 541 if ( ll. count ( )){
542 OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0]; 542 OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0];
543 bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow ); 543 bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow );
544 544
545 ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off ); 545 ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off );
546 } 546 }
547 } 547 }
548} 548}
549 549
550void Server::cancelSync() 550void Server::cancelSync()
551{ 551{
552#ifndef QT_NO_COP 552#ifndef QT_NO_COP
553 QCopEnvelope e( "QPE/Desktop", "cancelSync()" ); 553 QCopEnvelope e( "QPE/Desktop", "cancelSync()" );
554#endif 554#endif
555 delete syncDialog; 555 delete syncDialog;
556 syncDialog = 0; 556 syncDialog = 0;
557} 557}
558 558
559bool Server::mkdir(const QString &localPath) 559bool Server::mkdir(const QString &localPath)
560{ 560{
561 QDir fullDir(localPath); 561 QDir fullDir(localPath);
562 if (fullDir.exists()) 562 if (fullDir.exists())
563 return true; 563 return true;
564 564
565 // at this point the directory doesn't exist 565 // at this point the directory doesn't exist
566 // go through the directory tree and start creating the direcotories 566 // go through the directory tree and start creating the direcotories
567 // that don't exist; if we can't create the directories, return false 567 // that don't exist; if we can't create the directories, return false
568 568
569 QString dirSeps = "/"; 569 QString dirSeps = "/";
570 int dirIndex = localPath.find(dirSeps); 570 int dirIndex = localPath.find(dirSeps);
571 QString checkedPath; 571 QString checkedPath;
572 572
573 // didn't find any seps; weird, use the cur dir instead 573 // didn't find any seps; weird, use the cur dir instead
574 if (dirIndex == -1) { 574 if (dirIndex == -1) {
575 //qDebug("No seperators found in path %s", localPath.latin1()); 575 //qDebug("No seperators found in path %s", localPath.latin1());
576 checkedPath = QDir::currentDirPath(); 576 checkedPath = QDir::currentDirPath();
577 } 577 }
578 578
579 while (checkedPath != localPath) { 579 while (checkedPath != localPath) {
580 // no more seperators found, use the local path 580 // no more seperators found, use the local path
581 if (dirIndex == -1) 581 if (dirIndex == -1)
582 checkedPath = localPath; 582 checkedPath = localPath;
583 else { 583 else {
584 // the next directory to check 584 // the next directory to check
585 checkedPath = localPath.left(dirIndex) + "/"; 585 checkedPath = localPath.left(dirIndex) + "/";
586 // advance the iterator; the next dir seperator 586 // advance the iterator; the next dir seperator
587 dirIndex = localPath.find(dirSeps, dirIndex+1); 587 dirIndex = localPath.find(dirSeps, dirIndex+1);
588 } 588 }
589 589
590 QDir checkDir(checkedPath); 590 QDir checkDir(checkedPath);
591 if (!checkDir.exists()) { 591 if (!checkDir.exists()) {
592 //qDebug("mkdir making dir %s", checkedPath.latin1()); 592 //qDebug("mkdir making dir %s", checkedPath.latin1());
593 593
594 if (!checkDir.mkdir(checkedPath)) { 594 if (!checkDir.mkdir(checkedPath)) {
595 qDebug("Unable to make directory %s", checkedPath.latin1()); 595 qDebug("Unable to make directory %s", checkedPath.latin1());
596 return FALSE; 596 return FALSE;
597 } 597 }
598 } 598 }
599 599
600 } 600 }
601 return TRUE; 601 return TRUE;
602} 602}
603 603
604void Server::styleChange( QStyle &s ) 604void Server::styleChange( QStyle &s )
605{ 605{
606 QWidget::styleChange( s ); 606 QWidget::styleChange( s );
607} 607}
608 608
609void Server::startTransferServer() 609void Server::startTransferServer()
610{ 610{
611 if ( !qcopBridge ) { 611 if ( !qcopBridge ) {
612 // start qcop bridge server 612 // start qcop bridge server
613 qcopBridge = new QCopBridge( 4243 ); 613 qcopBridge = new QCopBridge( 4243 );
614 if ( qcopBridge->ok() ) { 614 if ( qcopBridge->ok() ) {
615 // ... OK 615 // ... OK
616 connect( qcopBridge, SIGNAL(connectionClosed(const QHostAddress&)), 616 connect( qcopBridge, SIGNAL(connectionClosed(const QHostAddress&)),
617 this, SLOT(syncConnectionClosed(const QHostAddress&)) ); 617 this, SLOT(syncConnectionClosed(const QHostAddress&)) );
618 } else { 618 } else {
619 delete qcopBridge; 619 delete qcopBridge;
620 qcopBridge = 0; 620 qcopBridge = 0;
621 } 621 }
622 } 622 }
623 if ( !transferServer ) { 623 if ( !transferServer ) {
624 // start transfer server 624 // start transfer server
625 transferServer = new TransferServer( 4242 ); 625 transferServer = new TransferServer( 4242 );
626 if ( transferServer->ok() ) { 626 if ( transferServer->ok() ) {
627 // ... OK 627 // ... OK
628 } else { 628 } else {
629 delete transferServer; 629 delete transferServer;
630 transferServer = 0; 630 transferServer = 0;
631 } 631 }
632 } 632 }
633 if ( !transferServer || !qcopBridge ) 633 if ( !transferServer || !qcopBridge )
634 tid_xfer = startTimer( 2000 ); 634 tid_xfer = startTimer( 2000 );
635} 635}
636 636
637void Server::timerEvent( QTimerEvent *e ) 637void Server::timerEvent( QTimerEvent *e )
638{ 638{
639 if ( e->timerId() == tid_xfer ) { 639 if ( e->timerId() == tid_xfer ) {
640 killTimer( tid_xfer ); 640 killTimer( tid_xfer );
641 tid_xfer = 0; 641 tid_xfer = 0;
642 startTransferServer(); 642 startTransferServer();
643 } 643 }
644 /* ### FIXME today startin */ 644 /* ### FIXME today startin */
645#if 0 645#if 0
646 else if ( e->timerId() == tid_today ) { 646 else if ( e->timerId() == tid_today ) {
647 QDate today = QDate::currentDate(); 647 QDate today = QDate::currentDate();
648 if ( today != last_today_show ) { 648 if ( today != last_today_show ) {
649 last_today_show = today; 649 last_today_show = today;
650 Config cfg("today"); 650 Config cfg("today");
651 cfg.setGroup("Start"); 651 cfg.setGroup("Start");
652#ifndef QPE_DEFAULT_TODAY_MODE 652#ifndef QPE_DEFAULT_TODAY_MODE
653#define QPE_DEFAULT_TODAY_MODE "Never" 653#define QPE_DEFAULT_TODAY_MODE "Never"
654#endif 654#endif
655 if ( cfg.readEntry("Mode",QPE_DEFAULT_TODAY_MODE) == "Daily" ) { 655 if ( cfg.readEntry("Mode",QPE_DEFAULT_TODAY_MODE) == "Daily" ) {
656 QCopEnvelope env(Service::channel("today"),"raise()"); 656 QCopEnvelope env(Service::channel("today"),"raise()");
657 } 657 }
658 } 658 }
659 } 659 }
660#endif 660#endif
661} 661}
662 662
663void Server::terminateServers() 663void Server::terminateServers()
664{ 664{
665 delete transferServer; 665 delete transferServer;
666 delete qcopBridge; 666 delete qcopBridge;
667 transferServer = 0; 667 transferServer = 0;
668 qcopBridge = 0; 668 qcopBridge = 0;
669} 669}
670 670
671void Server::syncConnectionClosed( const QHostAddress & ) 671void Server::syncConnectionClosed( const QHostAddress & )
672{ 672{
673 qDebug( "Lost sync connection" ); 673 qDebug( "Lost sync connection" );
674 delete syncDialog; 674 delete syncDialog;
675 syncDialog = 0; 675 syncDialog = 0;
676} 676}
677 677
678void Server::pokeTimeMonitors() 678void Server::pokeTimeMonitors()
679{ 679{
680#if 0 680#if 0
681 // inform all TimeMonitors 681 // inform all TimeMonitors
682 QStrList tms = Service::channels("TimeMonitor"); 682 QStrList tms = Service::channels("TimeMonitor");
683 for (const char* ch = tms.first(); ch; ch=tms.next()) { 683 for (const char* ch = tms.first(); ch; ch=tms.next()) {
684 QString t = getenv("TZ"); 684 QString t = getenv("TZ");
685 QCopEnvelope e(ch, "timeChange(QString)"); 685 QCopEnvelope e(ch, "timeChange(QString)");
686 e << t; 686 e << t;
687 } 687 }
688#endif 688#endif
689} 689}
690 690
691void Server::applicationLaunched(int, const QString &app) 691void Server::applicationLaunched(int, const QString &app)
692{ 692{
693 serverGui->applicationStateChanged( app, ServerInterface::Launching ); 693 serverGui->applicationStateChanged( app, ServerInterface::Launching );
694} 694}
695 695
696void Server::applicationTerminated(int pid, const QString &app) 696void Server::applicationTerminated(int pid, const QString &app)
697{ 697{
698 serverGui->applicationStateChanged( app, ServerInterface::Terminated ); 698 serverGui->applicationStateChanged( app, ServerInterface::Terminated );
699#if 0 699#if 0
700 tsmMonitor->applicationTerminated( pid ); 700 tsmMonitor->applicationTerminated( pid );
701#endif 701#endif
702} 702}
703 703
704void Server::applicationConnected(const QString &app) 704void Server::applicationConnected(const QString &app)
705{ 705{
706 serverGui->applicationStateChanged( app, ServerInterface::Running ); 706 serverGui->applicationStateChanged( app, ServerInterface::Running );
707} 707}
708 708
709void Server::storageChanged() 709void Server::storageChanged()
710{ 710{
711 system( "qtopia-update-symlinks" ); 711 system( "opie-update-symlinks" );
712 serverGui->storageChanged( storage->fileSystems() ); 712 serverGui->storageChanged( storage->fileSystems() );
713 docList->storageChanged(); 713 docList->storageChanged();
714} 714}
715 715
716 716
717 717
718void Server::preloadApps() 718void Server::preloadApps()
719{ 719{
720 Config cfg("Launcher"); 720 Config cfg("Launcher");
721 cfg.setGroup("Preload"); 721 cfg.setGroup("Preload");
722 QStringList apps = cfg.readListEntry("Apps",','); 722 QStringList apps = cfg.readListEntry("Apps",',');
723 for (QStringList::ConstIterator it=apps.begin(); it!=apps.end(); ++it) { 723 for (QStringList::ConstIterator it=apps.begin(); it!=apps.end(); ++it) {
724#ifndef QT_NO_COP 724#ifndef QT_NO_COP
725 QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()"); 725 QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()");
726#endif 726#endif
727 } 727 }
728} 728}
729 729
diff --git a/core/symlinker/Makefile b/core/symlinker/Makefile
new file mode 100644
index 0000000..f35292c
--- a/dev/null
+++ b/core/symlinker/Makefile
@@ -0,0 +1,160 @@
1#############################################################################
2# Makefile for building: $(OPIEDIR)/bin/opie-update-symlinks
3# Generated by qmake (1.05a) (Qt 3.1.2) on: Tue Mar 16 10:46:29 2004
4# Project: symlinker.pro
5# Template: app
6# Command: $(QMAKE) -o Makefile symlinker.pro
7#############################################################################
8
9####### Compiler, tools and options
10
11CC = arm-linux-gcc
12CXX = arm-linux-g++ -DQT_QWS_IPAQ
13LEX = flex
14YACC = yacc
15CFLAGS = -pipe $(CFLAGS_EXTRA) -Wall -W $(if $(CFLAGS_RELEASE),$(CFLAGS_RELEASE), -O2) -DUSE_REALTIME_AUDIO_THREAD -DOPIE_NEW_MALLOC -DOPIE_SOUND_FRAGMENT_SHIFT=14 -DOPIE_WE_VERSION=15 -DQT_NO_DEBUG
16CXXFLAGS = -pipe $(CFLAGS_EXTRA) -DQWS -fno-exceptions -fno-rtti $(CXXFLAGS_EXTRA) -Wall -W $(if $(CFLAGS_RELEASE),$(CFLAGS_RELEASE), -O2) -DUSE_REALTIME_AUDIO_THREAD -DOPIE_NEW_MALLOC -DOPIE_SOUND_FRAGMENT_SHIFT=14 -DOPIE_WE_VERSION=15 -DQT_NO_DEBUG
17LEXFLAGS =
18YACCFLAGS= -d
19INCPATH = -I/opt/arm/opie//mkspecs/qws/linux-ipaq-g++ -I. -I$(OPIEDIR)/include -I$(QTDIR)/include -I.moc/$(PLATFORM)/
20LINK = arm-linux-gcc
21LFLAGS = $(LFLAGS_EXTRA) -Wl,-rpath=$(OPIEDIR)/lib
22LIBS = $(SUBLIBS) -Wl,-rpath-link,$(OPIEDIR)/lib -L$(OPIEDIR)/lib -Wl,-rpath-link,$(QTDIR)/lib -L$(QTDIR)/lib $(LIBS_EXTRA) -lqpe -lopie -lqte
23AR = ar cqs
24RANLIB =
25MOC = $(QTDIR)/bin/moc
26UIC = $(QTDIR)/bin/uic
27QMAKE = qmake
28TAR = tar -cf
29GZIP = gzip -9f
30COPY = cp -f
31COPY_FILE= $(COPY) -p
32COPY_DIR = $(COPY) -pR
33DEL_FILE = rm -f
34SYMLINK = ln -sf
35DEL_DIR = rmdir
36MOVE = mv -f
37PRO = symlinker.pro
38CHK_DIR_EXISTS= test -d
39MKDIR = mkdir -p
40
41####### Output directory
42
43OBJECTS_DIR = .obj/$(PLATFORM)/
44
45####### Files
46
47HEADERS =
48SOURCES = main.cpp
49OBJECTS = .obj/$(PLATFORM)/main.o
50FORMS =
51UICDECLS =
52UICIMPLS =
53SRCMOC =
54OBJMOC =
55 DIST = ../../gen.pro \
56 ../../include.pro \
57 symlinker.pro
58QMAKE_TARGET = opie-update-symlinks
59DESTDIR = $(OPIEDIR)/bin/
60TARGET = $(OPIEDIR)/bin/opie-update-symlinks
61
62first: all
63####### Implicit rules
64
65.SUFFIXES: .c .cpp .cc .cxx .C
66
67.cpp.o:
68 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
69
70.cc.o:
71 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
72
73.cxx.o:
74 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
75
76.C.o:
77 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
78
79.c.o:
80 $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
81
82####### Build rules
83
84all: Makefile $(TARGET)
85
86$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
87 test -d $(OPIEDIR)/bin/ || mkdir -p $(OPIEDIR)/bin/
88 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
89
90mocables: $(SRCMOC)
91
92$(MOC):
93 ( cd $(QTDIR)/src/moc ; $(MAKE) )
94
95Makefile: symlinker.pro /opt/arm/opie//mkspecs/qws/linux-ipaq-g++/qmake.conf ../../gen.pro \
96 ../../include.pro
97 $(QMAKE) -o Makefile symlinker.pro
98qmake:
99 @$(QMAKE) -o Makefile symlinker.pro
100
101dist:
102 @mkdir -p .obj/$(PLATFORM)/opie-update-symlinks && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .obj/$(PLATFORM)/opie-update-symlinks/ && ( cd `dirname .obj/$(PLATFORM)/opie-update-symlinks` && $(TAR) opie-update-symlinks.tar opie-update-symlinks && $(GZIP) opie-update-symlinks.tar ) && $(MOVE) `dirname .obj/$(PLATFORM)/opie-update-symlinks`/opie-update-symlinks.tar.gz . && $(DEL_FILE) -r .obj/$(PLATFORM)/opie-update-symlinks
103
104mocclean:
105
106uiclean:
107
108yaccclean:
109lexclean:
110clean:
111 -$(DEL_FILE) $(OBJECTS)
112 -$(DEL_FILE) *~ core *.core
113
114
115####### Sub-libraries
116
117distclean: clean
118 -$(DEL_FILE) $(OPIEDIR)/bin/$(TARGET) $(TARGET)
119
120
121lupdate:
122 lupdate -noobsolete $(PRO)
123
124lrelease:
125 lrelease $(PRO)
126
127ipk:
128 tmp=`mktemp -d /tmp/ipkg-opie.XXXXXXXXXX` && ( $(MAKE) INSTALL_ROOT="" install && ipkg-build ; rm -rf ; )
129
130opie-lupdate:
131 opie-lupdate $(PRO)
132
133opie-lrelease:
134 opie-lrelease $(PRO)
135
136messages:
137 xgettext -C -n -ktr -kQT_TRANSLATE_NOOP main.cpp -o '$(OPIEDIR)/messages-$(QMAKE_TARGET)-tr.po' && xgettext -C -n -a main.cpp -o '$(OPIEDIR)/messages-$(QMAKE_TARGET)-allstrings.po'
138
139FORCE:
140
141####### Compile
142
143.obj/$(PLATFORM)/main.o: main.cpp
144 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/$(PLATFORM)/main.o main.cpp
145
146####### Install
147
148install_target:
149 @$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)$(OPIEDIR)/bin/" || $(MKDIR) "$(INSTALL_ROOT)$(OPIEDIR)/bin/"
150 -$(COPY) "$(OPIEDIR)/bin/$(QMAKE_TARGET)" "$(INSTALL_ROOT)$(OPIEDIR)/bin/$(QMAKE_TARGET)"
151
152uninstall_target:
153 -$(DEL_FILE) "$(INSTALL_ROOT)$(OPIEDIR)/bin/$(QMAKE_TARGET)"
154 -$(DEL_DIR) "$(INSTALL_ROOT)$(OPIEDIR)/bin/"
155
156
157install: all install_target
158
159uninstall: uninstall_target
160
diff --git a/core/symlinker/config.in b/core/symlinker/config.in
new file mode 100644
index 0000000..a378d3a
--- a/dev/null
+++ b/core/symlinker/config.in
@@ -0,0 +1,5 @@
1 config SYMLINKER
2 boolean "Opie Symlinker for external media"
3 default "y"
4 depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE && LAUNCHER
5
diff --git a/core/symlinker/main.cpp b/core/symlinker/main.cpp
new file mode 100644
index 0000000..73d5166
--- a/dev/null
+++ b/core/symlinker/main.cpp
@@ -0,0 +1,160 @@
1#include <qapplication.h>
2#include <qfile.h>
3#include <qfileinfo.h>
4#include <qdir.h>
5#include <qtextstream.h>
6#include <qstringlist.h>
7
8#include <stdlib.h>
9#include <unistd.h> //symlink()
10#include <sys/stat.h> // mkdir()
11
12#include <sys/vfs.h>
13#include <mntent.h>
14
15static const char *listDir = "/usr/lib/ipkg/externinfo/";
16
17static void createSymlinks( const QString &location, const QString &package )
18{
19 QFile inFile( location + "/usr/lib/ipkg/info/" + package + ".list" );
20 mkdir( "/usr/lib/ipkg", 0777 );
21 mkdir( listDir, 0777 );
22
23 QFile outFile( listDir + package + ".list");
24
25 //qDebug( "createSymlinks %s -> %s", inFile.name().ascii(), outFile.name().ascii() );
26
27
28
29 if ( inFile.open(IO_ReadOnly) && outFile.open(IO_WriteOnly)) {
30 QTextStream in(&inFile);
31 QTextStream out(&outFile);
32
33 QString s;
34 while ( !in.eof() ) { // until end of file...
35 s = in.readLine(); // line of text excluding '\n'
36 //qDebug( "Read: %s", s.ascii() );
37 // for s, do link/mkdir.
38 if ( s.right(1) == "/" ) {
39 //qDebug("do mkdir for %s", s.ascii());
40 mkdir( s.ascii(), 0777 );
41 //possible optimization: symlink directories
42 //that don't exist already. -- Risky.
43 } else {
44 //qDebug("do symlink for %s", s.ascii());
45 QFileInfo ffi( s );
46 //Don't try to symlink if a regular file exists already
47 if ( !ffi.exists() || ffi.isSymLink() ) {
48 symlink( (location+s).ascii(), s.ascii() );
49 // qDebug ( "Created %s" ,s.ascii() );
50 out << s << "\n";
51 } //else {
52 // qDebug( "%s exists already, not symlinked", s.ascii() );
53 // }
54 }
55 }
56 inFile.close();
57 outFile.close();
58 }
59}
60
61
62
63static void removeSymlinks( const QString &package )
64{
65 QFile inFile( listDir + package + ".list" );
66
67 if ( inFile.open(IO_ReadOnly) ) {
68 QTextStream in(&inFile);
69
70 QString s;
71 while ( !in.eof() ) { // until end of file...
72 s = in.readLine(); // line of text excluding '\n'
73 //qDebug("remove symlink %s", s.ascii());
74 QFileInfo ffi( s );
75 //Confirm that it's still a symlink.
76 if ( ffi.isSymLink() )
77 unlink( s.ascii() );
78 // qDebug ( "Removed %s", s.ascii() );
79 // else
80 // qDebug( "Not removed %s", s.ascii() );
81 }
82 inFile.close();
83 inFile.remove();
84 }
85}
86
87
88
89/*
90 Slightly hacky: we can't use StorageInfo, since we don't have a
91 QApplication. We look for filesystems that have the directory
92 /usr/lib/ipkg/info, and assume that they are removable media
93 with packages installed. This is safe even if eg. /usr is on a
94 separate filesystem, since then we would be testing for
95 /usr/usr/lib/ipkg/info, which should not exist. (And if it
96 does they deserve to have it treated as removable.)
97 */
98
99static void updateSymlinks()
100{
101 QDir lists( listDir );
102 QStringList knownPackages = lists.entryList( "*.list" ); // No tr
103
104 struct mntent *me;
105 FILE *mntfp = setmntent( "/etc/mtab", "r" );
106
107 if ( mntfp ) {
108 while ( (me = getmntent( mntfp )) != 0 ) {
109 QString root = me->mnt_dir;
110 if ( root == "/" )
111 continue;
112
113 QString info = root + "/usr/lib/ipkg/info";
114 QDir infoDir( info );
115 //qDebug( "looking at %s", info.ascii() );
116 if ( infoDir.isReadable() ) {
117 const QFileInfoList *packages = infoDir.entryInfoList( "*.list" ); // No tr
118 QFileInfoListIterator it( *packages );
119 QFileInfo *fi;
120 while (( fi = *it )) {
121 ++it;
122 if ( knownPackages.contains( fi->fileName() ) ) {
123 //qDebug( "found %s and we've seen it before", fi->fileName().latin1() );
124 knownPackages.remove( fi->fileName() );
125 } else {
126 //it's a new one
127 createSymlinks( root, fi->baseName() );
128 }
129
130 }
131
132 }
133 }
134 endmntent( mntfp );
135 }
136
137 for ( QStringList::Iterator it = knownPackages.begin();
138 it != knownPackages.end(); ++it ) {
139 // strip ".info" off the end.
140 removeSymlinks( (*it).left((*it).length()-5) );
141 }
142}
143
144
145
146int main( int argc, char *argv[] )
147{
148 QApplication a( argc, argv, QApplication::Tty );
149
150 QString command = argc > 1 ? argv[1] : "update"; // No tr
151
152 if ( command == "update" ) // No tr
153 updateSymlinks();
154 else if ( command == "create" && argc > 3 ) // No tr
155 createSymlinks( argv[2], argv[3] );
156 else if ( command == "remove" && argc > 2 ) // No tr
157 removeSymlinks( argv[2] );
158 else
159 qWarning( "Argument error" );
160}
diff --git a/core/symlinker/opie-symlinker.control b/core/symlinker/opie-symlinker.control
new file mode 100644
index 0000000..6378653
--- a/dev/null
+++ b/core/symlinker/opie-symlinker.control
@@ -0,0 +1,9 @@
1Package: opie-symlinker
2Files: bin/opie-update-symlinks
3Priority: optional
4Section: opie/system
5Maintainer: Project Opie <opie@handhelds.org>
6Architecture: arm
7Version: $QPE_VERSION-$SUB_VERSION.3
8Depends: task-opie-minimal
9Description: Enables apps on external media
diff --git a/core/symlinker/symlinker.pro b/core/symlinker/symlinker.pro
new file mode 100644
index 0000000..9558b3e
--- a/dev/null
+++ b/core/symlinker/symlinker.pro
@@ -0,0 +1,15 @@
1 TEMPLATE= app
2 CONFIG += qtopia warn_on release
3 DESTDIR = $(OPIEDIR)/bin
4
5 HEADERS =
6 SOURCES = main.cpp
7 INTERFACES=
8
9 TARGET = opie-update-symlinks
10INCLUDEPATH += $(OPIEDIR)/include
11DEPENDPATH += $(OPIEDIR)/include .
12LIBS += -lqpe -lopie
13
14include ( $(OPIEDIR)/include.pro )
15
diff --git a/packages b/packages
index 8f4f731..9e5406e 100644
--- a/packages
+++ b/packages
@@ -1,209 +1,210 @@
1 CONFIG_ABOUTAPPLET core/applets/aboutappletaboutapplet.pro 1 CONFIG_ABOUTAPPLET core/applets/aboutappletaboutapplet.pro
2 CONFIG_ADDRESSBOOK core/pim/addressbookaddressbook.pro 2 CONFIG_ADDRESSBOOK core/pim/addressbookaddressbook.pro
3 CONFIG_ADVANCEDFM noncore/apps/advancedfmadvancedfm.pro 3 CONFIG_ADVANCEDFM noncore/apps/advancedfmadvancedfm.pro
4 CONFIG_APPEARANCE2 noncore/settings/appearance2appearance2.pro 4 CONFIG_APPEARANCE2 noncore/settings/appearance2appearance2.pro
5CONFIG_APPLET_EXAMPLE examples/applet example.pro 5CONFIG_APPLET_EXAMPLE examples/applet example.pro
6 CONFIG_APPSKEY noncore/settings/appskeyappskey.pro 6 CONFIG_APPSKEY noncore/settings/appskeyappskey.pro
7 CONFIG_AQPKG noncore/settings/aqpkgaqpkg.pro 7 CONFIG_AQPKG noncore/settings/aqpkgaqpkg.pro
8 CONFIG_AUTOROTATEAPPLET noncore/applets/autorotateappletautorotateapplet.pro 8 CONFIG_AUTOROTATEAPPLET noncore/applets/autorotateappletautorotateapplet.pro
9 CONFIG_BACKGAMMONnoncore/games/backgammon backgammon.pro 9 CONFIG_BACKGAMMONnoncore/games/backgammon backgammon.pro
10 CONFIG_BACKUP noncore/settings/backupbackup.pro 10 CONFIG_BACKUP noncore/settings/backupbackup.pro
11 CONFIG_BARTENDER noncore/apps/opie-bartenderbartender.pro 11 CONFIG_BARTENDER noncore/apps/opie-bartenderbartender.pro
12 CONFIG_BATTERYAPPLET core/applets/batteryappletbatteryapplet.pro 12 CONFIG_BATTERYAPPLET core/applets/batteryappletbatteryapplet.pro
13 CONFIG_BEND noncore/unsupported/mail2/bendbend.pro 13 CONFIG_BEND noncore/unsupported/mail2/bendbend.pro
14CONFIG_BIGSCREEN_EXAMPLE libopie/big-screen/example osplitter_mail.pro 14CONFIG_BIGSCREEN_EXAMPLE libopie/big-screen/example osplitter_mail.pro
15 CONFIG_BINARY noncore/tools/calc2/binarybinary.pro 15 CONFIG_BINARY noncore/tools/calc2/binarybinary.pro
16 CONFIG_BLUE-PIN noncore/net/opietooth/blue-pinblue-pin.pro 16 CONFIG_BLUE-PIN noncore/net/opietooth/blue-pinblue-pin.pro
17 CONFIG_BOUNCE noncore/games/bouncebounce.pro 17 CONFIG_BOUNCE noncore/games/bouncebounce.pro
18 CONFIG_BUTTON-SETTINGS core/settings/buttonbutton.pro 18 CONFIG_BUTTON-SETTINGS core/settings/buttonbutton.pro
19 CONFIG_BUZZWORD noncore/games/buzzwordbuzzword.pro 19 CONFIG_BUZZWORD noncore/games/buzzwordbuzzword.pro
20 CONFIG_CALC2 noncore/tools/calc2calc.pro 20 CONFIG_CALC2 noncore/tools/calc2calc.pro
21 CONFIG_CALCULATOR noncore/tools/calculatorcalculator.pro 21 CONFIG_CALCULATOR noncore/tools/calculatorcalculator.pro
22 CONFIG_CALIBRATE core/apps/calibratecalibrate.pro 22 CONFIG_CALIBRATE core/apps/calibratecalibrate.pro
23 CONFIG_CAMERA noncore/multimedia/cameracamera.pro 23 CONFIG_CAMERA noncore/multimedia/cameracamera.pro
24 CONFIG_CARDMON core/applets/cardmoncardmon.pro 24 CONFIG_CARDMON core/applets/cardmoncardmon.pro
25 CONFIG_CHECKBOOK noncore/apps/checkbookcheckbook.pro 25 CONFIG_CHECKBOOK noncore/apps/checkbookcheckbook.pro
26 CONFIG_CITYTIME core/settings/citytimecitytime.pro 26 CONFIG_CITYTIME core/settings/citytimecitytime.pro
27 CONFIG_CLIPBOARDAPPLET core/applets/clipboardappletclipboardapplet.pro 27 CONFIG_CLIPBOARDAPPLET core/applets/clipboardappletclipboardapplet.pro
28 CONFIG_CLOCKAPPLET core/applets/clockappletclockapplet.pro 28 CONFIG_CLOCKAPPLET core/applets/clockappletclockapplet.pro
29 CONFIG_CLOCK noncore/tools/clockclock.pro 29 CONFIG_CLOCK noncore/tools/clockclock.pro
30 CONFIG_CONFEDIT noncore/apps/confeditconfedit.pro 30 CONFIG_CONFEDIT noncore/apps/confeditconfedit.pro
31 CONFIG_DASHER inputmethods/dasherdasher.pro 31 CONFIG_DASHER inputmethods/dasherdasher.pro
32 CONFIG_DATEBOOK core/pim/datebookdatebook.pro 32 CONFIG_DATEBOOK core/pim/datebookdatebook.pro
33 CONFIG_DECO_FLAT noncore/decorations/flatflat.pro 33 CONFIG_DECO_FLAT noncore/decorations/flatflat.pro
34 CONFIG_DECO_LIQUID noncore/decorations/liquidliquid.pro 34 CONFIG_DECO_LIQUID noncore/decorations/liquidliquid.pro
35 CONFIG_DECO_POLISHED noncore/decorations/polishedpolished.pro 35 CONFIG_DECO_POLISHED noncore/decorations/polishedpolished.pro
36 CONFIG_DICTIONARY noncore/apps/dictionarydictionary.pro 36 CONFIG_DICTIONARY noncore/apps/dictionarydictionary.pro
37CONFIG_DOCTAB noncore/settings/doctab doctab.pro 37CONFIG_DOCTAB noncore/settings/doctab doctab.pro
38 CONFIG_DRAWPAD noncore/graphics/drawpaddrawpad.pro 38 CONFIG_DRAWPAD noncore/graphics/drawpaddrawpad.pro
39 CONFIG_DVORAK inputmethods/dvorakdvorak.pro 39 CONFIG_DVORAK inputmethods/dvorakdvorak.pro
40 CONFIG_EMBEDDEDKONSOLE core/apps/embeddedkonsoleembeddedkonsole.pro 40 CONFIG_EMBEDDEDKONSOLE core/apps/embeddedkonsoleembeddedkonsole.pro
41 CONFIG_EUROCONV noncore/tools/euroconv/ euroconv.pro 41 CONFIG_EUROCONV noncore/tools/euroconv/ euroconv.pro
42CONFIG_EXAMPLE_BOARD examples/inputmethod example.pro 42CONFIG_EXAMPLE_BOARD examples/inputmethod example.pro
43CONFIG_EXAMPLE_MENU examples/menuapplet menuapplet.pro 43CONFIG_EXAMPLE_MENU examples/menuapplet menuapplet.pro
44CONFIG_EXAMPLE_VPN examples/networksettings example.pro 44CONFIG_EXAMPLE_VPN examples/networksettings example.pro
45 CONFIG_FIFTEEN noncore/games/fifteenfifteen.pro 45 CONFIG_FIFTEEN noncore/games/fifteenfifteen.pro
46 CONFIG_FILEBROWSER noncore/unsupported/filebrowserfilebrowser.pro 46 CONFIG_FILEBROWSER noncore/unsupported/filebrowserfilebrowser.pro
47 CONFIG_FLAT noncore/styles/flatflat.pro 47 CONFIG_FLAT noncore/styles/flatflat.pro
48 CONFIG_FORMATTER noncore/tools/formatterformatter.pro 48 CONFIG_FORMATTER noncore/tools/formatterformatter.pro
49 CONFIG_FREETYPE freetypefreetype.pro 49 CONFIG_FREETYPE freetypefreetype.pro
50 CONFIG_FRESH noncore/styles/freshfresh.pro 50 CONFIG_FRESH noncore/styles/freshfresh.pro
51 CONFIG_FTPLIB noncore/net/ftplibftplib.pro 51 CONFIG_FTPLIB noncore/net/ftplibftplib.pro
52 CONFIG_GO noncore/games/gogo.pro 52 CONFIG_GO noncore/games/gogo.pro
53 CONFIG_GSMTOOL noncore/unsupported/gsmtoolgsmtool.pro 53 CONFIG_GSMTOOL noncore/unsupported/gsmtoolgsmtool.pro
54 CONFIG_HANDWRITING inputmethods/handwritinghandwriting.pro 54 CONFIG_HANDWRITING inputmethods/handwritinghandwriting.pro
55 CONFIG_HELPBROWSER core/apps/helpbrowserhelpbrowser.pro 55 CONFIG_HELPBROWSER core/apps/helpbrowserhelpbrowser.pro
56 CONFIG_HOMEAPPLET core/applets/homeapplethomeapplet.pro 56 CONFIG_HOMEAPPLET core/applets/homeapplethomeapplet.pro
57 CONFIG_INTERFACES noncore/settings/networksettings/interfacesinterfaces.pro 57 CONFIG_INTERFACES noncore/settings/networksettings/interfacesinterfaces.pro
58 CONFIG_IRDAAPPLET core/applets/irdaappletirdaapplet.pro 58 CONFIG_IRDAAPPLET core/applets/irdaappletirdaapplet.pro
59 CONFIG_JUMPX inputmethods/jumpxjumpx.pro 59 CONFIG_JUMPX inputmethods/jumpxjumpx.pro
60 CONFIG_KBILL noncore/games/kbillkbill.pro 60 CONFIG_KBILL noncore/games/kbillkbill.pro
61 CONFIG_KCHECKERS noncore/games/kcheckerskcheckers.pro 61 CONFIG_KCHECKERS noncore/games/kcheckerskcheckers.pro
62 CONFIG_KEYBOARD inputmethods/keyboardkeyboard.pro 62 CONFIG_KEYBOARD inputmethods/keyboardkeyboard.pro
63 CONFIG_KEYPEBBLE noncore/comm/keypebblekeypebble.pro 63 CONFIG_KEYPEBBLE noncore/comm/keypebblekeypebble.pro
64 CONFIG_KEYVIEW development/keyviewkeyview.pro 64 CONFIG_KEYVIEW development/keyviewkeyview.pro
65CONFIG_KEYZCFG noncore/apps/keyz-cfg keyz-cfg.pro 65CONFIG_KEYZCFG noncore/apps/keyz-cfg keyz-cfg.pro
66 CONFIG_KJUMPX inputmethods/kjumpxkjumpx.pro 66 CONFIG_KJUMPX inputmethods/kjumpxkjumpx.pro
67 CONFIG_KPACMAN noncore/games/kpacmankpacman.pro 67 CONFIG_KPACMAN noncore/games/kpacmankpacman.pro
68 CONFIG_LANGUAGE noncore/settings/languagelanguage.pro 68 CONFIG_LANGUAGE noncore/settings/languagelanguage.pro
69 CONFIG_LAUNCHER_CORE core/launcherserver.pro 69 CONFIG_LAUNCHER_CORE core/launcherserver.pro
70 CONFIG_LAUNCHER-SETTINGS core/settings/launcherlauncher.pro 70 CONFIG_LAUNCHER-SETTINGS core/settings/launcherlauncher.pro
71 CONFIG_LIBFFMPEG core/multimedia/opieplayer/libffmpeglibffmpeg.pro 71 CONFIG_LIBFFMPEG core/multimedia/opieplayer/libffmpeglibffmpeg.pro
72 CONFIG_LIBFLASH core/multimedia/opieplayer/libflashlibflash.pro 72 CONFIG_LIBFLASH core/multimedia/opieplayer/libflashlibflash.pro
73CONFIG_LIBKATE noncore/apps/tinykate/libkate libkate.pro 73CONFIG_LIBKATE noncore/apps/tinykate/libkate libkate.pro
74 CONFIG_LIBMAD core/multimedia/opieplayer/libmadlibmad.pro 74 CONFIG_LIBMAD core/multimedia/opieplayer/libmadlibmad.pro
75 CONFIG_LIBMAIL noncore/unsupported/mail2/libmaillibmail.pro 75 CONFIG_LIBMAIL noncore/unsupported/mail2/libmaillibmail.pro
76CONFIG_LIBMAILWRAPPER noncore/net/mail/libmailwrapper libmailwrapper.pro 76CONFIG_LIBMAILWRAPPER noncore/net/mail/libmailwrapper libmailwrapper.pro
77 CONFIG_LIBMPEG3 core/multimedia/opieplayer/libmpeg3libmpeg3.pro 77 CONFIG_LIBMPEG3 core/multimedia/opieplayer/libmpeg3libmpeg3.pro
78 CONFIG_LIBOPIE2CORE libopie2/opiecoreopiecore.pro 78 CONFIG_LIBOPIE2CORE libopie2/opiecoreopiecore.pro
79 CONFIG_LIBOPIE2DB libopie2/opiedbopiedb.pro 79 CONFIG_LIBOPIE2DB libopie2/opiedbopiedb.pro
80 CONFIG_LIBOPIE2EXAMPLES libopie2/examplesexamples.pro 80 CONFIG_LIBOPIE2EXAMPLES libopie2/examplesexamples.pro
81 CONFIG_LIBOPIE2MM libopie2/opiemmopiemm.pro 81 CONFIG_LIBOPIE2MM libopie2/opiemmopiemm.pro
82 CONFIG_LIBOPIE2NET libopie2/opienetopienet.pro 82 CONFIG_LIBOPIE2NET libopie2/opienetopienet.pro
83 CONFIG_LIBOPIE2PIM libopie2/opiepimopiepim.pro 83 CONFIG_LIBOPIE2PIM libopie2/opiepimopiepim.pro
84 CONFIG_LIBOPIE2UI libopie2/opieuiopieui.pro 84 CONFIG_LIBOPIE2UI libopie2/opieuiopieui.pro
85 CONFIG_LIBOPIE libopielibopie.pro 85 CONFIG_LIBOPIE libopielibopie.pro
86 CONFIG_LIBOPIE_PIM libopie/pimpim.pro 86 CONFIG_LIBOPIE_PIM libopie/pimpim.pro
87 CONFIG_LIBOPIETOOTH noncore/net/opietooth/liblib.pro 87 CONFIG_LIBOPIETOOTH noncore/net/opietooth/liblib.pro
88 CONFIG_LIBQPE librarylibrary.pro 88 CONFIG_LIBQPE librarylibrary.pro
89 CONFIG_LIBQPE-X11 x11/libqpe-x11libqpe-x11.pro 89 CONFIG_LIBQPE-X11 x11/libqpe-x11libqpe-x11.pro
90 CONFIG_LIBQTAUX libqtauxlibqtaux.pro 90 CONFIG_LIBQTAUX libqtauxlibqtaux.pro
91 CONFIG_LIBSQL libsqllibsql.pro 91 CONFIG_LIBSQL libsqllibsql.pro
92 CONFIG_LIBSLCOMPAT libslcompatlibslcompat.pro 92 CONFIG_LIBSLCOMPAT libslcompatlibslcompat.pro
93CONFIG_LIBTREMOR core/multimedia/opieplayer/vorbis/tremor tremor.pro 93CONFIG_LIBTREMOR core/multimedia/opieplayer/vorbis/tremor tremor.pro
94CONFIG_LIBTREMORPLUGIN core/multimedia/opieplayer/vorbis libtremor.pro 94CONFIG_LIBTREMORPLUGIN core/multimedia/opieplayer/vorbis libtremor.pro
95 CONFIG_LIGHT-AND-POWER core/settings/light-and-powerlight-and-power.pro 95 CONFIG_LIGHT-AND-POWER core/settings/light-and-powerlight-and-power.pro
96 CONFIG_LIQUID noncore/styles/liquidliquid.pro 96 CONFIG_LIQUID noncore/styles/liquidliquid.pro
97 CONFIG_LOGOUTAPPLET core/applets/logoutappletlogoutapplet.pro 97 CONFIG_LOGOUTAPPLET core/applets/logoutappletlogoutapplet.pro
98 CONFIG_MAIL3 noncore/net/mail mail.pro 98 CONFIG_MAIL3 noncore/net/mail mail.pro
99CONFIG_MAILAPPLET noncore/net/mail/taskbarapplet taskbarapplet.pro 99CONFIG_MAILAPPLET noncore/net/mail/taskbarapplet taskbarapplet.pro
100 CONFIG_MAILIT noncore/unsupported/mailit mailit.pro 100 CONFIG_MAILIT noncore/unsupported/mailit mailit.pro
101CONFIG_MAIN_TAB_EXAMPLE examples/main-tab example.pro 101CONFIG_MAIN_TAB_EXAMPLE examples/main-tab example.pro
102 CONFIG_MEDIUMMOUNT noncore/settings/mediummountmediummount.pro 102 CONFIG_MEDIUMMOUNT noncore/settings/mediummountmediummount.pro
103 CONFIG_MEMORYAPPLET noncore/applets/memoryappletmemoryapplet.pro 103 CONFIG_MEMORYAPPLET noncore/applets/memoryappletmemoryapplet.pro
104 CONFIG_METAL noncore/styles/metalmetal.pro 104 CONFIG_METAL noncore/styles/metalmetal.pro
105 CONFIG_MINDBREAKER noncore/games/mindbreakermindbreaker.pro 105 CONFIG_MINDBREAKER noncore/games/mindbreakermindbreaker.pro
106 CONFIG_MINESWEEP noncore/games/minesweepminesweep.pro 106 CONFIG_MINESWEEP noncore/games/minesweepminesweep.pro
107 CONFIG_MOBILEMSG noncore/comm/mobilemsgmobilemsg.pro 107 CONFIG_MOBILEMSG noncore/comm/mobilemsgmobilemsg.pro
108 CONFIG_MODPLUG core/multimedia/opieplayer/modplugmodplug.pro 108 CONFIG_MODPLUG core/multimedia/opieplayer/modplugmodplug.pro
109 CONFIG_MULTIKEYAPPLET core/applets/multikeyappletmultikeyapplet.pro 109 CONFIG_MULTIKEYAPPLET core/applets/multikeyappletmultikeyapplet.pro
110 CONFIG_MULTIKEY inputmethods/multikeymultikey.pro 110 CONFIG_MULTIKEY inputmethods/multikeymultikey.pro
111 CONFIG_NETSYSTEMTIME noncore/settings/netsystemtimenetsystemtime.pro 111 CONFIG_NETSYSTEMTIME noncore/settings/netsystemtimenetsystemtime.pro
112 CONFIG_NETWORKAPPLET noncore/applets/networkappletnetworkapplet.pro 112 CONFIG_NETWORKAPPLET noncore/applets/networkappletnetworkapplet.pro
113 CONFIG_NETWORKSETUP noncore/settings/networksettingsnetworksettings.pro 113 CONFIG_NETWORKSETUP noncore/settings/networksettingsnetworksettings.pro
114 CONFIG_NOTESAPPLET noncore/applets/notesappletnotesapplet.pro 114 CONFIG_NOTESAPPLET noncore/applets/notesappletnotesapplet.pro
115 CONFIG_OAPP core/apps/oappoapp.pro 115 CONFIG_OAPP core/apps/oappoapp.pro
116 CONFIG_OBEX core/applets/obex2obex.pro 116 CONFIG_OBEX core/applets/obex2obex.pro
117 CONFIG_ODICT noncore/apps/odictodict.pro 117 CONFIG_ODICT noncore/apps/odictodict.pro
118 CONFIG_OIPKG noncore/unsupported/oipkgoipkg.pro 118 CONFIG_OIPKG noncore/unsupported/oipkgoipkg.pro
119 CONFIG_OPIEALARMcore/opiealarm 119 CONFIG_OPIEALARMcore/opiealarm
120 CONFIG_OPIE-CONSOLE noncore/apps/opie-consoleopie-console.pro 120 CONFIG_OPIE-CONSOLE noncore/apps/opie-consoleopie-console.pro
121 CONFIG_OPIEFTP noncore/net/opieftpopieftp.pro 121 CONFIG_OPIEFTP noncore/net/opieftpopieftp.pro
122 CONFIG_OPIEIRC noncore/net/opieircopieirc.pro 122 CONFIG_OPIEIRC noncore/net/opieircopieirc.pro
123 CONFIG_OPIE-LOGIN core/opie-loginopie-login.pro 123 CONFIG_OPIE-LOGIN core/opie-loginopie-login.pro
124 CONFIG_OPIEMAIL2noncore/unsupported/mail2 mail.pro 124 CONFIG_OPIEMAIL2noncore/unsupported/mail2 mail.pro
125 CONFIG_OPIEPLAYER2 noncore/multimedia/opieplayer2opieplayer2.pro 125 CONFIG_OPIEPLAYER2 noncore/multimedia/opieplayer2opieplayer2.pro
126 CONFIG_OPIEPLAYER core/multimedia/opieplayeropieplayer.pro 126 CONFIG_OPIEPLAYER core/multimedia/opieplayeropieplayer.pro
127 CONFIG_OPIE-RDESKTOP noncore/net/opierdesktopopierdesktop.pro 127 CONFIG_OPIE-RDESKTOP noncore/net/opierdesktopopierdesktop.pro
128 CONFIG_OPIE-READER noncore/apps/opie-readeropie-reader.pro 128 CONFIG_OPIE-READER noncore/apps/opie-readeropie-reader.pro
129 CONFIG_OPIEREC noncore/multimedia/opierecopierec.pro 129 CONFIG_OPIEREC noncore/multimedia/opierecopierec.pro
130 CONFIG_OPIE-SHEET noncore/apps/opie-sheetopie-sheet.pro 130 CONFIG_OPIE-SHEET noncore/apps/opie-sheetopie-sheet.pro
131 CONFIG_OPIE-SH noncore/tools/opie-shopie-sh.pro 131 CONFIG_OPIE-SH noncore/tools/opie-shopie-sh.pro
132 CONFIG_OPIETOOTH-APPLET noncore/net/opietooth/appletapplet.pro 132 CONFIG_OPIETOOTH-APPLET noncore/net/opietooth/appletapplet.pro
133 CONFIG_OPIETOOTH-MANAGER noncore/net/opietooth/managermanager.pro 133 CONFIG_OPIETOOTH-MANAGER noncore/net/opietooth/managermanager.pro
134 CONFIG_OPIE-WRITE noncore/apps/opie-writeopie-write.pro 134 CONFIG_OPIE-WRITE noncore/apps/opie-writeopie-write.pro
135 CONFIG_OSEARCH core/pim/osearchosearch.pro 135 CONFIG_OSEARCH core/pim/osearchosearch.pro
136 CONFIG_OXYGEN noncore/apps/oxygenoxygen.pro 136 CONFIG_OXYGEN noncore/apps/oxygenoxygen.pro
137 CONFIG_PACKAGEMANAGER noncore/settings/packagemanagerpackagemanager.pro 137 CONFIG_PACKAGEMANAGER noncore/settings/packagemanagerpackagemanager.pro
138 CONFIG_PARASHOOT noncore/games/parashootparashoot.pro 138 CONFIG_PARASHOOT noncore/games/parashootparashoot.pro
139 CONFIG_PICKBOARD inputmethods/pickboardpickboard.pro 139 CONFIG_PICKBOARD inputmethods/pickboardpickboard.pro
140 CONFIG_POWERCHORD noncore/multimedia/powerchordpowerchord.pro 140 CONFIG_POWERCHORD noncore/multimedia/powerchordpowerchord.pro
141CONFIG_PPP noncore/settings/networksettings/ppp ppp.pro 141CONFIG_PPP noncore/settings/networksettings/ppp ppp.pro
142 CONFIG_QASHMONEY noncore/apps/qashmoneyqashmoney.pro 142 CONFIG_QASHMONEY noncore/apps/qashmoneyqashmoney.pro
143 CONFIG_QASTEROIDS noncore/games/qasteroidsqasteroids.pro 143 CONFIG_QASTEROIDS noncore/games/qasteroidsqasteroids.pro
144 CONFIG_QCOP core/apps/qcopqcop.pro 144 CONFIG_QCOP core/apps/qcopqcop.pro
145 CONFIG_QPDF noncore/unsupported/qpdfqpdf.pro 145 CONFIG_QPDF noncore/unsupported/qpdfqpdf.pro
146CONFIG_QUICKLAUNCHER core/tools/quicklauncher quicklauncher.pro 146CONFIG_QUICKLAUNCHER core/tools/quicklauncher quicklauncher.pro
147 CONFIG_QWS core/qwsqws.pro 147 CONFIG_QWS core/qwsqws.pro
148 CONFIG_REMOTE noncore/tools/remoteremote.pro 148 CONFIG_REMOTE noncore/tools/remoteremote.pro
149 CONFIG_RESTARTAPPLET2 core/applets/restartapplet2restartapplet2.pro 149 CONFIG_RESTARTAPPLET2 core/applets/restartapplet2restartapplet2.pro
150 CONFIG_RESTARTAPPLET core/applets/restartappletrestartapplet.pro 150 CONFIG_RESTARTAPPLET core/applets/restartappletrestartapplet.pro
151 CONFIG_ROTATEAPPLET core/applets/rotateappletrotateapplet.pro 151 CONFIG_ROTATEAPPLET core/applets/rotateappletrotateapplet.pro
152 CONFIG_ROTATION noncore/settings/rotationrotation.pro 152 CONFIG_ROTATION noncore/settings/rotationrotation.pro
153 CONFIG_RUNAPPLET core/applets/runappletrunapplet.pro 153 CONFIG_RUNAPPLET core/applets/runappletrunapplet.pro
154 CONFIG_SCREENSHOTAPPLET core/applets/screenshotappletscreenshotapplet.pro 154 CONFIG_SCREENSHOTAPPLET core/applets/screenshotappletscreenshotapplet.pro
155 CONFIG_SECURITY core/settings/securitysecurity.pro 155 CONFIG_SECURITY core/settings/securitysecurity.pro
156 CONFIG_SFCAVE noncore/games/sfcavesfcave.pro 156 CONFIG_SFCAVE noncore/games/sfcavesfcave.pro
157 CONFIG_SFCAVE-SDL noncore/games/sfcave-sdlsfcave-sdl.pro 157 CONFIG_SFCAVE-SDL noncore/games/sfcave-sdlsfcave-sdl.pro
158 CONFIG_SHOWIMG noncore/multimedia/showimgshowimg.pro 158 CONFIG_SHOWIMG noncore/multimedia/showimgshowimg.pro
159CONFIG_SIMPLE_EXAMPLE examples/simple example.pro 159CONFIG_SIMPLE_EXAMPLE examples/simple example.pro
160CONFIG_SIMPLE_ICON examples/simple-icon example.pro 160CONFIG_SIMPLE_ICON examples/simple-icon example.pro
161CONFIG_SIMPLE_MAIN examples/simple-main example.pro 161CONFIG_SIMPLE_MAIN examples/simple-main example.pro
162 CONFIG_SIMPLE noncore/tools/calc2/simplesimple.pro 162 CONFIG_SIMPLE noncore/tools/calc2/simplesimple.pro
163CONFIG_SIMPLE_PIM examples/simple-pim example.pro 163CONFIG_SIMPLE_PIM examples/simple-pim example.pro
164 CONFIG_SINGLE singlesingle.pro 164 CONFIG_SINGLE singlesingle.pro
165 CONFIG_SNAKE noncore/games/snakesnake.pro 165 CONFIG_SNAKE noncore/games/snakesnake.pro
166 CONFIG_SOLITAIRE noncore/games/solitairesolitaire.pro 166 CONFIG_SOLITAIRE noncore/games/solitairesolitaire.pro
167 CONFIG_SOUND noncore/settings/soundsound.pro 167 CONFIG_SOUND noncore/settings/soundsound.pro
168 CONFIG_SSHKEYS noncore/settings/sshkeyssshkeys.pro 168 CONFIG_SSHKEYS noncore/settings/sshkeyssshkeys.pro
169 CONFIG_SUSPENDAPPLET core/applets/suspendappletsuspendapplet.pro 169 CONFIG_SUSPENDAPPLET core/applets/suspendappletsuspendapplet.pro
170CONFIG_SYMLINKER core/symlinker symlinker.pro
170 CONFIG_SYSINFO noncore/settings/sysinfosysinfo.pro 171 CONFIG_SYSINFO noncore/settings/sysinfosysinfo.pro
171 CONFIG_TABLEVIEWER noncore/apps/tableviewertableviewer.pro 172 CONFIG_TABLEVIEWER noncore/apps/tableviewertableviewer.pro
172 CONFIG_TABMANAGER noncore/settings/tabmanagertabmanager.pro 173 CONFIG_TABMANAGER noncore/settings/tabmanagertabmanager.pro
173 CONFIG_TABOAPP core/apps/taboapptaboapp.pro 174 CONFIG_TABOAPP core/apps/taboapptaboapp.pro
174 CONFIG_TEST libsql/testtest.pro 175 CONFIG_TEST libsql/testtest.pro
175 CONFIG_TEST noncore/apps/opie-console/testtest.pro 176 CONFIG_TEST noncore/apps/opie-console/testtest.pro
176 CONFIG_TETRIX noncore/games/tetrixtetrix.pro 177 CONFIG_TETRIX noncore/games/tetrixtetrix.pro
177 CONFIG_TEXTEDIT core/apps/textedittextedit.pro 178 CONFIG_TEXTEDIT core/apps/textedittextedit.pro
178 CONFIG_THEME noncore/styles/themetheme.pro 179 CONFIG_THEME noncore/styles/themetheme.pro
179 CONFIG_TICTAC noncore/games/tictactictac.pro 180 CONFIG_TICTAC noncore/games/tictactictac.pro
180 CONFIG_TINYKATE noncore/apps/tinykatetinykate.pro 181 CONFIG_TINYKATE noncore/apps/tinykatetinykate.pro
181CONFIG_TODAY_ADDRESSBOOK core/pim/today/plugins/addressbook addressbook.pro 182CONFIG_TODAY_ADDRESSBOOK core/pim/today/plugins/addressbook addressbook.pro
182 CONFIG_TODAY core/pim/todaytoday.pro 183 CONFIG_TODAY core/pim/todaytoday.pro
183 CONFIG_TODAY_DATEBOOK core/pim/today/plugins/datebookdatebook.pro 184 CONFIG_TODAY_DATEBOOK core/pim/today/plugins/datebookdatebook.pro
184CONFIG_TODAY_EXAMPLE examples/todayplugin example.pro 185CONFIG_TODAY_EXAMPLE examples/todayplugin example.pro
185 CONFIG_TODAY_FORTUNE noncore/todayplugins/fortunefortune.pro 186 CONFIG_TODAY_FORTUNE noncore/todayplugins/fortunefortune.pro
186 CONFIG_TODAY_MAIL core/pim/today/plugins/mailmail.pro 187 CONFIG_TODAY_MAIL core/pim/today/plugins/mailmail.pro
187 CONFIG_TODAY_STOCKTICKERLIB noncore/todayplugins/stockticker/stocktickerlibstocktickerlib.pro 188 CONFIG_TODAY_STOCKTICKERLIB noncore/todayplugins/stockticker/stocktickerlibstocktickerlib.pro
188 CONFIG_TODAY_STOCKTICKER noncore/todayplugins/stockticker/stocktickerstockticker.pro 189 CONFIG_TODAY_STOCKTICKER noncore/todayplugins/stockticker/stocktickerstockticker.pro
189 CONFIG_TODAY_TODOLIST core/pim/today/plugins/todolisttodolist.pro 190 CONFIG_TODAY_TODOLIST core/pim/today/plugins/todolisttodolist.pro
190 CONFIG_TODAY_WEATHERnoncore/todayplugins/weather weather.pro 191 CONFIG_TODAY_WEATHERnoncore/todayplugins/weather weather.pro
191 CONFIG_TODO core/pim/todotodo.pro 192 CONFIG_TODO core/pim/todotodo.pro
192 CONFIG_TONLEITER noncore/multimedia/tonleitertonleiter.pro 193 CONFIG_TONLEITER noncore/multimedia/tonleitertonleiter.pro
193 CONFIG_TRACKER noncore/multimedia/trackertracker.pro 194 CONFIG_TRACKER noncore/multimedia/trackertracker.pro
194 CONFIG_UBROWSER noncore/net/ubrowserubrowser.pro 195 CONFIG_UBROWSER noncore/net/ubrowserubrowser.pro
195 CONFIG_UNIKEYBOARD inputmethods/unikeyboardunikeyboard.pro 196 CONFIG_UNIKEYBOARD inputmethods/unikeyboardunikeyboard.pro
196 CONFIG_USERMANAGER noncore/settings/usermanagerusermanager.pro 197 CONFIG_USERMANAGER noncore/settings/usermanagerusermanager.pro
197 CONFIG_VMEMO core/applets/vmemovmemo.pro 198 CONFIG_VMEMO core/applets/vmemovmemo.pro
198 CONFIG_VOLUMEAPPLET core/applets/volumeappletvolumeapplet.pro 199 CONFIG_VOLUMEAPPLET core/applets/volumeappletvolumeapplet.pro
199 CONFIG_VTAPPLET core/applets/vtappletvtapplet.pro 200 CONFIG_VTAPPLET core/applets/vtappletvtapplet.pro
200 CONFIG_WAVPLUGIN core/multimedia/opieplayer/wavpluginwavplugin.pro 201 CONFIG_WAVPLUGIN core/multimedia/opieplayer/wavpluginwavplugin.pro
201 CONFIG_WELLENREITER noncore/net/wellenreiterwellenreiter.pro 202 CONFIG_WELLENREITER noncore/net/wellenreiterwellenreiter.pro
202 CONFIG_WIRELESSAPPLET noncore/applets/wirelessappletwirelessapplet.pro 203 CONFIG_WIRELESSAPPLET noncore/applets/wirelessappletwirelessapplet.pro
203 CONFIG_WLAN noncore/settings/networksettings/wlanwlan.pro 204 CONFIG_WLAN noncore/settings/networksettings/wlanwlan.pro
204 CONFIG_WORDGAME noncore/games/wordgamewordgame.pro 205 CONFIG_WORDGAME noncore/games/wordgamewordgame.pro
205 CONFIG_YATZEE noncore/games/oyatzeeoyatzee.pro 206 CONFIG_YATZEE noncore/games/oyatzeeoyatzee.pro
206CONFIG_ZKBAPPLET noncore/applets/zkbapplet zkbapplet.pro 207CONFIG_ZKBAPPLET noncore/applets/zkbapplet zkbapplet.pro
207 CONFIG_ZLINES noncore/games/zlines zlines.pro 208 CONFIG_ZLINES noncore/games/zlines zlines.pro
208 CONFIG_ZSAFEnoncore/apps/zsafe zsafe.pro 209 CONFIG_ZSAFEnoncore/apps/zsafe zsafe.pro
209 CONFIG_ZSAME noncore/games/zsame zsame.pro 210 CONFIG_ZSAME noncore/games/zsame zsame.pro