Mercurial > sdl-ios-xcode
comparison src/video/x11/SDL_x11events.c @ 3030:f13ad181f5b2
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.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 12 Jan 2009 08:26:24 +0000 |
parents | 54fac87e1f34 |
children | 86918831452f |
comparison
equal
deleted
inserted
replaced
3029:89f8a72e1ee9 | 3030:f13ad181f5b2 |
---|---|
408 while (X11_Pending(data->display)) { | 408 while (X11_Pending(data->display)) { |
409 X11_DispatchEvent(_this); | 409 X11_DispatchEvent(_this); |
410 } | 410 } |
411 } | 411 } |
412 | 412 |
413 /* This is so wrong it hurts */ | |
414 #define GNOME_SCREENSAVER_HACK | |
415 #ifdef GNOME_SCREENSAVER_HACK | |
416 #include <unistd.h> | |
417 static pid_t screensaver_inhibit_pid; | |
418 static void gnome_screensaver_disable() | |
419 { | |
420 screensaver_inhibit_pid = fork(); | |
421 if (screensaver_inhibit_pid == 0) { | |
422 //close(0); | |
423 //close(1); | |
424 //close(2); | |
425 execl("/usr/bin/gnome-screensaver-command", | |
426 "gnome-screensaver-command", | |
427 "--inhibit", | |
428 "--reason", | |
429 "GNOME screensaver doesn't respect MIT-SCREEN-SAVER", | |
430 NULL); | |
431 exit(2); | |
432 } | |
433 } | |
434 static void gnome_screensaver_enable() | |
435 { | |
436 kill(screensaver_inhibit_pid, 15); | |
437 } | |
438 #endif | |
439 | |
413 void | 440 void |
414 X11_SuspendScreenSaver(_THIS) | 441 X11_SuspendScreenSaver(_THIS) |
415 { | 442 { |
416 #if SDL_VIDEO_DRIVER_X11_SCRNSAVER | 443 #if SDL_VIDEO_DRIVER_X11_SCRNSAVER |
417 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; | 444 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
418 int dummy; | 445 int dummy; |
419 int major_version, minor_version; | 446 int major_version, minor_version; |
420 | 447 |
421 if (!SDL_X11_HAVE_XSS) { | 448 if (SDL_X11_HAVE_XSS) { |
422 return; | 449 /* XScreenSaverSuspend was introduced in MIT-SCREEN-SAVER 1.1 */ |
423 } | 450 if (!XScreenSaverQueryExtension(data->display, &dummy, &dummy) || |
424 | 451 !XScreenSaverQueryVersion(data->display, |
425 /* XScreenSaverSuspend was introduced in MIT-SCREEN-SAVER 1.1 */ | 452 &major_version, &minor_version) || |
426 if (!XScreenSaverQueryExtension(data->display, &dummy, &dummy) || | 453 major_version < 1 || (major_version == 1 && minor_version < 1)) { |
427 !XScreenSaverQueryVersion(data->display, | 454 return; |
428 &major_version, &minor_version) || | 455 } |
429 major_version < 1 || (major_version == 1 && minor_version < 1)) { | 456 |
430 return; | 457 XScreenSaverSuspend(data->display, _this->suspend_screensaver); |
431 } | 458 XResetScreenSaver(data->display); |
432 | 459 } |
433 XScreenSaverSuspend(data->display, _this->suspend_screensaver); | 460 #endif |
434 XResetScreenSaver(data->display); | 461 |
462 #ifdef GNOME_SCREENSAVER_HACK | |
463 if (_this->suspend_screensaver) { | |
464 gnome_screensaver_disable(); | |
465 } else { | |
466 gnome_screensaver_enable(); | |
467 } | |
435 #endif | 468 #endif |
436 } | 469 } |
437 | 470 |
438 /* vi: set ts=4 sw=4 expandtab: */ | 471 /* vi: set ts=4 sw=4 expandtab: */ |