-rw-r--r-- | core/applets/irdaapplet/irda.cpp | 28 | ||||
-rw-r--r-- | core/applets/irdaapplet/irda.h | 3 |
2 files changed, 21 insertions, 10 deletions
diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp index a5b4bfc..51c2ebf 100644 --- a/core/applets/irdaapplet/irda.cpp +++ b/core/applets/irdaapplet/irda.cpp @@ -28,65 +28,66 @@ #include <qtextstream.h> #include <qpopupmenu.h> #include <unistd.h> #include <net/if.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include "irda.h" //=========================================================================== IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) : QWidget ( parent, name ) { setFixedHeight ( 18 ); setFixedWidth ( 14 ); m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ); m_irdaOnPixmap = Resource::loadPixmap( "irdaapplet/irdaon" ); m_irdaOffPixmap = Resource::loadPixmap( "irdaapplet/irdaoff" ); m_irdaDiscoveryOnPixmap = Resource::loadPixmap( "irdaapplet/magglass" ); m_receiveActivePixmap = Resource::loadPixmap( "irdaapplet/receive" ); m_irda_active = false; m_irda_discovery_active = false; m_receive_active = false; m_receive_state_changed = false; m_popup = 0; - m_wasOn = false; + m_wasOn = false; + m_wasDiscover = false; QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this ); connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), this, SLOT(slotMessage(const QCString&, const QByteArray& ) ) ); } void IrdaApplet::show() { QWidget::show ( ); startTimer ( 2000 ); } IrdaApplet::~IrdaApplet() { if ( m_sockfd >= 0 ) ::close ( m_sockfd ); } void IrdaApplet::popup ( QString message, QString icon ) { if ( !m_popup ) m_popup = new QPopupMenu ( this ); m_popup-> clear ( ); if ( icon. isEmpty ( )) m_popup-> insertItem ( message, 0 ); else m_popup-> insertItem ( QIconSet ( Resource::loadPixmap ( icon )), message, 0 ); QPoint p = mapToGlobal ( QPoint ( 0, 0 )); QSize s = m_popup-> sizeHint ( ); @@ -259,89 +260,98 @@ void IrdaApplet::mousePressEvent ( QMouseEvent * ) menu-> insertItem ( m_irda_active ? tr( "Disable IrDA" ) : tr( "Enable IrDA" ), 0 ); if ( m_irda_active ) { menu-> insertItem ( m_irda_discovery_active ? tr( "Disable Discovery" ) : tr( "Enable Discovery" ), 1 ); menu-> insertItem ( m_receive_active ? tr( "Disable Receive" ) : tr( "Enable Receive" ), 2 ); } QPoint p = mapToGlobal ( QPoint ( 0, 0 ) ); QSize s = menu-> sizeHint ( ); p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( )); switch ( menu-> exec ( p )) { case 0: setIrdaStatus ( !m_irda_active ); timerEvent ( 0 ); break; case 1: setIrdaDiscoveryStatus ( !m_irda_discovery_active ); timerEvent ( 0 ); break; case 2: setIrdaReceiveStatus ( !m_receive_active ); timerEvent( 0 ); break; } delete menu; } void IrdaApplet::timerEvent ( QTimerEvent * ) { - bool oldactive = m_irda_active; - bool olddiscovery = m_irda_discovery_active; + bool oldactive = m_irda_active; + bool olddiscovery = m_irda_discovery_active; bool receiveUpdate = false; if ( m_receive_state_changed ) { receiveUpdate = true; m_receive_state_changed = false; } - m_irda_active = checkIrdaStatus ( ); + m_irda_active = checkIrdaStatus ( ); m_irda_discovery_active = checkIrdaDiscoveryStatus ( ); if ( m_irda_discovery_active ) showDiscovered ( ); if (( m_irda_active != oldactive ) || ( m_irda_discovery_active != olddiscovery ) || receiveUpdate ) update ( ); } void IrdaApplet::paintEvent ( QPaintEvent * ) { QPainter p ( this ); p. drawPixmap ( 0, 1, m_irda_active ? m_irdaOnPixmap : m_irdaOffPixmap ); if ( m_irda_discovery_active ) - p. drawPixmap( 0, 1, m_irdaDiscoveryOnPixmap ); + p. drawPixmap( 0, 1, m_irdaDiscoveryOnPixmap ); if ( m_receive_active ) p. drawPixmap( 0, 1, m_receiveActivePixmap ); } /* * We know 3 calls * a) enable * b) disable * a and b will temp enable the IrDa device and disable will disable it again if it wasn't on * c) listDevices: We will return a list of known devices */ void IrdaApplet::slotMessage( const QCString& str, const QByteArray& ar ) { if ( str == "enableIrda()") { m_wasOn = checkIrdaStatus(); - if (!m_wasOn) + m_wasDiscover = checkIrdaDiscoveryStatus(); + if (!m_wasOn) { setIrdaStatus( true ); - }else if ( str == "disableIrda()") { - if (!m_wasOn) + } + if ( !m_wasDiscover ) { + setIrdaDiscoveryStatus ( true ); + } + } else if ( str == "disableIrda()") { + if (!m_wasOn) { setIrdaStatus( false ); - }else if ( str == "listDevices()") { + } + if ( !m_wasDiscover ) { + setIrdaDiscoveryStatus ( false ); + } + } else if ( str == "listDevices()") { QCopEnvelope e("QPE/IrDaAppletBack", "devices(QStringList)"); QStringList list; QMap<QString, QString>::Iterator it; for (it = m_devices.begin(); it != m_devices.end(); ++it ) list << (*it); e << list; } } diff --git a/core/applets/irdaapplet/irda.h b/core/applets/irdaapplet/irda.h index 675f874..ec1d32c 100644 --- a/core/applets/irdaapplet/irda.h +++ b/core/applets/irdaapplet/irda.h @@ -39,37 +39,38 @@ protected: private slots: void popupTimeout ( ); void slotMessage( const QCString& , const QByteArray& ); private: void popup( QString message, QString icon = QString::null ); bool checkIrdaStatus ( ); bool setIrdaStatus ( bool ); bool checkIrdaDiscoveryStatus (); bool setIrdaDiscoveryStatus ( bool ); bool setIrdaReceiveStatus ( bool ); void showDiscovered(); private: QPixmap m_irdaOnPixmap; QPixmap m_irdaOffPixmap; QPixmap m_irdaDiscoveryOnPixmap; QPixmap m_receiveActivePixmap; bool m_irda_active; bool m_irda_discovery_active; bool m_receive_active; bool m_receive_state_changed; QPopupMenu *m_popup; int m_sockfd; QMap <QString, QString> m_devices; - bool m_wasOn; // if IrDa was enabled + bool m_wasOn; // if IrDa was enabled + bool m_wasDiscover; }; #endif // __OPIE_IRDA_APPLET_H__ |