[Goodies-commits] r7494 - in parole/trunk: . src

Ali Abdallah aliov at xfce.org
Sun Jun 7 14:49:51 CEST 2009


Author: aliov
Date: 2009-06-07 12:49:51 +0000 (Sun, 07 Jun 2009)
New Revision: 7494

Added:
   parole/trunk/src/screensaver.c
   parole/trunk/src/screensaver.h
Modified:
   parole/trunk/ChangeLog
   parole/trunk/src/Makefile.am
   parole/trunk/src/gst.c
   parole/trunk/src/player.c
   parole/trunk/src/stream.c
Log:
	* Reset screen saver counter if we are playing a movie

Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog	2009-06-07 10:11:46 UTC (rev 7493)
+++ parole/trunk/ChangeLog	2009-06-07 12:49:51 UTC (rev 7494)
@@ -1,4 +1,7 @@
 2009-06-07: Ali aliov at xfce.org
+	* Reset screen saver counter if we are playing a movie
+
+2009-06-07: Ali aliov at xfce.org
 	* Change playbin state to NULL on errors.
 	* Hide statusbar+menubar when full screen mode.
 	* Hide cursor on vidoe output when playing.

Modified: parole/trunk/src/Makefile.am
===================================================================
--- parole/trunk/src/Makefile.am	2009-06-07 10:11:46 UTC (rev 7493)
+++ parole/trunk/src/Makefile.am	2009-06-07 12:49:51 UTC (rev 7494)
@@ -29,6 +29,8 @@
 	mediafile.h				\
 	mediachooser.c				\
 	mediachooser.h				\
+	screensaver.c				\
+	screensaver.h				\
 	rc-utils.c				\
 	rc-utils.h				\
 	debug.c					\

Modified: parole/trunk/src/gst.c
===================================================================
--- parole/trunk/src/gst.c	2009-06-07 10:11:46 UTC (rev 7493)
+++ parole/trunk/src/gst.c	2009-06-07 12:49:51 UTC (rev 7494)
@@ -395,7 +395,7 @@
 }
 
 static void
-parole_gst_query_info (ParoleGst *gst)
+parole_gst_query_duration (ParoleGst *gst)
 {
     gint64 absolute_duration = 0;
     gdouble duration = 0;
@@ -417,6 +417,50 @@
 }
 
 static void
+parole_gst_query_info (ParoleGst *gst)
+{
+    const GList *info = NULL;
+    GObject *obj;
+    GParamSpec *pspec;
+    GEnumValue *val;
+    gint type;
+    
+    
+    g_object_get (G_OBJECT (gst->priv->playbin),
+		  "stream-info", &info,
+		  NULL);
+		  
+    for ( ; info != NULL; info = info->next )
+    {
+	obj = info->data;
+	
+	g_object_get (obj,
+		      "type", &type,
+		      NULL);
+	
+	pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (obj), "type");
+	val = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, type);
+	
+	if ( g_ascii_strcasecmp (val->value_name, "video") == 0 ||
+	     g_ascii_strcasecmp (val->value_nick, "video") == 0)
+	{
+	    TRACE ("Stream has video");
+	    g_object_set (G_OBJECT (gst->priv->stream),
+			  "has-video", TRUE,
+			  NULL);
+	}
+	if ( g_ascii_strcasecmp (val->value_name, "audio") == 0 ||
+	     g_ascii_strcasecmp (val->value_nick, "audio") == 0)
+	{
+	    TRACE ("Stream has audio");
+	    g_object_set (G_OBJECT (gst->priv->stream),
+			  "has-audio", TRUE,
+			  NULL);
+	}
+    }
+}
+
+static void
 parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState pending)
 {
     if ( gst->priv->state != new )
@@ -434,6 +478,7 @@
 	{
 	    case GST_STATE_PLAYING:
 		parole_gst_query_capabilities (gst);
+		parole_gst_query_duration (gst);
 		parole_gst_query_info (gst);
 		g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0, 
 			       gst->priv->stream, PAROLE_MEDIA_STATE_PLAYING);

Modified: parole/trunk/src/player.c
===================================================================
--- parole/trunk/src/player.c	2009-06-07 10:11:46 UTC (rev 7493)
+++ parole/trunk/src/player.c	2009-06-07 12:49:51 UTC (rev 7494)
@@ -39,6 +39,7 @@
 #include "mediachooser.h"
 #include "sidebar.h"
 #include "statusbar.h"
+#include "screensaver.h"
 #include "rc-utils.h"
 #include "enum-glib.h"
 #include "enum-gtypes.h"
@@ -75,6 +76,7 @@
     ParoleMediaList	*list;
     ParoleSidebar       *sidebar;
     ParoleStatusbar     *status;
+    ParoleScreenSaver   *screen_saver;
 };
 
 G_DEFINE_TYPE (ParolePlayer, parole_player, G_TYPE_OBJECT)
