summaryrefslogtreecommitdiff
authorzecke <zecke>2004-11-20 18:11:28 (UTC)
committer zecke <zecke>2004-11-20 18:11:28 (UTC)
commit244e3fd05f01859a82243347ddc11318788cefb2 (patch) (unidiff)
tree2dc49366e4cc6f704b6e7c15f579df87a7099579
parentd6ca3f9c89204880938391c0b5a70a33b6808f18 (diff)
downloadopie-244e3fd05f01859a82243347ddc11318788cefb2.zip
opie-244e3fd05f01859a82243347ddc11318788cefb2.tar.gz
opie-244e3fd05f01859a82243347ddc11318788cefb2.tar.bz2
Stop fooling the user and allow receiving of files only if
Ir::supported returns true. This is the case if our obex implementation is loaded
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/irdaapplet/irda.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp
index 6148308..7709bed 100644
--- a/core/applets/irdaapplet/irda.cpp
+++ b/core/applets/irdaapplet/irda.cpp
@@ -1,88 +1,89 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 David Woodhouse <dwmw2@infradead.org> 2** Copyright (C) 2002 David Woodhouse <dwmw2@infradead.org>
3** Max Reiss <harlekin@handhelds.org> [trivial stuff] 3** Max Reiss <harlekin@handhelds.org> [trivial stuff]
4** Robert Griebl <sandman@handhelds.org> 4** Robert Griebl <sandman@handhelds.org>
5** Holger Freyther <zecke@handhelds.org> QCOP Interface 5** Holger Freyther <zecke@handhelds.org> QCOP Interface
6** 6**
7** This file may be distributed and/or modified under the terms of the 7** This file may be distributed and/or modified under the terms of the
8** GNU General Public License version 2 as published by the Free Software 8** GNU General Public License version 2 as published by the Free Software
9** Foundation and appearing in the file LICENSE.GPL included in the 9** Foundation and appearing in the file LICENSE.GPL included in the
10** packaging of this file. 10** packaging of this file.
11** 11**
12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14** 14**
15**********************************************************************/ 15**********************************************************************/
16 16
17#include "irda.h" 17#include "irda.h"
18 18
19/* OPIE */ 19/* OPIE */
20#include <opie2/otaskbarapplet.h> 20#include <opie2/otaskbarapplet.h>
21#include <qpe/applnk.h> 21#include <qpe/applnk.h>
22#include <qpe/resource.h> 22#include <qpe/resource.h>
23#include <qpe/qcopenvelope_qws.h> 23#include <qpe/qcopenvelope_qws.h>
24using namespace Opie::Ui; 24#include <qpe/ir.h>
25
25 26
26/* QT */ 27/* QT */
27#include <qpainter.h> 28#include <qpainter.h>
28#include <qfile.h> 29#include <qfile.h>
29#include <qtimer.h> 30#include <qtimer.h>
30#include <qtextstream.h> 31#include <qtextstream.h>
31 32
32/* STD */ 33/* STD */
33#include <unistd.h> 34#include <unistd.h>
34#include <net/if.h> 35#include <net/if.h>
35#include <netinet/in.h> 36#include <netinet/in.h>
36#include <sys/types.h> 37#include <sys/types.h>
37#include <sys/socket.h> 38#include <sys/socket.h>
38#include <sys/ioctl.h> 39#include <sys/ioctl.h>
39 40
40//=========================================================================== 41//===========================================================================
41 42
42IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) 43IrdaApplet::IrdaApplet ( QWidget *parent, const char *name )
43 : QWidget ( parent, name ) 44 : QWidget ( parent, name )
44{ 45{
45 setFixedHeight( AppLnk::smallIconSize() ); 46 setFixedHeight( AppLnk::smallIconSize() );
46 setFixedWidth( AppLnk::smallIconSize() ); 47 setFixedWidth( AppLnk::smallIconSize() );
47 48
48 m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ); 49 m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP );
49 50
50 m_irdaOnPixmap = Resource::loadImage( "irdaapplet/irdaon" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize()); 51 m_irdaOnPixmap = Resource::loadImage( "irdaapplet/irdaon" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize());
51 m_irdaOffPixmap = Resource::loadImage( "irdaapplet/irdaoff" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize()); 52 m_irdaOffPixmap = Resource::loadImage( "irdaapplet/irdaoff" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize());
52 m_irdaDiscoveryOnPixmap = Resource::loadImage( "irdaapplet/magglass" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize()); 53 m_irdaDiscoveryOnPixmap = Resource::loadImage( "irdaapplet/magglass" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize());
53 m_receiveActivePixmap = Resource::loadImage( "irdaapplet/receive" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize()); 54 m_receiveActivePixmap = Resource::loadImage( "irdaapplet/receive" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize());
54 55
55 m_irda_active = false; 56 m_irda_active = false;
56 m_irda_discovery_active = false; 57 m_irda_discovery_active = false;
57 m_receive_active = false; 58 m_receive_active = false;
58 m_receive_state_changed = false; 59 m_receive_state_changed = false;
59 m_popup = 0; 60 m_popup = 0;
60 m_wasOn = false; 61 m_wasOn = false;
61 m_wasDiscover = false; 62 m_wasDiscover = false;
62 63
63 QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this ); 64 QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this );
64 connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), 65 connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
65 this, SLOT(slotMessage(const QCString&,const QByteArray&) ) ); 66 this, SLOT(slotMessage(const QCString&,const QByteArray&) ) );
66} 67}
67 68
68int IrdaApplet::position() 69int IrdaApplet::position()
69{ 70{
70 return 6; 71 return 6;
71} 72}
72 73
73void IrdaApplet::show() 74void IrdaApplet::show()
74{ 75{
75 QWidget::show ( ); 76 QWidget::show ( );
76 startTimer ( 2000 ); 77 startTimer ( 2000 );
77} 78}
78 79
79IrdaApplet::~IrdaApplet() 80IrdaApplet::~IrdaApplet()
80{ 81{
81 if ( m_sockfd >= 0 ) 82 if ( m_sockfd >= 0 )
82 ::close ( m_sockfd ); 83 ::close ( m_sockfd );
83} 84}
84 85
85void IrdaApplet::popup ( QString message, QString icon ) 86void IrdaApplet::popup ( QString message, QString icon )
86{ 87{
87 if ( !m_popup ) 88 if ( !m_popup )
88 m_popup = new QPopupMenu ( this ); 89 m_popup = new QPopupMenu ( this );
@@ -205,129 +206,132 @@ void IrdaApplet::showDiscovered ( )
205 const QString &line = *lit; 206 const QString &line = *lit;
206 207
207 if ( line. startsWith ( "nickname:" )) { 208 if ( line. startsWith ( "nickname:" )) {
208 discoveredDevice = line. mid ( line. find ( ':' ) + 2, line. find ( ',' ) - line. find ( ':' ) - 2 ); 209 discoveredDevice = line. mid ( line. find ( ':' ) + 2, line. find ( ',' ) - line. find ( ':' ) - 2 );
209 deviceAddr = line. mid ( line. find ( "daddr:" ) + 9, 8 ); 210 deviceAddr = line. mid ( line. find ( "daddr:" ) + 9, 8 );
210 211
211 // odebug << discoveredDevice + "(" + deviceAddr + ")" << oendl; 212 // odebug << discoveredDevice + "(" + deviceAddr + ")" << oendl;
212 213
213 if ( !m_devices. contains ( deviceAddr )) { 214 if ( !m_devices. contains ( deviceAddr )) {
214 popup ( tr( "Found:" ) + " " + discoveredDevice ); 215 popup ( tr( "Found:" ) + " " + discoveredDevice );
215 //snd_found. play ( ); 216 //snd_found. play ( );
216 qcopsend = true; 217 qcopsend = true;
217 } 218 }
218 m_devices. replace ( deviceAddr, discoveredDevice ); 219 m_devices. replace ( deviceAddr, discoveredDevice );
219 } 220 }
220 } 221 }
221 222
222 for ( it = m_devices. begin ( ); it != m_devices. end ( ); ) { 223 for ( it = m_devices. begin ( ); it != m_devices. end ( ); ) {
223 // odebug << "IrdaMon: delete " + it.currentKey() + "=" + *devicesAvailable[it.currentKey()] + "?" << oendl; 224 // odebug << "IrdaMon: delete " + it.currentKey() + "=" + *devicesAvailable[it.currentKey()] + "?" << oendl;
224 225
225 if ( it. data ( ). left ( 3 ) == "+++" ) { 226 if ( it. data ( ). left ( 3 ) == "+++" ) {
226 popup ( tr( "Lost:" ) + " " + it. data ( ). mid ( 3 )); 227 popup ( tr( "Lost:" ) + " " + it. data ( ). mid ( 3 ));
227 //snd_lost. play ( ); 228 //snd_lost. play ( );
228 229
229 QMap <QString, QString>::Iterator tmp = it; 230 QMap <QString, QString>::Iterator tmp = it;
230 tmp++; 231 tmp++;
231 m_devices. remove ( it ); // in contrast to QValueListIterator this remove doesn't return the next Iterator 232 m_devices. remove ( it ); // in contrast to QValueListIterator this remove doesn't return the next Iterator
232 it = tmp; 233 it = tmp;
233 234
234 qcopsend = true; 235 qcopsend = true;
235 } 236 }
236 else 237 else
237 it++; 238 it++;
238 } 239 }
239 // XXX if( qcopsend ) { 240 // XXX if( qcopsend ) {
240 QCopEnvelope e ( "QPE/Network", "irdaSend(bool)" ); 241 QCopEnvelope e ( "QPE/Network", "irdaSend(bool)" );
241 e << ( m_devices. count ( ) > 0 ); 242 e << ( m_devices. count ( ) > 0 );
242 // } 243 // }
243 } 244 }
244} 245}
245 246
246void IrdaApplet::mousePressEvent ( QMouseEvent * ) 247void IrdaApplet::mousePressEvent ( QMouseEvent * )
247{ 248{
248 QPopupMenu *menu = new QPopupMenu ( this ); 249 QPopupMenu *menu = new QPopupMenu ( this );
249 QString cmd; 250 QString cmd;
250 251
251 /* Refresh active state */ 252 /* Refresh active state */
252 timerEvent ( 0 ); 253 timerEvent ( 0 );
253 254
254 //menu->insertItem( tr("More..."), 4 ); 255 //menu->insertItem( tr("More..."), 4 );
255 256
256 if ( m_irda_active && !m_devices. isEmpty ( )) { 257 if ( m_irda_active && !m_devices. isEmpty ( )) {
257 menu-> insertItem ( tr( "Discovered Device:" ), 9 ); 258 menu-> insertItem ( tr( "Discovered Device:" ), 9 );
258 259
259 for ( QMap<QString, QString>::Iterator it = m_devices. begin ( ); it != m_devices. end ( ); ++it ) 260 for ( QMap<QString, QString>::Iterator it = m_devices. begin ( ); it != m_devices. end ( ); ++it )
260 menu-> insertItem ( *it ); 261 menu-> insertItem ( *it );
261 262
262 menu-> insertSeparator ( ); 263 menu-> insertSeparator ( );
263 } 264 }
264 265
265 menu-> insertItem ( m_irda_active ? tr( "Disable IrDA" ) : tr( "Enable IrDA" ), 0 ); 266 menu-> insertItem ( m_irda_active ? tr( "Disable IrDA" ) : tr( "Enable IrDA" ), 0 );
266 267
267 if ( m_irda_active ) { 268 if ( m_irda_active ) {
268 menu-> insertItem ( m_irda_discovery_active ? tr( "Disable Discovery" ) : tr( "Enable Discovery" ), 1 ); 269 menu-> insertItem ( m_irda_discovery_active ? tr( "Disable Discovery" ) : tr( "Enable Discovery" ), 1 );
269 menu-> insertItem ( m_receive_active ? tr( "Disable Receive" ) : tr( "Enable Receive" ), 2 ); 270
271 /* Only Receive if OBEX is installed */
272 if( Ir::supported() )
273 menu-> insertItem ( m_receive_active ? tr( "Disable Receive" ) : tr( "Enable Receive" ), 2 );
270 } 274 }
271 275
272 QPoint p = mapToGlobal ( QPoint ( 0, 0 ) ); 276 QPoint p = mapToGlobal ( QPoint ( 0, 0 ) );
273 QSize s = menu-> sizeHint ( ); 277 QSize s = menu-> sizeHint ( );
274 278
275 p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( )); 279 p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( ));
276 280
277 switch ( menu-> exec ( p )) { 281 switch ( menu-> exec ( p )) {
278 case 0: 282 case 0:
279 setIrdaStatus ( !m_irda_active ); 283 setIrdaStatus ( !m_irda_active );
280 timerEvent ( 0 ); 284 timerEvent ( 0 );
281 break; 285 break;
282 case 1: 286 case 1:
283 setIrdaDiscoveryStatus ( !m_irda_discovery_active ); 287 setIrdaDiscoveryStatus ( !m_irda_discovery_active );
284 timerEvent ( 0 ); 288 timerEvent ( 0 );
285 break; 289 break;
286 case 2: 290 case 2:
287 setIrdaReceiveStatus ( !m_receive_active ); 291 setIrdaReceiveStatus ( !m_receive_active );
288 timerEvent( 0 ); 292 timerEvent( 0 );
289 break; 293 break;
290 } 294 }
291 295
292 delete menu; 296 delete menu;
293} 297}
294 298
295void IrdaApplet::timerEvent ( QTimerEvent * ) 299void IrdaApplet::timerEvent ( QTimerEvent * )
296{ 300{
297 bool oldactive = m_irda_active; 301 bool oldactive = m_irda_active;
298 bool olddiscovery = m_irda_discovery_active; 302 bool olddiscovery = m_irda_discovery_active;
299 bool receiveUpdate = false; 303 bool receiveUpdate = false;
300 304
301 if ( m_receive_state_changed ) { 305 if ( m_receive_state_changed ) {
302 receiveUpdate = true; 306 receiveUpdate = true;
303 m_receive_state_changed = false; 307 m_receive_state_changed = false;
304 } 308 }
305 309
306 m_irda_active = checkIrdaStatus ( ); 310 m_irda_active = checkIrdaStatus ( );
307 m_irda_discovery_active = checkIrdaDiscoveryStatus ( ); 311 m_irda_discovery_active = checkIrdaDiscoveryStatus ( );
308 312
309 if ( m_irda_discovery_active ) 313 if ( m_irda_discovery_active )
310 showDiscovered ( ); 314 showDiscovered ( );
311 315
312 if (( m_irda_active != oldactive ) || ( m_irda_discovery_active != olddiscovery ) || receiveUpdate ) 316 if (( m_irda_active != oldactive ) || ( m_irda_discovery_active != olddiscovery ) || receiveUpdate )
313 update ( ); 317 update ( );
314} 318}
315 319
316void IrdaApplet::paintEvent ( QPaintEvent * ) 320void IrdaApplet::paintEvent ( QPaintEvent * )
317{ 321{
318 QPainter p( this ); 322 QPainter p( this );
319 323
320 p.drawPixmap( 0, 1, m_irda_active ? m_irdaOnPixmap : m_irdaOffPixmap ); 324 p.drawPixmap( 0, 1, m_irda_active ? m_irdaOnPixmap : m_irdaOffPixmap );
321 325
322 if ( m_irda_discovery_active ) 326 if ( m_irda_discovery_active )
323 p.drawPixmap( 0, 1, m_irdaDiscoveryOnPixmap ); 327 p.drawPixmap( 0, 1, m_irdaDiscoveryOnPixmap );
324 328
325 if ( m_receive_active ) 329 if ( m_receive_active )
326 p.drawPixmap( 0, 1, m_receiveActivePixmap ); 330 p.drawPixmap( 0, 1, m_receiveActivePixmap );
327} 331}
328/* 332/*
329 * We know 3 calls 333 * We know 3 calls
330 * a) enable 334 * a) enable
331 * b) disable 335 * b) disable
332 * a and b will temp enable the IrDa device and disable will disable it again if it wasn't on 336 * a and b will temp enable the IrDa device and disable will disable it again if it wasn't on
333 * c) listDevices: We will return a list of known devices 337 * c) listDevices: We will return a list of known devices