[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", &current_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