[Goodies-commits] r7525 - in parole/trunk: . data/interfaces po src

Ali Abdallah aliov at xfce.org
Wed Jun 10 21:01:00 CEST 2009


Author: aliov
Date: 2009-06-10 19:01:00 +0000 (Wed, 10 Jun 2009)
New Revision: 7525

Added:
   parole/trunk/data/interfaces/mediachooser.ui
   parole/trunk/data/interfaces/openlocation.ui
   parole/trunk/data/interfaces/playlist.ui
   parole/trunk/src/filters.c
   parole/trunk/src/filters.h
Removed:
   parole/trunk/src/manager.c
   parole/trunk/src/manager.h
Modified:
   parole/trunk/ChangeLog
   parole/trunk/configure.ac.in
   parole/trunk/data/interfaces/Makefile.am
   parole/trunk/data/interfaces/parole.ui
   parole/trunk/po/POTFILES.in
   parole/trunk/po/parole-media-player.pot
   parole/trunk/src/Makefile.am
   parole/trunk/src/builder.c
   parole/trunk/src/builder.h
   parole/trunk/src/main.c
   parole/trunk/src/mediachooser.c
   parole/trunk/src/mediachooser.h
   parole/trunk/src/medialist.c
   parole/trunk/src/medialist.h
   parole/trunk/src/player.c
   parole/trunk/src/sidebar.c
   parole/trunk/src/statusbar.c
Log:
	* Split the GtkBuilder interface files into multiple files.

Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/ChangeLog	2009-06-10 19:01:00 UTC (rev 7525)
@@ -1,3 +1,6 @@
+2009-06-17: Ali aliov at xfce.org
+	* Split the GtkBuilder interface files into multiple files.
+
 2009-06-07: Ali aliov at xfce.org
 	* Reset screen saver counter if we are playing a movie
 

Modified: parole/trunk/configure.ac.in
===================================================================
--- parole/trunk/configure.ac.in	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/configure.ac.in	2009-06-10 19:01:00 UTC (rev 7525)
@@ -68,6 +68,7 @@
 XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [glib_minimum_version])
 XDT_CHECK_PACKAGE([GOBJECT], [gobject-2.0], [glib_minimum_version])
 XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [glib_minimum_version])
+XDT_CHECK_PACKAGE([GMODULE], [gmodule-2.0], [glib_minimum_version])
 XDT_CHECK_PACKAGE([GIO], [gio-2.0], [glib_minimum_version])
 
 XDT_CHECK_PACKAGE([GST], [gstreamer-0.10], [gstreamer_minimum_version])
@@ -80,7 +81,14 @@
 XDT_CHECK_PACKAGE([LIBXFCE4GUI], [libxfcegui4-1.0],[libxfcegui4_minimum_version])
 XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0],[libxfce4util_minimum_version])
 
-XDT_CHECK_PACKAGE([LIBNOTIFY],[libnotify], [libnotify_minimum_version])
+#=======================================================#
+#           Check for availability of libnotify         #
+#=======================================================#
+LIBNOTIFY_FOUND="no"
+XDT_CHECK_OPTIONAL_PACKAGE([LIBNOTIFY],
+                       [libnotify], [libnotify_minimum_version],
+                       [libnotify], 
+                       [libnotify library], [yes])
 
 # Taken from Gnome system tools
 #=======================================================#
@@ -124,6 +132,7 @@
         prefix:                 $prefix
 	interface_dir		$interfacesdir
 	pixmapsdir		$pixmapsdir
+	Notification		$LIBNOTIFY_FOUND
         Debug        support:   $enable_debug
 --------------------------------------------------
 

Modified: parole/trunk/data/interfaces/Makefile.am
===================================================================
--- parole/trunk/data/interfaces/Makefile.am	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/data/interfaces/Makefile.am	2009-06-10 19:01:00 UTC (rev 7525)
@@ -1,5 +1,8 @@
 interfaces =					\
-	parole.ui
+	parole.ui				\
+	playlist.ui				\
+	mediachooser.ui				\
+	openlocation.ui
 
 interfaces_DATA = 				\
 	$(interfaces)

Added: parole/trunk/data/interfaces/mediachooser.ui
===================================================================
--- parole/trunk/data/interfaces/mediachooser.ui	                        (rev 0)
+++ parole/trunk/data/interfaces/mediachooser.ui	2009-06-10 19:01:00 UTC (rev 7525)
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkVBox" id="vbox">
+    <property name="visible">True</property>
+    <property name="orientation">vertical</property>
+    <property name="spacing">10</property>
+    <child>
+      <placeholder/>
+    </child>
+    <child>
+      <object class="GtkFileChooserWidget" id="filechooserwidget">
+        <property name="visible">True</property>
+        <property name="border_width">5</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">1</property>
+        <signal name="current_folder_changed" handler="media_chooser_folder_changed_cb"/>
+      </object>
+      <packing>
+        <property name="position">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkHButtonBox" id="hbuttonbox1">
+        <property name="visible">True</property>
+        <property name="border_width">5</property>
+        <property name="spacing">5</property>
+        <property name="layout_style">end</property>
+        <child>
+          <object class="GtkButton" id="close">
+            <property name="label" translatable="yes">gtk-close</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_media_chooser_close"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="open">
+            <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_media_chooser_open"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="position">2</property>
+      </packing>
+    </child>
+  </object>
+</interface>

Added: parole/trunk/data/interfaces/openlocation.ui
===================================================================
--- parole/trunk/data/interfaces/openlocation.ui	                        (rev 0)
+++ parole/trunk/data/interfaces/openlocation.ui	2009-06-10 19:01:00 UTC (rev 7525)
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkVBox" id="vbox">
+    <property name="visible">True</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkLabel" id="label1">
+        <property name="visible">True</property>
+        <property name="label" translatable="yes">Open location of media file or live stream</property>
+      </object>
+      <packing>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkEntry" id="entry">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="invisible_char">&#x25CF;</property>
+      </object>
+      <packing>
+        <property name="position">1</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkHButtonBox" id="hbuttonbox1">
+        <property name="visible">True</property>
+        <property name="spacing">5</property>
+        <property name="layout_style">end</property>
+        <child>
+          <object class="GtkButton" id="close">
+            <property name="label" translatable="yes">gtk-close</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_media_chooser_close"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="open">
+            <property name="label" translatable="yes">gtk-open</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_media_chooser_open_location_cb"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="position">2</property>
+      </packing>
+    </child>
+  </object>
+</interface>

Modified: parole/trunk/data/interfaces/parole.ui
===================================================================
--- parole/trunk/data/interfaces/parole.ui	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/data/interfaces/parole.ui	2009-06-10 19:01:00 UTC (rev 7525)
@@ -6,6 +6,8 @@
     <property name="window_position">center</property>
     <property name="default_width">720</property>
     <property name="default_height">440</property>
+    <signal name="destroy" handler="parole_player_destroy_cb"/>
+    <signal name="key_press_event" handler="parole_player_key_press"/>
     <child>
       <object class="GtkVBox" id="vbox1">
         <property name="visible">True</property>
@@ -28,6 +30,7 @@
                         <property name="visible">True</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
+                        <signal name="activate" handler="parole_player_menu_open_cb"/>
                       </object>
                     </child>
                     <child>
@@ -37,6 +40,7 @@
                         <property name="use_underline">True</property>
                         <property name="image">image5</property>
                         <property name="use_stock">False</property>
+                        <signal name="activate" handler="parole_player_menu_open_location_cb"/>
                       </object>
                     </child>
                     <child>
@@ -45,6 +49,7 @@
                         <property name="visible">True</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
+                        <signal name="activate" handler="parole_player_menu_add_cb"/>
                       </object>
                     </child>
                     <child>
@@ -58,6 +63,7 @@
                         <property name="visible">True</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
+                        <signal name="activate" handler="parole_player_menu_exit_cb"/>
                       </object>
                     </child>
                   </object>
@@ -76,6 +82,21 @@
                 <property name="visible">True</property>
                 <property name="label" translatable="yes">_View</property>
                 <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu2">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="fullscreen-menu">
+                        <property name="label">gtk-fullscreen</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                        <accelerator key="F11" signal="activate"/>
+                        <signal name="activate" handler="parole_player_full_screen_activated_cb"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
               </object>
             </child>
             <child>
@@ -134,7 +155,7 @@
                         <property name="orientation">vertical</property>
                         <property name="spacing">5</property>
                         <child>
-                          <object class="GtkHPaned" id="hpaned1">
+                          <object class="GtkHPaned" id="hpaned">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <child>
@@ -163,6 +184,9 @@
                                         <property name="sensitive">False</property>
                                         <property name="can_focus">True</property>
                                         <property name="draw_value">False</property>
+                                        <signal name="button_press_event" handler="parole_player_range_button_press"/>
+                                        <signal name="value_changed" handler="parole_player_range_value_changed"/>
+                                        <signal name="button_release_event" handler="parole_player_range_button_release"/>
                                       </object>
                                       <packing>
                                         <property name="expand">False</property>
@@ -206,6 +230,7 @@
                                                     <property name="relief">none</property>
                                                     <property name="focus_on_click">False</property>
                                                     <accelerator key="s" signal="clicked"/>
+                                                    <signal name="clicked" handler="parole_player_stop_clicked"/>
                                                   </object>
                                                   <packing>
                                                     <property name="expand">False</property>
@@ -222,6 +247,7 @@
                                                     <property name="relief">none</property>
                                                     <property name="focus_on_click">False</property>
                                                     <accelerator key="space" signal="activate"/>
+                                                    <signal name="clicked" handler="parole_player_play_pause_clicked"/>
                                                   </object>
                                                   <packing>
                                                     <property name="expand">False</property>
@@ -265,6 +291,7 @@
                                                         <property name="can_focus">True</property>
                                                         <property name="show_fill_level">True</property>
                                                         <property name="draw_value">False</property>
+                                                        <signal name="value_changed" handler="parole_player_volume_value_changed_cb"/>
                                                       </object>
                                                       <packing>
                                                         <property name="expand">False</property>
@@ -294,6 +321,7 @@
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
                                             <property name="image">image18</property>
+                                            <signal name="clicked" handler="parole_player_show_hide_playlist"/>
                                           </object>
                                           <packing>
                                             <property name="expand">False</property>
@@ -325,83 +353,8 @@
                                 <property name="visible">True</property>
                                 <property name="orientation">vertical</property>
                                 <child>
