RSS

(root)/eeecamtray : /EeeCamTray.cpp (revision 1)

Line Revision Contents
1 1
#include "EeeCamTray.h"
2
#include <QApplication>
3
#include <QtDebug>
4
#include <QFile>
5
#include <QTimer>
6
#include <QMenu>
7
8
EeeCamTray::EeeCamTray()
9
	: QSystemTrayIcon()
10
{
11
	enableAct = new QAction(QIcon(":/CameraOn.png"), tr("Enable camera"), this);
12
	connect(enableAct, SIGNAL(triggered()), this, SLOT(enableCamera()));
13
	disableAct = new QAction(QIcon(":/CameraOff.png"), tr("Disable camera"), this);
14
	connect(disableAct, SIGNAL(triggered()), this, SLOT(disableCamera()));
15
	quitAct = new QAction(QIcon(":/Quit.png"), tr("Quit"), this);
16
	quitAct->setShortcut(tr("Ctrl+Q"));
17
	connect(quitAct, SIGNAL(triggered()), qApp, SLOT(quit()));
18
	setContextMenu(new QMenu()); // checkStatus() will fill it in.
19
20
	checkStatus();
21
	QTimer *timer = new QTimer(this);
22
	connect(timer, SIGNAL(timeout()), this, SLOT(checkStatus()));
23
	timer->start(60*1000); // 60 seconds
24
}
25
26
/* once-a-minute slot */
27
void EeeCamTray::checkStatus()
28
{
29
	if (cameraIsEnabled())
30
	{
31
		setIcon(QIcon(":/CameraOn.png"));
32
		setToolTip(tr("Eee camera is enabled."));
33
		QMenu *menu = contextMenu();
34
		menu->clear();
35
		menu->addAction(disableAct);
36
		menu->addSeparator();
37
		menu->addAction(quitAct);
38
	}
39
	else
40
	{
41
		setIcon(QIcon(":/CameraOff.png"));
42
		setToolTip(tr("Eee camera is disabled."));
43
		QMenu *menu = contextMenu();
44
		menu->clear();
45
		menu->addAction(enableAct);
46
		menu->addSeparator();
47
		menu->addAction(quitAct);
48
	}
49
}
50
51
bool EeeCamTray::cameraIsEnabled()
52
{
53
	qDebug() << "Trying to read camera status.";
54
	QFile ioctl("/proc/acpi/asus/camera");
55
	if (ioctl.open(QIODevice::ReadOnly|QIODevice::Text|QIODevice::Unbuffered))
56
	{
57
		char c;
58
		if (ioctl.getChar(&c))
59
			return c == '1' ? true : false;
60
		else
61
			qDebug() << "** enabling write failed.";
62
		ioctl.close();
63
	}
64
	else
65
		qDebug() << "** failed to open control file.";
66
	return false; // Can't tell, assume worst.
67
}
68
69
void EeeCamTray::enableCamera()
70
{
71
	qDebug() << "Trying to enable camera input.";
72
	QFile ioctl("/proc/acpi/asus/camera");
73
	if (ioctl.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Unbuffered))
74
	{
75
		if (ioctl.putChar('1'))
76
			qDebug() << "** enabling write successful.";
77
		else
78
			qDebug() << "** enabling write failed.";
79
		ioctl.close();
80
	}
81
	else
82
		qDebug() << "** failed to open control file.";
83
84
	checkStatus();
85
}
86
87
void EeeCamTray::disableCamera()
88
{
89
	qDebug() << "Trying to disable camera input.";
90
	QFile ioctl("/proc/acpi/asus/camera");
91
	if (ioctl.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Unbuffered))
92
	{
93
		if (ioctl.putChar('0'))
94
			qDebug() << "** disabling write successful.";
95
		else
96
			qDebug() << "** disabling write failed.";
97
		ioctl.close();
98
	}
99
	else
100
		qDebug() << "** failed to open control file.";
101
102
	checkStatus();
103
}

Loggerhead 1.17 is a web-based interface for Bazaar branches