From be9add24a65c8ad89bc5425aa4d42c4b598a50be Mon Sep 17 00:00:00 2001
From: harlekin <harlekin>
Date: Sat, 18 May 2002 21:55:22 +0000
Subject: patch by Daniel Foster <daniel-l@34SP.com>

---
diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp
index 2eff2a9..a197957 100644
--- a/core/applets/irdaapplet/irda.cpp
+++ b/core/applets/irdaapplet/irda.cpp
@@ -59,6 +59,7 @@ IrdaApplet::IrdaApplet( QWidget *parent, const char *name )
 	sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
 	irdaOnPixmap = Resource::loadPixmap( "irdaapplet/irdaon" );
 	irdaOffPixmap = Resource::loadPixmap( "irdaapplet/irdaoff" );
+	irdaDiscoveryOnPixmap = Resource::loadPixmap( "irdaapplet/magglass" );
 	startTimer(5000);
 	timerEvent(NULL);
 }
@@ -91,7 +92,7 @@ int IrdaApplet::setIrdaStatus(int c)
 
 	if (c)
 		ifr.ifr_flags |= IFF_UP;
-	else 
+	else
 		ifr.ifr_flags &= ~IFF_UP;
 
         if (ioctl(sockfd, SIOCSIFFLAGS, &ifr))
@@ -100,6 +101,34 @@ int IrdaApplet::setIrdaStatus(int c)
 	return 0;
 }
 
+int IrdaApplet::checkIrdaDiscoveryStatus()
+{
+	QFile discovery("/proc/sys/net/irda/discovery");
+	char status;
+
+	discovery.open( IO_ReadOnly|IO_Raw );
+	discovery.readBlock (&status, 1);
+	discovery.close();
+
+	return atoi(&status);
+}
+
+int IrdaApplet::setIrdaDiscoveryStatus(int d)
+{
+	QFile discovery("/proc/sys/net/irda/discovery");
+
+	discovery.open( IO_WriteOnly|IO_Raw );
+
+	if (d)
+		discovery.putch('1');
+	else
+		discovery.putch('0');
+
+	discovery.close();
+
+	return 0;
+}
+
 void IrdaApplet::mousePressEvent( QMouseEvent *)
 {
 	QPopupMenu *menu = new QPopupMenu();
@@ -109,17 +138,22 @@ void IrdaApplet::mousePressEvent( QMouseEvent *)
 	/* Refresh active state */
 	timerEvent(NULL);
 
-//	menu->insertItem( tr("More..."), 2 );
+//	menu->insertItem( tr("More..."), 4 );
 	if (irdaactive)
 		menu->insertItem( tr("Disable IrDA"), 0 );
 	else
 		menu->insertItem( tr("Enable IrDA"), 1 );
 
+	if (irdaDiscoveryActive)
+		menu->insertItem( tr("Disable Discovery"), 2 );
+	else
+		menu->insertItem( tr("Enable Discovery"), 3 );
+
 	QPoint p = mapToGlobal( QPoint(1, -menu->sizeHint().height()-1) );
-	ret = menu->exec(p, 1);
+	ret = menu->exec(p, 2);
 
 	qDebug("ret was %d\n", ret);
-	
+
 	switch(ret) {
 	case 0:
 		setIrdaStatus(0);
@@ -130,9 +164,16 @@ void IrdaApplet::mousePressEvent( QMouseEvent *)
 		timerEvent(NULL);
 		break;
 	case 2:
+		setIrdaDiscoveryStatus(0);
+		timerEvent(NULL);
+		break;
+	case 3:
+		setIrdaDiscoveryStatus(1);
+		timerEvent(NULL);
+		break;
+	case 4:
 		qDebug("FIXME: Bring up pretty menu...\n");
-		// With 'discovery' button to enable/disable,
-		// and table of currently-detected devices.
+		// With table of currently-detected devices.
 	}
 
 }
@@ -140,9 +181,12 @@ void IrdaApplet::mousePressEvent( QMouseEvent *)
 void IrdaApplet::timerEvent( QTimerEvent * )
 {
     int oldactive = irdaactive;
+    int olddiscovery = irdaDiscoveryActive;
 
     irdaactive = checkIrdaStatus();
-    if (irdaactive != oldactive) 
+    irdaDiscoveryActive = checkIrdaDiscoveryStatus();
+
+    if ((irdaactive != oldactive) || (irdaDiscoveryActive != olddiscovery))
 	    paintEvent(NULL);
     
 }
@@ -152,8 +196,12 @@ void IrdaApplet::paintEvent( QPaintEvent* )
 	QPainter p(this);
 	qDebug("paint irda pixmap");
 
+	p.eraseRect ( 0, 0, this->width(), this->height() );
 	if (irdaactive > 0)
 		p.drawPixmap( 0, 1,  irdaOnPixmap );
-	else 
+	else
 		p.drawPixmap( 0, 1,  irdaOffPixmap );
+
+	if (irdaDiscoveryActive > 0)
+		p.drawPixmap( 0, 1,  irdaDiscoveryOnPixmap );
 }
diff --git a/core/applets/irdaapplet/irda.h b/core/applets/irdaapplet/irda.h
index d762ff3..2f84909 100644
--- a/core/applets/irdaapplet/irda.h
+++ b/core/applets/irdaapplet/irda.h
@@ -22,6 +22,7 @@
 #include <qpixmap.h>
 #include <qguardedptr.h>
 #include <qtimer.h>
+#include <qfile.h>
 
 
 class IrdaApplet : public QWidget
@@ -40,12 +41,16 @@ private:
     void paintEvent( QPaintEvent* );
     int checkIrdaStatus();
     int setIrdaStatus(int);
+    int checkIrdaDiscoveryStatus();
+    int setIrdaDiscoveryStatus(int);
     int sockfd;
 
 private:
     QPixmap irdaOnPixmap;
     QPixmap irdaOffPixmap;
+    QPixmap irdaDiscoveryOnPixmap;
     int irdaactive;
+    int irdaDiscoveryActive;
 
 private slots:
 
--
cgit v0.9.0.2