-                                  <object class="GtkScrolledWindow" id="scrolledwindow1">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="hscrollbar_policy">automatic</property>
-                                    <property name="vscrollbar_policy">automatic</property>
-                                    <child>
-                                      <object class="GtkTreeView" id="media-list">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="headers_visible">False</property>
-                                        <property name="show_expanders">False</property>
-                                      </object>
-                                    </child>
-                                  </object>
-                                  <packing>
-                                    <property name="position">0</property>
-                                  </packing>
+                                  <placeholder/>
                                 </child>
-                                <child>
-                                  <object class="GtkHBox" id="hbox3">
-                                    <property name="visible">True</property>
-                                    <property name="homogeneous">True</property>
-                                    <child>
-                                      <object class="GtkButton" id="add-media">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="image">image1</property>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="position">0</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkButton" id="remove-media">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="image">image2</property>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkButton" id="media-up">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="image">image3</property>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="position">2</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkButton" id="media-down">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="image">image4</property>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="position">3</property>
-                                      </packing>
-                                    </child>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
                               </object>
                               <packing>
                                 <property name="resize">False</property>
@@ -922,24 +875,8 @@
     <property name="visible">True</property>
     <property name="stock">gtk-media-next</property>
   </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="stock">gtk-add</property>
-  </object>
-  <object class="GtkImage" id="image2">
-    <property name="visible">True</property>
-    <property name="stock">gtk-remove</property>
-  </object>
-  <object class="GtkImage" id="image3">
-    <property name="visible">True</property>
-    <property name="stock">gtk-go-up</property>
-  </object>
-  <object class="GtkImage" id="image4">
-    <property name="visible">True</property>
-    <property name="stock">gtk-go-down</property>
-  </object>
   <object class="GtkImage" id="image18">
     <property name="visible">True</property>
-    <property name="stock">gtk-go-back</property>
+    <property name="stock">gtk-go-forward</property>
   </object>
 </interface>

Added: parole/trunk/data/interfaces/playlist.ui
===================================================================
--- parole/trunk/data/interfaces/playlist.ui	                        (rev 0)
+++ parole/trunk/data/interfaces/playlist.ui	2009-06-10 19:01:00 UTC (rev 7525)
@@ -0,0 +1,110 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkVBox" id="playlist-box">
+    <property name="visible">True</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkScrolledWindow" id="scrolledwindow1">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="hscrollbar_policy">automatic</property>
+        <property name="vscrollbar_policy">automatic</property>
+        <child>
+          <object class="GtkTreeView" id="media-list">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="headers_visible">False</property>
+            <property name="show_expanders">False</property>
+            <signal name="cursor_changed" handler="parole_media_list_cursor_changed_cb"/>
+            <signal name="row_activated" handler="parole_media_list_row_activated_cb"/>
+            <signal name="button_release_event" handler="parole_media_list_button_release_event"/>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="position">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkHBox" id="hbox3">
+        <property name="visible">True</property>
+        <property name="homogeneous">True</property>
+        <child>
+          <object class="GtkButton" id="add-media">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image1</property>
+            <signal name="clicked" handler="parole_media_list_add_clicked_cb"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="remove-media">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image2</property>
+            <signal name="clicked" handler="parole_media_list_remove_clicked_cb"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="media-up">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image3</property>
+            <signal name="clicked" handler="parole_media_list_media_up_clicked_cb"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="media-down">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image4</property>
+            <signal name="clicked" handler="parole_media_list_media_down_clicked_cb"/>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">False</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-add</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-remove</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="stock">gtk-go-up</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="stock">gtk-go-down</property>
+  </object>
+</interface>

Modified: parole/trunk/po/POTFILES.in
===================================================================
--- parole/trunk/po/POTFILES.in	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/po/POTFILES.in	2009-06-10 19:01:00 UTC (rev 7525)
@@ -1,4 +1,7 @@
 data/interfaces/parole.ui
+data/interfaces/mediachooser.ui
+data/interfaces/playlist.ui
+data/interfaces/openlocation.ui
 data/parole-media-player.desktop.in
 src/gst.c
 src/builder.c
@@ -7,3 +10,4 @@
 src/player.c
 src/sidebar.c
 src/statusbar.c
+src/filters.c

Modified: parole/trunk/po/parole-media-player.pot
===================================================================
--- parole/trunk/po/parole-media-player.pot	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/po/parole-media-player.pot	2009-06-10 19:01:00 UTC (rev 7525)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-06-03 10:35+0200\n"
+"POT-Creation-Date: 2009-06-10 20:58+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"
@@ -17,61 +17,68 @@
 "Content-Transfer-Encoding: 8bit\n"
 
 #: ../data/parole-media-player.desktop.in.h:1
-msgid "Xfce Media Player"
+msgid "Parole Media Player"
 msgstr ""
 
-#: ../src/gst.c:548
+#: ../src/gst.c:640
 msgid "Error in changing state to ready"
 msgstr ""
 
-#: ../src/gst.c:595
+#: ../src/gst.c:687
 msgid ""
 "Unable to load playbin GStreamer plugin, check your GStreamer installation"
 msgstr ""
 
-#: ../src/gst.c:605
+#: ../src/gst.c:702
 msgid ""
-"Unable to load xvimagesink GStreamer plugin, check your GStreamer "
-"installation"
+"Unable to load video GStreamer plugin, check your GStreamer installation"
 msgstr ""
 
-#: ../src/mediachooser.c:420
-msgid "Audio and video"
+#: ../src/builder.c:69
+msgid "Check your Parole installation"
 msgstr ""
 
-#: ../src/mediachooser.c:447
+#: ../src/mediachooser.c:433
 msgid "Add media files"
 msgstr ""
 
-#: ../src/mediachooser.c:447
+#: ../src/mediachooser.c:433
 msgid "Open media file"
 msgstr ""
 
-#: ../src/mediachooser.c:452
-msgid "Open location"
+#: ../src/mediachooser.c:450
+msgid "Add"
 msgstr ""
 
-#: ../src/mediachooser.c:532
-msgid "Open location of media file or live stream"
+#: ../src/mediachooser.c:450
+msgid "Open"
 msgstr ""
 
-#: ../src/medialist.c:274
+#: ../src/medialist.c:416
 msgid "Media list"
 msgstr ""
 
-#: ../src/player.c:164 ../src/statusbar.c:119 ../src/statusbar.c:121
+#: ../src/player.c:161
+msgid "Hide playlist"
+msgstr ""
+
+#: ../src/player.c:170
+msgid "Show playlist"
+msgstr ""
+
+#: ../src/player.c:299 ../src/statusbar.c:121 ../src/statusbar.c:123
 msgid "Playing"
 msgstr ""
 
-#: ../src/player.c:165
+#: ../src/player.c:300
 msgid "Media stream is not seekable"
 msgstr ""
 
-#: ../src/player.c:179 ../src/player.c:192
+#: ../src/player.c:316 ../src/player.c:329
 msgid "Paused"
 msgstr ""
 
-#: ../src/player.c:210
+#: ../src/player.c:347
 msgid "Stopped"
 msgstr ""
 
@@ -84,24 +91,22 @@
 
 #: ../src/sidebar.c:147
 msgid ""
-"<b>Audio \n"
-"recorder\n"
+"<b>Albums\n"
 "</b>"
 msgstr ""
 
-#: ../src/sidebar.c:158
-msgid ""
-"<b>Audio \n"
-"converter\n"
-"</b>"
+#: ../src/statusbar.c:133
+msgid "Buffering"
 msgstr ""
 
-#: ../src/sidebar.c:168
-msgid ""
-"<b>Albums\n"
-"</b>"
+#: ../src/filters.c:47
+msgid "Audio files"
 msgstr ""
 
-#: ../src/statusbar.c:131
-msgid "Buffering"
+#: ../src/filters.c:63
+msgid "Video files"
 msgstr ""
+
+#: ../src/filters.c:78
+msgid "Audio and video"
+msgstr ""

Modified: parole/trunk/src/Makefile.am
===================================================================
--- parole/trunk/src/Makefile.am	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/Makefile.am	2009-06-10 19:01:00 UTC (rev 7525)
@@ -6,11 +6,15 @@
 	enum-gtypes.c				\
 	enum-gtypes.h
 
+MOD_FLAGS = 					\
+	-export_dynamic 			\
+	-avoid-version 				\
+	-module 				\
+	-no-undefined
+
 parole_media_player_SOURCES =			\
 	main.c					\
 	$(GENERATED_FILES)			\
-	manager.c				\
-	manager.h				\
 	sidebar.c				\
 	sidebar.h				\
 	player.c				\
@@ -29,6 +33,8 @@
 	mediafile.h				\
 	mediachooser.c				\
 	mediachooser.h				\
+	filters.c				\
+	filters.h				\
 	screensaver.c				\
 	screensaver.h				\
 	rc-utils.c				\
@@ -40,6 +46,7 @@
 	-I$(top_srcdir)				\
 	-DLOCALEDIR=\"$(localedir)\"		\
 	-DG_LOG_DOMAIN=\"parole-media-player\"	\
+	-export-dynamic				\
 	$(GTK_CFLAGS)                           \
         $(GLIB_CFLAGS)                          \
         $(GOBJECT_CFLAGS)                       \

Modified: parole/trunk/src/builder.c
===================================================================
--- parole/trunk/src/builder.c	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/builder.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -33,43 +33,42 @@
 
 #define INTERFACE_FILE INTERFACES_DIR "/parole.ui"
 
-G_DEFINE_TYPE (ParoleBuilder, parole_builder, GTK_TYPE_BUILDER)
-
 static gpointer parole_builder_object = NULL;
 
-static void
-parole_builder_class_init (ParoleBuilderClass *klass)
+GtkBuilder *
+parole_builder_get_main_interface (void)
 {
-
+    if ( parole_builder_object != NULL )
+    {
+	g_object_ref (parole_builder_object);
+    }
+    else
+    {
+	parole_builder_object = parole_builder_new_from_file (INTERFACE_FILE);
+	if ( G_UNLIKELY (parole_builder_object == NULL ) )
+	    g_error ("Unable to load interface file from %s : Check you parole installation", INTERFACE_FILE);
+	g_object_add_weak_pointer (parole_builder_object, &parole_builder_object);
+    }
+    
+    return GTK_BUILDER (parole_builder_object);
 }
 
