Commit 538276cc authored by Sam Lantinga's avatar Sam Lantinga

This is so wrong, it hurts.

Instead of the GNOME screensaver respecting the MIT-SCREEN-SAVER extension
and registering for the screensaver idle event, it uses a completely different
control mechanism.  Our alternatives are to use dbus (very complicated) or
this really painful hack.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403492
parent a097a410
...@@ -410,6 +410,33 @@ X11_PumpEvents(_THIS) ...@@ -410,6 +410,33 @@ X11_PumpEvents(_THIS)
} }
} }
/* This is so wrong it hurts */
#define GNOME_SCREENSAVER_HACK
#ifdef GNOME_SCREENSAVER_HACK
#include <unistd.h>
static pid_t screensaver_inhibit_pid;
static void gnome_screensaver_disable()
{
screensaver_inhibit_pid = fork();
if (screensaver_inhibit_pid == 0) {
//close(0);
//close(1);
//close(2);
execl("/usr/bin/gnome-screensaver-command",
"gnome-screensaver-command",
"--inhibit",
"--reason",
"GNOME screensaver doesn't respect MIT-SCREEN-SAVER",
NULL);
exit(2);
}
}
static void gnome_screensaver_enable()
{
kill(screensaver_inhibit_pid, 15);
}
#endif
void void
X11_SuspendScreenSaver(_THIS) X11_SuspendScreenSaver(_THIS)
{ {
...@@ -418,10 +445,7 @@ X11_SuspendScreenSaver(_THIS) ...@@ -418,10 +445,7 @@ X11_SuspendScreenSaver(_THIS)
int dummy; int dummy;
int major_version, minor_version; int major_version, minor_version;
if (!SDL_X11_HAVE_XSS) { if (SDL_X11_HAVE_XSS) {
return;
}
/* XScreenSaverSuspend was introduced in MIT-SCREEN-SAVER 1.1 */ /* XScreenSaverSuspend was introduced in MIT-SCREEN-SAVER 1.1 */
if (!XScreenSaverQueryExtension(data->display, &dummy, &dummy) || if (!XScreenSaverQueryExtension(data->display, &dummy, &dummy) ||
!XScreenSaverQueryVersion(data->display, !XScreenSaverQueryVersion(data->display,
...@@ -432,6 +456,15 @@ X11_SuspendScreenSaver(_THIS) ...@@ -432,6 +456,15 @@ X11_SuspendScreenSaver(_THIS)
XScreenSaverSuspend(data->display, _this->suspend_screensaver); XScreenSaverSuspend(data->display, _this->suspend_screensaver);
XResetScreenSaver(data->display); XResetScreenSaver(data->display);
}
#endif
#ifdef GNOME_SCREENSAVER_HACK
if (_this->suspend_screensaver) {
gnome_screensaver_disable();
} else {
gnome_screensaver_enable();
}
#endif #endif
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment