blob: 66c9f1fcefb4d423250994d1f2c6a7e6ab7070ae (
plain) (
tree)
|
|
#include "blankscreen.h"
#include <QApplication>
#include <QProcess>
#include <QDesktopWidget>
#include <X11/Xlib.h>
#include <X11/cursorfont.h>
#include <cassert>
#include <cstring>
struct BlankScreen_Sysdep {
Display *dpy;
};
BlankScreen::BlankScreen() : QDialog(NULL)
{
_sysdep = new BlankScreen_Sysdep;
_sysdep->dpy = XOpenDisplay(NULL);
if (_sysdep->dpy == NULL)
return;
assert(_sysdep->dpy);
setWindowFlags(Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint);
setStyleSheet("background-color:#000");
_locked = false;
}
BlankScreen::~BlankScreen()
{
unlock();
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;
}
|