-static void
-parole_builder_init (ParoleBuilder *builder)
+GtkBuilder *parole_builder_new_from_file   (const gchar *file)
 {
+    GtkBuilder *builder;
     GError *error = NULL;
+
+    builder = gtk_builder_new ();
     
     gtk_builder_add_from_file (GTK_BUILDER (builder),
-			       INTERFACE_FILE,
+			       file,
 			       &error);
+			       
     if ( error )
     {
 	xfce_err ("%s : %s", error->message, _("Check your Parole installation"));
-	g_error ("%s", error->message);
+	g_error_free (error);
     }
-}
-
-GtkBuilder *
-parole_builder_new (void)
-{
-    if ( parole_builder_object != NULL )
-    {
-	g_object_ref (parole_builder_object);
-    }
-    else
-    {
-	parole_builder_object = g_object_new (PAROLE_TYPE_BUILDER, NULL);
-	g_object_add_weak_pointer (parole_builder_object, &parole_builder_object);
-    }
     
-    return GTK_BUILDER (parole_builder_object);
+    return builder;
 }

Modified: parole/trunk/src/builder.h
===================================================================
--- parole/trunk/src/builder.h	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/builder.h	2009-06-10 19:01:00 UTC (rev 7525)
@@ -26,25 +26,10 @@
 
 G_BEGIN_DECLS
 
-#define PAROLE_TYPE_BUILDER        (parole_builder_get_type () )
-#define PAROLE_BUILDER(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), XFMP_TYPE_BUILDER, ParoleBuilder))
-#define PAROLE_IS_BUILDER(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFMP_TYPE_BUILDER))
+GtkBuilder       	       *parole_builder_get_main_interface       (void);
 
-typedef struct
-{
-    GtkBuilder         		parent;
-    
-} ParoleBuilder;
+GtkBuilder		       *parole_builder_new_from_file   		(const gchar *file);
 
-typedef struct
-{
-    GtkBuilderClass 		parent_class;
-    
-} ParoleBuilderClass;
-
-GType        			parole_builder_get_type        (void) G_GNUC_CONST;
-GtkBuilder       	       *parole_builder_new             (void);
-
 G_END_DECLS
 
 #endif /* __PAROLE_BUILDER_H */

Added: parole/trunk/src/filters.c
===================================================================
--- parole/trunk/src/filters.c	                        (rev 0)
+++ parole/trunk/src/filters.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -0,0 +1,84 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <libxfce4util/libxfce4util.h>
+#include <glib.h>
+
+#include "filters.h"
+
+/*
+ * Of course those are temporary filters.
+ */
+
+/*
+ * Supported Audio formats.
+ */
+GtkFileFilter 		*parole_get_supported_audio_filter	(void)
+{
+    GtkFileFilter *filter;
+    
+    filter = gtk_file_filter_new ();
+    
+    gtk_file_filter_set_name (filter, _("Audio files"));
+    
+    gtk_file_filter_add_mime_type (filter, "audio/*");
+    
+    return filter;
+}
+
+/*
+ * Supported Video formats.
+ */
+GtkFileFilter 		*parole_get_supported_video_filter	(void)
+{
+    GtkFileFilter *filter;
+    
+    filter = gtk_file_filter_new ();
+    
+    gtk_file_filter_set_name (filter, _("Video files"));
+    
+    gtk_file_filter_add_mime_type (filter, "video/*");
+    
+    return filter;
+}
+
+/*
+ * Supported Audio And Video.
+ */
+GtkFileFilter 		*parole_get_supported_media_filter	(void)
+{
+    GtkFileFilter *filter;
+    filter = gtk_file_filter_new ();
+    
+    gtk_file_filter_set_name (filter, _("Audio and video"));
+    
+    gtk_file_filter_add_mime_type (filter, "video/*");
+    gtk_file_filter_add_mime_type (filter, "audio/*");
+    
+    return filter;
+}

Added: parole/trunk/src/filters.h
===================================================================
--- parole/trunk/src/filters.h	                        (rev 0)
+++ parole/trunk/src/filters.h	2009-06-10 19:01:00 UTC (rev 7525)
@@ -0,0 +1,33 @@
+/*
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef __PAROLE_FILTERS_H
+#define __PAROLE_FILTERS_H
+
+#include <gtk/gtk.h>
+
+GtkFileFilter 		*parole_get_supported_audio_filter	(void);
+
+GtkFileFilter 		*parole_get_supported_video_filter	(void);
+
+GtkFileFilter 		*parole_get_supported_media_filter	(void);
+
+
+#endif /* PAROLE_FILTERS_H */

Modified: parole/trunk/src/main.c
===================================================================
--- parole/trunk/src/main.c	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/main.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -39,11 +39,11 @@
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
 
-#include "manager.h"
+#include "player.h"
 
 int main (int argc, char **argv)
 {
-    ParoleManager *manager;
+    ParolePlayer *player;
     
     if ( !g_thread_supported () )
 	g_thread_init (NULL);
@@ -51,14 +51,13 @@
     gtk_init (&argc, &argv);
     gst_init (&argc, &argv);
     
-    manager = parole_manager_new ();
+    player = parole_player_new ();
     
     gdk_notify_startup_complete ();
     
     gtk_main ();
-    
-    g_object_unref (manager);
+
     gst_deinit ();
-    
+
     return 0;
 }

Modified: parole/trunk/src/mediachooser.c
===================================================================
--- parole/trunk/src/mediachooser.c	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/mediachooser.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -35,23 +35,27 @@
 #include "mediachooser.h"
 #include "builder.h"
 #include "mediafile.h"
+#include "filters.h"
 #include "rc-utils.h"
 
-#define PAROLE_MEDIA_CHOOSER_GET_PRIVATE(o) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_MEDIA_CHOOSER, ParoleMediaChooserPrivate))
+/*
+ * GtkBuilder Callbacks
+ */
+void	parole_media_chooser_open 	(GtkWidget *widget, 
+				         ParoleMediaChooser *chooser);
 
-struct ParoleMediaChooserPrivate
-{
-    GtkWidget 		*parent;
-    GtkWidget 		*window;
-    GtkWidget 		*file_chooser;
-    
-    GtkWidget		*entry;
-    
-    GtkFileFilter       *filter;
-    gboolean   		 open;
-};
+void	parole_media_chooser_close	(GtkWidget *widget,
+					 ParoleMediaChooser *chooser);
+					 
+void	media_chooser_folder_changed_cb (GtkWidget *widget, 
+					 gpointer data);
 
+void	parole_media_chooser_open_location_cb (GtkButton *bt, 
+					       ParoleMediaChooser *chooser);
+
+#define MEDIA_CHOOSER_INTERFACE_FILE INTERFACES_DIR "/mediachooser.ui"
+#define OPEN_LOCATION_INTERFACE_FILE INTERFACES_DIR "/openlocation.ui"
+
 enum
 {
     MEDIA_FILES_OPENED,
@@ -60,22 +64,29 @@
     LAST_SIGNAL
 };
 
-static gpointer parole_media_chooser_object = NULL;
-
 static guint signals [LAST_SIGNAL] = { 0 };
 
-G_DEFINE_TYPE (ParoleMediaChooser, parole_media_chooser, G_TYPE_OBJECT)
+G_DEFINE_TYPE (ParoleMediaChooser, parole_media_chooser, GTK_TYPE_DIALOG)
 
-static void
-parole_media_chooser_close (ParoleMediaChooser *chooser)
+void
+parole_media_chooser_close (GtkWidget *widget, ParoleMediaChooser *chooser)
 {
-    gtk_widget_destroy (chooser->priv->window);
-    chooser->priv->open = FALSE;
-    chooser->priv->window = NULL;
-    chooser->priv->file_chooser = NULL;
-    chooser->priv->entry = NULL;
+    gtk_widget_destroy (GTK_WIDGET (chooser));
 }
 
+void
+media_chooser_folder_changed_cb (GtkWidget *widget, gpointer data)
+{
+    gchar *folder;
+    folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (widget));
+    
+    if ( folder )
+    {
+	parole_rc_write_entry_string ("media-chooser-folder", folder);
+	g_free (folder);
+    }
+}
+
 /*
  * compare_by_name_using_number
  * 
@@ -272,7 +283,7 @@
 }
 
 static void
-parole_media_chooser_get_media_files (ParoleMediaChooser *chooser, const gchar *filename)
+parole_media_chooser_get_media_files (ParoleMediaChooser *chooser, GtkFileFilter *filter, const gchar *filename)
 {
     GDir *dir;
     GSList *list = NULL;
@@ -282,7 +293,7 @@
     if ( g_file_test (filename, G_FILE_TEST_IS_REGULAR ) )
     {
 	file = parole_media_file_new (filename);
-	if ( parole_media_chooser_filter_media (chooser->priv->filter, file) )
+	if ( parole_media_chooser_filter_media (filter, file) )
 	    list = g_slist_append (list, file);
 	else
 	    g_object_unref (file);
@@ -299,12 +310,12 @@
 	    gchar *path = g_strdup_printf ("%s/%s", filename, name);
 	    if ( g_file_test (path, G_FILE_TEST_IS_DIR) )
 	    {
-		parole_media_chooser_get_media_files (chooser, path);
+		parole_media_chooser_get_media_files (chooser, filter, path);
 	    }
 	    else if ( g_file_test (path, G_FILE_TEST_IS_REGULAR) )
 	    {
 		file = parole_media_file_new (path);
-		if ( parole_media_chooser_filter_media (chooser->priv->filter, file) )
+		if ( parole_media_chooser_filter_media (filter, file) )
 		    list = g_slist_append (list, file);
 		else
 		    g_object_unref (file);
@@ -320,14 +331,16 @@
 }
 
 static void
-parole_media_chooser_add_many (ParoleMediaChooser *chooser)
+parole_media_chooser_add_many (ParoleMediaChooser *chooser, GtkWidget *file_chooser)
 {
     GSList *files;
+    GtkFileFilter *filter;
     gchar *file;
     guint    i;
     guint len;
     
-    files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (chooser->priv->file_chooser));
+    files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (file_chooser));
+    filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (file_chooser));
     
     if ( G_UNLIKELY (files == NULL) )
 	return;
@@ -336,29 +349,32 @@
     for ( i = 0; i < len; i++)
     {
 	file = g_slist_nth_data (files, i);
-	parole_media_chooser_get_media_files (chooser, file);
+	parole_media_chooser_get_media_files (chooser, filter, file);
     }
     
     g_slist_foreach (files, (GFunc) g_free, NULL);
     g_slist_free (files);
 }
 
-static void
-parole_media_chooser_open_cb (ParoleMediaChooser *chooser)
+void
+parole_media_chooser_open (GtkWidget *widget, ParoleMediaChooser *chooser)
 {
     ParoleMediaFile *file;
+    GtkWidget *file_chooser;
     gboolean  multiple;
     gchar *filename;
+
+    file_chooser = GTK_WIDGET (g_object_get_data (G_OBJECT (chooser), "file-chooser"));
     
-    multiple = gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (chooser->priv->file_chooser));
+    multiple = gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (file_chooser));
     
     /*
      * Emit one file opened
      */
     if ( multiple == FALSE )
     {
-	filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser->priv->file_chooser ));
-	parole_media_chooser_close (chooser);
+	filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_chooser));
+	parole_media_chooser_close (NULL, chooser);
 	if ( G_LIKELY (filename != NULL ) )
 	{
 	    file = parole_media_file_new (filename);
@@ -368,202 +384,104 @@
     }
     else
     {
-	parole_media_chooser_add_many (chooser);
-	parole_media_chooser_close (chooser);
+	parole_media_chooser_add_many (chooser, file_chooser);
+	parole_media_chooser_close (NULL, chooser);
     }
 }
 
