[prev in list] [next in list] [prev in thread] [next in thread]
List: xine-cvslog
Subject: [xine-cvs] HG: gxine: Use & prefer xdg-screensaver for screensaver
From: Darren Salt <linux () youmustbejoking ! demon ! co ! uk>
Date: 2009-01-19 16:58:12
Message-ID: 1f287b56d8216d9fb82f.1232383961 () hg ! debian ! org
[Download RAW message or body]
# HG changeset patch
# User Darren Salt <linux@youmustbejoking.demon.co.uk>
# Date 1232383961 0
# Node ID 1f287b56d8216d9fb82f724dc164ee99dad0cc99
# Parent d3abd59bdb08655c510d6b8350c266d8b75bf1a7
Use & prefer xdg-screensaver for screensaver defeating.
Also recommend xdg-utils (for Debian users).
diff -r 1f287b56d8216d9fb82f724dc164ee99dad0cc99 -r \
d3abd59bdb08655c510d6b8350c266d8b75bf1a7 ChangeLog
--- a/ChangeLog Mon Jan 19 16:52:41 2009 +0000
+++ b/ChangeLog Sun Jan 11 03:13:35 2009 +0000
@@ -9,6 +9,8 @@ 0.5.904: 2008/??/??
the prefs window) and a runtime flag (set via the View menu).
* Add x-content/video-dvd etc. to the MIME types list in the desktop
file (via X-gxine-MimeType for auto-generation reasons).
+ * Use and prefer to use xdg-screensaver (where available) for
+ screensaver defeating.
0.5.903: 2008/06/12
* Apply auto-detection of DVD and VCD images to files & directories
diff -r 1f287b56d8216d9fb82f724dc164ee99dad0cc99 -r \
d3abd59bdb08655c510d6b8350c266d8b75bf1a7 configure.ac
--- a/configure.ac Mon Jan 19 16:52:41 2009 +0000
+++ b/configure.ac Sun Jan 11 03:13:35 2009 +0000
@@ -168,6 +168,14 @@ if test "$with_hal" = yes; then
if test "$with_hal" = yes; then
AC_DEFINE(WITH_HAL, 1, [Define if HAL is present and you want to use it.])
GXINE_HAL_DEVICE_INFO
+fi
+
+dnl ---------------------------------------------
+dnl XDG screensaver
+dnl ---------------------------------------------
+AC_PATH_PROG(XDGSSCMD, xdg-screensaver)
+if test -n "$XDGSSCMD"; then
+ AC_DEFINE_UNQUOTED(XDG_SCREENSAVER_COMMAND, "$XDGSSCMD", [location of the \
xdg-screensaver binary]) fi
dnl ---------------------------------------------
diff -r 1f287b56d8216d9fb82f724dc164ee99dad0cc99 -r \
d3abd59bdb08655c510d6b8350c266d8b75bf1a7 debian/control
--- a/debian/control Mon Jan 19 16:52:41 2009 +0000
+++ b/debian/control Sun Jan 11 03:13:35 2009 +0000
@@ -16,6 +16,7 @@ Package: gxine
Package: gxine
Architecture: any
Depends: ${shlibs:Depends}, librsvg2-common
+Recommends: xdg-utils
Suggests: libgnomevfs2-0, realplayer (<< 10), libdvdcss2 | libdvdcss, gxineplugin
Description: the xine video player, GTK+/Gnome user interface
This is a GTK+ based GUI for the libxine video player library.
diff -r 1f287b56d8216d9fb82f724dc164ee99dad0cc99 -r \
d3abd59bdb08655c510d6b8350c266d8b75bf1a7 src/gtkvideo.c
--- a/src/gtkvideo.c Mon Jan 19 16:52:41 2009 +0000
+++ b/src/gtkvideo.c Sun Jan 11 03:13:35 2009 +0000
@@ -108,6 +108,9 @@ static gboolean gtv_unblank_screen (GtkV
static gboolean gtv_unblank_screen (GtkVideo *);
static gboolean gtv_update_resize_factor (GtkVideo *);
+static int screensaver_poke (const char *const [], const char *);
+static int xdg_screensaver_poke (const char *, Window);
+
static GtkWidgetClass *parent_class = NULL;
static pthread_mutex_t resize_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t resize_add_lock = PTHREAD_MUTEX_INITIALIZER;
@@ -183,6 +186,11 @@ struct gtk_video_private_s {
DBusGConnection *connection;
DBusGProxy *gs_proxy;
guint32 cookie;
+#endif
+
+#ifdef XDG_SCREENSAVER_COMMAND
+ Window xdg_active;
+ gboolean have_xdg_screensaver:8;
#endif
gboolean playing_no_blank:8;
@@ -1313,6 +1321,12 @@ static void gtk_video_realize (GtkWidget
priv->pointer_visible = TRUE;
XUnlockDisplay (xdisplay);
+ priv->xdg_active = 0;
+#ifdef XDG_SCREENSAVER_COMMAND
+ priv->have_xdg_screensaver = !xdg_screensaver_poke ("--help", 0);
+#else
+ priv->have_xdg_screensaver = 0;
+#endif
priv->screen_blanker_timeout =
g_timeout_add (4000, (GSourceFunc) gtv_screen_blanker_cb, gtv);
}
@@ -2207,15 +2221,51 @@ static int screensaver_poke (const char
}
g_error_free (err);
}
+ else
+ ret = 0;
return ret;
}
+static int xdg_screensaver_poke (const char *arg, Window id)
+{
+#ifdef XDG_SCREENSAVER_COMMAND
+ char id_str[16];
+ const char *const argv[] = { XDG_SCREENSAVER_COMMAND, arg,
+ id ? id_str : NULL, NULL };
+ sprintf (id_str, "%#x", (int) id);
+ /* screensaver name is used in "can't poke <name>" */
+ return screensaver_poke (argv, "xdg-screensaver");
+#else
+ return -1;
+#endif
+}
+
static gboolean gtv_unblank_screen (GtkVideo *gtv)
{
static gboolean dbus_deny = FALSE;
-
- if (!gtv_test_inhibit_blank (gtv))
+ gboolean inhibit = gtv_test_inhibit_blank (gtv);
+
+#ifdef XDG_SCREENSAVER_COMMAND
+ if (gtv->priv->have_xdg_screensaver)
+ {
+ if (inhibit != !!gtv->priv->xdg_active)
+ {
+ Window id = inhibit
+ ? gdk_x11_drawable_get_xid (gtk_widget_get_toplevel (>v->widget)->window)
+ : gtv->priv->xdg_active;
+ if (!id || !xdg_screensaver_poke (inhibit ? "suspend" : "resume", id))
+ {
+ gtv->priv->xdg_active = id;
+ return FALSE;
+ }
+ }
+ else
+ return FALSE; /* nothing to do */
+ }
+#endif
+
+ if (!inhibit)
{
if (dbus_deny)
gtv_screensaver_maybe_inhibit_dbus (gtv->priv, dbus_deny = FALSE);
------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Xine-cvslog mailing list
Xine-cvslog@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xine-cvslog
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic