[Goodies-commits] r7893 - in parole/trunk: . data/interfaces parole plugins plugins/properties plugins/tray plugins/window-title po
Ali Abdallah
aliov at xfce.org
Thu Aug 6 14:36:54 CEST 2009
Author: aliov
Date: 2009-08-06 12:36:54 +0000 (Thu, 06 Aug 2009)
New Revision: 7893
Added:
parole/trunk/THANKS
parole/trunk/plugins/window-title/
parole/trunk/plugins/window-title/Makefile.am
parole/trunk/plugins/window-title/window-title.c
Modified:
parole/trunk/ChangeLog
parole/trunk/configure.ac.in
parole/trunk/data/interfaces/parole.ui
parole/trunk/data/interfaces/plugins.ui
parole/trunk/data/interfaces/save-playlist.ui
parole/trunk/parole/parole-about.c
parole/trunk/parole/parole-disc.c
parole/trunk/parole/parole-gst.c
parole/trunk/parole/parole-mediachooser.c
parole/trunk/parole/parole-module.c
parole/trunk/parole/parole-open-location.c
parole/trunk/parole/parole-plugin.c
parole/trunk/parole/parole-plugin.h
parole/trunk/parole/parole-plugins-manager.c
parole/trunk/parole/parole-statusbar.c
parole/trunk/parole/parole-stream.c
parole/trunk/parole/parole-vis.h
parole/trunk/parole/parole.h
parole/trunk/plugins/Makefile.am
parole/trunk/plugins/properties/stream-properties.c
parole/trunk/plugins/tray/tray-icon.c
parole/trunk/po/POTFILES.in
parole/trunk/po/parole-media-player.pot
Log:
* parole-gst.c Implement a timeout handler to check state change
failure, can potentially happen on live streams.
* Change the about dialog.
* Change the version from 0.1 to 0.1.90 as the first stable
version should be 0.2
* parole-disc.c code to correctly checks if cd drive has a cdda,
this is a Linux specific thing.
* parole-gst.c the buffering bit when we force a stop state while
stream is buffering.
* parole-openlocation.c button to clear history of open locations.
* plugins/ Added a simple window title plugin to change
the title of the main window to the current playing stream.
* Set All the popup pos to be always center on parent.
* parole-plugin.c get rid of some useless code+properly
free the plugin data in finalize.
* parole-module.c fix a small memory leak.
* parole.h Support for site in the description of the plugin.
* parole-statusbar.c hide the separator when going to
fullscreen mode.
* Update the POTFILES.in and the .pot files.
Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/ChangeLog 2009-08-06 12:36:54 UTC (rev 7893)
@@ -1,3 +1,25 @@
+2009-08-06: 14:30 Ali aliov at xfce.org
+ * parole-gst.c Implement a timeout handler to check state change
+ failure, can potentially happen on live streams.
+ * Change the about dialog.
+ * Change the version from 0.1 to 0.1.90 as the first stable
+ version should be 0.2
+ * parole-disc.c code to correctly checks if cd drive has a cdda,
+ this is a Linux specific thing.
+ * parole-gst.c the buffering bit when we force a stop state while
+ stream is buffering.
+ * parole-openlocation.c button to clear history of open locations.
+ * plugins/ Added a simple window title plugin to change
+ the title of the main window to the current playing stream.
+ * Set All the popup pos to be always center on parent.
+ * parole-plugin.c get rid of some useless code+properly
+ free the plugin data in finalize.
+ * parole-module.c fix a small memory leak.
+ * parole.h Support for site in the description of the plugin.
+ * parole-statusbar.c hide the separator when going to
+ fullscreen mode.
+ * Update the POTFILES.in and the .pot files.
+
2009-08-04: 18:00 Ali aliov at xfce.org
* Added option to remember the currently loaded media
files in the playlist view.
Added: parole/trunk/THANKS
===================================================================
--- parole/trunk/THANKS (rev 0)
+++ parole/trunk/THANKS 2009-08-06 12:36:54 UTC (rev 7893)
@@ -0,0 +1,11 @@
+What's this file about?
+-----------------------
+This file lists external open source projects that were the starting point of learning how to
+write a GStreamer based media player.
+
+1) GStreamer itself, gstreamer plugins base.
+2) Totem, The gnome media player.
+3) Aldegonde, This tiny media player was a starting point of Totem, the code is very clear
+ and minimal, ideal to read before starting.
+
+Thanks to all the people that contributed/ing to these projects, without, Parole whouldn't be possible.
Modified: parole/trunk/configure.ac.in
===================================================================
--- parole/trunk/configure.ac.in 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/configure.ac.in 2009-08-06 12:36:54 UTC (rev 7893)
@@ -1,26 +1,21 @@
m4_define([intltool_minimum_version], [0.31])
-m4_define([parole_verinfo], [0:1:0])
+m4_define([parole_verinfo], [0:2:0])
m4_define([parole_version_api], [0])
m4_define([parole_version_major], [0])
m4_define([parole_version_minor], [1])
-m4_define([parole_version_micro], [0])
+m4_define([parole_version_micro], [90])
m4_define([parole_version_build], [r at REVISION@])
m4_define([parole_version_tag], [svn])
m4_define([parole_version], [parole_version_major().parole_version_minor().parole_version_micro()ifelse(parole_version_tag(), [svn], [parole_version_tag().parole_version_build()], [parole_version_tag()])])
AC_INIT([parole-media-player], [parole_version], [aliov at xfce.org])
-AC_PREREQ(2.50)
+AC_PREREQ(2.59c)
AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar])
AM_CONFIG_HEADER([config.h])
AM_MAINTAINER_MODE
-# ===================================================== #
-# Check for UNIX variants #
-# ===================================================== #
-AC_AIX
-AC_ISC_POSIX
-AC_MINIX
+AC_USE_SYSTEM_EXTENSIONS
# ===================================================== #
# Basic compiler settings #
@@ -55,7 +50,7 @@
# Check for headers needed for standard interfaces #
# ==================================================== #
AC_HEADER_STDC
-AC_CHECK_HEADERS([errno.h signal.h stddef.h \
+AC_CHECK_HEADERS([errno.h signal.h stddef.h sys/ioctl.h fcntl.h\
string.h sys/stat.h sys/types.h sys/wait.h time.h \
unistd.h])
@@ -149,6 +144,14 @@
[libnotify library], [yes])
fi
+# Window title plugin.
+#--------------------------
+AC_ARG_ENABLE([window-title-plugin], AC_HELP_STRING([--disable-window-title-plugin], [Don't build the window title plugin]),
+ [ac_window_title_plugin=$enableval], [ac_window_title_plugin=yes])
+AC_MSG_CHECKING([whether to build the window title plugin])
+AM_CONDITIONAL([WINDOW_TITLE_PLUGIN], [test x"$ac_window_title_plugin" = x"yes"])
+AC_MSG_RESULT([$ac_window_title_plugin])
+
#=======================================================#
# Check for debugging support #
#=======================================================#
@@ -174,6 +177,7 @@
plugins/Makefile
plugins/properties/Makefile
plugins/tray/Makefile
+plugins/window-title/Makefile
docs/Makefile
docs/plugin-api/version.xml
docs/plugin-api/Makefile
@@ -194,7 +198,8 @@
Plugins to build:
=================
Stream Properties: ${ac_properties_plugin}
- System Tray icon: ${ac_tray_plugin} (With notification $LIBNOTIFY_FOUND).
+ System Tray icon: ${ac_tray_plugin} (With notification $LIBNOTIFY_FOUND)
+ Window title: ${ac_window_title_plugin}
------------------------------------------------------
Configuration finished, type make to compile"
Modified: parole/trunk/data/interfaces/parole.ui
===================================================================
--- parole/trunk/data/interfaces/parole.ui 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/data/interfaces/parole.ui 2009-08-06 12:36:54 UTC (rev 7893)
@@ -559,7 +559,9 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="no_show_all">True</property>
+ <property name="tooltip_text" translatable="yes">Hide playlist</property>
<property name="image">image18</property>
+ <property name="relief">none</property>
<signal name="clicked" handler="parole_player_show_hide_playlist"/>
</object>
<packing>
@@ -643,8 +645,17 @@
</packing>
</child>
<child>
- <object class="GtkAlignment" id="alignment1">
+ <object class="GtkHSeparator" id="status-sep">
<property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="statusalign">
+ <property name="visible">True</property>
<property name="left_padding">5</property>
<property name="right_padding">5</property>
<child>
@@ -660,7 +671,7 @@
</object>
<packing>
<property name="expand">False</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
Modified: parole/trunk/data/interfaces/plugins.ui
===================================================================
--- parole/trunk/data/interfaces/plugins.ui 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/data/interfaces/plugins.ui 2009-08-06 12:36:54 UTC (rev 7893)
@@ -15,6 +15,7 @@
<object class="GtkDialog" id="dialog">
<property name="border_width">5</property>
<property name="title" translatable="yes">Parole Plugins Preferences</property>
+ <property name="window_position">center-on-parent</property>
<property name="default_width">300</property>
<property name="default_height">220</property>
<property name="destroy_with_parent">True</property>
@@ -83,125 +84,85 @@
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<child>
- <object class="GtkVBox" id="vbox2">
+ <object class="GtkTable" id="table1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">4</property>
+ <property name="row_spacing">4</property>
<child>
- <object class="GtkHBox" id="hbox5">
+ <object class="GtkLabel" id="label1">
<property name="visible">True</property>
- <property name="spacing">4</property>
- <child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Description:</b></property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="description">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="label" translatable="yes"><b>Description:</b></property>
+ <property name="use_markup">True</property>
</object>
<packing>
- <property name="position">0</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
- <object class="GtkHBox" id="hbox4">
+ <object class="GtkLabel" id="label2">
<property name="visible">True</property>
- <property name="spacing">4</property>
- <child>
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Author:</b></property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="author">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="label" translatable="yes"><b>Author:</b></property>
+ <property name="use_markup">True</property>
</object>
<packing>
- <property name="position">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
- <object class="GtkHBox" id="hbox3">
+ <object class="GtkLabel" id="description">
<property name="visible">True</property>
- <property name="spacing">4</property>
- <child>
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Copyright:</b></property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="copyright">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="use_markup">True</property>
</object>
<packing>
- <property name="position">2</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
</packing>
</child>
<child>
- <object class="GtkHBox" id="hbox2">
+ <object class="GtkLabel" id="author">
<property name="visible">True</property>
- <property name="spacing">4</property>
- <child>
- <object class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Site:</b></property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="site">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="use_markup">True</property>
</object>
<packing>
- <property name="position">3</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
</packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Site:</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
</child>
+ <child>
+ <object class="GtkHBox" id="site-box">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="position">0</property>
@@ -221,21 +182,12 @@
<signal name="clicked" handler="parole_plugins_manager_show_configure"/>
</object>
<packing>
+ <property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="about">
- <property name="label" translatable="yes">gtk-about</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="parole_plugins_manager_show_about"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
+ <placeholder/>
</child>
</object>
<packing>
Modified: parole/trunk/data/interfaces/save-playlist.ui
===================================================================
--- parole/trunk/data/interfaces/save-playlist.ui 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/data/interfaces/save-playlist.ui 2009-08-06 12:36:54 UTC (rev 7893)
@@ -21,6 +21,7 @@
</object>
<object class="GtkFileChooserDialog" id="filechooserdialog">
<property name="border_width">5</property>
+ <property name="window_position">center-on-parent</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<property name="action">save</property>
Modified: parole/trunk/parole/parole-about.c
===================================================================
--- parole/trunk/parole/parole-about.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-about.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -27,54 +27,53 @@
#include <string.h>
#include <libxfce4util/libxfce4util.h>
+#include <libxfcegui4/libxfcegui4.h>
#include "parole-about.h"
-static void
-parole_link_browser (GtkAboutDialog *about, const gchar *link, gpointer data)
-{
- gchar *cmd = g_strdup_printf ("%s %s", "xdg-open", link);
- g_spawn_command_line_async (cmd, NULL);
- g_free (cmd);
-}
-
-static void
-parole_link_mailto (GtkAboutDialog *about, const gchar *link, gpointer data)
-{
- gchar *cmd = g_strdup_printf( "%s %s", "xdg-email", link);
-
- g_spawn_command_line_async (cmd, NULL);
-
- g_free (cmd);
-}
-
void parole_about (const gchar *package)
{
- const gchar* authors[3] =
+ XfceAboutInfo *info;
+ GtkWidget *dialog;
+ gint x, y;
+ GdkPixbuf *icon;
+ guint n;
+
+ static const struct
{
- "Ali Abdallah <aliov at xfce.org>",
- NULL
- };
-
- static const gchar *documenters[] =
+ gchar *name, *email, *language;
+ }
+ translators[] =
{
- "Ali Abdallah <aliov at xfce.org>",
- NULL,
+ {"", "", "",},
};
-
- gtk_about_dialog_set_url_hook (parole_link_browser, NULL, NULL);
- gtk_about_dialog_set_email_hook (parole_link_mailto, NULL, NULL);
+ info = xfce_about_info_new ("Parole", VERSION, _("Parole Media Player"),
+ XFCE_COPYRIGHT_TEXT ("2009", "Ali Abdallah"),
+ XFCE_LICENSE_GPL);
+
+ xfce_about_info_set_homepage (info, "http://goodies.xfce.org/projects/applications/parole-media-player");
+ xfce_about_info_add_credit (info, "Ali Abdallah", "aliov at xfce.org", _("Author/Maintainer"));
+
+
+ for (n = 0; n < G_N_ELEMENTS (translators); ++n)
+ {
+ gchar *s;
+ s = g_strdup_printf (_("Translator (%s)"), translators[n].language);
+ xfce_about_info_add_credit (info, translators[n].name, translators[n].email, s);
+ g_free (s);
+ }
+
+ gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &x, &y);
+ icon = xfce_themed_icon_load ("parole", x);
- gtk_show_about_dialog (NULL,
- "authors", authors,
- "copyright", "Copyright \302\251 2009 Ali Abdallah",
- "destroy-with-parent", TRUE,
- "documenters", documenters,
- "license", XFCE_LICENSE_GPL,
- "name", package,
- "translator-credits", _("translator-credits"),
- "version", PACKAGE_VERSION,
- "website", "http://goodies.xfce.org",
- NULL);
+ dialog = xfce_about_dialog_new_with_values (NULL, info, icon);
+
+ if (icon)
+ g_object_unref (G_OBJECT (icon));
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ xfce_about_info_free (info);
}
Modified: parole/trunk/parole/parole-disc.c
===================================================================
--- parole/trunk/parole/parole-disc.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-disc.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -26,6 +26,15 @@
#include <stdlib.h>
#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+
+#if defined(__linux__)
+#include <linux/cdrom.h>
+#endif
+
#include <gio/gio.h>
#include <gtk/gtk.h>
@@ -179,6 +188,53 @@
}
static void
+parole_disc_check_cdrom (ParoleDisc *disc, GVolume *volume)
+{
+#if defined(__linux__)
+ gint fd;
+ gchar *device;
+ gint drive;
+
+ device = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
+ TRACE ("device : %s", device);
+
+ if ( (fd = open (device, O_RDONLY)) < 0 )
+ {
+ g_debug ("Failed to open device : %s", device);
+ disc->priv->needs_update = TRUE;
+ goto out;
+ }
+
+ if ( (drive = ioctl (fd, CDROM_DRIVE_STATUS, NULL)) )
+ {
+ if ( drive == CDS_DRIVE_NOT_READY )
+ {
+ g_print ("Drive :%s is not yet ready\n", device);
+ disc->priv->needs_update = TRUE;
+ goto out;
+ }
+ if ( drive == CDS_DISC_OK )
+ {
+ if ( (drive = ioctl (fd, CDROM_DISC_STATUS, NULL)) > 0 )
+ {
+ if ( drive == CDS_AUDIO || drive == CDS_MIXED )
+ {
+ MountData *data;
+ data = parole_disc_get_mount_data (disc, g_volume_get_name (volume), "cdda:/", PAROLE_DISC_CDDA);
+ g_ptr_array_add (disc->priv->array, data);
+ }
+ }
+ }
+ }
+
+ close (fd);
+out:
+ g_free (device);
+
+#endif /* if defined(__linux__) */
+}
+
+static void
parole_disc_add_drive (ParoleDisc *disc, GDrive *drive)
{
GList *list;
@@ -203,6 +259,11 @@
parole_disc_add_mount_to_menu (disc, mount);
g_object_unref (mount);
}
+ else
+ {
+ /* Could be a cdda?*/
+ parole_disc_check_cdrom (disc, volume);
+ }
}
g_list_foreach (list, (GFunc) g_object_unref, NULL);
@@ -219,6 +280,12 @@
list = g_volume_monitor_get_connected_drives (disc->priv->monitor);
len = g_list_length (list);
+
+ /*
+ * Set the update flag here because it can be set later to TRUE
+ * in case a device is not yet ready.
+ */
+ disc->priv->needs_update = FALSE;
for ( i = 0; i < len; i++)
{
@@ -231,7 +298,6 @@
g_list_foreach (list, (GFunc) g_object_unref, NULL);
g_list_free (list);
- disc->priv->needs_update = FALSE;
}
static void
@@ -246,6 +312,7 @@
{
guint i;
+ TRACE ("Changed");
for ( i = 0 ; i < disc->priv->array->len; i++)
{
MountData *data;
@@ -304,6 +371,12 @@
g_signal_connect (G_OBJECT (disc->priv->monitor), "mount-removed",
G_CALLBACK (parole_disc_monitor_changed_cb), disc);
+ g_signal_connect (G_OBJECT (disc->priv->monitor), "drive-disconnected",
+ G_CALLBACK (parole_disc_monitor_changed_cb), disc);
+
+ g_signal_connect (G_OBJECT (disc->priv->monitor), "drive-eject-button",
+ G_CALLBACK (parole_disc_monitor_changed_cb), disc);
+
disc->priv->media_menu = GTK_WIDGET (gtk_builder_get_object (builder, "media-menu"));
g_signal_connect (gtk_builder_get_object (builder, "media-menu-item"), "select",
Modified: parole/trunk/parole/parole-gst.c
===================================================================
--- parole/trunk/parole/parole-gst.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-gst.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -55,9 +55,12 @@
static void parole_gst_change_state (ParoleGst *gst,
GstState new);
+
+static void parole_gst_terminate_internal (ParoleGst *gst,
+ gboolean fade_sound);
static void parole_gst_seek_cdda_track (ParoleGst *gst,
- gint track) G_GNUC_UNUSED;
+ gint track);
struct ParoleGstPrivate
{
@@ -83,6 +86,7 @@
gboolean update_color_balance;
ParoleAspectRatio aspect_ratio;
+ gulong state_change_id;
/*
* xvimage sink has brightness+hue+aturation+contrast.
@@ -565,29 +569,6 @@
}
static void
-parole_gst_query_cdda_tracks (ParoleGst *gst)
-{
- GstFormat format;
- gint64 duration;
- gint tracks;
-
- format = gst_format_get_by_nick ("track");
-
- if ( format != GST_FORMAT_UNDEFINED )
- {
- gst_element_query_duration (gst->priv->playbin, &format, &duration);
-
- tracks = (gint) duration;
-
- TRACE ("CDDA source has %d tacks", tracks);
-
- g_object_set (G_OBJECT (gst->priv->stream),
- "num-tracks", tracks,
- NULL);
- }
-}
-
-static void
parole_gst_query_duration (ParoleGst *gst)
{
ParoleMediaType media_type;
@@ -601,9 +582,6 @@
"media-type", &media_type,
NULL);
- if ( media_type == PAROLE_MEDIA_TYPE_CDDA )
- parole_gst_query_cdda_tracks (gst);
-
gst_time = GST_FORMAT_TIME;
gst_element_query_duration (gst->priv->playbin,
@@ -718,6 +696,9 @@
pad = GST_PAD (object);
+ if ( !GST_IS_PAD (pad) || !GST_PAD_CAPS (pad) )
+ return;
+
st = gst_caps_get_structure (GST_PAD_CAPS (pad), 0);
if ( st )
@@ -735,7 +716,7 @@
{
num = gst_value_get_fraction_numerator (value),
den = gst_value_get_fraction_denominator (value);
- TRACE ("FIXME: Use these value num=%d den=%d \n", num, den);
+ TRACE ("FIXME: Use these values num=%d den=%d \n", num, den);
}
parole_gst_get_video_output_size (gst, &width, &height);
@@ -780,7 +761,7 @@
if ( pad )
{
- if ( GST_PAD_CAPS (pad) )
+ if ( GST_IS_PAD (pad) && GST_PAD_CAPS (pad) )
{
parole_gst_get_pad_capabilities (G_OBJECT (pad), NULL, gst);
}
@@ -862,7 +843,11 @@
parole_gst_tick (gst);
if ( gst->priv->target == new )
+ {
parole_gst_set_window_cursor (GTK_WIDGET (gst)->window, NULL);
+ if ( gst->priv->state_change_id != 0 )
+ g_source_remove (gst->priv->state_change_id);
+ }
switch (gst->priv->state)
{
@@ -891,6 +876,7 @@
gst->priv->stream, PAROLE_MEDIA_STATE_PAUSED);
break;
case GST_STATE_READY:
+ gst->priv->buffering = FALSE;
if ( gst->priv->update_vis)
parole_gst_update_vis (gst);
@@ -913,6 +899,7 @@
}
break;
case GST_STATE_NULL:
+ gst->priv->buffering = FALSE;
gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0,
gst->priv->stream, PAROLE_MEDIA_STATE_STOPPED);
@@ -1086,7 +1073,7 @@
"track", ¤t_track,
NULL);
- TRACE ("------------------Current track %d Number of tracks %d", current_track, num_tracks);
+ TRACE ("Current track %d Number of tracks %d", current_track, num_tracks);
if ( num_tracks != current_track )
{
parole_gst_seek_cdda_track (gst, current_track);
@@ -1462,7 +1449,66 @@
return type;
}
+static gboolean
+parole_gst_check_state_change_timeout (gpointer data)
+{
+ ParoleGst *gst;
+
+ gst = PAROLE_GST (data);
+
+ TRACE ("target =%d current state=%d", gst->priv->target, gst->priv->state);
+
+ if ( gst->priv->state != gst->priv->target )
+ {
+ gboolean ret_val =
+ xfce_confirm (_("The stream is tacking too much time to load"), GTK_STOCK_OK, _("Stop"));
+
+ if ( ret_val )
+ {
+ parole_gst_terminate_internal (gst, FALSE);
+ gst->priv->state_change_id = 0;
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
static void
+parole_gst_terminate_internal (ParoleGst *gst, gboolean fade_sound)
+{
+ g_mutex_lock (gst->priv->lock);
+
+ parole_stream_init_properties (gst->priv->stream);
+ gst->priv->target = GST_STATE_NULL;
+
+ g_mutex_unlock (gst->priv->lock);
+
+ parole_window_busy_cursor (GTK_WIDGET (gst)->window);
+
+ if ( fade_sound && gst->priv->state == GST_STATE_PLAYING )
+ {
+ gdouble volume;
+ gdouble step;
+ volume = parole_gst_get_volume (gst);
+ /*
+ * Like amarok, reduce the sound slowley then exit.
+ */
+ if ( volume != 0 )
+ {
+ while ( volume > 0 )
+ {
+ step = volume - volume / 10;
+ parole_gst_set_volume (gst, step < 0.01 ? 0 : step);
+ volume = parole_gst_get_volume (gst);
+ g_usleep (35000);
+ }
+ }
+ }
+
+ parole_gst_change_state (gst, GST_STATE_NULL);
+}
+
+static void
parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
{
if ( !g_strcmp0 ("vis-enabled", spec->name) || !g_strcmp0 ("vis-name", spec->name) )
@@ -1581,6 +1627,7 @@
gst->priv->vis_sink = NULL;
gst->priv->buffering = FALSE;
gst->priv->update_color_balance = TRUE;
+ gst->priv->state_change_id = 0;
gst->priv->conf = parole_conf_new ();
@@ -1628,17 +1675,20 @@
g_mutex_lock (gst->priv->lock);
gst->priv->target = GST_STATE_PLAYING;
-
parole_stream_init_properties (gst->priv->stream);
-
g_object_set (G_OBJECT (gst->priv->stream),
"uri", uri,
NULL);
g_mutex_unlock (gst->priv->lock);
+ if ( gst->priv->state_change_id == 0 )
+ gst->priv->state_change_id = g_timeout_add_seconds (20,
+ (GSourceFunc) parole_gst_check_state_change_timeout,
+ gst);
+
parole_window_busy_cursor (GTK_WIDGET (gst)->window);
-
+
if ( gst->priv->state < GST_STATE_PAUSED )
parole_gst_play_file_internal (gst);
else
@@ -1685,35 +1735,7 @@
void parole_gst_terminate (ParoleGst *gst)
{
- g_mutex_lock (gst->priv->lock);
-
- parole_stream_init_properties (gst->priv->stream);
- gst->priv->target = GST_STATE_NULL;
-
- g_mutex_unlock (gst->priv->lock);
-
- parole_window_busy_cursor (GTK_WIDGET (gst)->window);
-
- if ( gst->priv->state == GST_STATE_PLAYING )
- {
- gdouble volume;
- gdouble step;
- volume = parole_gst_get_volume (gst);
- /*
- * Like amarok, reduce the sound slowley then exit.
- */
- if ( volume != 0 )
- {
- while ( volume > 0 )
- {
- step = volume - volume / 10;
- parole_gst_set_volume (gst, step < 0.01 ? 0 : step);
- volume = parole_gst_get_volume (gst);
- g_usleep (35000);
- }
- }
- }
- parole_gst_change_state (gst, GST_STATE_NULL);
+ parole_gst_terminate_internal (gst, TRUE);
}
void parole_gst_seek (ParoleGst *gst, gdouble pos)
@@ -1722,7 +1744,6 @@
gint64 absolute_duration;
gdouble duration;
gboolean seekable;
- gboolean ret;
TRACE ("Seeking");
@@ -1740,17 +1761,12 @@
seek = (gint64) (pos * absolute_duration) / duration;
- ret = gst_element_seek (gst->priv->playbin,
- 1.0,
- GST_FORMAT_TIME,
- GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_FLUSH,
- GST_SEEK_TYPE_SET, seek,
- GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
-
- if ( !ret )
- {
- g_warning ("Failed to seek element");
- }
+ g_warn_if_fail ( gst_element_seek (gst->priv->playbin,
+ 1.0,
+ GST_FORMAT_TIME,
+ GST_SEEK_FLAG_KEY_UNIT | GST_SEEK_FLAG_FLUSH,
+ GST_SEEK_TYPE_SET, seek,
+ GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE));
}
void parole_gst_set_volume (ParoleGst *gst, gdouble value)
Modified: parole/trunk/parole/parole-mediachooser.c
===================================================================
--- parole/trunk/parole/parole-mediachooser.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-mediachooser.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -220,7 +220,8 @@
if ( parent )
gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (parent));
-
+
+ gtk_window_set_position (GTK_WINDOW (chooser), GTK_WIN_POS_CENTER_ON_PARENT);
parole_media_chooser_open_internal (GTK_WIDGET (chooser));
gtk_window_set_default_size (GTK_WINDOW (chooser), 680, 480);
Modified: parole/trunk/parole/parole-module.c
===================================================================
--- parole/trunk/parole/parole-module.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-module.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -69,6 +69,11 @@
g_module_close (module->mod);
module->constructor = NULL;
+
+ if ( module->desc )
+ {
+ g_free (module->desc);
+ }
}
static void
Modified: parole/trunk/parole/parole-open-location.c
===================================================================
--- parole/trunk/parole/parole-open-location.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-open-location.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -154,12 +154,22 @@
G_OBJECT_CLASS (parole_open_location_parent_class)->finalize (object);
}
+static void
+parole_open_location_clear_history (GtkTreeModel *model)
+{
+ parole_clear_history_file ();
+ gtk_list_store_clear (GTK_LIST_STORE (model));
+}
+
GtkWidget *parole_open_location (GtkWidget *parent)
{
GtkEntryCompletion *cmpl;
GtkTreeModel *model;
GtkWidget *label;
+ GtkWidget *clear;
+ GtkWidget *img;
GtkWidget *vbox;
+ GtkWidget *hbox;
ParoleOpenLocation *self = NULL;
@@ -169,33 +179,51 @@
gtk_window_set_transient_for (GTK_WINDOW (self), GTK_WINDOW (parent));
gtk_window_set_title (GTK_WINDOW (self), _("Open location..."));
+ gtk_window_set_default_size (GTK_WINDOW (self), 360, 40);
+ gtk_window_set_position (GTK_WINDOW (self), GTK_WIN_POS_CENTER_ON_PARENT);
- label = gtk_label_new (_("Open location of media file or live stream"));
+ label = gtk_label_new (NULL);
+ gtk_label_set_markup (GTK_LABEL (label), _("<b>Open location of media file or live stream:</b>"));
self->priv->entry = gtk_entry_new ();
model = parole_open_location_get_completion_model ();
gtk_entry_set_activates_default (GTK_ENTRY (self->priv->entry), TRUE);
- cmpl = gtk_entry_completion_new();
+ cmpl = gtk_entry_completion_new ();
gtk_entry_set_completion (GTK_ENTRY (self->priv->entry), cmpl);
gtk_entry_completion_set_model (cmpl, model);
+
gtk_entry_completion_set_text_column (cmpl, 0);
gtk_entry_completion_set_match_func (cmpl,
(GtkEntryCompletionMatchFunc) parole_open_location_match,
model,
NULL);
+ img = gtk_image_new_from_stock (GTK_STOCK_CLEAR, GTK_ICON_SIZE_BUTTON);
+
+ clear = gtk_button_new_with_label (_("Clear history"));
+ g_signal_connect_swapped (clear, "clicked",
+ G_CALLBACK (parole_open_location_clear_history), model);
+
+ g_object_set (G_OBJECT (clear),
+ "image", img,
+ NULL);
+
vbox = gtk_vbox_new (TRUE, 4);
+ hbox = gtk_hbox_new (FALSE, 8);
gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), self->priv->entry, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), self->priv->entry, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), clear, FALSE, FALSE, 0);
+
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (self)->vbox),
vbox,
TRUE,
TRUE,
- 0);
+ 10);
gtk_dialog_add_buttons (GTK_DIALOG (self),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
Modified: parole/trunk/parole/parole-plugin.c
===================================================================
--- parole/trunk/parole/parole-plugin.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-plugin.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -56,12 +56,12 @@
gchar *title;
gchar *author;
gchar *desc;
+ gchar *site;
GtkWidget *widget;
gboolean packed;
gboolean configurable;
- gboolean show_about;
/* sig id's*/
gulong gst_sig1;
@@ -76,8 +76,8 @@
PROP_TITLE,
PROP_DESC,
PROP_AUTHOR,
- PROP_CONFIGURABLE,
- PROP_SHOW_ABOUT
+ PROP_SITE,
+ PROP_CONFIGURABLE
};
enum
@@ -88,7 +88,6 @@
BUFFERING,
FREE_DATA,
CONFIGURE,
- ABOUT,
LAST_SIGNAL
};
@@ -139,7 +138,7 @@
* @stream: a #ParoleStream.
* @state: the new state.
*
- * Since: 0.1
+ * Since: 0.2
**/
signals[STATE_CHANGED] =
g_signal_new ("state-changed",
@@ -156,7 +155,7 @@
* @plugin: the object which received the signal.
* @stream: a #ParoleStream.
*
- * Since: 0.1
+ * Since: 0.2
**/
signals[TAG_MESSAGE] =
g_signal_new ("tag-message",
@@ -172,7 +171,7 @@
* @plugin: the object which received the signal.
* @stream: a #ParoleStream.
*
- * Since: 0.1
+ * Since: 0.2
**/
signals[PROGRESSED] =
g_signal_new ("progressed",
@@ -189,7 +188,7 @@
* @plugin: the object which received the signal.
* @stream: a #ParoleStream.
*
- * Since: 0.1
+ * Since: 0.2
**/
signals[BUFFERING] =
g_signal_new ("buffering",
@@ -209,7 +208,7 @@
* any dynamiclly allocated memory should be freed in this signal
* handler.
*
- * Since: 0.1
+ * Since: 0.2
**/
signals [FREE_DATA] =
g_signal_new ("free-data",
@@ -227,7 +226,7 @@
* Emitted when the user click the configure button in the plugins
* configuration dialog.
*
- * Since: 0.1
+ * Since: 0.2
**/
signals [CONFIGURE] =
g_signal_new ("configure",
@@ -239,29 +238,11 @@
G_TYPE_NONE, 1, GTK_TYPE_WIDGET);
/**
- * ParolePlugin::configure:
- * @plugin: the object which received the signal.
- *
- * Emitted when the user click the configure button in the plugins
- * configuration dialog.
- *
- * Since: 0.1
- **/
- signals [ABOUT] =
- g_signal_new ("about",
- PAROLE_TYPE_PLUGIN,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(ParolePluginClass, about),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, GTK_TYPE_WIDGET);
-
- /**
* ParolePlugin:title:
*
* Title to display for this plugin.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_TITLE,
@@ -276,7 +257,7 @@
*
* Description of the plugin.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_DESC,
@@ -291,7 +272,7 @@
*
* Author of the plugin.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_AUTHOR,
@@ -300,33 +281,35 @@
NULL,
G_PARAM_READWRITE|
G_PARAM_CONSTRUCT_ONLY));
-
+
/**
- * ParolePlugin:configurable:
+ * ParolePlugin:site:
*
+ * The website of the plugin.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
- PROP_CONFIGURABLE,
- g_param_spec_boolean ("configurable",
- NULL, NULL,
- FALSE,
- G_PARAM_READWRITE));
-
+ PROP_SITE,
+ g_param_spec_string ("site",
+ NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE|
+ G_PARAM_CONSTRUCT_ONLY));
+
/**
- * ParolePlugin:show-about:
+ * ParolePlugin:configurable:
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
- PROP_SHOW_ABOUT,
- g_param_spec_boolean ("show-about",
+ PROP_CONFIGURABLE,
+ g_param_spec_boolean ("configurable",
NULL, NULL,
FALSE,
G_PARAM_READWRITE));
-
+
g_type_class_add_private (klass, sizeof (ParolePluginPrivate));
}
@@ -338,6 +321,9 @@
priv = PAROLE_PLUGIN_GET_PRIVATE (plugin);
priv->title = NULL;
+ priv->desc = NULL;
+ priv->author = NULL;
+ priv->site = NULL;
priv->packed = FALSE;
priv->widget = NULL;
priv->configurable = FALSE;
@@ -376,12 +362,12 @@
case PROP_AUTHOR:
PAROLE_PLUGIN_GET_PRIVATE (plugin)->author = g_value_dup_string (value);
break;
+ case PROP_SITE:
+ PAROLE_PLUGIN_GET_PRIVATE (plugin)->site = g_value_dup_string (value);
+ break;
case PROP_CONFIGURABLE:
PAROLE_PLUGIN_GET_PRIVATE (plugin)->configurable = g_value_get_boolean (value);
break;
- case PROP_SHOW_ABOUT:
- PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about = g_value_get_boolean (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -408,12 +394,12 @@
case PROP_AUTHOR:
g_value_set_string (value, PAROLE_PLUGIN_GET_PRIVATE (plugin)->author);
break;
+ case PROP_SITE:
+ g_value_set_string (value, PAROLE_PLUGIN_GET_PRIVATE (plugin)->site);
+ break;
case PROP_CONFIGURABLE:
g_value_set_boolean (value, PAROLE_PLUGIN_GET_PRIVATE (plugin)->configurable);
break;
- case PROP_SHOW_ABOUT:
- g_value_set_boolean (value, PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -448,6 +434,15 @@
if ( priv->title )
g_free (priv->title);
+ if ( priv->desc )
+ g_free (priv->desc);
+
+ if ( priv->author )
+ g_free (priv->author);
+
+ if ( priv->site )
+ g_free (priv->site);
+
if ( priv->packed && GTK_IS_WIDGET (priv->widget))
gtk_widget_destroy (GTK_WIDGET (priv->widget));
@@ -464,7 +459,7 @@
* Returns: A new #ParolePlugin object.
**/
ParolePlugin *
-parole_plugin_new (const gchar *title, const gchar *desc, const gchar *author)
+parole_plugin_new (const gchar *title, const gchar *desc, const gchar *author, const gchar *website)
{
ParolePlugin *plugin = NULL;
@@ -472,6 +467,7 @@
"title", title,
"description", desc,
"author", author,
+ "site", website,
NULL);
return plugin;
}
@@ -578,35 +574,6 @@
}
/**
- * parole_plugin_get_show_about:
- * @plugin: a #ParolePlugin.
- *
- *
- *
- * Returns:
- **/
-gboolean parole_plugin_get_show_about (ParolePlugin *plugin)
-{
- g_return_val_if_fail (PAROLE_IS_PLUGIN (plugin), FALSE);
-
- return PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about;
-}
-
-/**
- * parole_plugin_set_show_about:
- * @plugin: a #ParolePlugin.
- *
- *
- *
- **/
-void parole_plugin_set_show_about (ParolePlugin *plugin, gboolean show_about)
-{
- g_return_if_fail (PAROLE_IS_PLUGIN (plugin));
-
- PAROLE_PLUGIN_GET_PRIVATE (plugin)->show_about = show_about;
-}
-
-/**
* parole_plugin_play_uri:
* @plugin: a #ParolePlugin.
* @uri: uri of the file to play.
Modified: parole/trunk/parole/parole-plugin.h
===================================================================
--- parole/trunk/parole/parole-plugin.h 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-plugin.h 2009-08-06 12:36:54 UTC (rev 7893)
@@ -80,16 +80,14 @@
void (*configure) (ParolePlugin *plugin,
GtkWidget *widget);
-
- void (*about) (ParolePlugin *plugin,
- GtkWidget *widget);
};
GType parole_plugin_get_type (void) G_GNUC_CONST;
ParolePlugin *parole_plugin_new (const gchar *title,
const gchar *desc,
- const gchar *author);
+ const gchar *author,
+ const gchar *website);
GtkWidget *parole_plugin_get_main_window (ParolePlugin *plugin);
@@ -106,9 +104,6 @@
gboolean parole_plugin_get_show_about (ParolePlugin *plugin);
-void parole_plugin_set_show_about (ParolePlugin *plugin,
- gboolean show_about);
-
gboolean parole_plugin_play_uri (ParolePlugin *plugin,
const gchar *uri);
Modified: parole/trunk/parole/parole-plugins-manager.c
===================================================================
--- parole/trunk/parole/parole-plugins-manager.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-plugins-manager.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -46,9 +46,7 @@
GtkListStore *store;
GtkWidget *desc;
GtkWidget *author;
- GtkWidget *copyright;
GtkWidget *site;
- GtkWidget *about;
GtkWidget *configure;
} PrefData;
@@ -133,18 +131,6 @@
g_signal_emit_by_name (G_OBJECT (module->plugin), "configure", pref->window);
}
-void parole_plugins_manager_show_about (GtkButton *button, PrefData *pref)
-{
- ParoleModule *module;
-
- module = parole_plugins_manager_get_selected_module (pref);
-
- if ( !module )
- return;
-
- g_signal_emit_by_name (G_OBJECT (module->plugin), "about", pref->window);
-}
-
static void
parole_plugins_manager_save_rc (gchar *filename, gboolean active)
{
@@ -201,6 +187,7 @@
path = gtk_tree_path_new_from_string (path_str);
gtk_tree_model_get_iter (GTK_TREE_MODEL (pref->store), &iter, path);
+
gtk_tree_model_get (GTK_TREE_MODEL (pref->store), &iter,
COL_ACTIVE, &active,
COL_DATA, &module,
@@ -223,25 +210,36 @@
PrefData *pref)
{
ParoleModule *module;
- gboolean configurable = FALSE, show_about = FALSE;
+ gboolean configurable = FALSE;
+#if GTK_CHECK_VERSION (2, 18, 0)
+ gchar *site_text;
+#endif
module = parole_plugins_manager_get_selected_module (pref);
if ( !module )
return;
- gtk_label_set_text (GTK_LABEL (pref->desc), module->desc->desc);
- gtk_label_set_text (GTK_LABEL (pref->author), module->desc->author);
+ gtk_label_set_markup (GTK_LABEL (pref->desc), module->desc->desc);
+ gtk_label_set_markup (GTK_LABEL (pref->author), module->desc->author);
+#if GTK_CHECK_VERSION (2, 18, 0)
+ site_text = g_strdup_printf ("<a href=\"%s\">%s</a>", module->desc->site, _("Visit Website"));
+ gtk_label_set_markup (GTK_LABEL (pref->site), site_text);
+ g_free (site_text);
+#else
+ gtk_link_button_set_uri (GTK_LINK_BUTTON (pref->site), module->desc->site);
+#endif
+
+ gtk_widget_set_tooltip_text (pref->site, module->desc->site);
+
if ( module->enabled )
{
g_object_get (G_OBJECT (module->plugin),
"configurable", &configurable,
- "show-about", &show_about,
NULL);
}
- gtk_widget_set_sensitive (pref->about, show_about);
gtk_widget_set_sensitive (pref->configure, configurable);
}
@@ -260,6 +258,7 @@
parole_plugins_manager_show_plugins_pref (GtkWidget *widget, ParolePluginsManager *manager)
{
GtkBuilder *builder;
+ GtkWidget *site_box;
GtkTreeSelection *sel;
GtkTreePath *path;
GtkTreeIter iter;
@@ -278,13 +277,20 @@
pref->desc = GTK_WIDGET (gtk_builder_get_object (builder, "description"));
pref->author = GTK_WIDGET (gtk_builder_get_object (builder, "author"));
- pref->copyright = GTK_WIDGET (gtk_builder_get_object (builder, "copyright"));
- pref->site = GTK_WIDGET (gtk_builder_get_object (builder, "site"));
+ site_box = GTK_WIDGET (gtk_builder_get_object (builder, "site-box"));
- pref->about = GTK_WIDGET (gtk_builder_get_object (builder, "about"));
+#if GTK_CHECK_VERSION (2, 18, 0)
+ pref->site = gtk_label_new (NULL);
+#else
+ pref->site = gtk_link_button_new_with_label (" ", _("Visite Website"));
+#endif
+
+ gtk_box_pack_start (GTK_BOX (site_box), pref->site, FALSE, FALSE, 0);
+
pref->configure = GTK_WIDGET (gtk_builder_get_object (builder, "configure"));
- gtk_window_set_transient_for (GTK_WINDOW (pref->window), GTK_WINDOW (gtk_widget_get_toplevel (manager->priv->main_nt)));
+ gtk_window_set_transient_for (GTK_WINDOW (pref->window),
+ GTK_WINDOW (gtk_widget_get_toplevel (manager->priv->main_nt)));
for ( i = 0; i < manager->priv->array->len; i++)
{
@@ -303,7 +309,6 @@
}
gtk_builder_connect_signals (builder, pref);
- gtk_widget_show_all (pref->window);
g_object_unref (builder);
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (pref->view));
@@ -313,6 +318,8 @@
gtk_tree_selection_select_path (sel, path);
gtk_tree_view_set_cursor (GTK_TREE_VIEW (pref->view), path, NULL, FALSE);
gtk_tree_path_free (path);
+
+ gtk_widget_show_all (pref->window);
}
static void
Modified: parole/trunk/parole/parole-statusbar.c
===================================================================
--- parole/trunk/parole/parole-statusbar.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-statusbar.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -44,6 +44,7 @@
GtkWidget *progress;
GtkWidget *label_text;
GtkWidget *label_duration;
+ GtkWidget *sep;
gdouble duration;
gdouble pos;
@@ -241,7 +242,7 @@
GtkBuilder *builder;
statusbar->priv = PAROLE_STATUSBAR_GET_PRIVATE (statusbar);
- statusbar->priv->plugin = parole_plugin_new (NULL, NULL, NULL);
+ statusbar->priv->plugin = parole_plugin_new (NULL, NULL, NULL, NULL);
statusbar->priv->duration = 0;
statusbar->priv->pos = 0;
@@ -250,6 +251,8 @@
box = GTK_WIDGET (gtk_builder_get_object (builder, "statusbox"));
+ statusbar->priv->sep = GTK_WIDGET (gtk_builder_get_object (builder, "status-sep"));
+
statusbar->priv->progress = gtk_progress_bar_new ();
gtk_widget_hide (statusbar->priv->progress);
statusbar->priv->label_text = gtk_label_new (NULL);
@@ -305,5 +308,14 @@
void parole_statusbar_set_visible (ParoleStatusbar *bar, gboolean visible)
{
- visible ? gtk_widget_show (bar->priv->box) : gtk_widget_hide (bar->priv->box);
+ if ( visible )
+ {
+ gtk_widget_show (bar->priv->sep);
+ gtk_widget_show (bar->priv->box);
+ }
+ else
+ {
+ gtk_widget_hide (bar->priv->sep);
+ gtk_widget_hide (bar->priv->box);
+ }
}
Modified: parole/trunk/parole/parole-stream.c
===================================================================
--- parole/trunk/parole/parole-stream.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-stream.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -295,7 +295,7 @@
*
* Currently loaded uri.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_URI,
@@ -309,7 +309,7 @@
*
* Whether the stream has audio.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_HAS_AUDIO,
@@ -322,7 +322,7 @@
*
* Whether the stream has video.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_HAS_VIDEO,
@@ -336,7 +336,7 @@
*
* Whether the stream is a live stream.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_LIVE,
@@ -350,7 +350,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_MEDIA_TYPE,
@@ -366,7 +366,7 @@
* Whether the stream is seekable, for example live
* streams are not seekable.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_SEEKABLE,
@@ -380,7 +380,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_DURATION,
@@ -395,7 +395,7 @@
*
* Whether tags information are available on the current stream.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_SEEKABLE,
@@ -409,7 +409,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_ABSOLUTE_DURATION,
@@ -424,7 +424,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_VIDEO_WIDTH,
@@ -439,7 +439,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_VIDEO_HEIGHT,
@@ -455,7 +455,7 @@
* Number of tracks in the cdda source, only valid if
* ParoleStream:media-type: is PAROLE_MEDIA_TYPE_CDDA.
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_TRACKS,
@@ -469,7 +469,7 @@
* ParoleStream:track:
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_TRACK,
@@ -483,7 +483,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_TITLE,
@@ -498,7 +498,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_ARTIST,
@@ -512,7 +512,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_YEAR,
@@ -526,7 +526,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_ALBUM,
@@ -540,7 +540,7 @@
*
*
*
- * Since: 0.1
+ * Since: 0.2
**/
g_object_class_install_property (object_class,
PROP_COMMENT,
Modified: parole/trunk/parole/parole-vis.h
===================================================================
--- parole/trunk/parole/parole-vis.h 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole-vis.h 2009-08-06 12:36:54 UTC (rev 7893)
@@ -26,6 +26,4 @@
GHashTable *parole_vis_get_plugins (void);
-//GstElement *parole_vis_get_for_name (void)
-
#endif /* __PAROLE_VIS_H_ */
Modified: parole/trunk/parole/parole.h
===================================================================
--- parole/trunk/parole/parole.h 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/parole/parole.h 2009-08-06 12:36:54 UTC (rev 7893)
@@ -25,6 +25,7 @@
gchar *title;
gchar *desc;
gchar *author;
+ gchar *site;
} ParolePluginDesc;
@@ -48,24 +49,27 @@
* @desc: description.
* @author: author.
*
+ * Since: 0.2
+ *
**/
-#define PAROLE_PLUGIN_CONSTRUCT(construct, p_title, p_desc, p_author) \
- G_MODULE_EXPORT ParolePluginDesc *parole_plugin_get_description (void) \
- { \
- ParolePluginDesc *plugin_desc; \
- plugin_desc = g_new0 (ParolePluginDesc, 1); \
- plugin_desc->author = (p_author); \
- plugin_desc->title = (p_title); \
- plugin_desc->desc = (p_desc); \
- return plugin_desc; \
- } \
- G_MODULE_EXPORT ParolePlugin *parole_plugin_constructor (void) \
- { \
- ParolePlugin *plugin; \
- ParolePluginConstruct constructor \
- = (ParolePluginConstruct) construct; \
- \
- plugin = parole_plugin_new (p_title, p_desc, p_author); \
- constructor (plugin); \
- return plugin; \
+#define PAROLE_PLUGIN_CONSTRUCT(construct, p_title, p_desc, p_author, p_site) \
+ G_MODULE_EXPORT ParolePluginDesc *parole_plugin_get_description (void) \
+ { \
+ ParolePluginDesc *plugin_desc; \
+ plugin_desc = g_new0 (ParolePluginDesc, 1); \
+ plugin_desc->author = (p_author); \
+ plugin_desc->title = (p_title); \
+ plugin_desc->desc = (p_desc); \
+ plugin_desc->site = (p_site); \
+ return plugin_desc; \
+ } \
+ G_MODULE_EXPORT ParolePlugin *parole_plugin_constructor (void) \
+ { \
+ ParolePlugin *plugin; \
+ ParolePluginConstruct constructor \
+ = (ParolePluginConstruct) construct; \
+ \
+ plugin = parole_plugin_new (p_title, p_desc, p_author, p_site); \
+ constructor (plugin); \
+ return plugin; \
}
Modified: parole/trunk/plugins/Makefile.am
===================================================================
--- parole/trunk/plugins/Makefile.am 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/plugins/Makefile.am 2009-08-06 12:36:54 UTC (rev 7893)
@@ -6,4 +6,8 @@
if PAROLE_TRAY_PLUGIN
SUBDIRS+=tray
+endif
+
+if WINDOW_TITLE_PLUGIN
+SUBDIRS+=window-title
endif
\ No newline at end of file
Modified: parole/trunk/plugins/properties/stream-properties.c
===================================================================
--- parole/trunk/plugins/properties/stream-properties.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/plugins/properties/stream-properties.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -287,4 +287,5 @@
PAROLE_PLUGIN_CONSTRUCT (construct, /* Construct function */
_("Properties"), /* Title */
_("Read media properties"), /* Description */
- "Ali Abdallah"); /* Author */
+ "Copyright \302\251 2009 Ali Abdallah aliov at xfce.org", /* Author */
+ "http://goodies.xfce.org/projects/applications/parole-media-player"); /* Site */
Modified: parole/trunk/plugins/tray/tray-icon.c
===================================================================
--- parole/trunk/plugins/tray/tray-icon.c 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/plugins/tray/tray-icon.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -162,7 +162,7 @@
if ( GTK_WIDGET_VISIBLE (data->window) )
gtk_widget_hide (data->window);
else
- gtk_window_present (GTK_WINDOW (data->window));
+ gtk_widget_show (data->window);
}
#ifdef HAVE_LIBNOTIFY
@@ -426,4 +426,5 @@
PAROLE_PLUGIN_CONSTRUCT (construct, /* Construct function */
_("Tray icon"), /* Title */
_("Show icon in the system tray"), /* Description */
- "Ali Abdallah"); /* Author */
+ "Copyright \302\251 2009 Ali Abdallah aliov at xfce.org", /* Author */
+ "http://goodies.xfce.org/projects/applications/parole-media-player"); /* Site */
Added: parole/trunk/plugins/window-title/Makefile.am
===================================================================
--- parole/trunk/plugins/window-title/Makefile.am (rev 0)
+++ parole/trunk/plugins/window-title/Makefile.am 2009-08-06 12:36:54 UTC (rev 7893)
@@ -0,0 +1,25 @@
+INCLUDES = \
+ -I$(top_builddir) \
+ -I$(top_srcdir) \
+ -DG_LOG_DOMAIN=\"window_title\" \
+ -DLIBEXECDIR=\"$(libexecdir)\" \
+ -DPACKAGE_LOCALE_DIR=\"$(localedir)\"
+
+pluginsdir = \
+ $(libdir)/parole-$(PAROLE_VERSION_API)
+
+plugins_LTLIBRARIES = \
+ window-title.la
+
+window_title_la_SOURCES = \
+ window-title.c
+
+window_title_la_CFLAGS = \
+ $(PLATFORM_CFLAGS) \
+ $(GTK_CFLAGS)
+
+window_title_la_LDFLAGS = \
+ -avoid-version \
+ -export-dynamic \
+ -module \
+ $(PLATFORM_LDFLAGS)
Added: parole/trunk/plugins/window-title/window-title.c
===================================================================
--- parole/trunk/plugins/window-title/window-title.c (rev 0)
+++ parole/trunk/plugins/window-title/window-title.c 2009-08-06 12:36:54 UTC (rev 7893)
@@ -0,0 +1,106 @@
+/*
+ * * 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 <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <parole/parole.h>
+
+typedef struct
+{
+ GtkWidget *window;
+
+} PluginData;
+
+static void
+set_default_window_title (GtkWidget *window)
+{
+ gtk_window_set_title (GTK_WINDOW (window), _("Parole Media Player"));
+}
+
+static void
+set_stream_title (GtkWidget *window, const ParoleStream *stream)
+{
+ gchar *title = NULL;
+
+ g_object_get (G_OBJECT (stream),
+ "title", &title,
+ NULL);
+
+ if ( title )
+ {
+ gtk_window_set_title (GTK_WINDOW (window), title);
+ g_free (title);
+ }
+}
+
+static void
+state_changed_cb (ParolePlugin *plugin, const ParoleStream *stream, ParoleState state, PluginData *data)
+{
+ if ( state < PAROLE_STATE_PAUSED )
+ set_default_window_title (data->window);
+ else
+ set_stream_title (data->window, stream);
+}
+
+static void
+tag_message_cb (ParolePlugin *plugin, const ParoleStream *stream, PluginData *data)
+{
+ set_stream_title (data->window, stream);
+}
+
+static void
+free_data_cb (ParolePlugin *plugin, PluginData *data)
+{
+ if ( data->window && GTK_IS_WINDOW (data->window) )
+ set_default_window_title (data->window);
+ g_free (data);
+}
+
+G_MODULE_EXPORT static void
+construct (ParolePlugin *plugin)
+{
+ PluginData *data;
+
+ data = g_new0 (PluginData, 1);
+
+ data->window = parole_plugin_get_main_window (plugin);
+
+ g_signal_connect (plugin, "state_changed",
+ G_CALLBACK (state_changed_cb), data);
+
+ g_signal_connect (plugin, "tag-message",
+ G_CALLBACK (tag_message_cb), data);
+
+ g_signal_connect (plugin, "free-data",
+ G_CALLBACK (free_data_cb), data);
+}
+
+PAROLE_PLUGIN_CONSTRUCT (construct, /* Construct function */
+ _("Window title"), /* Title */
+ _("Set the main window name to the current\n"
+ " playing media name."), /* Description */
+ "Copyright \302\251 2009 Sarah Hijazi", /* Author */
+ "http://goodies.xfce.org/projects/applications/parole-media-player"); /* site */
Modified: parole/trunk/po/POTFILES.in
===================================================================
--- parole/trunk/po/POTFILES.in 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/po/POTFILES.in 2009-08-06 12:36:54 UTC (rev 7893)
@@ -18,5 +18,7 @@
parole/parole-disc.c
parole/parole-subtitle-encoding.c
parole/parole-open-location.c
+parole/parole-disc-menu.c
plugins/properties/stream-properties.c
plugins/tray/tray-icon.c
+plugins/window-title/window-title.c
Modified: parole/trunk/po/parole-media-player.pot
===================================================================
--- parole/trunk/po/parole-media-player.pot 2009-08-04 18:06:26 UTC (rev 7892)
+++ parole/trunk/po/parole-media-player.pot 2009-08-06 12:36:54 UTC (rev 7893)
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-31 23:30+0200\n"
+"POT-Creation-Date: 2009-08-06 14:27+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -44,76 +44,83 @@
msgid "DVD Menu"
msgstr ""
-#: ../data/interfaces/parole.ui.h:8
+#: ../data/interfaces/parole.ui.h:8 ../parole/parole-player.c:283
+msgid "Hide playlist"
+msgstr ""
+
+#: ../data/interfaces/parole.ui.h:9
msgid "Media player"
msgstr ""
-#: ../data/interfaces/parole.ui.h:9
+#: ../data/interfaces/parole.ui.h:10
msgid "Mute"
msgstr ""
-#: ../data/interfaces/parole.ui.h:10 ../parole/parole-player.c:991
+#: ../data/interfaces/parole.ui.h:11 ../parole/parole-player.c:992
+#: ../parole/parole-disc-menu.c:101
msgid "Next Chapter"
msgstr ""
-#: ../data/interfaces/parole.ui.h:11
+#: ../data/interfaces/parole.ui.h:12
msgid "None"
msgstr ""
-#: ../data/interfaces/parole.ui.h:12 ../data/desktop/parole.desktop.in.in.h:1
-#: ../parole/parole-player.c:220
+#: ../data/interfaces/parole.ui.h:13 ../data/desktop/parole.desktop.in.in.h:1
+#: ../parole/parole-player.c:220 ../parole/parole-about.c:51
+#: ../plugins/window-title/window-title.c:40
msgid "Parole Media Player"
msgstr ""
-#: ../data/interfaces/parole.ui.h:13
+#: ../data/interfaces/parole.ui.h:14
msgid "Plugins"
msgstr ""
-#: ../data/interfaces/parole.ui.h:14 ../parole/parole-player.c:1003
+#: ../data/interfaces/parole.ui.h:15 ../parole/parole-player.c:1004
+#: ../parole/parole-disc-menu.c:102
msgid "Previous Chapter"
msgstr ""
-#: ../data/interfaces/parole.ui.h:15
+#: ../data/interfaces/parole.ui.h:16
msgid "Repeat"
msgstr ""
-#: ../data/interfaces/parole.ui.h:16
+#: ../data/interfaces/parole.ui.h:17
msgid "Shuffle"
msgstr ""
-#: ../data/interfaces/parole.ui.h:17
+#: ../data/interfaces/parole.ui.h:18
msgid "Sound"
msgstr ""
-#: ../data/interfaces/parole.ui.h:18
+#: ../data/interfaces/parole.ui.h:19
msgid "Square"
msgstr ""
-#: ../data/interfaces/parole.ui.h:19
+#: ../data/interfaces/parole.ui.h:20
msgid "Volume Down"
msgstr ""
-#: ../data/interfaces/parole.ui.h:20
+#: ../data/interfaces/parole.ui.h:21
msgid "Volume Up"
msgstr ""
-#: ../data/interfaces/parole.ui.h:21
+#: ../data/interfaces/parole.ui.h:22
msgid "_Edit"
msgstr ""
-#: ../data/interfaces/parole.ui.h:22
+#: ../data/interfaces/parole.ui.h:23
msgid "_Help"
msgstr ""
-#: ../data/interfaces/parole.ui.h:23
+#: ../data/interfaces/parole.ui.h:24
msgid "_Media"
msgstr ""
-#: ../data/interfaces/parole.ui.h:24
+#: ../data/interfaces/parole.ui.h:25
msgid "_View"
msgstr ""
-#: ../data/interfaces/parole.ui.h:25
+#: ../data/interfaces/parole.ui.h:26
msgid "gtk-leave-fullscreen"
msgstr ""
@@ -122,30 +129,22 @@
msgstr ""
#: ../data/interfaces/plugins.ui.h:2
-msgid "<b>Copyright:</b>"
+msgid "<b>Description:</b>"
msgstr ""
#: ../data/interfaces/plugins.ui.h:3
-msgid "<b>Description:</b>"
+msgid "<b>Site:</b>"
msgstr ""
#: ../data/interfaces/plugins.ui.h:4
-msgid "<b>Site:</b>"
+msgid "Parole Plugins Preferences"
msgstr ""
#: ../data/interfaces/plugins.ui.h:5
-msgid "Parole Plugins Preferences"
+msgid "gtk-close"
msgstr ""
#: ../data/interfaces/plugins.ui.h:6
-msgid "gtk-about"
-msgstr ""
-
-#: ../data/interfaces/plugins.ui.h:7
-msgid "gtk-close"
-msgstr ""
-
-#: ../data/interfaces/plugins.ui.h:8
msgid "gtk-properties"
msgstr ""
@@ -247,16 +246,24 @@
msgid "Type '%s --help' for usage."
msgstr ""
-#: ../parole/parole-gst.c:1271
+#: ../parole/parole-gst.c:1258
msgid ""
"Unable to load playbin GStreamer plugin, check your GStreamer installation"
msgstr ""
-#: ../parole/parole-gst.c:1287
+#: ../parole/parole-gst.c:1274
msgid ""
"Unable to load video GStreamer plugin, check your GStreamer installation"
msgstr ""
+#: ../parole/parole-gst.c:1464
+msgid "The stream is tacking too much time to load"
+msgstr ""
+
+#: ../parole/parole-gst.c:1464
+msgid "Stop"
+msgstr ""
+
#: ../parole/parole-mediachooser.c:154
msgid "Add media files"
msgstr ""
@@ -265,44 +272,44 @@
msgid "Add"
msgstr ""
-#: ../parole/parole-medialist.c:381
+#: ../parole/parole-medialist.c:384
msgid "Error saving playlist file"
msgstr ""
-#: ../parole/parole-medialist.c:381
+#: ../parole/parole-medialist.c:384
msgid "Permission denied"
msgstr ""
-#: ../parole/parole-medialist.c:390
+#: ../parole/parole-medialist.c:393
msgid "Unknown playlist format, Please select a support playlist format"
msgstr ""
-#: ../parole/parole-medialist.c:456 ../parole/parole-player.c:1461
+#: ../parole/parole-medialist.c:459 ../parole/parole-player.c:1462
msgid "Playlist"
msgstr ""
-#: ../parole/parole-medialist.c:463
+#: ../parole/parole-medialist.c:466
msgid "M3U Playlists"
msgstr ""
-#: ../parole/parole-medialist.c:471
+#: ../parole/parole-medialist.c:474
msgid "PLS Playlists"
msgstr ""
-#: ../parole/parole-medialist.c:479
+#: ../parole/parole-medialist.c:482
msgid "Advanced Stream Redirector"
msgstr ""
-#: ../parole/parole-medialist.c:487
+#: ../parole/parole-medialist.c:490
msgid "Shareable Playlist"
msgstr ""
-#: ../parole/parole-medialist.c:788
-msgid "Media list"
+#: ../parole/parole-medialist.c:667
+msgid "Remember playlist"
msgstr ""
-#: ../parole/parole-player.c:283
-msgid "Hide playlist"
+#: ../parole/parole-medialist.c:819
+msgid "Media list"
msgstr ""
#: ../parole/parole-player.c:292
@@ -316,34 +323,34 @@
#.
#. * Next chapter menu item
#.
-#: ../parole/parole-player.c:991
+#: ../parole/parole-player.c:992 ../parole/parole-disc-menu.c:110
msgid "Next Track"
msgstr ""
#.
#. * Previous chapter menu item
#.
-#: ../parole/parole-player.c:1003
+#: ../parole/parole-player.c:1004 ../parole/parole-disc-menu.c:111
msgid "Previous Track"
msgstr ""
-#: ../parole/parole-statusbar.c:59
+#: ../parole/parole-statusbar.c:60
msgid "Buffering"
msgstr ""
-#: ../parole/parole-statusbar.c:76
+#: ../parole/parole-statusbar.c:77
msgid "Stopped"
msgstr ""
-#: ../parole/parole-statusbar.c:80
+#: ../parole/parole-statusbar.c:81
msgid "Finished"
msgstr ""
-#: ../parole/parole-statusbar.c:87 ../parole/parole-statusbar.c:95
+#: ../parole/parole-statusbar.c:88 ../parole/parole-statusbar.c:96
msgid "Paused"
msgstr ""
-#: ../parole/parole-statusbar.c:116
+#: ../parole/parole-statusbar.c:117
msgid "Live stream:"
msgstr ""
@@ -367,11 +374,16 @@
msgid "Playlist files"
msgstr ""
-#: ../parole/parole-about.c:76
-msgid "translator-credits"
+#: ../parole/parole-about.c:56
+msgid "Author/Maintainer"
msgstr ""
-#: ../parole/parole-disc.c:168
+#: ../parole/parole-about.c:62
+#, c-format
+msgid "Translator (%s)"
+msgstr ""
+
+#: ../parole/parole-disc.c:177
msgid "Play Disc"
msgstr ""
@@ -542,14 +554,22 @@
msgid "Vietnamese"
msgstr ""
-#: ../parole/parole-open-location.c:171
+#: ../parole/parole-open-location.c:181
msgid "Open location..."
msgstr ""
-#: ../parole/parole-open-location.c:173
-msgid "Open location of media file or live stream"
+#: ../parole/parole-open-location.c:186
+msgid "<b>Open location of media file or live stream:</b>"
msgstr ""
+#: ../parole/parole-open-location.c:205
+msgid "Clear history"
+msgstr ""
+
+#: ../parole/parole-disc-menu.c:118
+msgid "Playing Track"
+msgstr ""
+
#: ../plugins/properties/stream-properties.c:44
#: ../plugins/properties/stream-properties.c:45
#: ../plugins/properties/stream-properties.c:46
@@ -613,3 +633,15 @@
#: ../plugins/tray/tray-icon.c:428
msgid "Show icon in the system tray"
msgstr ""
+
+#. Construct function
+#: ../plugins/window-title/window-title.c:102
+msgid "Window title"
+msgstr ""
+
+#. Title
+#: ../plugins/window-title/window-title.c:103
+msgid ""
+"Set the main window name to the current\n"
+" playing media name."
+msgstr ""
More information about the Goodies-commits
mailing list