-static void
-parole_media_chooser_open_location_cb (ParoleMediaChooser *chooser)
+void
+parole_media_chooser_open_location_cb (GtkButton *bt, ParoleMediaChooser *chooser)
 {
     ParoleMediaFile *file;
+    GtkWidget *entry;
     const gchar *location;
     
-    location = gtk_entry_get_text (GTK_ENTRY (chooser->priv->entry));
+    entry = GTK_WIDGET (g_object_get_data (G_OBJECT (chooser), "entry"));
+    location = gtk_entry_get_text (GTK_ENTRY (entry));
     
-    if ( !location )
-	return;
+    if ( !location || strlen (location) == 0)
+	goto out;
 
     TRACE ("Location %s", location);
 
     file = parole_media_file_new (location);
-    parole_media_chooser_close (chooser);
     g_signal_emit (G_OBJECT (chooser), signals [MEDIA_FILE_OPENED], 0, file);
+out:
+    parole_media_chooser_close (NULL, chooser);
 }
 
 static void
-parole_media_chooser_current_folder_changed_cb (GtkWidget *widget, gpointer data)
+parole_media_chooser_open_internal (GtkWidget *chooser, gboolean multiple)
 {
-    gchar *folder;
-    folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (widget));
-    
-    if ( folder )
-    {
-	parole_rc_write_entry_string ("media-chooser-folder", folder);
-	g_free (folder);
-    }
-}
+    ParoleMediaChooser *media_chooser;
+    GtkWidget   *vbox;
+    GtkWidget   *file_chooser;
+    GtkBuilder  *builder;
+    GtkWidget   *open;
+    GtkWidget   *img;
+    const gchar *folder;
 
-static GtkWidget *
-parole_media_chooser_create_chooser (gboolean multiple)
-{
-    GtkWidget 	  *chooser;
-    GtkFileFilter *filter;
-    const gchar   *folder;
+    media_chooser = PAROLE_MEDIA_CHOOSER (chooser);
     
-    chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN);
+    builder = parole_builder_new_from_file (MEDIA_CHOOSER_INTERFACE_FILE);
     
-    gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
+    file_chooser = GTK_WIDGET (gtk_builder_get_object (builder, "filechooserwidget"));
     
-    filter = gtk_file_filter_new ();
+    vbox = GTK_WIDGET (gtk_builder_get_object (builder, "vbox"));
+    open = GTK_WIDGET (gtk_builder_get_object (builder, "open"));
     
-    gtk_file_filter_set_name (filter, _("Audio and video"));
-    
-    gtk_file_filter_add_mime_type (filter, "video/*");
-    gtk_file_filter_add_mime_type (filter, "audio/*");
-    
-    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+    gtk_window_set_title (GTK_WINDOW (chooser), multiple == TRUE ? _("Add media files") : _("Open media file"));
 
+    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_chooser), parole_get_supported_media_filter ());
+    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_chooser), parole_get_supported_audio_filter ());
+    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_chooser), parole_get_supported_video_filter ());
+
     folder = parole_rc_read_entry_string ("media-chooser-folder", NULL);
     
     if ( folder )
-	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), folder);
+	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (file_chooser), folder);
     
-    gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), multiple);
-
-    g_signal_connect (chooser, "current-folder-changed",
-		      G_CALLBACK (parole_media_chooser_current_folder_changed_cb), NULL);
-    return chooser;
-}
-
-static GtkWidget *
-parole_media_chooser_create_chooser_window (GtkWidget *parent, gboolean multiple, gboolean local)
-{
-    GtkWidget *window;
+    gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (file_chooser), multiple);
     
-    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-    if ( local )
-    {
-	gtk_window_set_title (GTK_WINDOW (window), multiple == TRUE ? _("Add media files") : _("Open media file"));
-	gtk_window_set_default_size (GTK_WINDOW (window), 680, 480);
-    }
-    else
-    {
-	gtk_window_set_title (GTK_WINDOW (window), _("Open location"));
-    }
+    img = gtk_image_new_from_stock (multiple ? GTK_STOCK_ADD : GTK_STOCK_OPEN, GTK_ICON_SIZE_BUTTON);
     
-    gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (parent));
-    gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER_ON_PARENT);
+    g_object_set (G_OBJECT (open),
+		  "image", img,
+		  "label", multiple ? _("Add") : _("Open"),
+		  NULL);
     
-    return window;
-}
-
-static void
-parole_media_chooser_open_internal (ParoleMediaChooser *chooser, gboolean multiple)
-{
-    GtkWidget *window;
-    GtkWidget *file_chooser;
-    GtkWidget *frame;
-    GtkWidget  *vbox;
-    GtkWidget  *bbox;
-    GtkWidget *open_w;
-    GtkWidget *close_w;
+    g_object_set_data (G_OBJECT (chooser), "file-chooser", file_chooser);
     
-    file_chooser = parole_media_chooser_create_chooser (multiple);
-    window = parole_media_chooser_create_chooser_window (chooser->priv->parent, multiple, TRUE);
-    
-    frame = gtk_frame_new (NULL);
-        
-    vbox = gtk_vbox_new (FALSE, 0);
-    gtk_container_add (GTK_CONTAINER (window), frame);
-    gtk_container_add (GTK_CONTAINER (frame), vbox);
-    
-    gtk_box_pack_start (GTK_BOX (vbox), file_chooser, TRUE, TRUE, 4);
-    
-    bbox = gtk_hbutton_box_new ();
-    gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
-    gtk_box_set_spacing (GTK_BOX (bbox), 6);
-    
-    gtk_box_pack_end (GTK_BOX (vbox), bbox, FALSE, FALSE, 4);
-    
-    open_w = gtk_button_new_from_stock (multiple ? GTK_STOCK_ADD : GTK_STOCK_OPEN);
-    close_w = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
-    
-    gtk_container_add (GTK_CONTAINER (bbox), close_w);
-    gtk_container_add (GTK_CONTAINER (bbox), open_w);
-    
-    
-    g_signal_connect_swapped (file_chooser, "file-activated",
-			      G_CALLBACK (gtk_widget_activate), open_w);
-			      
-    g_signal_connect_swapped (open_w, "clicked",
-			      G_CALLBACK (parole_media_chooser_open_cb), chooser);
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (media_chooser)->vbox), vbox);
+    gtk_builder_connect_signals (builder, chooser);
+    g_signal_connect (chooser, "destroy",
+		      G_CALLBACK (parole_media_chooser_close), chooser);
 		      
-    g_signal_connect_swapped (close_w, "clicked",
-		              G_CALLBACK (parole_media_chooser_close), chooser);
-    
-    g_signal_connect_swapped (window, "destroy",
-			      G_CALLBACK (parole_media_chooser_close), chooser);
-    
-    chooser->priv->window = window;
-    chooser->priv->file_chooser = file_chooser;
-    chooser->priv->open = TRUE;
-    
-    gtk_widget_show_all (window);
+    g_object_unref (builder);
 }
 
 static void
-parole_media_chooser_open_location_internal (ParoleMediaChooser *chooser)
+parole_media_chooser_open_location_internal (GtkWidget *chooser)
 {
-    GtkWidget *window;
-    GtkWidget *box;
-    GtkWidget *label;
+    GtkBuilder *builder;
+    GtkWidget *vbox;
+    GtkWidget *open;
     GtkWidget *entry;
-    GtkWidget  *bbox;
-    GtkWidget *open_w;
-    GtkWidget *close_w;
     
-    window = parole_media_chooser_create_chooser_window (chooser->priv->parent, FALSE, FALSE);
+    builder = parole_builder_new_from_file (OPEN_LOCATION_INTERFACE_FILE);
     
-    box = gtk_vbox_new (FALSE, 8);
+    vbox = GTK_WIDGET (gtk_builder_get_object (builder, "vbox"));
+    entry = GTK_WIDGET (gtk_builder_get_object (builder, "entry"));
+    open = GTK_WIDGET (gtk_builder_get_object (builder, "open"));
     
-    gtk_container_add (GTK_CONTAINER (window), box);
+    g_object_set_data (G_OBJECT (chooser), "entry", entry);
     
-    label = gtk_label_new (_("Open location of media file or live stream"));
+    gtk_container_add (GTK_CONTAINER (GTK_DIALOG (chooser)->vbox), vbox);
     
-    gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
-    
-    entry = gtk_entry_new ();
-    
-    gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0);
-    
-    bbox = gtk_hbutton_box_new ();
-    gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
-    gtk_box_set_spacing (GTK_BOX (bbox), 6);
-    
-    gtk_box_pack_end (GTK_BOX (box), bbox, FALSE, FALSE, 4);
-    
-    open_w = gtk_button_new_from_stock (GTK_STOCK_OK);
-    close_w = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
-    
-    gtk_container_add (GTK_CONTAINER (bbox), close_w);
-    gtk_container_add (GTK_CONTAINER (bbox), open_w);
-    
-    
-    g_signal_connect_swapped (open_w, "clicked",
-			      G_CALLBACK (parole_media_chooser_open_location_cb), chooser);
-		      
-    g_signal_connect_swapped (close_w, "clicked",
-		              G_CALLBACK (parole_media_chooser_close), chooser);
-    
-    g_signal_connect_swapped (window, "destroy",
-			      G_CALLBACK (parole_media_chooser_close), chooser);
-    
-    chooser->priv->window = window;
-    chooser->priv->open = TRUE;
-    chooser->priv->entry = entry;
-    
-    gtk_widget_show_all (window);
+    gtk_builder_connect_signals (builder, chooser);
+    g_signal_connect (chooser, "destroy",
+		      G_CALLBACK (parole_media_chooser_close), chooser);
+    g_object_unref (builder);
 }
 
 static void
