-rw-r--r-- | noncore/net/opietooth/applet/bluezapplet.cpp | 111 | ||||
-rw-r--r-- | noncore/net/opietooth/applet/bluezapplet.h | 6 |
2 files changed, 98 insertions, 19 deletions
diff --git a/noncore/net/opietooth/applet/bluezapplet.cpp b/noncore/net/opietooth/applet/bluezapplet.cpp index 5676e4f..9c6c71d 100644 --- a/noncore/net/opietooth/applet/bluezapplet.cpp +++ b/noncore/net/opietooth/applet/bluezapplet.cpp @@ -36,2 +36,3 @@ #include <opie2/oresource.h> +#include <opie2/oprocess.h> #include <qpe/applnk.h> @@ -51,2 +52,3 @@ using namespace Opie::Core; #include <qpopupmenu.h> +#include <qmessagebox.h> @@ -55,4 +57,5 @@ using namespace Opie::Core; -namespace OpieTooth { +// #define OPIE120 // undefine it fo the latest OPIE +namespace OpieTooth { BluezApplet::BluezApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) { @@ -60,2 +63,7 @@ namespace OpieTooth { setFixedWidth( AppLnk::smallIconSize() ); +#ifdef OPIE120 + bluezOnPixmap = Resource::loadPixmap( "bluetoothapplet/bluezon" ); + bluezOffPixmap = Resource::loadPixmap( "bluetoothapplet/bluezoff" ); + bluezDiscoveryOnPixmap = Resource::loadPixmap( "bluetoothapplet/magglass.png" ); +#else bluezOnPixmap = OResource::loadImage( "bluetoothapplet/bluezon", OResource::SmallIcon ); @@ -63,3 +71,4 @@ namespace OpieTooth { bluezDiscoveryOnPixmap = OResource::loadImage( "bluetoothapplet/bluezondiscovery", Opie::Core::OResource::SmallIcon ); - startTimer(4000); +#endif + startTimer(2000); btDevice = 0; @@ -68,2 +77,5 @@ namespace OpieTooth { bluezDiscoveryActive = false; + doListDevice = false; + isScanning = false; + m_wasOn = false; @@ -73,2 +85,12 @@ namespace OpieTooth { this, SLOT(slotMessage(const QCString&,const QByteArray&) ) ); + + OProcess* btstart = new OProcess(); + *btstart << "/etc/init.d/bluetooth" << "stop"; + btstart->setUseShell(true); + if (!btstart->start(OProcess::DontCare, OProcess::AllOutput)) + delete btstart; + else { + connect(btstart, SIGNAL(processExited(Opie::Core::OProcess*)), + this, SLOT(slotProcessExited(Opie::Core::OProcess*))); + } } @@ -104,2 +126,3 @@ int BluezApplet::position() + OProcess* btstart = new OProcess(); if ( c == 1 ) { @@ -114,2 +137,3 @@ int BluezApplet::position() +#ifndef OPIE120 case Model_MyPal_716: @@ -117,2 +141,3 @@ int BluezApplet::position() break; +#endif @@ -122,3 +147,19 @@ int BluezApplet::position() } + *btstart << "/etc/init.d/bluetooth" << "start"; + btstart->setUseShell(true); + if (!btstart->start(OProcess::DontCare, OProcess::AllOutput)) + delete btstart; + else { + connect(btstart, SIGNAL(processExited(Opie::Core::OProcess*)), + this, SLOT(slotProcessExited(Opie::Core::OProcess*))); + } } else { + *btstart << "/etc/init.d/bluetooth" << "stop"; + btstart->setUseShell(true); + if (!btstart->start(OProcess::DontCare, OProcess::AllOutput)) + delete btstart; + else { + connect(btstart, SIGNAL(processExited(Opie::Core::OProcess*)), + this, SLOT(slotProcessExited(Opie::Core::OProcess*))); + } if ( btDevice ) { @@ -132,3 +173,3 @@ int BluezApplet::position() int BluezApplet::checkBluezDiscoveryStatus() { - return bluezDiscoveryActive; + return isScanning; } @@ -144,18 +185,31 @@ int BluezApplet::position() if ( str == "enableBluetooth()") { - if (!checkBluezStatus()) { + m_wasOn = checkBluezStatus(); + if (!m_wasOn) { setBluezStatus(1); + sleep(2); } - } else if ( str == "disableBluetooth()") { - if (checkBluezStatus()) { - // setBluezStatus(0); } - } else if ( str == "listDevices()") { - if (!btManager) - { + else if ( str == "disableBluetooth()") { + /* + * We can down BT only if it was started by qcop. We don't want + * to down BT started from menu an break our networking connection + */ + if (checkBluezStatus() && !m_wasOn) + setBluezStatus(0); + doListDevice = false; + } + else if ( str == "listDevices()") { + if (checkBluezStatus()) { + doListDevice = false; + timerEvent(0); + if (!btManager) { btManager = new Manager("hci0"); - connect( btManager, SIGNAL( foundDevices(const QString&,RemoteDevice::ValueList) ), + connect( btManager, + SIGNAL( foundDevices(const QString&, RemoteDevice::ValueList) ), this, SLOT( fillList(const QString&,RemoteDevice::ValueList) ) ) ; } - btManager->searchDevices(); + isScanning = true; + } else + doListDevice = true; } @@ -168,3 +222,2 @@ int BluezApplet::position() - QStringList list; QMap<QString, QString> btmap; @@ -173,7 +226,7 @@ int BluezApplet::position() for( it = deviceList.begin(); it != deviceList.end(); ++it ) - { btmap[(*it).name()] = (*it).mac(); - } e << btmap; + isScanning = false; + timerEvent( 0 ); } @@ -262,4 +315,8 @@ int BluezApplet::position() - if ((bluezactive != oldactive) || (bluezDiscoveryActive != olddiscovery)) { + if ((bluezactive != oldactive) || + (bluezDiscoveryActive != olddiscovery)) update(); + if (bluezactive && doListDevice) { + const QByteArray arr; + slotMessage("listDevices()", arr); } @@ -275,9 +332,17 @@ int BluezApplet::position() - if (bluezactive > 0) { + if (bluezactive) { +#ifdef OPIE120 + p.drawPixmap( 0, -1, bluezOnPixmap ); +#else p.drawPixmap( 0, 0, bluezOnPixmap ); +#endif } else { +#ifdef OPIE120 + p.drawPixmap( 0, -1, bluezOffPixmap ); +#else p.drawPixmap( 0, 0, bluezOffPixmap ); +#endif } - if (bluezDiscoveryActive > 0) { + if (bluezDiscoveryActive) { p.drawPixmap( 0, 0, bluezDiscoveryOnPixmap ); @@ -285,4 +350,14 @@ int BluezApplet::position() } + +/** + * Implementation of the process finish + * @param the finished process + */ + void BluezApplet::slotProcessExited(OProcess* proc) + { + delete proc; + } }; + EXPORT_OPIE_APPLET_v1( OpieTooth::BluezApplet ) diff --git a/noncore/net/opietooth/applet/bluezapplet.h b/noncore/net/opietooth/applet/bluezapplet.h index c096e29..85022bb 100644 --- a/noncore/net/opietooth/applet/bluezapplet.h +++ b/noncore/net/opietooth/applet/bluezapplet.h @@ -35,2 +35,3 @@ #include <manager.h> +#include <opie2/oprocess.h> @@ -68,2 +69,5 @@ public slots: bool bluezDiscoveryActive; + bool doListDevice; //If I have to list devices after bringing BT up? + bool isScanning; //If I'm scanning devices + bool m_wasOn; //If BT was started by menu? @@ -71,3 +75,3 @@ private slots: void slotMessage( const QCString& , const QByteArray& ); - + void slotProcessExited(Opie::Core::OProcess* proc); |