summaryrefslogtreecommitdiffstats
path: root/src/client/util/platform/blankscreen_X11.cpp
diff options
context:
space:
mode:
authorsr2013-02-04 19:50:31 +0100
committersr2013-02-04 19:50:31 +0100
commit1a5709501f94014d41987b956338bb6424b9f90c (patch)
treed3b93fe8dc406bca56aff147ef5cc4cbf9ed6be0 /src/client/util/platform/blankscreen_X11.cpp
parentTest (diff)
downloadpvs2-1a5709501f94014d41987b956338bb6424b9f90c.tar.gz
pvs2-1a5709501f94014d41987b956338bb6424b9f90c.tar.xz
pvs2-1a5709501f94014d41987b956338bb6424b9f90c.zip
Initial commit
Diffstat (limited to 'src/client/util/platform/blankscreen_X11.cpp')
-rwxr-xr-xsrc/client/util/platform/blankscreen_X11.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/client/util/platform/blankscreen_X11.cpp b/src/client/util/platform/blankscreen_X11.cpp
new file mode 100755
index 0000000..69b6d8c
--- /dev/null
+++ b/src/client/util/platform/blankscreen_X11.cpp
@@ -0,0 +1,75 @@
+#include "blankscreen.h"
+
+#include <QApplication>
+#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);
+
+ _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);
+
+ _locked = false;
+ return true;
+}