@@ -600,58 +518,46 @@
                       G_TYPE_NONE, 1, G_TYPE_OBJECT);
 
     object_class->finalize = parole_media_chooser_finalize;
-
-    g_type_class_add_private (klass, sizeof (ParoleMediaChooserPrivate));
 }
 
 static void
 parole_media_chooser_init (ParoleMediaChooser *chooser)
 {
-    GtkBuilder *builder;
-    
-    chooser->priv = PAROLE_MEDIA_CHOOSER_GET_PRIVATE (chooser);
-    
-    builder = parole_builder_new ();
-    
-    chooser->priv->parent = GTK_WIDGET (gtk_builder_get_object (builder, "main-window"));
-    
-    chooser->priv->filter = gtk_file_filter_new ();
-    gtk_file_filter_add_mime_type (chooser->priv->filter, "video/*");
-    gtk_file_filter_add_mime_type (chooser->priv->filter, "audio/*");
+    gtk_window_set_modal (GTK_WINDOW (chooser), TRUE);
 }
 
-ParoleMediaChooser *
-parole_media_chooser_new (void)
+static GtkWidget *
+parole_media_chooser_new (GtkWidget *parent)
 {
-    if ( parole_media_chooser_object )
-    {
-	g_object_ref (parole_media_chooser_object);
-    }
-    else
-    {
-	parole_media_chooser_object = g_object_new (PAROLE_TYPE_MEDIA_CHOOSER, NULL);
-	g_object_add_weak_pointer (parole_media_chooser_object, &parole_media_chooser_object);
-    }
-
-    return PAROLE_MEDIA_CHOOSER (parole_media_chooser_object);
+    ParoleMediaChooser *chooser;
+        
+    chooser = g_object_new (PAROLE_TYPE_MEDIA_CHOOSER, NULL);
+    
+    if ( parent )
+	gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (parent));
+    
+    return GTK_WIDGET (chooser);
 }
 
-void parole_media_chooser_open (ParoleMediaChooser *chooser, gboolean multiple)
+GtkWidget *parole_media_chooser_open_local (GtkWidget *parent, gboolean multiple)
 {
-    g_return_if_fail (PAROLE_IS_MEDIA_CHOOSER (chooser));
+    GtkWidget *dialog;
     
-    if ( chooser->priv->open )
-	return;
+    dialog = parole_media_chooser_new (parent);
 	
-    parole_media_chooser_open_internal (chooser, multiple);
+    parole_media_chooser_open_internal (dialog, multiple);
+    gtk_window_set_default_size (GTK_WINDOW (dialog), 680, 480);
+    
+    return dialog;
 }
 
-void parole_media_chooser_open_location (ParoleMediaChooser *chooser)
+GtkWidget *parole_media_chooser_open_location (GtkWidget *parent)
 {
-    g_return_if_fail (PAROLE_IS_MEDIA_CHOOSER (chooser));
+    GtkWidget *dialog;
     
-    if ( chooser->priv->open )
-	return;
+    dialog = parole_media_chooser_new (parent);
 	
-    parole_media_chooser_open_location_internal (chooser);
+    parole_media_chooser_open_location_internal (dialog);
+    
+    return dialog;
 }

Modified: parole/trunk/src/mediachooser.h
===================================================================
--- parole/trunk/src/mediachooser.h	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/mediachooser.h	2009-06-10 19:01:00 UTC (rev 7525)
@@ -22,6 +22,8 @@
 #define __PAROLE_MEDIA_CHOOSER_H
 
 #include <glib-object.h>
+#include <gtk/gtk.h>
+
 #include "mediafile.h"
 
 G_BEGIN_DECLS
@@ -34,14 +36,13 @@
 
 typedef struct
 {
-    GObject         		 parent;
-    ParoleMediaChooserPrivate     *priv;
+    GtkDialog         		 parent;
     
 } ParoleMediaChooser;
 
 typedef struct
 {
-    GObjectClass 		 parent_class;
+    GtkDialogClass 		 parent_class;
     
     void			 (*media_files_opened)		    (ParoleMediaChooser *chooser,
 								     GPtrArray *array);
@@ -52,12 +53,11 @@
 } ParoleMediaChooserClass;
 
 GType        			 parole_media_chooser_get_type      (void) G_GNUC_CONST;
-ParoleMediaChooser       	*parole_media_chooser_new           (void);
 
-void				 parole_media_chooser_open	    (ParoleMediaChooser *chooser,
+GtkWidget			*parole_media_chooser_open_local    (GtkWidget *parent,
 								     gboolean multiple);
 								     
-void				 parole_media_chooser_open_location (ParoleMediaChooser *chooser);
+GtkWidget			*parole_media_chooser_open_location (GtkWidget *parent);
 
 G_END_DECLS
 

Modified: parole/trunk/src/medialist.c
===================================================================
--- parole/trunk/src/medialist.c	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/medialist.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -37,6 +37,39 @@
 #include "mediachooser.h"
 #include "builder.h"
 
+/*
+ * Callbacks for GtkBuilder
+ */
+void		parole_media_list_media_up_clicked_cb 	(GtkButton *button, 
+							 ParoleMediaList *list);
+							 
+void		parole_media_list_media_down_clicked_cb (GtkButton *button, 
+							 ParoleMediaList *list);
+							 
+void		parole_media_list_add_clicked_cb 	(GtkButton *button, 
+							 ParoleMediaList *list);
+							 
+void		parole_media_list_remove_clicked_cb 	(GtkButton *button, 
+							 ParoleMediaList *list);
+
+void		parole_media_list_row_activated_cb 	(GtkTreeView *view, 
+							 GtkTreePath *path,
+							 GtkTreeViewColumn *col, 
+							 ParoleMediaList *list);
+
+void		parole_media_list_cursor_changed_cb 	(GtkTreeView *view, 
+							 ParoleMediaList *list);
+
+gboolean	parole_media_list_button_release_event  (GtkWidget *widget, 
+							 GdkEventButton *ev, 
+							 ParoleMediaList *list);
+/*
+ * End of GtkBuilder callbacks
+ */
+
+
+#define PLAYLIST_FILE INTERFACES_DIR "/playlist.ui"
+
 #define PAROLE_MEDIA_LIST_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_MEDIA_LIST, ParoleMediaListPrivate))
 
@@ -44,12 +77,7 @@
 {
     GtkWidget 	  	*view;
     GtkWidget		*box;
-    
-    GtkWidget		*hide_show;
-    gboolean		 hidden;
-    
     GtkListStore	*store;
-    ParoleMediaChooser 	*chooser;
 };
 
 enum
@@ -61,7 +89,7 @@
 
 static guint signals [LAST_SIGNAL] = { 0 };
 
-G_DEFINE_TYPE (ParoleMediaList, parole_media_list, G_TYPE_OBJECT)
+G_DEFINE_TYPE (ParoleMediaList, parole_media_list, GTK_TYPE_VBOX)
 
 static void
 parole_media_list_add (ParoleMediaList *list, ParoleMediaFile *file, gboolean emit)
@@ -117,14 +145,45 @@
 }
 
 static void
-parole_media_list_add_clicked_cb (ParoleMediaList *list)
+parole_media_list_open_internal (ParoleMediaList *list, gboolean multiple)
 {
-    parole_media_chooser_open (list->priv->chooser, TRUE);
+    GtkWidget *chooser;
+    
+    chooser = parole_media_chooser_open_local (gtk_widget_get_toplevel (GTK_WIDGET (list)), 
+					       multiple);
+					       
+    if ( multiple )
+	g_signal_connect (G_OBJECT (chooser), "media_files_opened",
+		          G_CALLBACK (parole_media_list_files_opened_cb), list);
+    else
+	g_signal_connect (G_OBJECT (chooser), "media_file_opened",
+		          G_CALLBACK (parole_media_list_file_opened_cb), list);
+    
+    gtk_widget_show_all (GTK_WIDGET (chooser));
 }
 
 static void
-parole_media_list_remove_clicked_cb (ParoleMediaList *list)
+parole_media_list_open_location_internal (ParoleMediaList *list)
 {
+    GtkWidget *chooser;
+    
+    chooser = parole_media_chooser_open_location (gtk_widget_get_toplevel (GTK_WIDGET (list)));
+					       
+    g_signal_connect (G_OBJECT (chooser), "media_file_opened",
+		          G_CALLBACK (parole_media_list_file_opened_cb), list);
+    
+    gtk_widget_show_all (GTK_WIDGET (chooser));
+}
+
+void
+parole_media_list_add_clicked_cb (GtkButton *button, ParoleMediaList *list)
+{
+    parole_media_list_open_internal (list, TRUE);
+}
+
+void
+parole_media_list_remove_clicked_cb (GtkButton *button, ParoleMediaList *list)
+{
     GtkTreeSelection *sel;
     GtkTreeIter iter;
     
@@ -149,8 +208,8 @@
 	g_signal_emit (G_OBJECT (list), signals [MEDIA_CURSOR_CHANGED], 0, FALSE);
 }
 
-static void
-parole_media_list_media_down_clicked_cb (ParoleMediaList *list)
+void
+parole_media_list_media_down_clicked_cb (GtkButton *button, ParoleMediaList *list)
 {
     GtkTreeSelection *sel;
     GtkTreeIter iter;
@@ -181,8 +240,8 @@
     gtk_tree_iter_free (pos_iter);
 }
 
-static void
-parole_media_list_media_up_clicked_cb (ParoleMediaList *list)
+void
+parole_media_list_media_up_clicked_cb (GtkButton *button, ParoleMediaList *list)
 {
     GtkTreeSelection *sel;
     GtkTreeIter iter;
@@ -216,9 +275,9 @@
     gtk_tree_iter_free (pos_iter);
 }
 