@@ -293,8 +295,14 @@
 static void
 parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, ParoleMediaState state, ParolePlayer *player)
 {
+    gboolean has_video;
+    
     PAROLE_DEBUG_ENUM ("State callback", state, ENUM_GTYPE_MEDIA_STATE);
     
+    g_object_get (G_OBJECT (stream),
+		  "has-video", &has_video,
+		  NULL);
+    
     if ( state == PAROLE_MEDIA_STATE_PLAYING )
     {
 	parole_player_playing (player, stream);
@@ -313,6 +321,12 @@
     {
 	parole_player_stopped (player);
     }
+    
+    if ( state == PAROLE_MEDIA_STATE_PLAYING && has_video )
+	parole_screen_saver_inhibit (player->priv->screen_saver);
+    else
+	parole_screen_saver_uninhibit (player->priv->screen_saver);
+    
 }
 
 static void
@@ -346,6 +360,10 @@
 static gboolean
 parole_player_range_button_press (GtkWidget *widget, GdkEventButton *ev, ParolePlayer *player)
 {
+    gdouble value;
+    
+    value = gtk_range_get_value (GTK_RANGE (player->priv->range));
+    
     if ( ev->button == 3 )
     {
 	player->priv->user_seeking = FALSE;
@@ -373,6 +391,7 @@
 {
     xfce_err ("%s", error);
     parole_player_stopped (player);
+    parole_screen_saver_uninhibit (player->priv->screen_saver);
 }
 
 static void
@@ -652,6 +671,7 @@
     g_object_unref (player->priv->gst);
     g_object_unref (player->priv->sidebar);
     g_object_unref (player->priv->status);
+    g_object_unref (player->priv->screen_saver);
 
     G_OBJECT_CLASS (parole_player_parent_class)->finalize (object);
 }
@@ -685,6 +705,7 @@
     
     player->priv->sidebar = parole_sidebar_new ();
     player->priv->status = parole_statusbar_new ();
+    player->priv->screen_saver = parole_screen_saver_new ();
     
     player->priv->state = PAROLE_MEDIA_STATE_STOPPED;
     player->priv->user_seeking = FALSE;

Added: parole/trunk/src/screensaver.c
===================================================================
--- parole/trunk/src/screensaver.c	                        (rev 0)
+++ parole/trunk/src/screensaver.c	2009-06-07 12:49:51 UTC (rev 7494)
@@ -0,0 +1,107 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+
+#include <gdk/gdkx.h>
+
+#include "screensaver.h"
+
+#define RESET_SCREENSAVER_TIMEOUT	6
+
+#define PAROLE_SCREEN_SAVER_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_SCREENSAVER, ParoleScreenSaverPrivate))
+
+struct ParoleScreenSaverPrivate
+{
+    gulong reset_id;
+};
+
+G_DEFINE_TYPE (ParoleScreenSaver, parole_screen_saver, G_TYPE_OBJECT)
+
+
+static void
+parole_screen_saver_finalize (GObject *object)
+{
+    ParoleScreenSaver *saver;
+
+    saver = PAROLE_SCREEN_SAVER (object);
+
+    G_OBJECT_CLASS (parole_screen_saver_parent_class)->finalize (object);
+}
+
+static void
+parole_screen_saver_class_init (ParoleScreenSaverClass *klass)
+{
+    GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+    object_class->finalize = parole_screen_saver_finalize;
+
+    g_type_class_add_private (klass, sizeof (ParoleScreenSaverPrivate));
+}
+
+static void
+parole_screen_saver_init (ParoleScreenSaver *saver)
+{
+    saver->priv = PAROLE_SCREEN_SAVER_GET_PRIVATE (saver);
+    
+    saver->priv->reset_id = 0;
+}
+
+static gboolean
+parole_screen_saver_reset_timeout (gpointer data)
+{
+    XResetScreenSaver (GDK_DISPLAY ());
+    return TRUE;
+}
+
+ParoleScreenSaver *
+parole_screen_saver_new (void)
+{
+    ParoleScreenSaver *saver = NULL;
+    saver = g_object_new (PAROLE_TYPE_SCREENSAVER, NULL);
+    return saver;
+}
+
+void parole_screen_saver_inhibit (ParoleScreenSaver *saver)
+{
+    parole_screen_saver_uninhibit (saver);
+	
+    saver->priv->reset_id = g_timeout_add_seconds (RESET_SCREENSAVER_TIMEOUT, 
+						   (GSourceFunc) parole_screen_saver_reset_timeout,
+						   NULL);
+}
+
+void parole_screen_saver_uninhibit (ParoleScreenSaver *saver)
+{
+    if ( saver->priv->reset_id != 0 )
+    {
+	g_source_remove (saver->priv->reset_id);
+	saver->priv->reset_id = 0;
+    }
+}

Added: parole/trunk/src/screensaver.h
===================================================================
--- parole/trunk/src/screensaver.h	                        (rev 0)
+++ parole/trunk/src/screensaver.h	2009-06-07 12:49:51 UTC (rev 7494)
@@ -0,0 +1,56 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef __PAROLE_SCREEN_SAVER_H
+#define __PAROLE_SCREEN_SAVER_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define PAROLE_TYPE_SCREENSAVER        (parole_screen_saver_get_type () )
+#define PAROLE_SCREEN_SAVER(o)         (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_SCREENSAVER, ParoleScreenSaver))
+#define PAROLE_IS_SCREENSAVER(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_SCREENSAVER))
+
+typedef struct ParoleScreenSaverPrivate ParoleScreenSaverPrivate;
+
+typedef struct
+{
+    GObject         		  parent;
+    ParoleScreenSaverPrivate     *priv;
+    
+} ParoleScreenSaver;
+
+typedef struct
+{
+    GObjectClass 		  parent_class;
+    
+} ParoleScreenSaverClass;
+
+GType        			  parole_screen_saver_get_type        (void) G_GNUC_CONST;
+ParoleScreenSaver       	 *parole_screen_saver_new             (void);
+
+void				  parole_screen_saver_inhibit	      (ParoleScreenSaver *saver);
+
+void				  parole_screen_saver_uninhibit	      (ParoleScreenSaver *saver);
+
+G_END_DECLS
+
+#endif /* __PAROLE_SCREEN_SAVER_H */

Modified: parole/trunk/src/stream.c
===================================================================
--- parole/trunk/src/stream.c	2009-06-07 10:11:46 UTC (rev 7493)
+++ parole/trunk/src/stream.c	2009-06-07 12:49:51 UTC (rev 7494)
@@ -37,12 +37,15 @@
 struct ParoleStreamPrivate
 {
     /*Properties*/
-    gpointer media_file;
-    gboolean live;
-    gboolean seekable;
-    gdouble   duration;
-    gint64  absolute_duration;
+    gpointer 	media_file;
     
+    gboolean 	has_audio;
+    gboolean    has_video;
+    gboolean 	live;
+    gboolean 	seekable;
+    gdouble   	duration;
+    gint64  	absolute_duration;
+    
 };
 
 enum
@@ -50,6 +53,8 @@
     PROP_0,
     PROP_MEDIA_FILE,
     PROP_LIVE,
+    PROP_HAS_AUDIO,
+    PROP_HAS_VIDEO,
     PROP_SEEKABLE,
     PROP_DURATION,
     PROP_ABSOLUTE_DURATION
@@ -70,6 +75,12 @@
 	case PROP_LIVE:
 	    stream->priv->live = g_value_get_boolean (value);
 	    break;
+	case PROP_HAS_AUDIO:
+	    stream->priv->has_audio = g_value_get_boolean (value);
+	    break;
+	case PROP_HAS_VIDEO:
+	    stream->priv->has_video = g_value_get_boolean (value);
+	    break;
 	case PROP_MEDIA_FILE:
 	    stream->priv->media_file = g_value_get_object (value);
 	    break;
@@ -101,6 +112,12 @@
 	case PROP_LIVE:
 	    g_value_set_boolean (value, stream->priv->live);
 	    break;
+	case PROP_HAS_AUDIO:
+	    g_value_set_boolean (value, stream->priv->has_audio);
+	    break;
+	case PROP_HAS_VIDEO:
+	    g_value_set_boolean (value, stream->priv->has_video);
+	    break;
 	case PROP_MEDIA_FILE:
 	    g_value_set_object (value, stream->priv->media_file);
 	    break;
@@ -150,6 +167,20 @@
 							  G_PARAM_READWRITE));
     
     g_object_class_install_property (object_class,
+				     PROP_HAS_AUDIO,
+				     g_param_spec_boolean ("has-audio",
+							   NULL, NULL,
+							   FALSE,
+							   G_PARAM_READWRITE));
+    
+    g_object_class_install_property (object_class,
+				     PROP_HAS_VIDEO,
+				     g_param_spec_boolean ("has-video",
+							   NULL, NULL,
+							   FALSE,
+							   G_PARAM_READWRITE));
+    
+    g_object_class_install_property (object_class,
 				     PROP_LIVE,
 				     g_param_spec_boolean ("live",
 							   NULL, NULL,
@@ -203,6 +234,8 @@
 {
     stream->priv->live = FALSE;
     stream->priv->seekable = FALSE;
+    stream->priv->has_audio = FALSE;
+    stream->priv->has_video = FALSE;
     stream->priv->absolute_duration = 0;
     stream->priv->duration = 0;
     




More information about the Goodies-commits mailing list