[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 (&gtv->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