-static void
-parole_media_list_row_activated (GtkTreeView *view, GtkTreePath *path, 
-			       GtkTreeViewColumn *col, ParoleMediaList *list)
+void
+parole_media_list_row_activated_cb (GtkTreeView *view, GtkTreePath *path, 
+				    GtkTreeViewColumn *col, ParoleMediaList *list)
 {
     GtkTreeModel *model;
     GtkTreeRowReference *row;
@@ -231,7 +290,7 @@
     g_signal_emit (G_OBJECT (list), signals [MEDIA_ACTIVATED], 0, row);
 }
 
-static void
+void
 parole_media_list_cursor_changed_cb (GtkTreeView *view, ParoleMediaList *list)
 {
     GtkTreeSelection *sel;
@@ -279,10 +338,9 @@
                     button, activate_time);
 }
 
-static gboolean
+gboolean
 parole_media_list_button_release_event (GtkWidget *widget, GdkEventButton *ev, ParoleMediaList *list)
 {
-    
     if ( ev->button == 3 )
     {
 	parole_media_list_show_menu (list, ev->button, ev->time);
@@ -299,8 +357,6 @@
 
     list = PAROLE_MEDIA_LIST (object);
 
-    g_object_unref (list->priv->chooser);
-
     G_OBJECT_CLASS (parole_media_list_parent_class)->finalize (object);
 }
 
@@ -359,106 +415,45 @@
     gtk_tree_view_append_column (GTK_TREE_VIEW (list->priv->view), col);
     gtk_tree_view_column_set_title (col, _("Media list"));
     
-    g_signal_connect (G_OBJECT (list->priv->view), "row_activated",
-		      G_CALLBACK (parole_media_list_row_activated), list);
-
-    g_signal_connect (G_OBJECT (list->priv->view), "cursor_changed",
-		      G_CALLBACK (parole_media_list_cursor_changed_cb), list);
-    
-    g_signal_connect (G_OBJECT (list->priv->view), "button_release_event",
-		      G_CALLBACK (parole_media_list_button_release_event), list);
-    
     list->priv->store = list_store;
 }
 
 static void
-parole_media_show_or_hide (ParoleMediaList *list)
-{
-    GtkWidget *img;
-    
-    g_object_get (G_OBJECT (list->priv->hide_show),
-		  "image", &img,
-		  NULL);
-		  
-    if ( list->priv->hidden )
-    {
-	g_object_set (G_OBJECT (img),
-		      "stock", GTK_STOCK_GO_FORWARD,
-		      NULL);
-		      
-	list->priv->hidden = FALSE;
-	gtk_widget_show_all (list->priv->box);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (list->priv->hide_show), _("Hide playlist"));
-    }
-    else
-    {
-	g_object_set (G_OBJECT (img),
-		      "stock", GTK_STOCK_GO_BACK,
-		      NULL);
-		      
-	gtk_widget_hide_all (list->priv->box);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (list->priv->hide_show), _("Show playlist"));
-	
-	list->priv->hidden = TRUE;
-    }
-    g_object_unref (img);
-}
-
-static void
 parole_media_list_init (ParoleMediaList *list)
 {
     GtkBuilder *builder;
+    GtkWidget  *box;
     
     list->priv = PAROLE_MEDIA_LIST_GET_PRIVATE (list);
     
-    list->priv->hidden = TRUE;
+    builder = parole_builder_new_from_file (PLAYLIST_FILE);
     
-    builder = parole_builder_new ();
-    
     list->priv->view = GTK_WIDGET (gtk_builder_get_object (builder, "media-list"));
-    list->priv->box = GTK_WIDGET (gtk_builder_get_object (builder, "list-box"));
+    box = GTK_WIDGET (gtk_builder_get_object (builder, "playlist-box"));
     
     parole_media_list_setup_view (list);
-
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "add-media"), "clicked",
-			      G_CALLBACK (parole_media_list_add_clicked_cb), list);
     
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "remove-media"), "clicked",
-			      G_CALLBACK (parole_media_list_remove_clicked_cb), list);
-    
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "media-down"), "clicked",
-			      G_CALLBACK (parole_media_list_media_down_clicked_cb), list);
-			      
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "media-up"), "clicked",
-			      G_CALLBACK (parole_media_list_media_up_clicked_cb), list);
-    
-    list->priv->hide_show = GTK_WIDGET (gtk_builder_get_object (builder, "show-hide-list"));
-    
-    parole_media_show_or_hide (list);
-    
-    g_signal_connect_swapped (G_OBJECT (list->priv->hide_show), "clicked",
-			      G_CALLBACK (parole_media_show_or_hide), list);
-		    
+    gtk_builder_connect_signals (builder, list);
 
-    list->priv->chooser = parole_media_chooser_new ();
-    
-    g_signal_connect (G_OBJECT (list->priv->chooser), "media_file_opened",
-		      G_CALLBACK (parole_media_list_file_opened_cb), list);
-		      
-    g_signal_connect (G_OBJECT (list->priv->chooser), "media_files_opened",
-		      G_CALLBACK (parole_media_list_files_opened_cb), list);
-    
+    gtk_box_pack_start (GTK_BOX (list), box, TRUE, TRUE, 0);
+
     g_object_unref (builder);
+    
+    gtk_widget_show_all (GTK_WIDGET (list));
 }
 
-ParoleMediaList *
+GtkWidget *
 parole_media_list_new (void)
 {
     ParoleMediaList *list = NULL;
     list = g_object_new (PAROLE_TYPE_MEDIA_LIST, NULL);
-    return list;
+    return GTK_WIDGET (list);
 }
 
+/*
+ * Public functions.
+ * 
+ */
 GtkTreeRowReference *parole_media_list_get_next_row (ParoleMediaList *list, GtkTreeRowReference *row)
 {
     GtkTreeRowReference *next;
@@ -524,20 +519,12 @@
     }
 }
 
-/*
- * Called by ParolePlay when going to full screen mode
- */
-void parole_media_list_set_visible (ParoleMediaList *list, gboolean visible)
+void parole_media_list_open (ParoleMediaList *list, gboolean multiple)
 {
-    if ( visible )
-    {
-	if ( !list->priv->hidden )
-	    gtk_widget_show_all (GTK_WIDGET (list->priv->box));
-	gtk_widget_show (list->priv->hide_show);
-    }
-    else
-    {
-	gtk_widget_hide_all (GTK_WIDGET (list->priv->box));
-	gtk_widget_hide (list->priv->hide_show);
-    }
+    parole_media_list_open_internal (list, multiple);
 }
+
+void parole_media_list_open_location (ParoleMediaList *list)
+{
+    parole_media_list_open_location_internal (list);
+}

Modified: parole/trunk/src/medialist.h
===================================================================
--- parole/trunk/src/medialist.h	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/medialist.h	2009-06-10 19:01:00 UTC (rev 7525)
@@ -42,14 +42,15 @@
 
 typedef struct
 {
-    GObject         		 parent;
+    GtkVBox         		 parent;
+    
     ParoleMediaListPrivate     	*priv;
     
 } ParoleMediaList;
 
 typedef struct
 {
-    GObjectClass  		 parent_class;
+    GtkVBoxClass  		 parent_class;
     
     void			(*media_activated)		    (ParoleMediaList *list,
 								     GtkTreeRowReference *row);
@@ -60,8 +61,9 @@
 } ParoleMediaListClass;
 
 GType        			 parole_media_list_get_type         (void) G_GNUC_CONST;
-ParoleMediaList       		*parole_media_list_new              (void);
 
+GtkWidget       		*parole_media_list_new              (void);
+
 GtkTreeRowReference		*parole_media_list_get_selected_row (ParoleMediaList *list);
 
 GtkTreeRowReference             *parole_media_list_get_next_row     (ParoleMediaList *list,
@@ -71,9 +73,10 @@
 								     GtkTreeRowReference *row,
 								     GdkPixbuf *pix);
 								  
-void				 parole_media_list_set_visible 	    (ParoleMediaList *list,
-								     gboolean visible);
+void				 parole_media_list_open		    (ParoleMediaList *list,
+								     gboolean multiple);
 
+void			         parole_media_list_open_location    (ParoleMediaList *list);
 G_END_DECLS
 
 #endif /* __PAROLE_MEDIA_LIST_H */

Modified: parole/trunk/src/player.c
===================================================================
--- parole/trunk/src/player.c	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/player.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -26,17 +26,18 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 
-#include <gtk/gtk.h>
-
 #include "player.h"
 #include "builder.h"
 #include "gst.h"
 #include "medialist.h"
+#include "mediachooser.h"
 #include "mediafile.h"
-#include "mediachooser.h"
 #include "sidebar.h"
 #include "statusbar.h"
 #include "screensaver.h"
@@ -45,14 +46,76 @@
 #include "enum-gtypes.h"
 #include "debug.h"
 
+/*
+ * GtkBuilder Callbacks
+ */
+gboolean	parole_player_range_button_press 	(GtkWidget *widget, 
+							 GdkEventButton *ev, 
+							 ParolePlayer *player);
+
+gboolean	parole_player_range_button_release	(GtkWidget *widget,
+							 GdkEventButton *ev,
+							 ParolePlayer *player);
+
+void            parole_player_range_value_changed       (GtkRange *range, 
+							 ParolePlayer *player);
+
+void            parole_player_play_pause_clicked        (GtkButton *button, 
+							 ParolePlayer *player);
+
+void            parole_player_stop_clicked              (GtkButton *button, 
+							 ParolePlayer *player);
+
+void            parole_player_destroy_cb                (GtkObject *window, 
+							 ParolePlayer *player);
+
+void		parole_player_show_hide_playlist	(GtkButton *button,
+							 ParolePlayer *player);
+
+/*Menu items callbacks*/
+void            parole_player_menu_open_cb              (GtkWidget *widget, 
+							 ParolePlayer *player);
+
+void            parole_player_menu_open_location_cb     (GtkWidget *widget, 
+							 ParolePlayer *player);
+
+void            parole_player_menu_add_cb               (GtkWidget *widget, 
+							 ParolePlayer *player);
+
+void            parole_player_menu_exit_cb              (GtkWidget *widget,
+							 ParolePlayer *player);
+
+
+void            parole_player_volume_value_changed_cb   (GtkRange *range, 
+							 ParolePlayer *player);
+
+void		parole_player_full_screen_activated_cb  (GtkWidget *widget,
+							 ParolePlayer *player);
+
+gboolean	parole_player_key_press 		(GtkWidget *widget, 
+							 GdkEventKey *ev, 
+							 ParolePlayer *player);
+/*
+ * End of GtkBuilder Callbacks
+ */
+
+#define INTERFACE_FILE INTERFACES_DIR "/parole.ui"
+
 #define PAROLE_PLAYER_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_PLAYER, ParolePlayerPrivate))
 
 struct ParolePlayerPrivate
 {
+    ParoleMediaList	*list;
+    ParoleSidebar       *sidebar;
+    ParoleStatusbar     *status;
+    ParoleScreenSaver   *screen_saver;
+
     GtkWidget 		*gst;
+
     GtkWidget 		*window;
-    
+    GtkWidget		*playlist_box;
+    GtkWidget		*show_hide_playlist;
     GtkWidget		*play_pause;
     GtkWidget		*stop;
     GtkWidget		*range;
@@ -61,7 +124,7 @@
     GtkWidget		*volume_image;
     GtkWidget		*menu_bar;
     GtkWidget		*play_box;
-    
+     
     gboolean             exit;
     
     gboolean		 full_screen;
@@ -72,15 +135,43 @@
     gboolean		 buffering;
     
     GtkTreeRowReference *row;
-    
-    ParoleMediaList	*list;
-    ParoleSidebar       *sidebar;
-    ParoleStatusbar     *status;
-    ParoleScreenSaver   *screen_saver;
+        
 };
 
 G_DEFINE_TYPE (ParolePlayer, parole_player, G_TYPE_OBJECT)
 
