[Goodies-commits] r7473 - in parole/trunk: . data/interfaces po src
Ali Abdallah
aliov at xfce.org
Sat Jun 6 15:41:52 CEST 2009
Author: aliov
Date: 2009-06-06 13:41:52 +0000 (Sat, 06 Jun 2009)
New Revision: 7473
Modified:
parole/trunk/ChangeLog
parole/trunk/configure.ac.in
parole/trunk/data/interfaces/parole.ui
parole/trunk/po/POTFILES.in
parole/trunk/src/gst.c
parole/trunk/src/gst.h
parole/trunk/src/mediachooser.c
parole/trunk/src/medialist.c
parole/trunk/src/medialist.h
parole/trunk/src/player.c
parole/trunk/src/rc-utils.c
parole/trunk/src/rc-utils.h
parole/trunk/src/sidebar.c
parole/trunk/src/statusbar.c
parole/trunk/src/statusbar.h
Log:
* Button to hide/show playlist.
* Fallback to ximagesink if xvimagesink is not found.
* set the play button hidden if there is no media
in the medialist rows.
* Provide clear menu in the playlist to clear all media
* Volume range for changing volume.
Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/ChangeLog 2009-06-06 13:41:52 UTC (rev 7473)
@@ -1,2 +1,10 @@
+2009-06-06: Ali aliov at xfce.org
+ * Button to hide/show playlist.
+ * Fallback to ximagesink if xvimagesink is not found.
+ * set the play button hidden if there is no media
+ in the medialist rows.
+ * Provide clear menu in the playlist to clear all media
+ * Volume range for changing volume.
+
2009-06-03: 10:30 Ali aliov at xfce.org
* Initial import of parole, Juste une parole.
Modified: parole/trunk/configure.ac.in
===================================================================
--- parole/trunk/configure.ac.in 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/configure.ac.in 2009-06-06 13:41:52 UTC (rev 7473)
@@ -53,10 +53,12 @@
# Check for required packages #
#=====================================================#
m4_define([gtk_minimum_version], [2.16.0])
-m4_define([glib_minimum_version], [2.16.0])
+m4_define([glib_minimum_version], [2.16.0])
+m4_define([gstreamer_minimum_version], [0.10.11])
+
m4_define([dbus_minimum_version], [0.60])
m4_define([dbus_glib_minimum_version], [0.70])
-m4_define([gstreamer_minimum_version], [0.10.11])
+
m4_define([libxfcegui4_minimum_version],[4.6.0])
m4_define([libxfce4util_minimum_version],[4.6.0])
Modified: parole/trunk/data/interfaces/parole.ui
===================================================================
--- parole/trunk/data/interfaces/parole.ui 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/data/interfaces/parole.ui 2009-06-06 13:41:52 UTC (rev 7473)
@@ -4,7 +4,7 @@
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="main-window">
<property name="window_position">center</property>
- <property name="default_width">680</property>
+ <property name="default_width">720</property>
<property name="default_height">440</property>
<child>
<object class="GtkVBox" id="vbox1">
@@ -112,7 +112,6 @@
<object class="GtkTreeView" id="treeview">
<property name="can_focus">True</property>
<property name="headers_visible">False</property>
- <property name="headers_clickable">False</property>
<property name="enable_search">False</property>
</object>
<packing>
@@ -121,374 +120,560 @@
</packing>
</child>
<child>
- <object class="GtkNotebook" id="notebook">
+ <object class="GtkHBox" id="hbox2">
<property name="visible">True</property>
- <property name="show_tabs">False</property>
- <property name="scrollable">True</property>
- <property name="group_id">0</property>
<child>
- <object class="GtkHBox" id="playerbox">
+ <object class="GtkNotebook" id="notebook">
<property name="visible">True</property>
+ <property name="show_tabs">False</property>
+ <property name="scrollable">True</property>
+ <property name="group_id">0</property>
<child>
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="orientation">vertical</property>
+ <property name="spacing">5</property>
<child>
- <object class="GtkHBox" id="output">
+ <object class="GtkHPaned" id="hpaned1">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
<child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">5</property>
- <child>
- <object class="GtkHScale" id="scale">
+ <object class="GtkVBox" id="vbox8">
<property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="draw_value">False</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="spacing">5</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkButton" id="back">
+ <object class="GtkHBox" id="output">
<property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image6</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
+ <child>
+ <placeholder/>
+ </child>
</object>
<packing>
- <property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="stop">
+ <object class="GtkVBox" id="vbox4">
<property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image7</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
- <accelerator key="s" signal="clicked"/>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkHScale" id="scale">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="draw_value">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox7">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkButton" id="back">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image6</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="stop">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image7</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ <accelerator key="s" signal="clicked"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="play-pause">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image8</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ <accelerator key="space" signal="activate"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="forward">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image9</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox8">
+ <property name="visible">True</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkImage" id="volume-image">
+ <property name="visible">True</property>
+ <property name="stock">gtk-missing-image</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHScale" id="volume">
+ <property name="width_request">100</property>
+ <property name="height_request">10</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_fill_level">True</property>
+ <property name="draw_value">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">30</property>
+ <property name="pack_type">end</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="show-hide-list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image18</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="list-box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkButton" id="play-pause">
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image8</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</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="expand">False</property>
- <property name="position">2</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="forward">
+ <object class="GtkHBox" id="hbox3">
<property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image9</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</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="position">3</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
</packing>
</child>
- <child>
- <placeholder/>
- </child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="resize">False</property>
+ <property name="shrink">False</property>
</packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="position">1</property>
+ <property name="position">0</property>
</packing>
</child>
</object>
- <packing>
- <property name="position">0</property>
- </packing>
</child>
- <child>
- <object class="GtkVSeparator" id="vseparator2">
+ <child type="tab">
+ <object class="GtkLabel" id="Player">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="label" translatable="yes">Media player</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="position">1</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="list-box">
+ <object class="GtkVBox" id="converter-box">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <object class="GtkLabel" id="label1">
<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>
+ <property name="label" translatable="yes">Nothing yet.</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Audio converter</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="recorder-box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkHBox" id="hbox3">
+ <object class="GtkLabel" id="label4">
<property name="visible">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>
+ <property name="label" translatable="yes">Nothing yet.</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">0</property>
</packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="Player">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Media player</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="converter-box">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkLabel" id="label1">
+ <child type="tab">
+ <object class="GtkLabel" id="label3">
<property name="visible">True</property>
- <property name="label" translatable="yes">Nothing yet.</property>
+ <property name="label" translatable="yes">Audio recorder</property>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio converter</property>
- </object>
- <packing>
- <property name="position">1</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="recorder-box">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
<child>
- <object class="GtkLabel" id="label4">
+ <object class="GtkVBox" id="albums-box">
<property name="visible">True</property>
- <property name="label" translatable="yes">Nothing yet.</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Nothing yet.</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">3</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio recorder</property>
- </object>
- <packing>
- <property name="position">2</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="albums-box">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkLabel" id="label5">
+ <child type="tab">
+ <object class="GtkLabel" id="album">
<property name="visible">True</property>
- <property name="label" translatable="yes">Nothing yet.</property>
+ <property name="label" translatable="yes">Albums</property>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="album">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Albums</property>
- </object>
- <packing>
- <property name="position">3</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkNotebook" id="notebook1">
- <property name="visible">True</property>
- <property name="show_tabs">False</property>
- <property name="scrollable">True</property>
- <property name="group_id">0</property>
<child>
- <object class="GtkHBox" id="playerbox1">
+ <object class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
+ <property name="show_tabs">False</property>
+ <property name="scrollable">True</property>
+ <property name="group_id">0</property>
<child>
- <object class="GtkVBox" id="vbox2">
+ <object class="GtkHBox" id="playerbox1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
<child>
- <object class="GtkHBox" id="output1">
+ <object class="GtkVBox" id="vbox5">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <placeholder/>
+ <object class="GtkHBox" id="output1">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
</child>
+ <child>
+ <object class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkHScale" id="scale1">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="draw_value">False</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkButton" id="back1">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image10</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="stop1">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image11</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ <accelerator key="s" signal="clicked"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="play-pause1">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image12</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="forward1">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image13</property>
+ <property name="relief">none</property>
+ <property name="focus_on_click">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox5">
+ <object class="GtkVSeparator" id="vseparator1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">5</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="list-box1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkHScale" id="scale1">
+ <object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
- <property name="draw_value">False</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkTreeView" id="media-list1">
+ <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>
</child>
<child>
- <object class="GtkHBox" id="hbox4">
+ <object class="GtkHBox" id="hbox5">
<property name="visible">True</property>
- <property name="spacing">5</property>
<child>
- <object class="GtkButton" id="back1">
+ <object class="GtkButton" id="add-media1">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="image">image10</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
+ <property name="image">image14</property>
</object>
<packing>
<property name="expand">False</property>
@@ -496,15 +681,11 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="stop1">
+ <object class="GtkButton" id="remove-media1">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="image">image11</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
- <accelerator key="s" signal="clicked"/>
+ <property name="image">image15</property>
</object>
<packing>
<property name="expand">False</property>
@@ -512,14 +693,11 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="play-pause1">
+ <object class="GtkButton" id="media-up1">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="image">image12</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
+ <property name="image">image16</property>
</object>
<packing>
<property name="expand">False</property>
@@ -527,245 +705,144 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="forward1">
+ <object class="GtkButton" id="media-down1">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="image">image13</property>
- <property name="relief">none</property>
- <property name="focus_on_click">False</property>
+ <property name="image">image17</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">3</property>
</packing>
</child>
- <child>
- <placeholder/>
- </child>
</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">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
- <packing>
- <property name="position">0</property>
- </packing>
</child>
- <child>
- <object class="GtkVSeparator" id="vseparator1">
+ <child type="tab">
+ <object class="GtkLabel" id="Player1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="label" translatable="yes">Media player</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="position">1</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="list-box1">
+ <object class="GtkVBox" id="converter-box1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow2">
+ <object class="GtkLabel" id="label6">
<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-list1">
- <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>
+ <property name="label" translatable="yes">Nothing yet.</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Audio converter</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="recorder-box1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkHBox" id="hbox5">
+ <object class="GtkLabel" id="label8">
<property name="visible">True</property>
- <child>
- <object class="GtkButton" id="add-media1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image14</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="remove-media1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image15</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="media-up1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image16</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="media-down1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="image">image17</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
+ <property name="label" translatable="yes">Nothing yet.</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">0</property>
</packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="Player1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Media player</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="converter-box1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkLabel" id="label6">
+ <child type="tab">
+ <object class="GtkLabel" id="label9">
<property name="visible">True</property>
- <property name="label" translatable="yes">Nothing yet.</property>
+ <property name="label" translatable="yes">Audio recorder</property>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label7">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio converter</property>
- </object>
- <packing>
- <property name="position">1</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="recorder-box1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
<child>
- <object class="GtkLabel" id="label8">
+ <object class="GtkVBox" id="albums-box1">
<property name="visible">True</property>
- <property name="label" translatable="yes">Nothing yet.</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Nothing yet.</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">3</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio recorder</property>
- </object>
- <packing>
- <property name="position">2</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="albums-box1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkLabel" id="label10">
+ <child type="tab">
+ <object class="GtkLabel" id="album1">
<property name="visible">True</property>
- <property name="label" translatable="yes">Nothing yet.</property>
+ <property name="label" translatable="yes">Albums</property>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child type="tab">
+ <placeholder/>
+ </child>
</object>
<packing>
- <property name="position">3</property>
+ <property name="position">4</property>
</packing>
</child>
<child type="tab">
- <object class="GtkLabel" id="album1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Albums</property>
- </object>
- <packing>
- <property name="position">3</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
<placeholder/>
</child>
- <child type="tab">
- <placeholder/>
- </child>
</object>
<packing>
- <property name="position">4</property>
+ <property name="position">0</property>
</packing>
</child>
- <child type="tab">
- <placeholder/>
- </child>
</object>
<packing>
<property name="position">1</property>
@@ -793,73 +870,76 @@
</object>
</child>
</object>
- <object class="GtkAction" id="action1"/>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="stock">gtk-network</property>
</object>
- <object class="GtkImage" id="image6">
+ <object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="stock">gtk-media-previous</property>
</object>
- <object class="GtkImage" id="image7">
+ <object class="GtkImage" id="image11">
<property name="visible">True</property>
<property name="stock">gtk-media-stop</property>
</object>
- <object class="GtkImage" id="image8">
+ <object class="GtkImage" id="image12">
<property name="visible">True</property>
<property name="stock">gtk-media-play</property>
</object>
- <object class="GtkImage" id="image9">
+ <object class="GtkImage" id="image13">
<property name="visible">True</property>
<property name="stock">gtk-media-next</property>
</object>
- <object class="GtkImage" id="image1">
+ <object class="GtkImage" id="image14">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
</object>
- <object class="GtkImage" id="image2">
+ <object class="GtkImage" id="image15">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
</object>
- <object class="GtkImage" id="image3">
+ <object class="GtkImage" id="image16">
<property name="visible">True</property>
<property name="stock">gtk-go-up</property>
</object>
- <object class="GtkImage" id="image4">
+ <object class="GtkImage" id="image17">
<property name="visible">True</property>
<property name="stock">gtk-go-down</property>
</object>
- <object class="GtkImage" id="image10">
+ <object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="stock">gtk-media-previous</property>
</object>
- <object class="GtkImage" id="image11">
+ <object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="stock">gtk-media-stop</property>
</object>
- <object class="GtkImage" id="image12">
+ <object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="stock">gtk-media-play</property>
</object>
- <object class="GtkImage" id="image13">
+ <object class="GtkImage" id="image9">
<property name="visible">True</property>
<property name="stock">gtk-media-next</property>
</object>
- <object class="GtkImage" id="image14">
+ <object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
</object>
- <object class="GtkImage" id="image15">
+ <object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
</object>
- <object class="GtkImage" id="image16">
+ <object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="stock">gtk-go-up</property>
</object>
- <object class="GtkImage" id="image17">
+ <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>
+ </object>
</interface>
Modified: parole/trunk/po/POTFILES.in
===================================================================
--- parole/trunk/po/POTFILES.in 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/po/POTFILES.in 2009-06-06 13:41:52 UTC (rev 7473)
@@ -1,6 +1,7 @@
data/interfaces/parole.ui
data/parole-media-player.desktop.in
src/gst.c
+src/builder.c
src/mediachooser.c
src/medialist.c
src/player.c
Modified: parole/trunk/src/gst.c
===================================================================
--- parole/trunk/src/gst.c 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/gst.c 2009-06-06 13:41:52 UTC (rev 7473)
@@ -44,7 +44,7 @@
(G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_GST, ParoleGstPrivate))
static void parole_gst_play_file_internal (ParoleGst *gst);
-static void parole_gst_change_state (ParoleGst *gst,
+static void parole_gst_change_state (ParoleGst *gst,
GstState new);
struct ParoleGstPrivate
@@ -57,7 +57,7 @@
GstState state;
GstState target;
- ParoleStream *stream;
+ ParoleStream *stream;
gulong tick_id;
gboolean seeking;
@@ -255,20 +255,21 @@
parole_gst_expose_event (GtkWidget *widget, GdkEventExpose *ev)
{
ParoleGst *gst;
-
+
if ( ev && ev->count > 0 )
return TRUE;
gst = PAROLE_GST (widget);
- g_mutex_lock (gst->priv->lock);
parole_gst_set_x_overlay (gst);
- g_mutex_unlock (gst->priv->lock);
if ( gst->priv->state < GST_STATE_PAUSED )
parole_gst_draw_logo (gst);
else
+ {
+ TRACE ("Exposing GST");
gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
+ }
return TRUE;
}
@@ -376,7 +377,7 @@
{
if ( gst->priv->state != new )
{
- TRACE ("State change %d", new);
+ TRACE ("State change new %i old %i pending %i", new, old, pending);
gst->priv->state = new;
@@ -602,10 +603,15 @@
if ( G_UNLIKELY (gst->priv->video_sink == NULL) )
{
- xfce_err (_("Unable to load xvimagesink GStreamer plugin"
- ", check your GStreamer installation"));
-
- g_error ("xvimagesink load failed");
+ g_debug ("xvimagesink not found, trying to load ximagesink");
+ gst->priv->video_sink = gst_element_factory_make ("ximagesink", "video");
+
+ if ( G_UNLIKELY (gst->priv->video_sink == NULL) )
+ {
+ xfce_err (_("Unable to load video GStreamer plugin"
+ ", check your GStreamer installation"));
+ g_error ("ximagesink load failed");
+ }
}
gst->priv->vis_sink = gst_element_factory_make ("goom", "vis");
@@ -819,3 +825,20 @@
g_warning ("Failed to seek element");
}
}
+
+void parole_gst_set_volume (ParoleGst *gst, gdouble value)
+{
+ g_object_set (G_OBJECT (gst->priv->playbin),
+ "volume", value,
+ NULL);
+}
+
+gdouble parole_gst_get_volume (ParoleGst *gst)
+{
+ gdouble volume;
+
+ g_object_get (G_OBJECT (gst->priv->playbin),
+ "volume", &volume,
+ NULL);
+ return volume;
+}
Modified: parole/trunk/src/gst.h
===================================================================
--- parole/trunk/src/gst.h 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/gst.h 2009-06-06 13:41:52 UTC (rev 7473)
@@ -81,6 +81,11 @@
void parole_gst_seek (ParoleGst *gst,
gdouble pos);
+void parole_gst_set_volume (ParoleGst *gst,
+ gdouble value);
+
+gdouble parole_gst_get_volume (ParoleGst *gst);
+
G_END_DECLS
#endif /* __PAROLE_GST_H */
Modified: parole/trunk/src/mediachooser.c
===================================================================
--- parole/trunk/src/mediachooser.c 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/mediachooser.c 2009-06-06 13:41:52 UTC (rev 7473)
@@ -399,7 +399,7 @@
if ( folder )
{
- write_string_entry ("media-chooser-folder", folder);
+ parole_rc_write_entry_string ("media-chooser-folder", folder);
g_free (folder);
}
}
@@ -424,7 +424,7 @@
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
- folder = read_string_entry ("media-chooser-folder");
+ folder = parole_rc_read_entry_string ("media-chooser-folder", NULL);
if ( folder )
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), folder);
Modified: parole/trunk/src/medialist.c
===================================================================
--- parole/trunk/src/medialist.c 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/medialist.c 2009-06-06 13:41:52 UTC (rev 7473)
@@ -45,6 +45,9 @@
GtkWidget *view;
GtkWidget *box;
+ GtkWidget *hide_show;
+ gboolean hidden;
+
GtkListStore *store;
ParoleMediaChooser *chooser;
};
@@ -52,6 +55,7 @@
enum
{
MEDIA_ACTIVATED,
+ MEDIA_CURSOR_CHANGED,
LAST_SIGNAL
};
@@ -131,6 +135,18 @@
gtk_list_store_remove (list->priv->store,
&iter);
+
+ /*
+ * Returns the number of children that iter has.
+ * As a special case, if iter is NULL,
+ * then the number of toplevel nodes is returned. Gtk API doc.
+ */
+ if ( gtk_tree_model_iter_n_children (GTK_TREE_MODEL (list->priv->store), NULL) == 0 )
+ /*
+ * Will emit the signal media_cursor_changed with FALSE because there is no any
+ * row remaining so the player can disable click on the play button.
+ */
+ g_signal_emit (G_OBJECT (list), signals [MEDIA_CURSOR_CHANGED], 0, FALSE);
}
static void
@@ -187,7 +203,7 @@
if ( !gtk_tree_path_prev (path) )
{
/* Passing NULL as the last argument will cause this call to move
- * the iter to the end of the list, Gtk API*/
+ * the iter to the end of the list, Gtk API doc*/
gtk_list_store_move_before (GTK_LIST_STORE (list->priv->store), &iter, NULL);
}
else
@@ -216,6 +232,67 @@
}
static void
+parole_media_list_cursor_changed_cb (GtkTreeView *view, ParoleMediaList *list)
+{
+ GtkTreeSelection *sel;
+ GtkTreeIter iter;
+
+ sel = gtk_tree_view_get_selection (view);
+
+ if ( !gtk_tree_selection_get_selected (sel, NULL, &iter ) )
+ {
+ g_signal_emit (G_OBJECT (list), signals [MEDIA_CURSOR_CHANGED], 0, FALSE);
+ }
+ else
+ {
+ g_signal_emit (G_OBJECT (list), signals [MEDIA_CURSOR_CHANGED], 0, TRUE);
+ }
+}
+
+static void
+parole_media_list_clear_list (ParoleMediaList *list)
+{
+ gtk_list_store_clear (GTK_LIST_STORE (list->priv->store));
+}
+
+static void
+parole_media_list_show_menu (ParoleMediaList *list, guint button, guint activate_time)
+{
+ GtkWidget *menu, *mi;
+
+ menu = gtk_menu_new ();
+
+ mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL);
+ gtk_widget_set_sensitive (mi, TRUE);
+ gtk_widget_show (mi);
+ g_signal_connect_swapped (mi, "activate",
+ G_CALLBACK (parole_media_list_clear_list), list);
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ g_signal_connect_swapped (menu, "selection-done",
+ G_CALLBACK (gtk_widget_destroy), menu);
+
+ gtk_menu_popup (GTK_MENU (menu),
+ NULL, NULL,
+ NULL, NULL,
+ button, activate_time);
+}
+
+static 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);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
parole_media_list_finalize (GObject *object)
{
ParoleMediaList *list;
@@ -243,6 +320,15 @@
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+ signals[MEDIA_CURSOR_CHANGED] =
+ g_signal_new ("media-cursor-changed",
+ PAROLE_TYPE_MEDIA_LIST,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParoleMediaListClass, media_cursor_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
g_type_class_add_private (klass, sizeof (ParoleMediaListPrivate));
}
@@ -275,17 +361,58 @@
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;
list->priv = PAROLE_MEDIA_LIST_GET_PRIVATE (list);
+ list->priv->hidden = TRUE;
+
builder = parole_builder_new ();
list->priv->view = GTK_WIDGET (gtk_builder_get_object (builder, "media-list"));
@@ -305,6 +432,14 @@
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);
+
+
list->priv->chooser = parole_media_chooser_new ();
g_signal_connect (G_OBJECT (list->priv->chooser), "media_file_opened",
@@ -389,10 +524,18 @@
}
}
+/*
+ * Called by ParolePlay when going to full screen mode
+ */
void parole_media_list_set_visible (ParoleMediaList *list, gboolean visible)
{
if ( visible )
- gtk_widget_show_all (GTK_WIDGET (list->priv->box));
+ {
+ if ( !list->priv->hidden )
+ gtk_widget_show_all (GTK_WIDGET (list->priv->box));
+ }
else
+ {
gtk_widget_hide_all (GTK_WIDGET (list->priv->box));
+ }
}
Modified: parole/trunk/src/medialist.h
===================================================================
--- parole/trunk/src/medialist.h 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/medialist.h 2009-06-06 13:41:52 UTC (rev 7473)
@@ -51,25 +51,28 @@
{
GObjectClass parent_class;
- void (*media_activated) (ParoleMediaList *list,
- GtkTreeRowReference *row);
+ void (*media_activated) (ParoleMediaList *list,
+ GtkTreeRowReference *row);
+
+ void (*media_cursor_changed) (ParoleMediaList *list,
+ gboolean media_selected);
} ParoleMediaListClass;
-GType parole_media_list_get_type (void) G_GNUC_CONST;
-ParoleMediaList *parole_media_list_new (void);
+GType parole_media_list_get_type (void) G_GNUC_CONST;
+ParoleMediaList *parole_media_list_new (void);
-GtkTreeRowReference *parole_media_list_get_selected_row(ParoleMediaList *list);
+GtkTreeRowReference *parole_media_list_get_selected_row (ParoleMediaList *list);
-GtkTreeRowReference *parole_media_list_get_next_row (ParoleMediaList *list,
- GtkTreeRowReference *row);
+GtkTreeRowReference *parole_media_list_get_next_row (ParoleMediaList *list,
+ GtkTreeRowReference *row);
-void parole_media_list_set_row_pixbuf (ParoleMediaList *list,
- GtkTreeRowReference *row,
- GdkPixbuf *pix);
+void parole_media_list_set_row_pixbuf (ParoleMediaList *list,
+ GtkTreeRowReference *row,
+ GdkPixbuf *pix);
-void parole_media_list_set_visible (ParoleMediaList *list,
- gboolean visible);
+void parole_media_list_set_visible (ParoleMediaList *list,
+ gboolean visible);
G_END_DECLS
Modified: parole/trunk/src/player.c
===================================================================
--- parole/trunk/src/player.c 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/player.c 2009-06-06 13:41:52 UTC (rev 7473)
@@ -39,6 +39,7 @@
#include "mediachooser.h"
#include "sidebar.h"
#include "statusbar.h"
+#include "rc-utils.h"
#include "enum-glib.h"
#include "enum-gtypes.h"
#include "debug.h"
@@ -55,11 +56,14 @@
GtkWidget *stop;
GtkWidget *range;
+ GtkWidget *volume;
+ GtkWidget *volume_image;
+
gboolean exit;
gboolean full_screen;
- gboolean playing;
+ ParoleMediaState state;
gboolean user_seeking;
gboolean internal_range_change;
gboolean buffering;
@@ -67,19 +71,29 @@
GtkTreeRowReference *row;
ParoleMediaList *list;
- //ParoleSidebar *sidebar;
- ParoleStatusbar *status;
+ ParoleSidebar *sidebar;
+ ParoleStatusbar *status;
};
G_DEFINE_TYPE (ParolePlayer, parole_player, G_TYPE_OBJECT)
static void
+parole_player_change_range_value (ParolePlayer *player, gdouble value)
+{
+ player->priv->internal_range_change = TRUE;
+ gtk_range_set_value (GTK_RANGE (player->priv->range), value);
+ player->priv->internal_range_change = FALSE;
+}
+
+static void
parole_player_media_activated_cb (ParoleMediaList *list, GtkTreeRowReference *row, ParolePlayer *player)
{
ParoleMediaFile *file;
GtkTreeIter iter;
GtkTreeModel *model;
+ parole_player_change_range_value (player, 0);
+
if ( player->priv->row )
{
parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
@@ -105,15 +119,23 @@
}
static void
+parole_player_media_cursor_changed_cb (ParoleMediaList *list, gboolean media_selected, ParolePlayer *player)
+{
+ if (!player->priv->state != PAROLE_MEDIA_STATE_PLAYING)
+ gtk_widget_set_sensitive (player->priv->play_pause, media_selected);
+
+}
+
+static void
parole_player_media_progressed_cb (ParoleGst *gst, const ParoleStream *stream, gdouble value, ParolePlayer *player)
{
if ( !player->priv->user_seeking && value > 0)
{
- player->priv->internal_range_change = TRUE;
- gtk_range_set_value (GTK_RANGE (player->priv->range), value);
- player->priv->internal_range_change = FALSE;
+ parole_player_change_range_value (player, value);
}
- parole_statusbar_set_position (player->priv->status, player->priv->playing, value);
+ parole_statusbar_set_position (player->priv->status,
+ player->priv->state == PAROLE_MEDIA_STATE_PLAYING,
+ value);
}
static void
@@ -137,7 +159,7 @@
gdouble duration;
gboolean seekable;
- player->priv->playing = TRUE;
+ player->priv->state = PAROLE_MEDIA_STATE_PLAYING;
pix = xfce_themed_icon_load ("gtk-media-play-ltr", 16);
parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, pix);
@@ -163,6 +185,7 @@
{
parole_statusbar_set_text (player->priv->status, _("Playing"));
gtk_widget_set_tooltip_text (GTK_WIDGET (player->priv->range), _("Media stream is not seekable"));
+ parole_player_change_range_value (player, 0);
}
if ( pix )
@@ -174,7 +197,8 @@
{
GdkPixbuf *pix = NULL;
- player->priv->playing = FALSE;
+ player->priv->state = PAROLE_MEDIA_STATE_PAUSED;
+
if ( !player->priv->buffering )
parole_statusbar_set_text (player->priv->status, _("Paused"));
@@ -205,16 +229,15 @@
{
TRACE ("Player stopped");
- player->priv->playing = FALSE;
+ player->priv->state = PAROLE_MEDIA_STATE_STOPPED;
parole_statusbar_set_text (player->priv->status, _("Stopped"));
gtk_widget_set_sensitive (player->priv->play_pause, FALSE);
gtk_widget_set_sensitive (player->priv->stop, FALSE);
- player->priv->internal_range_change = TRUE;
+
gtk_widget_set_sensitive (player->priv->range, FALSE);
- gtk_range_set_value (GTK_RANGE (player->priv->range), 0);
- player->priv->internal_range_change = FALSE;
+ parole_player_change_range_value (player, 0);
parole_player_set_playpause_widget_image (player->priv->play_pause, GTK_STOCK_MEDIA_PLAY);
@@ -227,6 +250,19 @@
}
static void
+parole_player_play_selected_row (ParolePlayer *player)
+{
+ GtkTreeRowReference *row;
+
+ row = parole_media_list_get_selected_row (player->priv->list);
+
+ if ( row )
+ {
+ parole_player_media_activated_cb (player->priv->list, row, player);
+ }
+}
+
+static void
parole_player_play_next (ParolePlayer *player)
{
GtkTreeRowReference *row;
@@ -280,10 +316,12 @@
static void
parole_player_play_pause_clicked (ParolePlayer *player)
{
- if ( player->priv->playing )
+ if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
parole_gst_pause (PAROLE_GST (player->priv->gst));
+ else if ( player->priv->state == PAROLE_MEDIA_STATE_PAUSED )
+ parole_gst_resume (PAROLE_GST (player->priv->gst));
else
- parole_gst_resume (PAROLE_GST (player->priv->gst));
+ parole_player_play_selected_row (player);
}
static void
@@ -347,7 +385,7 @@
{
player->priv->buffering = TRUE;
parole_statusbar_set_buffering (player->priv->status, percentage);
- if ( player->priv->playing )
+ if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
parole_gst_pause (PAROLE_GST (player->priv->gst));
}
}
@@ -389,14 +427,14 @@
if ( player->priv->full_screen )
{
parole_media_list_set_visible (player->priv->list, TRUE);
- //parole_sidebar_set_visible (player->priv->sidebar, TRUE);
+ parole_sidebar_set_visible (player->priv->sidebar, TRUE);
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_sidebar_set_visible (player->priv->sidebar, FALSE);
player->priv->full_screen = TRUE;
gtk_window_fullscreen (GTK_WINDOW (player->priv->window));
}
@@ -412,8 +450,9 @@
/*Play menu item
*/
- mi = gtk_image_menu_item_new_from_stock (player->priv->playing ? GTK_STOCK_MEDIA_PAUSE:
- GTK_STOCK_MEDIA_PLAY, NULL);
+ mi = gtk_image_menu_item_new_from_stock (player->priv->state == PAROLE_MEDIA_STATE_PLAYING
+ ? GTK_STOCK_MEDIA_PAUSE : GTK_STOCK_MEDIA_PLAY,
+ NULL);
g_object_get (G_OBJECT (player->priv->play_pause),
"sensitive", &sensitive,
@@ -429,7 +468,7 @@
*/
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_STOP, NULL);
- gtk_widget_set_sensitive (mi, player->priv->playing);
+ gtk_widget_set_sensitive (mi, player->priv->state == PAROLE_MEDIA_STATE_PLAYING);
gtk_widget_show (mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (parole_player_stop_menu_item_activate), player);
@@ -439,7 +478,7 @@
*/
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_NEXT, NULL);
- gtk_widget_set_sensitive (mi, player->priv->playing);
+ gtk_widget_set_sensitive (mi, player->priv->state == PAROLE_MEDIA_STATE_PLAYING);
gtk_widget_show (mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (parole_player_next_menu_item_activate), player);
@@ -449,16 +488,12 @@
*/
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_PREVIOUS, NULL);
- gtk_widget_set_sensitive (mi, player->priv->playing);
+ gtk_widget_set_sensitive (mi, player->priv->state == PAROLE_MEDIA_STATE_PLAYING);
gtk_widget_show (mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (parole_player_previous_menu_item_activate), player);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
-
- g_signal_connect_swapped (menu, "selection-done",
- G_CALLBACK (gtk_widget_destroy), menu);
-
mi = gtk_separator_menu_item_new ();
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
@@ -477,7 +512,6 @@
g_signal_connect_swapped (menu, "selection-done",
G_CALLBACK (gtk_widget_destroy), menu);
-
gtk_menu_popup (GTK_MENU (menu),
NULL, NULL,
NULL, NULL,
@@ -540,7 +574,48 @@
parole_player_destroy_cb (NULL, player);
}
+static const gchar *
+parole_player_get_volume_icon_name (gdouble value)
+{
+ if ( value == 1. )
+ return "audio-volume-high";
+ else if ( value > 0.5 )
+ return "audio-volume-medium";
+ else if ( value > 0 )
+ return "audio-volume-low";
+
+ return "audio-volume-muted";
+}
+
static void
+parole_player_change_volume (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),
+ "pixbuf", icon,
+ NULL);
+ gdk_pixbuf_unref (icon);
+ }
+}
+
+static void
+parole_player_volume_value_changed_cb (ParolePlayer *player)
+{
+ gdouble value;
+ value = gtk_range_get_value (GTK_RANGE (player->priv->volume));
+ parole_player_change_volume (player, value);
+ parole_rc_write_entry_int ("volume", (gint)(value * 100));
+}
+
+static void
parole_player_finalize (GObject *object)
{
ParolePlayer *player;
@@ -551,7 +626,7 @@
g_object_unref (player->priv->list);
g_object_unref (player->priv->gst);
- //g_object_unref (player->priv->sidebar);
+ g_object_unref (player->priv->sidebar);
g_object_unref (player->priv->status);
G_OBJECT_CLASS (parole_player_parent_class)->finalize (object);
@@ -584,10 +659,10 @@
*/
g_object_ref (player->priv->gst);
- //player->priv->sidebar = parole_sidebar_new ();
+ player->priv->sidebar = parole_sidebar_new ();
player->priv->status = parole_statusbar_new ();
- player->priv->playing = FALSE;
+ player->priv->state = PAROLE_MEDIA_STATE_STOPPED;
player->priv->user_seeking = FALSE;
player->priv->internal_range_change = FALSE;
player->priv->exit = FALSE;
@@ -642,6 +717,20 @@
G_CALLBACK (parole_player_play_pause_clicked), player);
/*
+ * Volume range and volume image
+ */
+
+ 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);
+
+ 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
*/
g_signal_connect_swapped (gtk_builder_get_object (builder, "menu-open"), "activate",
@@ -661,8 +750,12 @@
g_object_unref (builder);
player->priv->list = parole_media_list_new ();
+
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);
}
ParolePlayer *
Modified: parole/trunk/src/rc-utils.c
===================================================================
--- parole/trunk/src/rc-utils.c 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/rc-utils.c 2009-06-06 13:41:52 UTC (rev 7473)
@@ -46,24 +46,56 @@
return rc;
}
-gboolean read_bool_entry (const gchar *property)
+void parole_rc_write_entry_bool (const gchar *property, gboolean value)
{
- XfceRc *rc = open_resource_file (TRUE);
+ XfceRc *rc = open_resource_file (FALSE);
- return xfce_rc_read_bool_entry (rc, property, TRUE);
+ xfce_rc_write_bool_entry (rc, property, value);
+ xfce_rc_close (rc);
}
-const gchar *read_string_entry (const gchar *property)
+void parole_rc_write_entry_int (const gchar *property, gint value)
{
- XfceRc *rc = open_resource_file (TRUE);
+ XfceRc *rc = open_resource_file (FALSE);
- return xfce_rc_read_entry (rc, property, NULL);
+ xfce_rc_write_int_entry (rc, property, value);
+ xfce_rc_close (rc);
}
-void write_string_entry (const gchar *property, const gchar *value)
+void parole_rc_write_entry_string (const gchar *property, const gchar *value)
{
XfceRc *rc = open_resource_file (FALSE);
xfce_rc_write_entry (rc, property, value);
xfce_rc_close (rc);
}
+
+gboolean parole_rc_read_entry_bool (const gchar *property, gboolean fallback)
+{
+ XfceRc *rc = open_resource_file (TRUE);
+
+ if ( rc )
+ return xfce_rc_read_bool_entry (rc, property, TRUE);
+
+ return fallback;
+}
+
+gint parole_rc_read_entry_int (const gchar *property, gint fallback)
+{
+ XfceRc *rc = open_resource_file (TRUE);
+
+ if ( rc )
+ return xfce_rc_read_int_entry (rc, property, fallback);
+
+ return fallback;
+}
+
+const gchar *parole_rc_read_entry_string (const gchar *property, const gchar *fallback)
+{
+ XfceRc *rc = open_resource_file (TRUE);
+
+ if ( rc )
+ return xfce_rc_read_entry (rc, property, NULL);
+
+ return fallback;
+}
Modified: parole/trunk/src/rc-utils.h
===================================================================
--- parole/trunk/src/rc-utils.h 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/rc-utils.h 2009-06-06 13:41:52 UTC (rev 7473)
@@ -21,11 +21,23 @@
#ifndef __RC_UTILS_
#define __RC_UTILS_
-gboolean read_bool_entry (const gchar *property);
+void parole_rc_write_entry_bool (const gchar *property,
+ gboolean value);
-const gchar *read_string_entry (const gchar *property);
-
-void write_string_entry (const gchar *property,
+void parole_rc_write_entry_int (const gchar *property,
+ gint value);
+
+void parole_rc_write_entry_string (const gchar *property,
const gchar *value);
+
+gboolean parole_rc_read_entry_bool (const gchar *property,
+ gboolean fallback);
+gint parole_rc_read_entry_int (const gchar *property,
+ gint fallback);
+
+const gchar *parole_rc_read_entry_string (const gchar *property,
+ const gchar *fallback);
+
+
#endif /* __RC_UTILS_ */
Modified: parole/trunk/src/sidebar.c
===================================================================
--- parole/trunk/src/sidebar.c 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/sidebar.c 2009-06-06 13:41:52 UTC (rev 7473)
@@ -140,27 +140,6 @@
g_object_unref (pix);
/*
- * Recoreder tab
- */
- pix = xfce_themed_icon_load ("gnome-sound-recorder", 24);
- gtk_list_store_append (list_store, &iter);
- gtk_list_store_set (list_store, &iter, PIXBUF_COL, pix, NAME_COL, _("<b>Audio \nrecorder\n</b>"), NOTEBOOK_NUMBER, i, -1);
- i++;
- if ( pix )
- g_object_unref (pix);
-
-
- /*
- * Converter tab
- */
- pix = xfce_themed_icon_load ("soundconverter", 24);
- gtk_list_store_append (list_store, &iter);
- gtk_list_store_set (list_store, &iter, PIXBUF_COL, pix, NAME_COL, _("<b>Audio \nconverter\n</b>"), NOTEBOOK_NUMBER, i, -1);
- i++;
- if ( pix )
- g_object_unref (pix);
-
- /*
* Album
*/
pix = xfce_themed_icon_load ("", 24);
@@ -173,7 +152,6 @@
g_signal_connect_swapped (G_OBJECT (sidebar->priv->treeview), "cursor_changed",
G_CALLBACK (parole_sidebar_cursor_changed_cb), sidebar);
-
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidebar->priv->treeview));
path = gtk_tree_path_new_first ();
gtk_tree_selection_select_path (sel, path);
Modified: parole/trunk/src/statusbar.c
===================================================================
--- parole/trunk/src/statusbar.c 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/statusbar.c 2009-06-06 13:41:52 UTC (rev 7473)
@@ -136,3 +136,8 @@
gtk_widget_show (bar->priv->progress);
g_free (buff);
}
+
+void parole_statusbar_set_full_screen (ParoleStatusbar *bar, gboolean full_screen)
+{
+
+}
Modified: parole/trunk/src/statusbar.h
===================================================================
--- parole/trunk/src/statusbar.h 2009-06-06 13:18:48 UTC (rev 7472)
+++ parole/trunk/src/statusbar.h 2009-06-06 13:41:52 UTC (rev 7473)
@@ -34,7 +34,7 @@
typedef struct
{
GObject parent;
- ParoleStatusbarPrivate *priv;
+ ParoleStatusbarPrivate *priv;
} ParoleStatusbar;
@@ -60,6 +60,9 @@
void parole_statusbar_set_buffering (ParoleStatusbar *bar,
gint percentage);
+void parole_statusbar_set_full_screen (ParoleStatusbar *bar,
+ gboolean full_screen);
+
G_END_DECLS
#endif /* __PAROLE_STATUSBAR_H */
More information about the Goodies-commits
mailing list