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

Reply via email to