+void parole_player_show_hide_playlist (GtkButton *button, ParolePlayer *player)
+{
+    GtkWidget *img;
+    gboolean   visible;
+    
+    g_object_get (G_OBJECT (player->priv->show_hide_playlist),
+		  "image", &img,
+		  NULL);
+
+    visible = GTK_WIDGET_VISIBLE (player->priv->playlist_box);
+
+    if ( !visible )
+    {
+	g_object_set (G_OBJECT (img),
+		      "stock", GTK_STOCK_GO_FORWARD,
+		      NULL);
+		      
+	gtk_widget_show_all (player->priv->playlist_box);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (player->priv->show_hide_playlist), _("Hide playlist"));
+    }
+    else
+    {
+	g_object_set (G_OBJECT (img),
+		      "stock", GTK_STOCK_GO_BACK,
+		      NULL);
+		      
+	gtk_widget_hide_all (player->priv->playlist_box);
+	gtk_widget_set_tooltip_text (GTK_WIDGET (player->priv->show_hide_playlist), _("Show playlist"));
+    }
+    g_object_unref (img);
+}
+
 static void
 parole_player_change_range_value (ParolePlayer *player, gdouble value)
 {
@@ -154,9 +245,27 @@
     g_object_set (G_OBJECT (img),
 		  "stock", stock_id,
 		  NULL);
+
+    g_object_unref (img);
 }
 
 static void
+parole_player_set_playpause_button_image (GtkWidget *widget, const gchar *stock_id)
+{
+    GtkWidget *img;
+    
+    g_object_get (G_OBJECT (widget),
+		  "image", &img,
+		  NULL);
+		  
+    g_object_set (G_OBJECT (img),
+		  "stock", stock_id,
+		  NULL);
+
+    g_object_unref (img);
+}
+
+static void
 parole_player_playing (ParolePlayer *player, const ParoleStream *stream)
 {
     GdkPixbuf *pix = NULL;
@@ -168,21 +277,21 @@
     
     parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, pix);
     
-    gtk_widget_set_sensitive (player->priv->play_pause, TRUE);
-    gtk_widget_set_sensitive (player->priv->stop, TRUE);
-    
-    parole_player_set_playpause_widget_image (player->priv->play_pause, GTK_STOCK_MEDIA_PAUSE);
-    
     g_object_get (G_OBJECT (stream),
 		  "seekable", &seekable,
 		  "duration", &duration,
 		  NULL);
 		  
+    gtk_widget_set_sensitive (player->priv->play_pause, TRUE);
+    gtk_widget_set_sensitive (player->priv->stop, TRUE);
+    
+    parole_player_set_playpause_button_image (player->priv->play_pause, GTK_STOCK_MEDIA_PAUSE);
+    
     gtk_widget_set_sensitive (player->priv->range, seekable);
     
     if ( seekable )
     {
-	parole_statusbar_set_duration (player->priv->status, duration );
+	parole_statusbar_set_duration (player->priv->status, duration);
 	gtk_range_set_range (GTK_RANGE (player->priv->range), 0, duration);
     }
     else
@@ -223,8 +332,8 @@
 static void
 parole_player_quit (ParolePlayer *player)
 {
+    gtk_widget_destroy (player->priv->window);
     g_object_unref (player);
-    gtk_widget_destroy (player->priv->window);
     gtk_main_quit ();
 }
 
@@ -299,6 +408,11 @@
     
     PAROLE_DEBUG_ENUM ("State callback", state, ENUM_GTYPE_MEDIA_STATE);
     
+    if ( state == PAROLE_MEDIA_STATE_PLAYING && has_video )
+	parole_screen_saver_inhibit (player->priv->screen_saver);
+    else
+	parole_screen_saver_uninhibit (player->priv->screen_saver);
+
     g_object_get (G_OBJECT (stream),
 		  "has-video", &has_video,
 		  NULL);
@@ -320,17 +434,11 @@
     else
     {
 	parole_player_stopped (player);
-    }
-    
-    if ( state == PAROLE_MEDIA_STATE_PLAYING && has_video )
-	parole_screen_saver_inhibit (player->priv->screen_saver);
-    else
-	parole_screen_saver_uninhibit (player->priv->screen_saver);
-    
+    }  
 }
 
-static void
-parole_player_play_pause_clicked (ParolePlayer *player)
+void
+parole_player_play_pause_clicked (GtkButton *button, ParolePlayer *player)
 {
     if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
 	parole_gst_pause (PAROLE_GST (player->priv->gst));
@@ -340,13 +448,13 @@
 	parole_player_play_selected_row (player);
 }
 
-static void
-parole_player_stop_clicked (ParolePlayer *player)
+void
+parole_player_stop_clicked (GtkButton *button, ParolePlayer *player)
 {
     parole_gst_stop (PAROLE_GST (player->priv->gst));
 }
 
-static gboolean
+gboolean
 parole_player_range_button_release (GtkWidget *widget, GdkEventButton *ev, ParolePlayer *player)
 {
     if ( ev->button == 3 )
@@ -357,7 +465,7 @@
     return FALSE;
 }
 
-static gboolean
+gboolean
 parole_player_range_button_press (GtkWidget *widget, GdkEventButton *ev, ParolePlayer *player)
 {
     gdouble value;
@@ -372,7 +480,7 @@
     return FALSE;
 }
 
-static void
+void
 parole_player_range_value_changed (GtkRange *range, ParolePlayer *player)
 {
     gdouble value;
@@ -390,8 +498,8 @@
 parole_player_error_cb (ParoleGst *gst, const gchar *error, ParolePlayer *player)
 {
     xfce_err ("%s", error);
+    parole_screen_saver_uninhibit (player->priv->screen_saver);
     parole_player_stopped (player);
-    parole_screen_saver_uninhibit (player->priv->screen_saver);
 }
 
 static void
@@ -411,7 +519,7 @@
     }
 }
 
-static void
+void
 parole_player_destroy_cb (GtkObject *window, ParolePlayer *player)
 {
     player->priv->exit = TRUE;
@@ -447,26 +555,33 @@
 {
     if ( player->priv->full_screen )
     {
-	parole_media_list_set_visible (player->priv->list, TRUE);
+        
 	parole_sidebar_set_visible (player->priv->sidebar, TRUE);
 	parole_statusbar_set_visible (player->priv->status, TRUE);
+	gtk_widget_show (player->priv->play_box);
 	gtk_widget_show (player->priv->menu_bar);
-	gtk_widget_show (player->priv->play_box);
+	gtk_widget_show (player->priv->playlist_box);
+	gtk_window_unfullscreen (GTK_WINDOW (player->priv->window));
 	player->priv->full_screen = FALSE;
-	gtk_window_unfullscreen (GTK_WINDOW (player->priv->window));
     }
     else
     {
-	parole_media_list_set_visible (player->priv->list, FALSE);
+        
 	parole_sidebar_set_visible (player->priv->sidebar, FALSE);
 	parole_statusbar_set_visible (player->priv->status, FALSE);
+	gtk_widget_hide (player->priv->play_box);
 	gtk_widget_hide (player->priv->menu_bar);
-	gtk_widget_hide (player->priv->play_box);
+	gtk_widget_hide (player->priv->playlist_box);
+	gtk_window_fullscreen (GTK_WINDOW (player->priv->window));
 	player->priv->full_screen = TRUE;
-	gtk_window_fullscreen (GTK_WINDOW (player->priv->window));
     }
 }
 
+void parole_player_full_screen_activated_cb (GtkWidget *widget, ParolePlayer *player)
+{
+    parole_player_full_screen_menu_item_activate (player);
+}
+
 static void
 parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time)
 {
@@ -573,47 +688,27 @@
     return FALSE;
 }
 
-static void
-parole_player_open_media_chooser (gboolean multiple)
+void
+parole_player_menu_open_cb (GtkWidget *widget, ParolePlayer *player)
 {
-    ParoleMediaChooser *chooser;
-    
-    chooser = parole_media_chooser_new ();
-    
-    parole_media_chooser_open (chooser, multiple);
-    
-    /*
-     * We drop the reference here as the object is 
-     * referenced in the medialist which will send events
-     * about media files added by the media chooser.
-     */
-    g_object_unref (chooser);
+    parole_media_list_open (player->priv->list, FALSE);
 }
 
-static void
-parole_player_menu_open_cb (ParolePlayer *player)
+void
+parole_player_menu_open_location_cb (GtkWidget *widget, ParolePlayer *player)
 {
-    parole_player_open_media_chooser (FALSE);
+    parole_media_list_open_location (player->priv->list);
 }
 
-static void
-parole_player_menu_open_location_cb (ParolePlayer *player)
+void
+parole_player_menu_add_cb (GtkWidget *widget, ParolePlayer *player)
 {
-    ParoleMediaChooser *chooser;
-    chooser = parole_media_chooser_new ();
-    parole_media_chooser_open_location (chooser);
-    g_object_unref (chooser);
+    parole_media_list_open (player->priv->list, TRUE);
 }
 
