From a98536b9fbda7d7fb2ff78906c1a2d6331f33df2 Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Wed, 15 Nov 2017 10:05:29 +0100 Subject: port to qt5 * got rid of the Win32/X11 differentiation * due to QT5, additional packages are needed to compile ** libqt5x11extras5-dev ** libqt5svg5-dev --- src/client/util/platform/blankscreen.cpp | 100 +++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/client/util/platform/blankscreen.cpp (limited to 'src/client/util/platform/blankscreen.cpp') diff --git a/src/client/util/platform/blankscreen.cpp b/src/client/util/platform/blankscreen.cpp new file mode 100644 index 0000000..ee644ca --- /dev/null +++ b/src/client/util/platform/blankscreen.cpp @@ -0,0 +1,100 @@ + +#include "blankscreen.h" + +#include +#include +#include +#include + +#include +#include + +#include +#include + +struct BlankScreen_Sysdep { + Display *dpy; +}; + +BlankScreen::BlankScreen() : QDialog(NULL) +{ + _sysdep = new BlankScreen_Sysdep; + _sysdep->dpy = XOpenDisplay(NULL); + if (_sysdep->dpy == NULL) + return; + + setWindowFlags(Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint); + setStyleSheet("background-color:#000"); + + _locked = false; + QTimer *upper = new QTimer(this); + connect(upper, SIGNAL(timeout()), this, SLOT(timer_moveToTop())); + upper->start(1111); +} + +BlankScreen::~BlankScreen() +{ + unlock(); + if (_sysdep->dpy != NULL) { + XCloseDisplay(_sysdep->dpy); + } + delete _sysdep; +} + +bool BlankScreen::lock(const QString& message) +{ + if (_locked) + return true; + if (_sysdep->dpy == NULL) + return false; + + _message = message; + + this->setGeometry(QApplication::desktop()->geometry()); + this->showFullScreen(); + this->activateWindow(); + this->raise(); + + // grabbing of keyboard and mouse + XGrabKeyboard(_sysdep->dpy, DefaultRootWindow(_sysdep->dpy) , false, GrabModeAsync, GrabModeAsync, CurrentTime); + XGrabPointer(_sysdep->dpy, DefaultRootWindow(_sysdep->dpy) , false, 0, GrabModeAsync, GrabModeAsync, None, 0, CurrentTime); + + + QProcess ungrabP; + ungrabP.start("/bin/bash", QStringList() << "/opt/openslx/pvs2/kb-lock.sh"); + ungrabP.waitForFinished(); + + _locked = true; + return true; +} + +bool BlankScreen::unlock() +{ + this->hide(); + if (!_locked) + return true; + if (_sysdep->dpy == NULL) + return false; + + // ungrabbing of keyboard and mouse + XUngrabPointer(_sysdep->dpy, CurrentTime); + XUngrabKeyboard(_sysdep->dpy, CurrentTime); + + XFlush(_sysdep->dpy); + + /* start the kb-unlock.sh script */ + QProcess regrabP; + regrabP.start("/bin/bash", QStringList() << "/opt/openslx/pvs2/kb-unlock.sh"); + regrabP.waitForFinished(); + + _locked = false; + return true; +} + +void BlankScreen::timer_moveToTop() +{ + if (this->isHidden()) + return; + activateWindow(); + raise(); +} -- cgit v1.2.3-55-g7522