[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