-static void
-parole_player_menu_add_cb (ParolePlayer *player)
+void
+parole_player_menu_exit_cb (GtkWidget *widget, ParolePlayer *player)
 {
-    parole_player_open_media_chooser (TRUE);
-}
-
-static void
-parole_player_menu_exit_cb (ParolePlayer *player)
-{
     parole_player_destroy_cb (NULL, player);
 }
 
@@ -631,15 +726,12 @@
 }
 
 static void
-parole_player_change_volume (ParolePlayer *player, gdouble value)
+parole_player_set_volume_image (ParolePlayer *player, gdouble value)
 {
     GdkPixbuf *icon;
 
-    parole_gst_set_volume (PAROLE_GST (player->priv->gst), value);
-    
     icon = xfce_themed_icon_load (parole_player_get_volume_icon_name (value), 
 				  player->priv->volume_image->allocation.width);
-    
     if ( icon )
     {
 	g_object_set (G_OBJECT (player->priv->volume_image),
@@ -650,10 +742,17 @@
 }
 
 static void
-parole_player_volume_value_changed_cb (ParolePlayer *player)
+parole_player_change_volume (ParolePlayer *player, gdouble value)
 {
+    parole_gst_set_volume (PAROLE_GST (player->priv->gst), value);
+    parole_player_set_volume_image (player, value);
+}
+
+void
+parole_player_volume_value_changed_cb (GtkRange *range, ParolePlayer *player)
+{
     gdouble value;
-    value = gtk_range_get_value (GTK_RANGE (player->priv->volume));
+    value = gtk_range_get_value (range);
     parole_player_change_volume (player, value);
     parole_rc_write_entry_int ("volume", (gint)(value * 100));
 }
@@ -667,7 +766,6 @@
 
     TRACE ("start");
 
-    g_object_unref (player->priv->list);
     g_object_unref (player->priv->gst);
     g_object_unref (player->priv->sidebar);
     g_object_unref (player->priv->status);
@@ -686,6 +784,18 @@
     g_type_class_add_private (klass, sizeof (ParolePlayerPrivate));
 }
 
+gboolean
+parole_player_key_press (GtkWidget *widget, GdkEventKey *ev, ParolePlayer *player)
+{
+    if ( ev->keyval == GDK_F11 )
+    {
+	parole_player_full_screen_menu_item_activate (player);
+	return TRUE;
+    }
+    
+    return FALSE;
+}
+
 static void
 parole_player_init (ParolePlayer *player)
 {
@@ -693,19 +803,20 @@
     
     player->priv = PAROLE_PLAYER_GET_PRIVATE (player);
     
-    builder = parole_builder_new ();
+    builder = parole_builder_get_main_interface ();
     
     player->priv->gst = parole_gst_new ();
     /*
      * Since ParoleGst is derived from GtkWidget and packed in the media output
      * box the destroy event on the window will destroy the ParoleGst widget
-     * se we ref it to clean up the gst objects before quitting.
+     * so we ref it to clean up the gst objects before quitting.
      */
     g_object_ref (player->priv->gst);
     
     player->priv->sidebar = parole_sidebar_new ();
     player->priv->status = parole_statusbar_new ();
     player->priv->screen_saver = parole_screen_saver_new ();
+    player->priv->list = PAROLE_MEDIA_LIST (parole_media_list_new ());
     
     player->priv->state = PAROLE_MEDIA_STATE_STOPPED;
     player->priv->user_seeking = FALSE;
@@ -713,7 +824,11 @@
     player->priv->exit = FALSE;
     player->priv->full_screen = FALSE;
     player->priv->buffering = FALSE;
+    player->priv->row = NULL;
     
+    /*
+     * Gst signals
+     */
     g_signal_connect (G_OBJECT (player->priv->gst), "media_state",
 		      G_CALLBACK (parole_player_media_state_cb), player);
 		      
@@ -732,81 +847,58 @@
     g_signal_connect (G_OBJECT (player->priv->gst), "motion_notify_event",
 		      G_CALLBACK (parole_player_gst_widget_motion_notify_event), player);
     
-    player->priv->row = NULL;
-    
-    gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "output")), player->priv->gst,
-			TRUE, TRUE, 0);
-			
-    gtk_widget_realize (player->priv->gst);
-    gtk_widget_show (player->priv->gst);
-    
     player->priv->window = GTK_WIDGET (gtk_builder_get_object (builder, "main-window"));
     
-    g_signal_connect (G_OBJECT (player->priv->window), "destroy",
-		      G_CALLBACK (parole_player_destroy_cb), player);
-    
+    player->priv->play_pause = GTK_WIDGET (gtk_builder_get_object (builder, "play-pause"));
     player->priv->stop = GTK_WIDGET (gtk_builder_get_object (builder, "stop"));
-    player->priv->play_pause = GTK_WIDGET (gtk_builder_get_object (builder, "play-pause"));
     player->priv->range = GTK_WIDGET (gtk_builder_get_object (builder, "scale"));
     
-    g_signal_connect (G_OBJECT (player->priv->range), "button_press_event",
-		      G_CALLBACK (parole_player_range_button_press), player);
-		      
-    g_signal_connect (G_OBJECT (player->priv->range), "button_release_event",
-		      G_CALLBACK (parole_player_range_button_release), player);
+    player->priv->volume = GTK_WIDGET (gtk_builder_get_object (builder, "volume"));
+    player->priv->volume_image = GTK_WIDGET (gtk_builder_get_object (builder, "volume-image"));
     
-    g_signal_connect (G_OBJECT (player->priv->range), "value_changed",
-		      G_CALLBACK (parole_player_range_value_changed), player);
+    player->priv->menu_bar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));
+    player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, "play-box"));
+    player->priv->playlist_box = GTK_WIDGET (gtk_builder_get_object (builder, "list-box"));
+    player->priv->show_hide_playlist = GTK_WIDGET (gtk_builder_get_object (builder, "show-hide-list"));
     
-    g_signal_connect_swapped (G_OBJECT (player->priv->stop), "clicked",
-			      G_CALLBACK (parole_player_stop_clicked), player);
-		      
-    g_signal_connect_swapped (G_OBJECT (player->priv->play_pause), "clicked",
-			      G_CALLBACK (parole_player_play_pause_clicked), player);
-			      
+    gtk_range_set_range (GTK_RANGE (player->priv->volume), 0, 1.0);
+    
+    gtk_range_set_value (GTK_RANGE (player->priv->volume), 
+			 (gdouble) (parole_rc_read_entry_int ("volume", 100)/100.));
+    
     /*
-     * Volume range and volume image
+     * Pack the playlist.
      */
+    gtk_container_add (GTK_CONTAINER (player->priv->playlist_box), GTK_WIDGET (player->priv->list));
     
-    player->priv->volume = GTK_WIDGET (gtk_builder_get_object (builder, "volume"));
-    player->priv->volume_image = GTK_WIDGET (gtk_builder_get_object (builder, "volume-image"));
-    gtk_range_set_range (GTK_RANGE (player->priv->volume), 0, 1.0);
+    /*
+     * Pack Sidebar.
+     */
     
-    g_signal_connect_swapped (G_OBJECT (player->priv->volume), "value_changed",
-			      G_CALLBACK (parole_player_volume_value_changed_cb), player);
-    gtk_range_set_value (GTK_RANGE (player->priv->volume), (gdouble) (parole_rc_read_entry_int ("volume", 100)/100.));
-    parole_player_change_volume (player, (gdouble) (parole_rc_read_entry_int ("volume", 100)/100.));
     
-
     /*
-     * Connect to the menu items from the menu bar
+     * Pack the statusbar.
      */
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "menu-open"), "activate",
-			      G_CALLBACK (parole_player_menu_open_cb), player);
-			      
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "menu-open-location"), "activate",
-			      G_CALLBACK (parole_player_menu_open_location_cb), player);
-			      
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "menu-add"), "activate",
-			      G_CALLBACK (parole_player_menu_add_cb), player);
-			      
-    g_signal_connect_swapped (gtk_builder_get_object (builder, "menu-exit"), "activate",
-			      G_CALLBACK (parole_player_menu_exit_cb), player);
-    
-    player->priv->menu_bar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar"));
-    player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, "play-box"));
-    
     gtk_widget_show_all (player->priv->window);
     
-    g_object_unref (builder);
+    gtk_box_pack_start (GTK_BOX (gtk_builder_get_object (builder, "output")), 
+			player->priv->gst,
+			TRUE, TRUE, 0);
     
-    player->priv->list = parole_media_list_new ();
+    gtk_widget_realize (player->priv->gst);
+    gtk_widget_show (player->priv->gst);
 
+    parole_player_change_volume (player, 
+				 (gdouble) (parole_rc_read_entry_int ("volume", 100)/100.));
+
     g_signal_connect (player->priv->list, "media_activated",
 		      G_CALLBACK (parole_player_media_activated_cb), player);
 		      
     g_signal_connect (player->priv->list, "media_cursor_changed",
 		      G_CALLBACK (parole_player_media_cursor_changed_cb), player);
+
+    gtk_builder_connect_signals (builder, player);
+    g_object_unref (builder);
 }
 
 ParolePlayer *

Modified: parole/trunk/src/sidebar.c
===================================================================
--- parole/trunk/src/sidebar.c	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/sidebar.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -165,7 +165,7 @@
     
     sidebar->priv = PAROLE_SIDEBAR_GET_PRIVATE (sidebar);
     
-    builder = parole_builder_new ();
+    builder = parole_builder_get_main_interface ();
     
     sidebar->priv->visible = TRUE;
     sidebar->priv->treeview = GTK_WIDGET (gtk_builder_get_object (builder, "treeview"));

Modified: parole/trunk/src/statusbar.c
===================================================================
--- parole/trunk/src/statusbar.c	2009-06-10 12:16:14 UTC (rev 7524)
+++ parole/trunk/src/statusbar.c	2009-06-10 19:01:00 UTC (rev 7525)
@@ -76,7 +76,7 @@
     statusbar->priv = PAROLE_STATUSBAR_GET_PRIVATE (statusbar);
     statusbar->priv->duration = 0;
     
-    builder = parole_builder_new ();
+    builder = parole_builder_get_main_interface ();
     
     box = GTK_WIDGET (gtk_builder_get_object (builder, "statusbox"));
     




More information about the Goodies-commits mailing list