Hi list,
just thanks to the xset utility :-)
This is a plain diff, not a Git patch.
--
daniele_athome
diff -urN libphone-ui.orig/configure.ac libphone-ui/configure.ac
--- libphone-ui.orig/configure.ac 2010-03-18 11:28:53.000000000 +0100
+++ libphone-ui/configure.ac 2010-03-18 11:28:42.000000000 +0100
@@ -14,6 +14,7 @@
PKG_CHECK_MODULES(GLIB, glib-2.0)
PKG_CHECK_MODULES(LIBPHONE_UTILS, libphone-utils)
PKG_CHECK_MODULES(ALSA, alsa)
+PKG_CHECK_MODULES(X11, x11)
EXPAND(SYSCONFDIR, $sysconfdir)
EXPAND(LIBDIR, $libdir)
diff -urN libphone-ui.orig/src/Makefile.am libphone-ui/src/Makefile.am
--- libphone-ui.orig/src/Makefile.am 2010-03-18 11:28:53.000000000 +0100
+++ libphone-ui/src/Makefile.am 2010-03-18 11:28:42.000000000 +0100
@@ -2,7 +2,7 @@
localedir = $(datadir)/locale
AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" -DPKGDATADIR=\"$(pkgdatadir)\" -DG_LOG_DOMAIN=\"libphone-ui\"
-AM_CFLAGS = -Wall -Wextra -Werror @GLIB_CFLAGS@ @DBUS_GLIB_CFLAGS@ @FRAMEWORKD_GLIB_CFLAGS@ @LIBPHONE_UTILS_CFLAGS@ @ALSA_CFLAGS@
+AM_CFLAGS = -Wall -Wextra -Werror @GLIB_CFLAGS@ @DBUS_GLIB_CFLAGS@ @FRAMEWORKD_GLIB_CFLAGS@ @LIBPHONE_UTILS_CFLAGS@ @ALSA_CFLAGS@ @X11_CFLAGS@
lib_LTLIBRARIES = libphone-ui.la
@@ -20,4 +20,4 @@
libphone_ui_la_LDFLAGS = $(all_libraries) -ldl
-libphone_ui_la_LIBADD = @GLIB_LIBS@ @DBUS_GLIB_LIBS@ @FRAMEWORKD_GLIB_LIBS@ @LIBPHONE_UTILS_LIBS@ @ALSA_LIBS@
+libphone_ui_la_LIBADD = @GLIB_LIBS@ @DBUS_GLIB_LIBS@ @FRAMEWORKD_GLIB_LIBS@ @LIBPHONE_UTILS_LIBS@ @ALSA_LIBS@ @X11_LIBS@
diff -urN libphone-ui.orig/src/phoneui-utils-device.c libphone-ui/src/phoneui-utils-device.c
--- libphone-ui.orig/src/phoneui-utils-device.c 2010-03-18 11:28:53.000000000 +0100
+++ libphone-ui/src/phoneui-utils-device.c 2010-03-18 11:28:42.000000000 +0100
@@ -8,6 +8,16 @@
#include <string.h>
#include <stdio.h>
#include <glib.h>
+#include <X11/Xlib.h>
+
+// for X11 screensaver
+#define ALL -1
+#define TIMEOUT 1
+#define INTERVAL 2
+#define PREFER_BLANK 3
+#define ALLOW_EXP 4
+#define SERVER_DEFAULT (-1)
+#define DEFAULT_TIMEOUT (-600)
static const char *device_vibrator = NULL;
@@ -67,6 +77,37 @@
return 0;
}
+// thanks to xset
+static void
+set_saver(Display *dpy, int mask, int value)
+{
+ int timeout, interval, prefer_blank, allow_exp;
+
+ XGetScreenSaver(dpy, &timeout, &interval, &prefer_blank, &allow_exp);
+ if (mask == TIMEOUT)
+ timeout = value;
+ if (mask == INTERVAL)
+ interval = value;
+ if (mask == PREFER_BLANK)
+ prefer_blank = value;
+ if (mask == ALLOW_EXP)
+ allow_exp = value;
+ if (mask == ALL) {
+ timeout = SERVER_DEFAULT;
+ interval = SERVER_DEFAULT;
+ prefer_blank = DefaultBlanking;
+ allow_exp = DefaultExposures;
+ }
+ XSetScreenSaver(dpy, timeout, interval, prefer_blank, allow_exp);
+ if (mask == ALL && value == DEFAULT_TIMEOUT) {
+ XGetScreenSaver(dpy, &timeout, &interval, &prefer_blank, &allow_exp);
+ if (!timeout)
+ XSetScreenSaver(dpy, -DEFAULT_TIMEOUT, interval, prefer_blank,
+ allow_exp);
+ }
+ return;
+}
+
void
phoneui_utils_device_vibrate(int duration, int intensity, int repeat, int pause)
@@ -116,17 +157,22 @@
void
phoneui_utils_device_activate_screensaver(void)
{
- // FIXME: do this in a sane way!!!
- int rc1 = system("xset -display localhost:0 s blank");
- int rc2 = system("xset -display localhost:0 s activate");
- g_return_if_fail(rc1 == 0 && rc2 ==0);
+ Display* dpy = XOpenDisplay(SCR_DISPLAY);
+ g_return_if_fail(dpy != NULL);
+
+ set_saver(dpy, PREFER_BLANK, PreferBlanking);
+ XActivateScreenSaver(dpy);
+
+ XCloseDisplay(dpy);
}
void
phoneui_utils_device_deactivate_screensaver(void)
{
- // FIXME: do this in a sane way!!!
- int rc = system("xset -display localhost:0 s reset");
- g_return_if_fail(rc == 0);
+ Display* dpy = XOpenDisplay(SCR_DISPLAY);
+ g_return_if_fail(dpy != NULL);
+
+ XResetScreenSaver(dpy);
+ XCloseDisplay(dpy);
}
_______________________________________________
Shr-devel mailing list
[email protected]
http://lists.shr-project.org/mailman/listinfo/shr-devel