summaryrefslogtreecommitdiffstats
path: root/src/saverwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/saverwidget.cpp')
-rw-r--r--src/saverwidget.cpp111
1 files changed, 78 insertions, 33 deletions
diff --git a/src/saverwidget.cpp b/src/saverwidget.cpp
index 88cf5a3..13340a0 100644
--- a/src/saverwidget.cpp
+++ b/src/saverwidget.cpp
@@ -10,9 +10,10 @@
#include <QSettings>
#include <QFile>
#include <QDebug>
-#include <X11/Xlib.h>
+#include <QLocalSocket>
+#include <QHash>
-static const QChar C_ZERO('0');
+#define C_ZERO QLatin1Char('0')
static QString formatTime(qlonglong span)
{
@@ -29,14 +30,19 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) :
QWidget(parent),
ui(new Ui::Saver),
_parentWinId(parentWinId),
- _lastMouseFake(0),
_logoutDeadline(0),
_shutdownDeadline(0),
_counter(0),
_deadlineType(DeadlineType::Unknown),
_standbyDisabled(false),
- _isLocked(false)
+ _isLocked(false),
+ _unixSocket(nullptr),
+ _display(QString::fromLocal8Bit(qgetenv("DISPLAY")))
{
+ int i = _display.indexOf('.');
+ if (i != -1) {
+ _display = _display.left(i);
+ }
QString qss = Config::getMainQss();
qDebug() << "Applying QSS: " << qss;
this->setStyleSheet(qss);
@@ -47,7 +53,7 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) :
if (_counter % 60 == 0) {
this->reloadValues();
}
- if (_counter % 4 == 0) {
+ if (!_isLocked && _counter % 4 == 0) {
_isLocked = ScreenSaver::isLocked();
}
_counter++;
@@ -99,36 +105,75 @@ SaverWidget::~SaverWidget()
void SaverWidget::reloadValues()
{
- QString display = QString::fromLocal8Bit(qgetenv("DISPLAY"));
- int i = display.indexOf('.');
- if (i != -1) {
- display = display.left(i);
+ if (_unixSocket != nullptr) {
+ _unixSocket->blockSignals(true);
+ _unixSocket->deleteLater();
}
- QSettings s(QString("/run/openslx/idleaction-") + display, QSettings::IniFormat);
- _logoutDeadline = s.value("lockDeadline", 0).toLongLong();
- _shutdownDeadline = s.value("shutdownDeadline", 0).toLongLong();
- // TODO: Load text strings for everything
- _deadlineType = DeadlineType::Unknown;
+ _unixSocket = new QLocalSocket();
+ connect(_unixSocket, &QLocalSocket::connected, [=]() {
+ qDebug() << "Connected to daewmweon";
+ _unixSocket->write((QLatin1String("get ") + _display).toLocal8Bit());
+ QTimer::singleShot(1000, [this]() {
+ _unixSocket->disconnectFromServer();
+ });
+ });
+ connect(_unixSocket, QOverload<QLocalSocket::LocalSocketError>::of(&QLocalSocket::error), [=](QLocalSocket::LocalSocketError err) {
+ qDebug() << "Local socket error:" << err;
+ });
+ connect(_unixSocket, &QLocalSocket::disconnected, this, &SaverWidget::parseDaemonData);
+ _unixSocket->connectToServer("/run/idle-daemon");
}
-void SaverWidget::mouseMoveEvent(QMouseEvent *)
+void SaverWidget::parseDaemonData()
{
- /*
- // Doesn't work, method is never called :-(
- qint64 now = QDateTime::currentMSecsSinceEpoch();
- if (now - _lastMouseFake < 1000)
- return;
- ui->lblText->setText(QString::number(int(now / 1000)));
- _lastMouseFake = now;
- XEvent ev;
- memset(&ev, 0, sizeof(ev));
- ev.type = ButtonPress;
- ev.xbutton.button = 1;
- ev.xbutton.same_screen = True;
- ev.xbutton.root = ev.xbutton.window = ev.xbutton.subwindow = _parentWinId;
- XSendEvent(QX11Info::display(), _parentWinId, True, 0xfff, &ev);
- ev.type = ButtonRelease;
- ev.xbutton.state = 0x100;
- XSendEvent(QX11Info::display(), _parentWinId, True, 0xfff, &ev);
- */
+ QTextStream ts(_unixSocket);
+ QString line;
+#define SEC_NONE 0
+#define SEC_GENERAL 1
+#define SEC_ME 2
+#define STORE(x) else if (key == QLatin1String( #x )) x = value.toString()
+ int sec = SEC_NONE;
+ QString nextAction, nextActionTime, logoutTime, locked;
+ while (!ts.atEnd()) {
+ line = ts.readLine();
+ if (line.isEmpty())
+ continue;
+ if (line.at(0) == QLatin1Char('[')) {
+ // Section
+ if (line == QLatin1String("[General]")) {
+ sec = SEC_GENERAL;
+ } else if ( line == "[" + _display + "]") {
+ sec = SEC_ME;
+ } else {
+ sec = SEC_NONE;
+ }
+ } else {
+ // Value
+ int i = line.indexOf(QLatin1Char('='));
+ if (i == -1)
+ continue;
+ const QStringRef key(&line, 0, i);
+ const QStringRef value(&line, i+ 1, line.size() - (i + 1));
+ if (sec == SEC_GENERAL) {
+ if (false);
+ STORE(nextAction);
+ STORE(nextActionTime);
+ } else if (sec == SEC_ME) {
+ if (false);
+ STORE(logoutTime);
+ STORE(locked);
+ }
+ }
+ }
+ if (nextAction.isEmpty() || nextAction == QLatin1String("none") || nextActionTime.isEmpty()) {
+ _shutdownDeadline = 0;
+ } else {
+ _shutdownDeadline = nextActionTime.toLongLong();
+ }
+ _logoutDeadline = logoutTime.toLongLong();
+ if (!_isLocked && locked.toInt() != 0) {
+ _isLocked = true;
+ }
+ // TODO: Load text strings for everything
+ _deadlineType = DeadlineType::Unknown;
}