[Xfce4-commits] <parole:master> Merge branch 'gst0.2.2'
Simon Steinbeiss
noreply at xfce.org
Mon Jul 23 01:24:44 CEST 2012
Updating branch refs/heads/master
to c4c147a4844c406d820bea16b26d2003d7d437cb (commit)
from a9f8b19db9b79ce24cc00d5b1a379ec7058a26fc (commit)
commit c4c147a4844c406d820bea16b26d2003d7d437cb
Merge: a9f8b19 02fab97
Author: Simon Steinbeiss <ochosi at xfce.org>
Date: Sun Jul 15 00:53:01 2012 +0200
Merge branch 'gst0.2.2'
commit 02fab972c3397e51fd9289313eec0d9d2d605809
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Sat Jul 14 11:43:41 2012 -0400
Rearranged playlist buttons, added shuffle and repeat. Shuffle and Repeat playlist buttons now toggle menu items as well... but not the other way around yet.
commit cdd5b9e9206c97a5324f9dc6518efa33ac14ae58
Author: Simon Steinbeiss <ochosi at xfce.org>
Date: Sat Jul 14 01:42:48 2012 +0200
Use correct icons for next/previous buttons
commit c1e8e2234d9b58d1308364de5d7f89fa1ef9145c
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 16:00:14 2012 -0400
Corrected functionality of previous and next buttons.
commit 4b2fb26cc04bc9c454563b5f68d6c0647c363336
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 15:23:45 2012 -0400
Added new Settings dialog from 0.2.2
commit 09ac4a8f1e77b852bf50a3f917a27dd333080e83
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 15:00:55 2012 -0400
Small fix for autogen.sh
commit e88e0ad9a87d3ef3d2a3380f7c2fe05db6fc56d3
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 14:25:10 2012 -0400
Added suggestions provided by libtool. All existing errors in configure are from XDT_FEATURE_DEBUG.
commit 8de1111a778bb431edf73af2c871cf8f73e0d2ae
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 14:00:28 2012 -0400
Added deletions to commit.
commit 0dd9f5bdd24068954643866ac0518a4b003df8d6
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 13:59:06 2012 -0400
Removed window title plugin from build since its functionality is now baked-in.
commit dbecec4db56fc15bf05c0ecdc4043ed39a015c90
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 13:49:26 2012 -0400
Fix for widget_hide error. Addressed some messages displayed when running autogen.sh
commit d1c58c9e88ff81dba4ca0acd2e4f121f31a6df52
Author: Simon Steinbeiss <ochosi at xfce.org>
Date: Fri Jul 13 14:39:23 2012 +0200
Reduce fade-out-on-exit from 4sec to 1.5sec
commit 6dd5ebc25a6e7bb05c08929243b08d94c5951526
Author: Simon Steinbeiss <ochosi at xfce.org>
Date: Fri Jul 13 14:01:29 2012 +0200
Drop deprecated gst-iface files
commit 61f634d4e6338eed469c9782cd06066ed1a7603f
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Fri Jul 13 07:22:46 2012 -0400
Version bump for UI files to 2.24. Cleared some of the warnings displayed while running.
commit d3a41f2ef7bda752079f8c4acaab6168e4127251
Author: Simon Steinbeiss <ochosi at xfce.org>
Date: Fri Jul 13 02:34:42 2012 +0200
Fix deprecated unref and add FIXMEs
commit fe21e9e96219e880996cb6e8ae663fe8eb60f880
Author: Simon Steinbeiss <ochosi at xfce.org>
Date: Fri Jul 13 02:14:57 2012 +0200
Gstreamer update from the 0.2.2 branch (should fix LP: #1023583)
INSTALL | 9 +-
Makefile.am | 2 +
autogen.sh | 1 +
configure.ac.in | 20 +-
data/interfaces/mediachooser.ui | 164 +++++----
data/interfaces/open-location.ui | 174 +++++----
data/interfaces/parole-settings.ui | 571 +++++++++++++++++--------
data/interfaces/parole.ui | 12 +-
data/interfaces/playlist.ui | 59 ++--
data/interfaces/plugins.ui | 122 ++++---
data/interfaces/save-playlist.ui | 131 +++---
gst/Makefile.am | 4 +-
gst/parole-gst-iface.c | 108 -----
gst/parole-gst-iface.h | 70 ----
gst/parole-gst.c | 469 ++++++++++------------
gst/parole-gst.h | 23 +-
parole/parole-provider-player.c | 2 +-
parole/parole-provider-player.h | 11 +-
parole/parole-stream.c | 2 +-
parole/parole-stream.h | 14 +-
plugins/Makefile.am | 6 +-
plugins/window-title/Makefile.am | 42 --
plugins/window-title/window-title-plugin.c | 47 ---
plugins/window-title/window-title-provider.c | 147 -------
plugins/window-title/window-title-provider.h | 44 --
plugins/window-title/window-title.desktop.in | 6 -
src/parole-disc-menu.c | 6 +-
src/parole-medialist.c | 129 +++----
src/parole-medialist.h | 6 +
src/parole-player.c | 176 ++++++---
src/parole-player.h | 7 +
src/parole-plugin-player.c | 2 +-
32 files changed, 1195 insertions(+), 1391 deletions(-)
diff --git a/INSTALL b/INSTALL
index 7d1c323..a1e89e1 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,8 +1,8 @@
Installation Instructions
*************************
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
@@ -226,6 +226,11 @@ order to use an ANSI C compiler:
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
diff --git a/Makefile.am b/Makefile.am
index 7ec106d..8993042 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,5 @@
+ACLOCAL_AMFLAGS = -I m4
+
SUBDIRS = \
data \
parole \
diff --git a/autogen.sh b/autogen.sh
index 6bc0c8a..aa17066 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -17,4 +17,5 @@ EOF
exit 1
}
+mkdir m4
xdt-autogen $@
diff --git a/configure.ac.in b/configure.ac.in
index d1b65b0..67568da 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -11,6 +11,8 @@ m4_define([parole_version], [parole_version_major().parole_version_minor().parol
AC_INIT([parole], [parole_version], [aliov at xfce.org])
AC_PREREQ(2.59c)
+AC_CONFIG_MACRO_DIR([m4])
+
AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar])
AM_CONFIG_HEADER([config.h])
AM_MAINTAINER_MODE()
@@ -31,8 +33,8 @@ AC_PROG_INTLTOOL([intltool_minimum_version], [no-xml])
# ===================================================== #
# Initialize libtool #
# ===================================================== #
-AC_DISABLE_STATIC()
-AC_PROG_LIBTOOL()
+LT_PREREQ([2.2.6])
+LT_INIT([disable-static])
m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
# ===================================================== #
@@ -66,8 +68,8 @@ XDT_I18N([@LINGUAS@])
#==================================================== #
# Check for required packages #
#=====================================================#
-m4_define([gtk_minimum_version], [2.16.0])
-m4_define([glib_minimum_version], [2.16.0])
+m4_define([gtk_minimum_version], [2.24.0])
+m4_define([glib_minimum_version], [2.24.0])
m4_define([gstreamer_minimum_version], [0.10.11])
m4_define([dbus_minimum_version], [0.60])
@@ -181,14 +183,6 @@ if test x"$ac_tray_plugin" = x"yes"; then
[libnotify library], [yes])
fi
-# Window title plugin.
-#--------------------------
-AC_ARG_ENABLE([window-title-plugin], AC_HELP_STRING([--disable-window-title-plugin], [Don't build the window title plugin]),
- [ac_window_title_plugin=$enableval], [ac_window_title_plugin=yes])
-AC_MSG_CHECKING([whether to build the window title plugin])
-AM_CONDITIONAL([WINDOW_TITLE_PLUGIN], [test x"$ac_window_title_plugin" = x"yes"])
-AC_MSG_RESULT([$ac_window_title_plugin])
-
# Power Manager
#--------------------------
AC_ARG_ENABLE([power-manager-plugin], AC_HELP_STRING([--disable-power-manager-plugin], [Don't build the power manager plugin]),
@@ -230,7 +224,6 @@ plugins/Makefile
plugins/sample/Makefile
plugins/properties/Makefile
plugins/tray/Makefile
-plugins/window-title/Makefile
plugins/power-manager/Makefile
docs/Makefile
docs/plugin-api/version.xml
@@ -268,7 +261,6 @@ echo "
fi
echo "
- Window title: ${ac_window_title_plugin}
Power Manager: ${ac_power_manager_plugin}
------------------------------------------------------
diff --git a/data/interfaces/mediachooser.ui b/data/interfaces/mediachooser.ui
index ac62ab2..d77d01b 100644
--- a/data/interfaces/mediachooser.ui
+++ b/data/interfaces/mediachooser.ui
@@ -1,36 +1,112 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.16"/>
+ <requires lib="gtk+" version="2.24"/>
<!-- interface-requires libxfce4ui 4.5 -->
<!-- interface-naming-policy project-wide -->
<object class="XfceTitledDialog" id="chooser">
+ <property name="can_focus">False</property>
<property name="title" translatable="yes">Parole Media Chooser</property>
<property name="default_width">680</property>
<property name="default_height">480</property>
<property name="icon_name">audio-x-generic</property>
<property name="type_hint">normal</property>
- <property name="has_separator">False</property>
<property name="subtitle" translatable="yes">Open media files</property>
- <signal name="destroy" handler="parole_media_chooser_destroy_cb"/>
+ <signal name="destroy" handler="parole_media_chooser_destroy_cb" swapped="no"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">edge</property>
+ <child>
+ <object class="GtkHBox" id="info">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="close">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="parole_media_chooser_close_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="open">
+ <property name="label" translatable="yes">Add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="image">image1</property>
+ <signal name="clicked" handler="parole_media_chooser_add_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </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="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
<object class="GtkVBox" id="vbox">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<child>
<object class="GtkFileChooserWidget" id="filechooserwidget">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="orientation">vertical</property>
<property name="spacing">1</property>
- <signal name="file_activated" handler="media_chooser_file_activate_cb"/>
- <signal name="current_folder_changed" handler="media_chooser_folder_changed_cb"/>
+ <signal name="file-activated" handler="media_chooser_file_activate_cb" swapped="no"/>
+ <signal name="current-folder-changed" handler="media_chooser_folder_changed_cb" swapped="no"/>
</object>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
@@ -40,8 +116,9 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
- <signal name="toggled" handler="parole_media_chooser_recursive_toggled_cb"/>
+ <signal name="toggled" handler="parole_media_chooser_recursive_toggled_cb" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -55,8 +132,9 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
- <signal name="toggled" handler="parole_media_chooser_replace_toggled_cb"/>
+ <signal name="toggled" handler="parole_media_chooser_replace_toggled_cb" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -70,8 +148,9 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
- <signal name="toggled" handler="start_playing_toggled_cb"/>
+ <signal name="toggled" handler="start_playing_toggled_cb" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -81,74 +160,17 @@
</child>
</object>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">edge</property>
- <child>
- <object class="GtkHBox" id="info">
- <property name="visible">True</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="spacing">5</property>
- <property name="homogeneous">True</property>
- <child>
- <object class="GtkButton" id="close">
- <property name="label">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_clicked"/>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="open">
- <property name="label" translatable="yes">Add</property>
- <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_chooser_add_clicked"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
</object>
</child>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="stock">gtk-add</property>
</object>
</interface>
diff --git a/data/interfaces/open-location.ui b/data/interfaces/open-location.ui
index 7c41108..36893d1 100644
--- a/data/interfaces/open-location.ui
+++ b/data/interfaces/open-location.ui
@@ -1,66 +1,63 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.16"/>
+ <requires lib="gtk+" version="2.24"/>
<!-- interface-requires libxfce4ui 4.5 -->
<!-- interface-naming-policy project-wide -->
- <object class="XfceTitledDialog" id="open-location">
- <property name="title" translatable="yes">Open Location</property>
- <property name="default_width">400</property>
- <property name="icon_name">gtk-network</property>
+ <object class="GtkDialog" id="dialog1">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
<property name="type_hint">normal</property>
- <property name="has_separator">False</property>
- <property name="subtitle" translatable="yes">Open location of media file or live stream</property>
<child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox1">
+ <object class="GtkVBox" id="dialog-vbox2">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<property name="spacing">2</property>
- <child>
- <object class="GtkVBox" id="vbox1">
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area2">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">5</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
<child>
- <object class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="spacing">5</property>
- <child>
- <object class="GtkEntry" id="entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">●</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="clear-history">
- <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="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
</child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-clear</property>
+ </object>
+ <object class="XfceTitledDialog" id="open-location">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Open Location</property>
+ <property name="default_width">400</property>
+ <property name="icon_name">gtk-network</property>
+ <property name="type_hint">normal</property>
+ <property name="subtitle" translatable="yes">Open location of media file or live stream</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="cancel">
@@ -68,6 +65,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -83,6 +81,7 @@
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -94,51 +93,70 @@
</object>
<packing>
<property name="expand">False</property>
+ <property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-6">cancel</action-widget>
- <action-widget response="-5">open</action-widget>
- </action-widgets>
- </object>
- <object class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="stock">gtk-clear</property>
- </object>
- <object class="GtkDialog" id="dialog1">
- <property name="border_width">5</property>
- <property name="type_hint">normal</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox2">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
<child>
- <placeholder/>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area2">
+ <object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <placeholder/>
- </child>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
<child>
- <placeholder/>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkEntry" id="entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="clear-history">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="image">image2</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
</packing>
</child>
</object>
</child>
+ <action-widgets>
+ <action-widget response="-6">cancel</action-widget>
+ <action-widget response="-5">open</action-widget>
+ </action-widgets>
</object>
</interface>
diff --git a/data/interfaces/parole-settings.ui b/data/interfaces/parole-settings.ui
index 6be698c..5914788 100644
--- a/data/interfaces/parole-settings.ui
+++ b/data/interfaces/parole-settings.ui
@@ -1,127 +1,344 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.16"/>
+ <requires lib="gtk+" version="2.24"/>
<!-- interface-requires libxfce4ui 4.5 -->
<!-- interface-naming-policy project-wide -->
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-revert-to-saved</property>
+ </object>
<object class="XfceTitledDialog" id="settings-dialog">
- <property name="border_width">0</property>
+ <property name="can_focus">False</property>
<property name="title" translatable="yes">Parole Settings</property>
<property name="icon_name">parole</property>
- <property name="type_hint">normal</property>
- <property name="has_separator">False</property>
+ <property name="type_hint">dialog</property>
<property name="subtitle" translatable="yes">Media Player Settings</property>
- <signal name="response" handler="parole_conf_dialog_response_cb"/>
+ <signal name="response" handler="parole_conf_dialog_response_cb" swapped="no"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkButton" id="close">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </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="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
- <object class="GtkVBox" id="vbox1">
+ <object class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">10</property>
+ <property name="can_focus">True</property>
<child>
- <object class="GtkFrame" id="frame-display">
+ <object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkCheckButton" id="reset-saver">
+ <property name="label" translatable="yes">Disable screensaver while playing movies</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="parole_conf_dialog_reset_saver_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Video</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="enable-vis">
+ <property name="label" translatable="yes">Enable visualization when playing audio file</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="parole_conf_dialog_enable_vis_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Visualization type:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="vis-combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="parole_conf_dialog_vis_plugin_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Audio</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkCheckButton" id="multimedia-keys">
+ <property name="label" translatable="yes">Enable keyboard multimedia keys</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="multimedia_keys_toggled_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Keyboard</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">General</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment2">
+ <object class="GtkAlignment" id="alignment4">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkVBox" id="vbox4">
+ <object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<child>
- <object class="GtkTable" id="table">
+ <object class="GtkTable" id="table1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="n_rows">4</property>
<property name="n_columns">2</property>
- <property name="column_spacing">5</property>
- <property name="row_spacing">5</property>
+ <property name="column_spacing">6</property>
<child>
- <object class="GtkLabel" id="label7">
+ <object class="GtkLabel" id="label10">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Brightness:</property>
</object>
<packing>
- <property name="x_options"></property>
- <property name="y_options"></property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label8">
+ <object class="GtkLabel" id="label11">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Contrast:</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <object class="GtkHScale" id="brightness">
+ <object class="GtkLabel" id="label12">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="update_policy">discontinuous</property>
- <property name="draw_value">False</property>
- <signal name="value_changed" handler="brightness_value_changed_cb"/>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Hue:</property>
</object>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <object class="GtkHScale" id="contrast">
+ <object class="GtkLabel" id="label13">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="update_policy">discontinuous</property>
- <property name="draw_value">False</property>
- <signal name="value_changed" handler="contrast_value_changed_cb"/>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Saturation:</property>
</object>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label9">
+ <object class="GtkHScale" id="brightness">
<property name="visible">True</property>
- <property name="label" translatable="yes">Hue:</property>
+ <property name="can_focus">True</property>
+ <property name="round_digits">1</property>
+ <property name="draw_value">False</property>
+ <signal name="value-changed" handler="brightness_value_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label10">
+ <object class="GtkHScale" id="contrast">
<property name="visible">True</property>
- <property name="label" translatable="yes">Saturation:</property>
+ <property name="can_focus">True</property>
+ <property name="round_digits">1</property>
+ <property name="draw_value">False</property>
+ <signal name="value-changed" handler="contrast_value_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkHScale" id="hue">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="update_policy">discontinuous</property>
+ <property name="round_digits">1</property>
<property name="draw_value">False</property>
- <signal name="value_changed" handler="hue_value_changed_cb"/>
+ <signal name="value-changed" handler="hue_value_changed_cb" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
@@ -134,9 +351,9 @@
<object class="GtkHScale" id="saturation">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="update_policy">discontinuous</property>
+ <property name="round_digits">1</property>
<property name="draw_value">False</property>
- <signal name="value_changed" handler="saturation_value_changed_cb"/>
+ <signal name="value-changed" handler="saturation_value_changed_cb" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
@@ -147,30 +364,36 @@
</child>
</object>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="reset-color">
- <property name="label" translatable="yes">Reset To Defaults</property>
+ <property name="label" translatable="yes">Reset to defaults</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
<property name="image">image1</property>
- <signal name="clicked" handler="reset_color_clicked_cb"/>
+ <signal name="clicked" handler="reset-color_clicked_cb" swapped="no"/>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
@@ -179,121 +402,101 @@
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label2">
+ <object class="GtkLabel" id="label9">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes"><b>Display</b></property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
- <child>
- <object class="GtkFrame" id="frame2">
+ <child type="tab">
+ <object class="GtkLabel" id="label2">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkCheckButton" id="reset-saver">
- <property name="label" translatable="yes">Disable screen saver while playing movies</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="parole_conf_dialog_reset_saver_changed_cb"/>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Video</b></property>
- <property name="use_markup">True</property>
- </object>
- </child>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Display</property>
</object>
<packing>
<property name="position">1</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
<child>
- <object class="GtkFrame" id="frame1">
+ <object class="GtkFrame" id="frame5">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment1">
+ <object class="GtkAlignment" id="alignment5">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkVBox" id="vbox2">
+ <object class="GtkVBox" id="vbox4">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">5</property>
+ <property name="can_focus">False</property>
<child>
- <object class="GtkCheckButton" id="enable-vis">
- <property name="label" translatable="yes">Enable visualization when playing audio file</property>
+ <object class="GtkCheckButton" id="replace-playlist">
+ <property name="label" translatable="yes">Always replace playlist with opened files</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
- <signal name="toggled" handler="parole_conf_dialog_enable_vis_changed_cb"/>
+ <signal name="toggled" handler="replace_playlist_toggled_cb" swapped="no"/>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkHBox" id="hbox1">
+ <object class="GtkCheckButton" id="remove-duplicated">
+ <property name="label" translatable="yes">Check and remove duplicated media entries</property>
<property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Visualization type:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="vis-combobox">
- <property name="visible">True</property>
- <property name="model">liststore1</property>
- <signal name="changed" handler="parole_conf_dialog_vis_plugin_changed_cb"/>
- <child>
- <object class="GtkCellRendererText" id="cellrenderertext1"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="remove_duplicated_toggled_cb" swapped="no"/>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="start-playing-opened">
+ <property name="label" translatable="yes">Start playing opened files</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="start_playing_opened_toggled_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label1">
+ <object class="GtkLabel" id="label14">
<property name="visible">True</property>
- <property name="label" translatable="yes"><b>Audio</b></property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"><b>Playlist options</b></property>
<property name="use_markup">True</property>
</object>
</child>
@@ -302,43 +505,60 @@
<property name="position">2</property>
</packing>
</child>
+ <child type="tab">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Playlist</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
<child>
- <object class="GtkFrame" id="frame3">
+ <object class="GtkFrame" id="frame6">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
- <object class="GtkAlignment" id="alignment3">
+ <object class="GtkAlignment" id="alignment6">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
- <object class="GtkVBox" id="vbox3">
+ <object class="GtkVBox" id="vbox5">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">5</property>
+ <property name="can_focus">False</property>
<child>
<object class="GtkCheckButton" id="enable-subtitle">
- <property name="label" translatable="yes">Automatically load subtitles when playing movie file</property>
+ <property name="label" translatable="yes">Automatically show subtitles when playing movie file</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
- <signal name="toggled" handler="parole_conf_dialog_enable_subtitle_changed_cb"/>
+ <signal name="toggled" handler="parole_conf_dialog_enable_subtitle_changed_cb" swapped="no"/>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkTable" id="table1">
+ <object class="GtkTable" id="table2">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
- <property name="column_spacing">2</property>
+ <property name="column_spacing">6</property>
<property name="row_spacing">2</property>
<child>
- <object class="GtkLabel" id="label5">
+ <object class="GtkLabel" id="label16">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Font:</property>
</object>
<packing>
@@ -346,32 +566,35 @@
</packing>
</child>
<child>
- <object class="GtkFontButton" id="fontbutton">
+ <object class="GtkLabel" id="label17">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="font_set" handler="parole_conf_dialog_font_set_cb"/>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Encoding:</property>
</object>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label6">
+ <object class="GtkFontButton" id="fontbutton">
<property name="visible">True</property>
- <property name="label" translatable="yes">Encoding: </property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="font-set" handler="parole_conf_dialog_font_set_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="encoding">
<property name="visible">True</property>
- <signal name="changed" handler="parole_conf_dialog_subtitle_encoding_changed_cb"/>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="parole_conf_dialog_subtitle_encoding_changed_cb" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
@@ -382,6 +605,8 @@
</child>
</object>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
@@ -390,8 +615,9 @@
</object>
</child>
<child type="label">
- <object class="GtkLabel" id="label3">
+ <object class="GtkLabel" id="label15">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes"><b>Subtitles</b></property>
<property name="use_markup">True</property>
</object>
@@ -401,52 +627,31 @@
<property name="position">3</property>
</packing>
</child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkButton" id="close">
- <property name="label">gtk-close</property>
+ <child type="tab">
+ <object class="GtkLabel" id="label4">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Subtitles</property>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
<action-widgets>
<action-widget response="-7">close</action-widget>
</action-widgets>
</object>
- <object class="GtkListStore" id="liststore1">
- <columns>
- <!-- column-name gchararray1 -->
- <column type="gchararray"/>
- </columns>
- </object>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-undo</property>
- </object>
</interface>
diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index 5eb7fc1..3ad31aa 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.16"/>
+ <requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
@@ -709,10 +709,10 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image6</property>
+ <property name="image">image1</property>
<property name="relief">none</property>
<property name="focus_on_click">False</property>
- <signal name="clicked" handler="parole_player_seekb_cb" swapped="no"/>
+ <signal name="clicked" handler="parole_player_back_cb" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -745,10 +745,10 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image9</property>
+ <property name="image">image4</property>
<property name="relief">none</property>
<property name="focus_on_click">False</property>
- <signal name="clicked" handler="parole_player_seekf_cb" swapped="no"/>
+ <signal name="clicked" handler="parole_player_forward_cb" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -757,7 +757,7 @@
</packing>
</child>
<child>
- <object class="GtkHBox" id="play_box">
+ <object class="GtkHBox" id="playing_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
diff --git a/data/interfaces/playlist.ui b/data/interfaces/playlist.ui
index 3dc9f3e..d9bb444 100644
--- a/data/interfaces/playlist.ui
+++ b/data/interfaces/playlist.ui
@@ -1,31 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.16"/>
+ <requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
- <object class="GtkImage" id="image1">
+ <object class="GtkImage" id="image_add">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-add</property>
</object>
- <object class="GtkImage" id="image2">
+ <object class="GtkImage" id="image_clear">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">gtk-remove</property>
+ <property name="stock">gtk-clear</property>
</object>
- <object class="GtkImage" id="image3">
+ <object class="GtkImage" id="image_remove">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">gtk-go-up</property>
+ <property name="stock">gtk-remove</property>
</object>
- <object class="GtkImage" id="image4">
+ <object class="GtkImage" id="image_repeat">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">gtk-go-down</property>
+ <property name="pixel_size">20</property>
+ <property name="icon_name">media-playlist-repeat</property>
</object>
- <object class="GtkImage" id="image5">
+ <object class="GtkImage" id="image_shuffle">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">gtk-save-as</property>
+ <property name="pixel_size">20</property>
+ <property name="icon_name">media-playlist-shuffle</property>
</object>
<object class="GtkVBox" id="playlist-box">
<property name="visible">True</property>
@@ -54,10 +56,10 @@
<property name="has_tooltip">True</property>
<property name="headers_visible">False</property>
<property name="rules_hint">True</property>
+ <signal name="drag-data-received" handler="parole_media_list_drag_data_received_cb" swapped="no"/>
<signal name="key-press-event" handler="parole_media_list_key_press" swapped="no"/>
<signal name="row-activated" handler="parole_media_list_row_activated_cb" swapped="no"/>
<signal name="button-release-event" handler="parole_media_list_button_release_event" swapped="no"/>
- <signal name="drag-data-received" handler="parole_media_list_drag_data_received_cb" swapped="no"/>
<signal name="query-tooltip" handler="parole_media_list_query_tooltip" swapped="no"/>
</object>
</child>
@@ -80,7 +82,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image1</property>
+ <property name="image">image_add</property>
<signal name="clicked" handler="parole_media_list_add_clicked_cb" swapped="no"/>
</object>
<packing>
@@ -90,14 +92,14 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="save-playlist">
+ <object class="GtkButton" id="remove-media">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image5</property>
- <signal name="clicked" handler="parole_media_list_save_cb" swapped="no"/>
+ <property name="image">image_remove</property>
+ <signal name="clicked" handler="parole_media_list_remove_clicked_cb" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -106,49 +108,46 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="remove-media">
+ <object class="GtkButton" id="clear-media">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image2</property>
- <signal name="clicked" handler="parole_media_list_remove_clicked_cb" swapped="no"/>
+ <property name="image">image_clear</property>
+ <signal name="clicked" handler="parole_media_list_clear_clicked_cb" swapped="no"/>
</object>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="media-up">
+ <object class="GtkToggleButton" id="repeat-media">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image3</property>
- <signal name="clicked" handler="parole_media_list_media_up_clicked_cb" swapped="no"/>
+ <property name="image">image_repeat</property>
+ <signal name="toggled" handler="parole_media_list_repeat_toggled_cb" swapped="no"/>
</object>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="media-down">
+ <object class="GtkToggleButton" id="shuffle-media">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
- <property name="image">image4</property>
- <signal name="clicked" handler="parole_media_list_media_down_clicked_cb" swapped="no"/>
+ <property name="image">image_shuffle</property>
+ <signal name="toggled" handler="parole_media_list_shuffle_toggled_cb" swapped="no"/>
</object>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
diff --git a/data/interfaces/plugins.ui b/data/interfaces/plugins.ui
index 8eb352f..bfdcfa3 100644
--- a/data/interfaces/plugins.ui
+++ b/data/interfaces/plugins.ui
@@ -1,20 +1,10 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.16"/>
+ <requires lib="gtk+" version="2.24"/>
+ <!-- interface-requires libxfce4ui 4.5 -->
<!-- interface-naming-policy project-wide -->
- <object class="GtkListStore" id="liststore">
- <columns>
- <!-- column-name toggle -->
- <column type="gboolean"/>
- <!-- column-name plugin -->
- <column type="gchararray"/>
- <!-- column-name module -->
- <column type="GObject"/>
- <!-- column-name info -->
- <column type="gpointer"/>
- </columns>
- </object>
<object class="XfceTitledDialog" id="dialog">
+ <property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Parole Plugins</property>
<property name="default_width">500</property>
@@ -24,21 +14,53 @@
<property name="type_hint">normal</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
- <property name="has_separator">False</property>
<property name="subtitle" translatable="yes">Media Player plugins</property>
- <signal name="response" handler="parole_plugins_manager_pref_response_cb"/>
+ <signal name="response" handler="parole_plugins_manager_pref_response_cb" swapped="no"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox2">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkButton" id="close">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </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="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkViewport" id="viewport1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="resize_mode">queue</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
@@ -53,7 +75,7 @@
<property name="model">liststore</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
- <signal name="cursor_changed" handler="parole_plugins_manager_tree_cursor_changed_cb"/>
+ <signal name="cursor-changed" handler="parole_plugins_manager_tree_cursor_changed_cb" swapped="no"/>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="resizable">True</property>
@@ -61,7 +83,7 @@
<property name="clickable">True</property>
<child>
<object class="GtkCellRendererToggle" id="cellrenderertoggle">
- <signal name="toggled" handler="parole_plugins_manager_cell_toggled_cb"/>
+ <signal name="toggled" handler="parole_plugins_manager_cell_toggled_cb" swapped="no"/>
</object>
<attributes>
<attribute name="active">0</attribute>
@@ -86,17 +108,20 @@
</child>
</object>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="column_spacing">4</property>
@@ -104,6 +129,7 @@
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes"><b>Description:</b></property>
<property name="use_markup">True</property>
</object>
@@ -115,6 +141,7 @@
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes"><b>Author:</b></property>
<property name="use_markup">True</property>
</object>
@@ -128,6 +155,7 @@
<child>
<object class="GtkLabel" id="description">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="use_markup">True</property>
<property name="wrap">True</property>
</object>
@@ -139,6 +167,7 @@
<child>
<object class="GtkLabel" id="author">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="use_markup">True</property>
</object>
<packing>
@@ -151,6 +180,7 @@
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes"><b>Site:</b></property>
<property name="use_markup">True</property>
</object>
@@ -164,6 +194,7 @@
<child>
<object class="GtkHBox" id="site-box">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<child>
<placeholder/>
</child>
@@ -178,12 +209,14 @@
</object>
<packing>
<property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox6">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkButton" id="configure">
@@ -191,11 +224,13 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
- <signal name="clicked" handler="parole_plugins_manager_show_configure"/>
+ <signal name="clicked" handler="parole_plugins_manager_show_configure" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
+ <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
@@ -205,52 +240,41 @@
</object>
<packing>
<property name="expand">False</property>
+ <property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkButton" id="close">
- <property name="label">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>
- </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="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
</object>
</child>
<action-widgets>
<action-widget response="0">close</action-widget>
</action-widgets>
</object>
+ <object class="GtkListStore" id="liststore">
+ <columns>
+ <!-- column-name toggle -->
+ <column type="gboolean"/>
+ <!-- column-name plugin -->
+ <column type="gchararray"/>
+ <!-- column-name module -->
+ <column type="GObject"/>
+ <!-- column-name info -->
+ <column type="gpointer"/>
+ </columns>
+ </object>
</interface>
diff --git a/data/interfaces/save-playlist.ui b/data/interfaces/save-playlist.ui
index bc754f3..68bb6b8 100644
--- a/data/interfaces/save-playlist.ui
+++ b/data/interfaces/save-playlist.ui
@@ -1,36 +1,64 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.16"/>
+ <requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
- <object class="GtkListStore" id="liststore">
- <columns>
- <!-- column-name filetype -->
- <column type="gchararray"/>
- <!-- column-name extension -->
- <column type="gchararray"/>
- <!-- column-name extension_id -->
- <column type="guint"/>
- </columns>
- <data>
- <row>
- <col id="0" translatable="yes">By Extension</col>
- <col id="1" translatable="yes"></col>
- <col id="2">0</col>
- </row>
- </data>
- </object>
<object class="GtkFileChooserDialog" id="filechooserdialog">
+ <property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="window_position">center-on-parent</property>
<property name="type_hint">normal</property>
- <property name="has_separator">False</property>
<property name="action">save</property>
<property name="do_overwrite_confirmation">True</property>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can_focus">False</property>
<property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button2">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="parole_media_list_close_save_dialog_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button1">
+ <property name="label">gtk-save</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="parole_media_list_save_playlist_cb" swapped="no"/>
+ </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="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
<child>
<object class="GtkExpander" id="expander1">
<property name="visible">True</property>
@@ -40,7 +68,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">liststore</property>
- <signal name="cursor_changed" handler="parole_media_list_format_cursor_changed_cb"/>
+ <signal name="cursor-changed" handler="parole_media_list_format_cursor_changed_cb" swapped="no"/>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="title">File Type</property>
@@ -69,6 +97,7 @@
<child type="label">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
+ <property name="can_focus">False</property>
<property name="label" translatable="yes">Select File Types (By Extension)</property>
</object>
</child>
@@ -79,47 +108,6 @@
<property name="position">2</property>
</packing>
</child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button2">
- <property name="label">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_list_close_save_dialog_cb"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button1">
- <property name="label">gtk-save</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_list_save_playlist_cb"/>
- </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="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
</object>
</child>
<action-widgets>
@@ -127,4 +115,21 @@
<action-widget response="0">button1</action-widget>
</action-widgets>
</object>
+ <object class="GtkListStore" id="liststore">
+ <columns>
+ <!-- column-name filetype -->
+ <column type="gchararray"/>
+ <!-- column-name extension -->
+ <column type="gchararray"/>
+ <!-- column-name extension_id -->
+ <column type="guint"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">By Extension</col>
+ <col id="1" translatable="yes"></col>
+ <col id="2">0</col>
+ </row>
+ </data>
+ </object>
</interface>
diff --git a/gst/Makefile.am b/gst/Makefile.am
index 891ec29..393edc3 100644
--- a/gst/Makefile.am
+++ b/gst/Makefile.am
@@ -18,9 +18,7 @@ GENERATED_FILES = \
libparolegst_la_SOURCES = \
$(GENERATED_FILES) \
parole-gst.c \
- parole-gst.h \
- parole-gst-iface.c \
- parole-gst-iface.h
+ parole-gst.h
libparolegst_la_CFLAGS = \
$(GST_VIDEO_CFLAGS) \
diff --git a/gst/parole-gst-iface.c b/gst/parole-gst-iface.c
deleted file mode 100644
index cdc8e67..0000000
--- a/gst/parole-gst-iface.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 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 <glib.h>
-
-#include "parole-gst-iface.h"
-
-GType
-parole_gst_helper_get_type (void)
-{
- static GType type = G_TYPE_INVALID;
-
- if (G_UNLIKELY (type == G_TYPE_INVALID))
- {
- static const GTypeInfo info =
- {
- sizeof (ParoleGstHelperIface),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0,
- NULL,
- NULL,
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE, "ParoleGstHelperIface", &info, 0);
-
- g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
- }
-
- return type;
-}
-
-void parole_gst_helper_draw_logo (ParoleGstHelper *gst)
-{
- if ( PAROLE_GST_HELPER_GET_IFACE (gst)->draw_logo )
- {
- (*PAROLE_GST_HELPER_GET_IFACE (gst)->draw_logo) (gst);
- }
-}
-
-void parole_gst_helper_load_subtitle (ParoleGstHelper *gst)
-{
- if ( PAROLE_GST_HELPER_GET_IFACE (gst)->load_subtitle )
- {
- (*PAROLE_GST_HELPER_GET_IFACE (gst)->load_subtitle) (gst);
- }
-}
-
-void parole_gst_helper_set_video_colors (ParoleGstHelper *gst)
-{
- if ( PAROLE_GST_HELPER_GET_IFACE (gst)->set_video_color_balance )
- {
- (*PAROLE_GST_HELPER_GET_IFACE (gst)->set_video_color_balance) (gst);
- }
-}
-
-void parole_gst_helper_set_subtitle_font (ParoleGstHelper *gst)
-{
- if ( PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_font )
- {
- (*PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_font) (gst);
- }
-}
-
-void parole_gst_helper_set_subtitle_encoding (ParoleGstHelper *gst)
-{
- if ( PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_encoding )
- {
- (*PAROLE_GST_HELPER_GET_IFACE (gst)->set_subtitle_encoding) (gst);
- }
-}
-
-void parole_gst_helper_update_vis (ParoleGstHelper *gst)
-{
- if ( PAROLE_GST_HELPER_GET_IFACE (gst)->update_vis )
- {
- (*PAROLE_GST_HELPER_GET_IFACE (gst)->update_vis) (gst);
- }
-}
diff --git a/gst/parole-gst-iface.h b/gst/parole-gst-iface.h
deleted file mode 100644
index c236458..0000000
--- a/gst/parole-gst-iface.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 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_GST_HELPER_H
-#define __PAROLE_GST_HELPER_H
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define PAROLE_TYPE_GST_HELPER (parole_gst_helper_get_type ())
-#define PAROLE_GST_HELPER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_GST_HELPER, ParoleGstHelper))
-#define PAROLE_IS_GST_HELPER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_GST_HELPER))
-#define PAROLE_GST_HELPER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE((o), PAROLE_TYPE_GST_HELPER, ParoleGstHelperIface))
-
-typedef struct _ParoleGstHelperIface ParoleGstHelperIface;
-typedef struct _ParoleGstHelper ParoleGstHelper;
-
-struct _ParoleGstHelperIface
-{
- GTypeInterface __parent__;
-
- void (*draw_logo) (ParoleGstHelper *gst);
-
- void (*set_video_color_balance) (ParoleGstHelper *gst);
-
- void (*load_subtitle) (ParoleGstHelper *gst);
-
- void (*set_subtitle_font) (ParoleGstHelper *gst);
-
- void (*set_subtitle_encoding) (ParoleGstHelper *gst);
-
- void (*update_vis) (ParoleGstHelper *gst);
-
-};
-
-GType parole_gst_helper_get_type (void) G_GNUC_CONST;
-
-void parole_gst_helper_draw_logo (ParoleGstHelper *gst);
-
-void parole_gst_helper_load_subtitle (ParoleGstHelper *gst);
-
-void parole_gst_helper_set_video_colors (ParoleGstHelper *gst);
-
-void parole_gst_helper_set_subtitle_font (ParoleGstHelper *gst);
-
-void parole_gst_helper_set_subtitle_encoding (ParoleGstHelper *gst);
-
-void parole_gst_helper_update_vis (ParoleGstHelper *gst);
-
-G_END_DECLS
-
-#endif /*__PAROLE_GST_IFACE_H*/
diff --git a/gst/parole-gst.c b/gst/parole-gst.c
index c20f952..ad9f6d9 100644
--- a/gst/parole-gst.c
+++ b/gst/parole-gst.c
@@ -1,5 +1,5 @@
/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
*
* Licensed under the GNU General Public License Version 2
*
@@ -33,16 +33,12 @@
#include <gst/video/video.h>
-#ifdef XFCE_DISABLE_DEPRECATED
-#undef XFCE_DISABLE_DEPRECATED
-#endif
#include <libxfce4util/libxfce4util.h>
#include <libxfcegui4/libxfcegui4.h>
#include <gdk/gdkx.h>
#include "parole-gst.h"
-#include "parole-gst-iface.h"
#include "common/parole-common.h"
#include "common/parole-rc-utils.h"
@@ -50,15 +46,11 @@
#include "gst-enum-types.h"
#include "gstmarshal.h"
-
-
#define HIDE_WINDOW_CURSOR_TIMEOUT 3.0f
#define PAROLE_GST_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), PAROLE_TYPE_GST, ParoleGstPrivate))
-static void parole_gst_helper_iface_init (ParoleGstHelperIface *iface);
-
static void parole_gst_play_file_internal (ParoleGst *gst);
static void parole_gst_change_state (ParoleGst *gst,
@@ -70,17 +62,32 @@ static void parole_gst_terminate_internal (ParoleGst *gst,
static void parole_gst_seek_cdda_track (ParoleGst *gst,
gint track);
+typedef enum
+{
+ GST_PLAY_FLAG_VIDEO = (1 << 0),
+ GST_PLAY_FLAG_AUDIO = (1 << 1),
+ GST_PLAY_FLAG_TEXT = (1 << 2),
+ GST_PLAY_FLAG_VIS = (1 << 3),
+ GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4),
+ GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5),
+ GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6),
+ GST_PLAY_FLAG_DOWNLOAD = (1 << 7),
+ GST_PLAY_FLAG_BUFFERING = (1 << 8),
+ GST_PLAY_FLAG_DEINTERLACE = (1 << 9)
+
+} GstPlayFlags;
+
struct ParoleGstPrivate
{
GstElement *playbin;
GstElement *video_sink;
- GstElement *vis_sink;
+
GstBus *bus;
GMutex *lock;
GstState state;
GstState target;
- ParoleMediaState media_state;
+ ParoleState media_state;
ParoleStream *stream;
gulong tick_id;
@@ -91,17 +98,19 @@ struct ParoleGstPrivate
gpointer conf; /* Specific for ParoleMediaPlayer*/
gboolean terminating;
- gboolean embedded;
gboolean enable_tags;
gboolean update_vis;
gboolean with_vis;
+ gboolean vis_loaded;
gboolean buffering;
gboolean update_color_balance;
ParoleAspectRatio aspect_ratio;
gulong state_change_id;
+ gboolean scale_logo;
+
/*
* xvimage sink has brightness+hue+aturation+contrast.
*/
@@ -124,7 +133,6 @@ enum
enum
{
PROP_0,
- PROP_EMBEDDED,
PROP_CONF_OBJ,
PROP_ENABLE_TAGS
};
@@ -133,8 +141,7 @@ static gpointer parole_gst_object = NULL;
static guint signals [LAST_SIGNAL] = { 0 };
-G_DEFINE_TYPE_WITH_CODE (ParoleGst, parole_gst, GTK_TYPE_WIDGET,
- G_IMPLEMENT_INTERFACE (PAROLE_TYPE_GST_HELPER, parole_gst_helper_iface_init));
+G_DEFINE_TYPE (ParoleGst, parole_gst, GTK_TYPE_WIDGET)
static void
parole_gst_finalize (GObject *object)
@@ -150,7 +157,10 @@ parole_gst_finalize (GObject *object)
parole_stream_init_properties (gst->priv->stream);
+ if ( gst->priv->stream )
g_object_unref (gst->priv->stream);
+
+ if ( gst->priv->logo )
g_object_unref (gst->priv->logo);
if ( gst->priv->device )
@@ -347,11 +357,12 @@ parole_gst_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
gint w, h;
gdouble ratio, width, height;
+ PAROLE_GST (widget)->priv->scale_logo = TRUE;
+
w = allocation->width;
h = allocation->height;
- if ( PAROLE_GST (widget)->priv->embedded == FALSE )
- parole_gst_get_video_output_size (PAROLE_GST (widget), &w, &h);
+ parole_gst_get_video_output_size (PAROLE_GST (widget), &w, &h);
width = w;
height = h;
@@ -375,9 +386,9 @@ parole_gst_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
}
static void
-parole_gst_draw_logo_common (ParoleGst *gst)
+parole_gst_draw_logo (ParoleGst *gst)
{
- GdkPixbuf *pix;
+ static GdkPixbuf *pix = NULL;
GdkRegion *region;
GdkRectangle rect;
GtkWidget *widget;
@@ -404,11 +415,17 @@ parole_gst_draw_logo_common (ParoleGst *gst)
0, 0,
widget->allocation.width,
widget->allocation.height);
-
- pix = gdk_pixbuf_scale_simple (gst->priv->logo,
- widget->allocation.width,
- widget->allocation.height,
- GDK_INTERP_BILINEAR);
+
+ if (gst->priv->scale_logo)
+ {
+ if (pix)
+ g_object_unref (pix);
+ pix = gdk_pixbuf_scale_simple (gst->priv->logo,
+ widget->allocation.width,
+ widget->allocation.height,
+ GDK_INTERP_BILINEAR);
+ gst->priv->scale_logo = FALSE;
+ }
gdk_draw_pixbuf (GDK_DRAWABLE (widget->window),
GTK_WIDGET(widget)->style->fg_gc[0],
@@ -419,35 +436,13 @@ parole_gst_draw_logo_common (ParoleGst *gst)
GDK_RGB_DITHER_NONE,
0, 0);
- gdk_pixbuf_unref (pix);
+
gdk_window_end_paint (GTK_WIDGET (gst)->window);
}
static void
-parole_gst_draw_logo_embedded (ParoleGstHelper *helper)
+parole_gst_set_video_color_balance (ParoleGst *gst)
{
- ParoleGst *gst;
-
- gst = PAROLE_GST (helper);
-
- if ( gst->priv->terminating != TRUE )
- parole_gst_draw_logo_common (gst);
-}
-
-static void
-parole_gst_draw_logo (ParoleGstHelper *helper)
-{
- ParoleGst *gst;
-
- gst = PAROLE_GST (helper);
-
- parole_gst_draw_logo_common (gst);
-}
-
-static void
-parole_gst_set_video_color_balance (ParoleGstHelper *helper)
-{
- ParoleGst *gst;
GstElement *video_sink;
gint brightness_value;
@@ -455,8 +450,6 @@ parole_gst_set_video_color_balance (ParoleGstHelper *helper)
gint hue_value;
gint saturation_value;
- gst = PAROLE_GST (helper);
-
if ( !gst->priv->xvimage_sink)
return;
@@ -482,7 +475,7 @@ parole_gst_set_video_color_balance (ParoleGstHelper *helper)
"hue", hue_value,
"saturation", saturation_value,
NULL);
-
+
g_object_unref (G_OBJECT (video_sink));
gst->priv->update_color_balance = FALSE;
@@ -530,26 +523,28 @@ parole_gst_expose_event (GtkWidget *widget, GdkEventExpose *ev)
switch ( gst->priv->state )
{
case GST_STATE_PLAYING:
- if ( playing_video || gst->priv->with_vis)
+ if ( playing_video || gst->priv->vis_loaded)
+ {
gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
+ }
else
- parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+ parole_gst_draw_logo (gst);
break;
case GST_STATE_PAUSED:
- if ( playing_video || gst->priv->with_vis || gst->priv->target == GST_STATE_PLAYING )
+ if ( playing_video || gst->priv->vis_loaded || gst->priv->target == GST_STATE_PLAYING )
gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
else
- parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+ parole_gst_draw_logo (gst);
break;
case GST_STATE_READY:
if (gst->priv->target != GST_STATE_PLAYING)
- parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+ parole_gst_draw_logo (gst);
else
gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink));
break;
case GST_STATE_NULL:
case GST_STATE_VOID_PENDING:
- parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+ parole_gst_draw_logo (gst);
break;
}
return TRUE;
@@ -575,14 +570,17 @@ parole_gst_query_capabilities (ParoleGst *gst)
if ( gst_element_query (gst->priv->playbin, query) )
{
+
gst_query_parse_seeking (query,
NULL,
&seekable,
NULL,
NULL);
+
g_object_set (G_OBJECT (gst->priv->stream),
- "seekable", seekable,
- NULL);
+ "seekable", seekable,
+ NULL);
+
}
gst_query_unref (query);
}
@@ -636,7 +634,13 @@ out:
static void
parole_gst_tick (ParoleGst *gst)
{
- if ( gst->priv->state >= GST_STATE_PAUSED )
+ gboolean live;
+
+ g_object_get (gst->priv->stream,
+ "live", &live,
+ NULL);
+
+ if ( gst->priv->state >= GST_STATE_PAUSED && !live)
{
if ( gst->priv->tick_id != 0 )
{
@@ -681,13 +685,10 @@ parole_gst_query_duration (ParoleGst *gst)
}
static void
-parole_gst_set_subtitle_font (ParoleGstHelper *helper)
+parole_gst_set_subtitle_font (ParoleGst *gst)
{
- ParoleGst *gst;
gchar *font;
- gst = PAROLE_GST (helper);
-
g_object_get (G_OBJECT (gst->priv->conf),
"subtitle-font", &font,
NULL);
@@ -701,13 +702,10 @@ parole_gst_set_subtitle_font (ParoleGstHelper *helper)
}
static void
-parole_gst_set_subtitle_encoding (ParoleGstHelper *helper)
+parole_gst_set_subtitle_encoding (ParoleGst *gst)
{
- ParoleGst *gst;
gchar *encoding;
- gst = PAROLE_GST (helper);
-
g_object_get (G_OBJECT (gst->priv->conf),
"subtitle-encoding", &encoding,
NULL);
@@ -720,17 +718,14 @@ parole_gst_set_subtitle_encoding (ParoleGstHelper *helper)
}
static void
-parole_gst_load_subtitle (ParoleGstHelper *helper)
+parole_gst_load_subtitle (ParoleGst *gst)
{
- ParoleGst *gst;
ParoleMediaType type;
gchar *uri;
gchar *sub;
gchar *sub_uri;
gboolean sub_enabled;
- gst = PAROLE_GST (helper);
-
g_object_get (G_OBJECT (gst->priv->stream),
"media-type", &type,
NULL);
@@ -809,68 +804,44 @@ parole_gst_get_pad_capabilities (GObject *object, GParamSpec *pspec, ParoleGst *
static void
parole_gst_query_info (ParoleGst *gst)
{
- const GList *info = NULL;
- GObject *obj;
- GParamSpec *pspec;
- GEnumValue *val;
- gint type;
- gboolean has_video = FALSE;
+ GstPad *videopad = NULL;
+
+ gint n_audio, n_video, i;
g_object_get (G_OBJECT (gst->priv->playbin),
- "stream-info", &info,
+ "n-audio", &n_audio,
+ "n-video", &n_video,
NULL);
- for ( ; info != NULL; info = info->next )
+
+ g_object_set (G_OBJECT (gst->priv->stream),
+ "has-video", (n_video > 0),
+ "has-audio", (n_audio > 0),
+ NULL);
+
+ if (n_video > 0)
{
- obj = info->data;
-
- g_object_get (obj,
- "type", &type,
- NULL);
-
- pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (obj), "type");
- val = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, type);
-
- if ( g_ascii_strcasecmp (val->value_name, "video") == 0 ||
- g_ascii_strcasecmp (val->value_nick, "video") == 0)
- {
- GstPad *pad = NULL;
+ for (i = 0; i < n_video && videopad == NULL; i++)
+ g_signal_emit_by_name (gst->priv->playbin, "get-video-pad", i, &videopad);
- g_object_get (G_OBJECT (obj),
- "object", &pad,
- NULL);
+ if (videopad)
+ {
+ GstCaps *caps;
- if ( pad )
+ if ((caps = gst_pad_get_negotiated_caps (videopad)))
{
- if ( GST_IS_PAD (pad) && GST_PAD_CAPS (pad) )
- {
- parole_gst_get_pad_capabilities (G_OBJECT (pad), NULL, gst);
- }
- else
- {
- g_signal_connect (pad, "notify::caps",
- G_CALLBACK (parole_gst_get_pad_capabilities),
- gst);
- }
- g_object_unref (pad);
+ parole_gst_get_pad_capabilities (G_OBJECT (videopad), NULL, gst);
+ g_object_unref (caps);
}
- TRACE ("Stream has video");
- g_object_set (G_OBJECT (gst->priv->stream),
- "has-video", TRUE,
- NULL);
- has_video = TRUE;
- }
- if ( g_ascii_strcasecmp (val->value_name, "audio") == 0 ||
- g_ascii_strcasecmp (val->value_nick, "audio") == 0)
- {
- TRACE ("Stream has audio");
- g_object_set (G_OBJECT (gst->priv->stream),
- "has-audio", TRUE,
- NULL);
+
+ g_signal_connect (videopad, "notify::caps",
+ G_CALLBACK (parole_gst_get_pad_capabilities),
+ gst);
+ g_object_unref (videopad);
}
}
-
- if ( !has_video )
+
+ if ( n_video == 0 )
gtk_widget_queue_draw (GTK_WIDGET (gst));
}
@@ -882,13 +853,11 @@ parole_gst_update_stream_info (ParoleGst *gst)
}
static void
-parole_gst_update_vis (ParoleGstHelper *helper)
+parole_gst_update_vis (ParoleGst *gst)
{
- ParoleGst *gst;
gchar *vis_name;
-
- gst = PAROLE_GST (helper);
-
+ gint flags;
+
TRACE ("start");
g_object_get (G_OBJECT (gst->priv->conf),
@@ -897,23 +866,44 @@ parole_gst_update_vis (ParoleGstHelper *helper)
NULL);
TRACE ("Vis name %s enabled %d\n", vis_name, gst->priv->with_vis);
-
+
+ g_object_get (G_OBJECT (gst->priv->playbin),
+ "flags", &flags,
+ NULL);
+
if ( gst->priv->with_vis )
{
- gst->priv->vis_sink = gst_element_factory_make (vis_name, "vis");
- g_object_set (G_OBJECT (gst->priv->playbin),
- "vis-plugin", gst->priv->vis_sink,
- NULL);
+ GstElement *vis_sink;
+ flags |= GST_PLAY_FLAG_VIS;
+
+ vis_sink = gst_element_factory_make (vis_name, "vis");
+
+ if (vis_sink)
+ {
+ g_object_set (G_OBJECT (gst->priv->playbin),
+ "vis-plugin", vis_sink,
+ NULL);
+
+ gst->priv->vis_loaded = TRUE;
+ }
}
else
{
+ flags &= ~GST_PLAY_FLAG_VIS;
g_object_set (G_OBJECT (gst->priv->playbin),
"vis-plugin", NULL,
NULL);
+ gtk_widget_queue_draw (GTK_WIDGET (gst));
+ gst->priv->vis_loaded = FALSE;
}
+ g_object_set (G_OBJECT (gst->priv->playbin),
+ "flags", flags,
+ NULL);
+
gst->priv->update_vis = FALSE;
g_free (vis_name);
+ gtk_widget_queue_draw (GTK_WIDGET (gst));
TRACE ("end");
}
@@ -938,47 +928,35 @@ parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState
{
case GST_STATE_PLAYING:
{
- gst->priv->media_state = PAROLE_MEDIA_STATE_PLAYING;
+ gst->priv->media_state = PAROLE_STATE_PLAYING;
+ TRACE ("Playing");
+ parole_gst_query_capabilities (gst);
+ parole_gst_query_info (gst);
+ parole_gst_query_duration (gst);
+
g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0,
- gst->priv->stream, PAROLE_MEDIA_STATE_PLAYING);
+ gst->priv->stream, PAROLE_STATE_PLAYING);
break;
}
case GST_STATE_PAUSED:
{
- if ( pending == GST_STATE_PLAYING )
- {
- ParoleMediaType media_type;
-
- g_object_get (G_OBJECT (gst->priv->stream),
- "media-type", &media_type,
- NULL);
-
- if ( (media_type == PAROLE_MEDIA_TYPE_LOCAL_FILE && old == GST_STATE_READY) ||
- media_type != PAROLE_MEDIA_TYPE_LOCAL_FILE )
- {
- parole_gst_query_duration (gst);
- parole_gst_query_capabilities (gst);
- parole_gst_query_info (gst);
- }
- }
-
if ( gst->priv->target == GST_STATE_PLAYING )
{
if ( gst->priv->update_color_balance )
- parole_gst_helper_set_video_colors (PAROLE_GST_HELPER (gst));
+ parole_gst_set_video_color_balance (gst);
}
- gst->priv->media_state = PAROLE_MEDIA_STATE_PAUSED;
+ gst->priv->media_state = PAROLE_STATE_PAUSED;
g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0,
- gst->priv->stream, PAROLE_MEDIA_STATE_PAUSED);
+ gst->priv->stream, PAROLE_STATE_PAUSED);
break;
}
case GST_STATE_READY:
{
gst->priv->buffering = FALSE;
- gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
+ gst->priv->media_state = PAROLE_STATE_STOPPED;
g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0,
- gst->priv->stream, PAROLE_MEDIA_STATE_STOPPED);
+ gst->priv->stream, PAROLE_STATE_STOPPED);
if ( gst->priv->target == GST_STATE_PLAYING && pending < GST_STATE_PAUSED)
{
@@ -991,16 +969,16 @@ parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState
else if ( gst->priv->target == GST_STATE_READY)
{
parole_gst_size_allocate (GTK_WIDGET (gst), >K_WIDGET (gst)->allocation);
- parole_gst_helper_draw_logo (PAROLE_GST_HELPER (gst));
+ parole_gst_draw_logo (gst);
}
break;
}
case GST_STATE_NULL:
{
gst->priv->buffering = FALSE;
- gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
+ gst->priv->media_state = PAROLE_STATE_STOPPED;
g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0,
- gst->priv->stream, PAROLE_MEDIA_STATE_STOPPED);
+ gst->priv->stream, PAROLE_STATE_STOPPED);
break;
}
default:
@@ -1180,9 +1158,9 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
}
}
- gst->priv->media_state = PAROLE_MEDIA_STATE_FINISHED;
+ gst->priv->media_state = PAROLE_STATE_PLAYBACK_FINISHED;
g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0,
- gst->priv->stream, PAROLE_MEDIA_STATE_FINISHED);
+ gst->priv->stream, PAROLE_STATE_PLAYBACK_FINISHED);
break;
}
case GST_MESSAGE_ERROR:
@@ -1238,8 +1216,11 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
parole_gst_application_message (gst, msg);
break;
case GST_MESSAGE_DURATION:
- TRACE ("Duration message");
- parole_gst_query_duration (gst);
+ if (gst->priv->state == GST_STATE_PLAYING)
+ {
+ TRACE ("Duration message");
+ parole_gst_query_duration (gst);
+ }
break;
case GST_MESSAGE_ELEMENT:
break;
@@ -1311,16 +1292,6 @@ parole_gst_change_state (ParoleGst *gst, GstState new)
}
static void
-parole_gst_stream_info_notify_cb (GObject * obj, GParamSpec * pspec, ParoleGst *gst)
-{
- GstMessage *msg;
- TRACE ("Stream info changed");
- msg = gst_message_new_application (GST_OBJECT (gst->priv->playbin),
- gst_structure_new ("notify-streaminfo", NULL));
- gst_element_post_message (gst->priv->playbin, msg);
-}
-
-static void
parole_gst_source_notify_cb (GObject *obj, GParamSpec *pspec, ParoleGst *gst)
{
GObject *source;
@@ -1354,7 +1325,7 @@ parole_gst_play_file_internal (ParoleGst *gst)
}
if ( gst->priv->update_vis)
- parole_gst_helper_update_vis (PAROLE_GST_HELPER (gst));
+ parole_gst_update_vis (gst);
g_object_get (G_OBJECT (gst->priv->stream),
@@ -1368,7 +1339,7 @@ parole_gst_play_file_internal (ParoleGst *gst)
"suburi", NULL,
NULL);
- parole_gst_helper_load_subtitle (PAROLE_GST_HELPER (gst));
+ parole_gst_load_subtitle (gst);
parole_gst_change_state (gst, GST_STATE_PLAYING);
g_free (uri);
}
@@ -1520,8 +1491,12 @@ parole_gst_check_state_change_timeout (gpointer data)
if ( gst->priv->state != gst->priv->target )
{
- gboolean ret_val =
- xfce_confirm (_("The stream is taking too much time to load"), GTK_STOCK_OK, _("Stop"));
+ gboolean ret_val = 1;
+ /*FIXME gboolean ret_val = xfce_dialog_confirm (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gst))),
+ GTK_STOCK_YES,
+ _("Stop"),
+ _("The stream is taking too much time to load"),
+ NULL);*/
if ( ret_val )
{
@@ -1549,16 +1524,13 @@ parole_gst_terminate_internal (ParoleGst *gst, gboolean fade_sound)
parole_window_busy_cursor (GTK_WIDGET (gst)->window);
- if ( gst->priv->embedded )
- goto out;
-
if ( fade_sound && gst->priv->state == GST_STATE_PLAYING && !playing_video )
{
gdouble volume;
gdouble step;
volume = parole_gst_get_volume (gst);
/*
- * Like amarok, reduce the sound slowley then exit.
+ * Fade-out on exit.
*/
if ( volume != 0 )
{
@@ -1567,16 +1539,28 @@ parole_gst_terminate_internal (ParoleGst *gst, gboolean fade_sound)
step = volume - volume / 10;
parole_gst_set_volume (gst, step < 0.01 ? 0 : step);
volume = parole_gst_get_volume (gst);
- g_usleep (40000);
+ g_usleep (15000);
}
}
}
-out:
parole_gst_change_state (gst, GST_STATE_NULL);
}
static void
+parole_gst_about_to_finish_cb (GstElement *elm, gpointer data)
+{
+ ParoleGst *gst;
+
+ gst = PAROLE_GST (data);
+
+
+ g_signal_emit (G_OBJECT (gst), signals [MEDIA_STATE], 0,
+ gst->priv->stream, PAROLE_STATE_ABOUT_TO_FINISH);
+
+}
+
+static void
parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
{
if ( !g_strcmp0 ("vis-enabled", spec->name) || !g_strcmp0 ("vis-name", spec->name) )
@@ -1585,11 +1569,11 @@ parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
}
else if ( !g_strcmp0 ("subtitle-font", spec->name) || !g_strcmp0 ("enable-subtitle", spec->name) )
{
- parole_gst_helper_set_subtitle_font (PAROLE_GST_HELPER (gst));
+ parole_gst_set_subtitle_font (gst);
}
else if (!g_strcmp0 ("subtitle-encoding", spec->name) )
{
- parole_gst_helper_set_subtitle_encoding (PAROLE_GST_HELPER (gst));
+ parole_gst_set_subtitle_encoding (gst);
}
else if ( !g_strcmp0 ("brightness", spec->name) || !g_strcmp0 ("hue", spec->name) ||
!g_strcmp0 ("contrast", spec->name) || !g_strcmp0 ("saturation", spec->name) )
@@ -1597,7 +1581,7 @@ parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
gst->priv->update_color_balance = TRUE;
if ( gst->priv->state >= GST_STATE_PAUSED )
- parole_gst_helper_set_video_colors (PAROLE_GST_HELPER (gst));
+ parole_gst_set_video_color_balance (gst);
}
else if ( !g_strcmp0 ("aspect-ratio", spec->name) )
{
@@ -1619,9 +1603,6 @@ static void parole_gst_get_property (GObject *object,
switch (prop_id)
{
- case PROP_EMBEDDED:
- g_value_set_boolean (value, gst->priv->embedded);
- break;
case PROP_CONF_OBJ:
g_value_set_pointer (value, gst->priv->conf);
break;
@@ -1645,9 +1626,6 @@ static void parole_gst_set_property (GObject *object,
switch (prop_id)
{
- case PROP_EMBEDDED:
- gst->priv->embedded = g_value_get_boolean (value);
- break;
case PROP_ENABLE_TAGS:
gst->priv->enable_tags = g_value_get_boolean (value);
break;
@@ -1670,31 +1648,6 @@ static void parole_gst_set_property (GObject *object,
}
}
-static void parole_gst_helper_iface_init (ParoleGstHelperIface *iface)
-{
-}
-
-static void
-parole_gst_set_iface_methods (ParoleGst *gst)
-{
- ParoleGstHelperIface *iface;
- iface = PAROLE_GST_HELPER_GET_IFACE (gst);
-
- if ( gst->priv->embedded == FALSE)
- {
- iface->draw_logo = parole_gst_draw_logo;
- iface->set_video_color_balance = parole_gst_set_video_color_balance;
- iface->set_subtitle_encoding = parole_gst_set_subtitle_encoding;
- iface->set_subtitle_font = parole_gst_set_subtitle_font;
- iface->load_subtitle = parole_gst_load_subtitle;
- iface->update_vis = parole_gst_update_vis;
- }
- else
- {
- iface->draw_logo = parole_gst_draw_logo_embedded;
- }
-}
-
static void
parole_gst_constructed (GObject *object)
{
@@ -1706,13 +1659,17 @@ parole_gst_constructed (GObject *object)
enable_xv = parole_rc_read_entry_bool ("enable-xv", PAROLE_RC_GROUP_GENERAL, TRUE);
- gst->priv->playbin = gst_element_factory_make ("playbin", "player");
+ gst->priv->playbin = gst_element_factory_make ("playbin2", "player");
if ( G_UNLIKELY (gst->priv->playbin == NULL) )
{
- xfce_err (_("Unable to load playbin GStreamer plugin"
- ", check your GStreamer installation"));
-
+ GError *error;
+ error = g_error_new (0, 0, "%s", _("Unable to load playbin GStreamer plugin"
+ ", check your GStreamer installation"));
+
+ /*FIXME xfce_dialog_show_error (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gst))),
+ error, NULL);*/
+ g_error_free (error);
g_error ("playbin load failed");
}
@@ -1730,8 +1687,12 @@ parole_gst_constructed (GObject *object)
if ( G_UNLIKELY (gst->priv->video_sink == NULL) )
{
- xfce_err (_("Unable to load video GStreamer plugin"
- ", check your GStreamer installation"));
+ GError *error;
+ error = g_error_new (0, 0, "%s", _("Unable to load video GStreamer plugin"
+ ", check your GStreamer installation"));
+ /*FIXME xfce_dialog_show_error (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gst))),
+ error, NULL);*/
+ g_error_free (error);
g_error ("ximagesink load failed");
}
}
@@ -1759,23 +1720,18 @@ parole_gst_constructed (GObject *object)
g_signal_connect (gst->priv->bus, "sync-message::element",
G_CALLBACK (parole_gst_element_message_sync), gst);
- /*
- * Handle stream info changes, this can happen on live/radio stream.
- */
- g_signal_connect (gst->priv->playbin, "notify::stream-info",
- G_CALLBACK (parole_gst_stream_info_notify_cb), gst);
-
-
g_signal_connect (gst->priv->playbin, "notify::source",
G_CALLBACK (parole_gst_source_notify_cb), gst);
-
- parole_gst_set_iface_methods (gst);
- parole_gst_helper_update_vis (PAROLE_GST_HELPER (gst));
+ g_signal_connect (gst->priv->playbin, "about-to-finish",
+ G_CALLBACK (parole_gst_about_to_finish_cb), gst);
+
+
+ parole_gst_update_vis (gst);
parole_gst_load_logo (gst);
- parole_gst_helper_set_subtitle_encoding (PAROLE_GST_HELPER (gst));
- parole_gst_helper_set_subtitle_font (PAROLE_GST_HELPER (gst));
+ parole_gst_set_subtitle_encoding (gst);
+ parole_gst_set_subtitle_font (gst);
TRACE ("End");
}
@@ -1822,7 +1778,7 @@ parole_gst_class_init (ParoleGstClass *klass)
NULL, NULL,
_gmarshal_VOID__OBJECT_ENUM,
G_TYPE_NONE, 2,
- PAROLE_TYPE_STREAM, GST_ENUM_TYPE_MEDIA_STATE);
+ PAROLE_TYPE_STREAM, PAROLE_ENUM_TYPE_STATE);
signals[MEDIA_PROGRESSED] =
g_signal_new ("media-progressed",
@@ -1865,14 +1821,6 @@ parole_gst_class_init (ParoleGstClass *klass)
G_TYPE_STRING);
g_object_class_install_property (object_class,
- PROP_EMBEDDED,
- g_param_spec_boolean ("embedded",
- NULL, NULL,
- FALSE,
- G_PARAM_CONSTRUCT_ONLY|
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
PROP_CONF_OBJ,
g_param_spec_pointer ("conf-object",
NULL, NULL,
@@ -1896,20 +1844,22 @@ parole_gst_init (ParoleGst *gst)
gst->priv->state = GST_STATE_VOID_PENDING;
gst->priv->target = GST_STATE_VOID_PENDING;
- gst->priv->media_state = PAROLE_MEDIA_STATE_STOPPED;
+ gst->priv->media_state = PAROLE_STATE_STOPPED;
gst->priv->aspect_ratio = PAROLE_ASPECT_RATIO_NONE;
gst->priv->lock = g_mutex_new ();
gst->priv->stream = parole_stream_new ();
gst->priv->tick_id = 0;
gst->priv->hidecursor_timer = g_timer_new ();
gst->priv->update_vis = FALSE;
- gst->priv->vis_sink = NULL;
gst->priv->buffering = FALSE;
gst->priv->update_color_balance = TRUE;
gst->priv->state_change_id = 0;
gst->priv->device = NULL;
gst->priv->enable_tags = TRUE;
gst->priv->terminating = FALSE;
+ gst->priv->with_vis = FALSE;
+ gst->priv->vis_loaded = FALSE;
+ gst->priv->scale_logo = TRUE;
gst->priv->conf = NULL;
@@ -1923,10 +1873,9 @@ parole_gst_init (ParoleGst *gst)
}
GtkWidget *
-parole_gst_new (gboolean embedded, gpointer conf_obj)
+parole_gst_new (gpointer conf_obj)
{
parole_gst_object = g_object_new (PAROLE_TYPE_GST,
- "embedded", embedded,
"conf-object", conf_obj,
NULL);
@@ -2045,18 +1994,30 @@ void parole_gst_resume (ParoleGst *gst)
parole_gst_change_state (gst, GST_STATE_PLAYING);
}
+static gboolean
+parole_gst_stop_idle (gpointer data)
+{
+ ParoleGst *gst;
+
+ gst = PAROLE_GST (data);
+
+ parole_gst_change_state (gst, GST_STATE_NULL);
+
+ return FALSE;
+}
+
void parole_gst_stop (ParoleGst *gst)
{
g_mutex_lock (gst->priv->lock);
parole_stream_init_properties (gst->priv->stream);
- gst->priv->target = GST_STATE_READY;
-
+ gst->priv->target = GST_STATE_NULL;
+
g_mutex_unlock (gst->priv->lock);
parole_window_busy_cursor (GTK_WIDGET (gst)->window);
- parole_gst_change_state (gst, GST_STATE_READY);
+ g_idle_add ((GSourceFunc) parole_gst_stop_idle, gst);
}
void parole_gst_terminate (ParoleGst *gst)
@@ -2073,10 +2034,12 @@ void parole_gst_shutdown (ParoleGst *gst)
if ( g_signal_handler_is_connected (gst->priv->playbin, gst->priv->sig2) )
g_signal_handler_disconnect (gst->priv->playbin, gst->priv->sig2);
+ if ( gst->priv->bus )
g_object_unref (gst->priv->bus);
gst_element_set_state (gst->priv->playbin, GST_STATE_VOID_PENDING);
+ if ( gst->priv->playbin )
g_object_unref (gst->priv->playbin);
}
@@ -2128,7 +2091,7 @@ gdouble parole_gst_get_volume (ParoleGst *gst)
return volume;
}
-ParoleMediaState parole_gst_get_state (ParoleGst *gst)
+ParoleState parole_gst_get_state (ParoleGst *gst)
{
return gst->priv->media_state;
}
diff --git a/gst/parole-gst.h b/gst/parole-gst.h
index 9a175c1..cb3265f 100644
--- a/gst/parole-gst.h
+++ b/gst/parole-gst.h
@@ -1,5 +1,5 @@
/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
*
* Licensed under the GNU General Public License Version 2
*
@@ -26,6 +26,7 @@
#include <gtk/gtk.h>
#include <parole/parole-stream.h>
+#include <parole/parole-enum-types.h>
G_BEGIN_DECLS
@@ -33,19 +34,6 @@ G_BEGIN_DECLS
#define PAROLE_GST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_GST, ParoleGst))
#define PAROLE_IS_GST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_GST))
-/*
- * Keep this order to be compatible with the
- * ParoleState enum used by the plugin interface.
- */
-typedef enum /*< prefix=PAROLE_MEDIA_STATE_ >*/
-{
- PAROLE_MEDIA_STATE_STOPPED,
- PAROLE_MEDIA_STATE_FINISHED,
- PAROLE_MEDIA_STATE_PAUSED,
- PAROLE_MEDIA_STATE_PLAYING
-
-} ParoleMediaState;
-
typedef enum
{
PAROLE_ASPECT_RATIO_NONE,
@@ -72,7 +60,7 @@ typedef struct
void (*media_state) (ParoleGst *gst,
const ParoleStream *stream,
- ParoleMediaState state);
+ ParoleState state);
void (*media_progressed) (ParoleGst *gst,
const ParoleStream *stream,
@@ -92,8 +80,7 @@ typedef struct
GType parole_gst_get_type (void) G_GNUC_CONST;
-GtkWidget *parole_gst_new (gboolean embedded,
- gpointer conf_obj);
+GtkWidget *parole_gst_new (gpointer conf_obj);
GtkWidget *parole_gst_get (void);
@@ -123,7 +110,7 @@ void parole_gst_set_volume (ParoleGst *gst,
gdouble parole_gst_get_volume (ParoleGst *gst);
-ParoleMediaState parole_gst_get_state (ParoleGst *gst);
+ParoleState parole_gst_get_state (ParoleGst *gst);
GstState parole_gst_get_gst_state (ParoleGst *gst);
diff --git a/parole/parole-provider-player.c b/parole/parole-provider-player.c
index afc15f0..e5ee1e2 100644
--- a/parole/parole-provider-player.c
+++ b/parole/parole-provider-player.c
@@ -1,5 +1,5 @@
/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
*
* Licensed under the GNU General Public License Version 2
*
diff --git a/parole/parole-provider-player.h b/parole/parole-provider-player.h
index d009c5c..2d2c451 100644
--- a/parole/parole-provider-player.h
+++ b/parole/parole-provider-player.h
@@ -1,5 +1,5 @@
/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
*
* Licensed under the GNU General Public License Version 2
*
@@ -44,14 +44,7 @@ typedef enum
PAROLE_PLUGIN_CONTAINER_MAIN_VIEW
} ParolePluginContainer;
-typedef enum
-{
- PAROLE_STATE_STOPPED = 0,
- PAROLE_STATE_PLAYBACK_FINISHED,
- PAROLE_STATE_PAUSED,
- PAROLE_STATE_PLAYING
-
-} ParoleState;
+
struct _ParoleProviderPlayerIface
{
diff --git a/parole/parole-stream.c b/parole/parole-stream.c
index 97c773d..a333499 100644
--- a/parole/parole-stream.c
+++ b/parole/parole-stream.c
@@ -1,5 +1,5 @@
/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
*
* Licensed under the GNU General Public License Version 2
*
diff --git a/parole/parole-stream.h b/parole/parole-stream.h
index c61d01e..46e7ef1 100644
--- a/parole/parole-stream.h
+++ b/parole/parole-stream.h
@@ -1,5 +1,5 @@
/*
- * * Copyright (C) 2009-2011 Ali <aliov at xfce.org>
+ * * Copyright (C) 2009 Ali <aliov at xfce.org>
*
* Licensed under the GNU General Public License Version 2
*
@@ -46,6 +46,18 @@ typedef enum
} ParoleMediaType;
+
+typedef enum
+{
+ PAROLE_STATE_STOPPED = 0,
+ PAROLE_STATE_PLAYBACK_FINISHED,
+ PAROLE_STATE_ABOUT_TO_FINISH,
+ PAROLE_STATE_PAUSED,
+ PAROLE_STATE_PLAYING
+
+} ParoleState;
+
+
typedef struct _ParoleStream ParoleStream;
typedef struct _ParoleStreamClass ParoleStreamClass;
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index a122328..e5de6c1 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -8,10 +8,6 @@ if PAROLE_TRAY_PLUGIN
SUBDIRS+=tray
endif
-if WINDOW_TITLE_PLUGIN
-SUBDIRS+=window-title
-endif
-
if POWER_MANAGER_PLUGIN
SUBDIRS+=power-manager
-endif
\ No newline at end of file
+endif
diff --git a/plugins/window-title/Makefile.am b/plugins/window-title/Makefile.am
deleted file mode 100644
index 888a2db..0000000
--- a/plugins/window-title/Makefile.am
+++ /dev/null
@@ -1,42 +0,0 @@
-INCLUDES = \
- -I$(top_builddir) \
- -I$(top_srcdir) \
- -DG_LOG_DOMAIN=\"window_title\" \
- -DLIBEXECDIR=\"$(libexecdir)\" \
- -DPACKAGE_LOCALE_DIR=\"$(localedir)\"
-
-pluginsdir = \
- $(libdir)/parole-$(PAROLE_VERSION_API)
-
-plugins_LTLIBRARIES = \
- window-title.la
-
-window_title_la_SOURCES = \
- window-title-plugin.c \
- window-title-provider.c \
- window-title-provider.h
-
-window_title_la_CFLAGS = \
- $(PLATFORM_CFLAGS) \
- $(GTK_CFLAGS) \
- $(LIBXFCE4UTIL_CFLAGS)
-
-window_title_la_LDFLAGS = \
- -avoid-version \
- -export-dynamic \
- -module \
- $(PLATFORM_LDFLAGS)
-
-#
-# .desktop file
-#
-desktop_in_files = window-title.desktop.in
-desktopdir = $(datadir)/parole/parole-plugins-$(PAROLE_VERSION_API)
-desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
- at INTLTOOL_DESKTOP_RULE@
-
-EXTRA_DIST = \
- $(desktop_in_files)
-
-DISTCLEANFILES = \
- $(desktop_DATA)
\ No newline at end of file
diff --git a/plugins/window-title/window-title-plugin.c b/plugins/window-title/window-title-plugin.c
deleted file mode 100644
index 465e605..0000000
--- a/plugins/window-title/window-title-plugin.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 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 <libxfce4util/libxfce4util.h>
-
-#include "window-title-provider.h"
-
-G_MODULE_EXPORT GType parole_plugin_initialize (ParoleProviderPlugin *plugin);
-
-G_MODULE_EXPORT void parole_plugin_shutdown (void);
-
-G_MODULE_EXPORT GType
-parole_plugin_initialize (ParoleProviderPlugin *plugin)
-{
- xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
-
- window_title_provider_register_type (plugin);
-
- return WINDOW_TYPE_TITLE_PROVIDER;
-}
-
-G_MODULE_EXPORT void
-parole_plugin_shutdown (void)
-{
-
-}
diff --git a/plugins/window-title/window-title-provider.c b/plugins/window-title/window-title-provider.c
deleted file mode 100644
index 85e2364..0000000
--- a/plugins/window-title/window-title-provider.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 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 <libxfce4util/libxfce4util.h>
-
-#include "window-title-provider.h"
-
-static void window_title_provider_iface_init (ParoleProviderPluginIface *iface);
-static void window_title_provider_finalize (GObject *object);
-
-
-struct _WindowTitleProviderClass
-{
- GObjectClass parent_class;
-};
-
-struct _WindowTitleProvider
-{
- GObject parent;
-
- ParoleProviderPlayer *player;
- GtkWidget *window;
-};
-
-
-PAROLE_DEFINE_TYPE_WITH_CODE (WindowTitleProvider,
- window_title_provider,
- G_TYPE_OBJECT,
- PAROLE_IMPLEMENT_INTERFACE (PAROLE_TYPE_PROVIDER_PLUGIN,
- window_title_provider_iface_init));
-
-
-
-static void
-window_title_provider_set_default_window_title (GtkWidget *window)
-{
- gtk_window_set_title (GTK_WINDOW (window), _("Parole Media Player"));
-}
-
-static void
-window_title_provider_set_stream_title (GtkWidget *window, const ParoleStream *stream)
-{
- gchar *title = NULL;
-
- g_object_get (G_OBJECT (stream),
- "title", &title,
- NULL);
-
- if ( title )
- {
- gtk_window_set_title (GTK_WINDOW (window), title);
- g_free (title);
- }
-}
-
-static void
-window_title_provider_state_changed_cb (ParoleProviderPlayer *player, const ParoleStream *stream,
- ParoleState state, WindowTitleProvider *provider)
-{
- if ( state < PAROLE_STATE_PAUSED )
- window_title_provider_set_default_window_title (provider->window);
- else
- window_title_provider_set_stream_title (provider->window, stream);
-}
-
-static void
-window_title_provider_tag_message_cb (ParoleProviderPlayer *player, const ParoleStream *stream, WindowTitleProvider *provider)
-{
- window_title_provider_set_stream_title (provider->window, stream);
-}
-
-static gboolean window_title_provider_is_configurable (ParoleProviderPlugin *plugin)
-{
- return FALSE;
-}
-
-static void
-window_title_provider_set_player (ParoleProviderPlugin *plugin, ParoleProviderPlayer *player)
-{
- WindowTitleProvider *provider;
- provider = WINDOW_TITLE_PROVIDER (plugin);
-
- provider->player = player;
-
- provider->window = parole_provider_player_get_main_window (player);
-
- g_signal_connect (player, "state-changed",
- G_CALLBACK (window_title_provider_state_changed_cb), provider);
-
- g_signal_connect (player, "tag-message",
- G_CALLBACK (window_title_provider_tag_message_cb), provider);
-}
-
-static void
-window_title_provider_iface_init (ParoleProviderPluginIface *iface)
-{
- iface->get_is_configurable = window_title_provider_is_configurable;
- iface->set_player = window_title_provider_set_player;
-}
-
-static void window_title_provider_class_init (WindowTitleProviderClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = window_title_provider_finalize;
-}
-
-static void window_title_provider_init (WindowTitleProvider *provider)
-{
- provider->player = NULL;
- g_debug ("Init");
-}
-
-static void window_title_provider_finalize (GObject *object)
-{
- WindowTitleProvider *provider;
-
- provider = WINDOW_TITLE_PROVIDER (object);
-
- g_debug ("Finalized");
-
- if ( provider->window && GTK_IS_WINDOW (provider->window) )
- window_title_provider_set_default_window_title (provider->window);
-
- G_OBJECT_CLASS (window_title_provider_parent_class)->finalize (object);
-}
diff --git a/plugins/window-title/window-title-provider.h b/plugins/window-title/window-title-provider.h
deleted file mode 100644
index f88152b..0000000
--- a/plugins/window-title/window-title-provider.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * * Copyright (C) 2009-2011 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 WINDOW_TITLE_PROVIDER_H_
-#define WINDOW_TITLE_PROVIDER_H_
-
-#include <parole/parole.h>
-
-G_BEGIN_DECLS
-
-typedef struct _WindowTitleProviderClass WindowTitleProviderClass;
-typedef struct _WindowTitleProvider WindowTitleProvider;
-
-#define WINDOW_TYPE_TITLE_PROVIDER (window_title_provider_get_type ())
-#define WINDOW_TITLE_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WINDOW_TYPE_TITLE_PROVIDER, WindowTitleProvider))
-#define WINDOW_TITLE_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WINDOW_TYPE_TITLE_PROVIDER, WindowTitleProviderClass))
-#define WINDOW_IS_TITLE_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WINDOW_TYPE_TITLE_PROVIDER))
-#define WINDOW_IS_TITLE_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WINDOW_TYPE_TITLE_PROVIDER))
-#define WINDOW_TITLE_PROVIDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WINDOW_TYPE_TITLE_PROVIDER, WindowTitleProviderClass))
-
-GType window_title_provider_get_type (void) G_GNUC_CONST G_GNUC_INTERNAL;
-
-void window_title_provider_register_type (ParoleProviderPlugin *plugin);
-
-G_END_DECLS
-
-#endif /*WINDOW_TITLE_PROVIDER_H_*/
diff --git a/plugins/window-title/window-title.desktop.in b/plugins/window-title/window-title.desktop.in
deleted file mode 100644
index 0d251bd..0000000
--- a/plugins/window-title/window-title.desktop.in
+++ /dev/null
@@ -1,6 +0,0 @@
-[Parole Plugin]
-Module=window-title
-_Name=Window Title
-_Description=Set the main window name to the current playing media name.
-Authors=Sarah Hijazi
-Website=http://goodies.xfce.org/projects/applications/parole
diff --git a/src/parole-disc-menu.c b/src/parole-disc-menu.c
index 5d33cbe..47ce1fd 100644
--- a/src/parole-disc-menu.c
+++ b/src/parole-disc-menu.c
@@ -91,17 +91,17 @@ parole_disc_menu_show (ParoleDiscMenu *menu, gboolean show_label)
static void
parole_disc_menu_media_state_cb (ParoleGst *gst, const ParoleStream *stream,
- ParoleMediaState state, ParoleDiscMenu *menu)
+ ParoleState state, ParoleDiscMenu *menu)
{
ParoleMediaType media_type;
menu->priv->tracks = 0;
- if ( state < PAROLE_MEDIA_STATE_PAUSED )
+ if ( state < PAROLE_STATE_PAUSED )
{
gtk_label_set_markup (GTK_LABEL (menu->priv->info), NULL);
parole_disc_menu_hide (menu);
}
- else if ( state == PAROLE_MEDIA_STATE_PLAYING )
+ else if ( state == PAROLE_STATE_PLAYING )
{
g_object_get (G_OBJECT (stream),
"media-type", &media_type,
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index 850bdeb..41ace6b 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -99,19 +99,19 @@ static void parole_media_list_clear_list (ParoleMediaList *list);
/*
* Callbacks for GtkBuilder
*/
-void parole_media_list_media_up_clicked_cb (GtkButton *button,
+void parole_media_list_add_clicked_cb (GtkButton *button,
ParoleMediaList *list);
-void parole_media_list_media_down_clicked_cb (GtkButton *button,
+void parole_media_list_remove_clicked_cb (GtkButton *button,
ParoleMediaList *list);
-void parole_media_list_save_cb (GtkButton *button,
- ParoleMediaList *list);
-
-void parole_media_list_add_clicked_cb (GtkButton *button,
+void parole_media_list_clear_clicked_cb (GtkButton *button,
ParoleMediaList *list);
-
-void parole_media_list_remove_clicked_cb (GtkButton *button,
+
+void parole_media_list_repeat_toggled_cb (GtkToggleButton *button,
+ ParoleMediaList *list);
+
+void parole_media_list_shuffle_toggled_cb (GtkToggleButton *button,
ParoleMediaList *list);
void parole_media_list_row_activated_cb (GtkTreeView *view,
@@ -179,6 +179,8 @@ enum
MEDIA_ACTIVATED,
MEDIA_CURSOR_CHANGED,
URI_OPENED,
+ SHUFFLE_TOGGLED,
+ REPEAT_TOGGLED,
LAST_SIGNAL
};
@@ -435,6 +437,32 @@ parole_media_list_add_clicked_cb (GtkButton *button, ParoleMediaList *list)
parole_media_list_open_internal (list);
}
+void
+parole_media_list_clear_clicked_cb (GtkButton *button, ParoleMediaList *list)
+{
+ parole_media_list_clear_list (list);
+}
+
+void
+parole_media_list_repeat_toggled_cb (GtkToggleButton *button, ParoleMediaList *list)
+{
+ gboolean toggled;
+
+ toggled = gtk_toggle_button_get_active (button);
+
+ g_signal_emit (G_OBJECT (list), signals [REPEAT_TOGGLED], 0, toggled);
+}
+
+void
+parole_media_list_shuffle_toggled_cb (GtkToggleButton *button, ParoleMediaList *list)
+{
+ gboolean toggled;
+
+ toggled = gtk_toggle_button_get_active (button);
+
+ g_signal_emit (G_OBJECT (list), signals [SHUFFLE_TOGGLED], 0, toggled);
+}
+
void parole_media_list_close_save_dialog_cb (GtkButton *button, ParolePlaylistSave *data)
{
gtk_widget_destroy (GTK_WIDGET (data->chooser));
@@ -920,40 +948,6 @@ parole_media_list_move_many_down (GList *path_list, GtkTreeModel *model)
}
/**
- * parole_media_list_media_down_clicked_cb:
- *
- *
- **/
-void
-parole_media_list_media_down_clicked_cb (GtkButton *button, ParoleMediaList *list)
-{
- GtkTreeIter iter;
- GList *path_list = NULL;
- GtkTreeModel *model;
- guint len;
-
- path_list = gtk_tree_selection_get_selected_rows (list->priv->sel, &model);
-
- len = g_list_length (path_list);
-
- if ( len == 1 )
- {
- GtkTreePath *path;
- path = g_list_nth_data (path_list, 0);
- if ( G_LIKELY (gtk_tree_model_get_iter (model, &iter, path)) )
- parole_media_list_move_one_down (list->priv->store, &iter);
- }
- else
- {
- parole_media_list_move_many_down (path_list, model);
- }
-
- g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL);
- g_list_free (path_list);
-}
-
-
-/**
* parole_media_list_move_on_up:
*
* @store: a #GtkListStore
@@ -1032,39 +1026,6 @@ parole_media_list_move_many_up (GList *path_list, GtkTreeModel *model)
}
/**
- * parole_media_list_media_up_clicked_cb:
- *
- *
- **/
-void
-parole_media_list_media_up_clicked_cb (GtkButton *button, ParoleMediaList *list)
-{
- GtkTreeIter iter;
- GList *path_list = NULL;
- GtkTreeModel *model;
- guint len;
-
- path_list = gtk_tree_selection_get_selected_rows (list->priv->sel, &model);
-
- len = g_list_length (path_list);
-
- if ( len == 1 )
- {
- GtkTreePath *path;
- path = g_list_nth_data (path_list, 0);
- if ( G_LIKELY (gtk_tree_model_get_iter (model, &iter, path)) )
- parole_media_list_move_one_up (list->priv->store, &iter);
- }
- else
- {
- parole_media_list_move_many_up (path_list, model);
- }
-
- g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL);
- g_list_free (path_list);
-}
-
-/**
* parole_media_list_row_activated_cb:
*
*
@@ -1448,6 +1409,24 @@ parole_media_list_class_init (ParoleMediaListClass *klass)
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ signals[SHUFFLE_TOGGLED] =
+ g_signal_new ("shuffle-toggled",
+ PAROLE_TYPE_MEDIA_LIST,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParoleMediaListClass, shuffle_toggled),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals[REPEAT_TOGGLED] =
+ g_signal_new ("repeat-toggled",
+ PAROLE_TYPE_MEDIA_LIST,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParoleMediaListClass, repeat_toggled),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
g_type_class_add_private (klass, sizeof (ParoleMediaListPrivate));
diff --git a/src/parole-medialist.h b/src/parole-medialist.h
index 36b08a3..321a23e 100644
--- a/src/parole-medialist.h
+++ b/src/parole-medialist.h
@@ -60,6 +60,12 @@ typedef struct
void (*uri_opened) (ParoleMediaList *list,
const gchar *uri);
+
+ void (*shuffle_toggled) (ParoleMediaList *list,
+ gboolean shuffle_toggled);
+
+ void (*repeat_toggled) (ParoleMediaList *list,
+ gboolean repeat_toggled);
} ParoleMediaListClass;
diff --git a/src/parole-player.c b/src/parole-player.c
index 5cdc65b..e5da2fe 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -51,6 +51,7 @@
#include "parole-gst.h"
#include "parole-dbus.h"
#include "parole-mediachooser.h"
+#include "parole-medialist.h"
#include "parole-filters.h"
#include "parole-disc.h"
#include "parole-disc-menu.h"
@@ -124,13 +125,14 @@ void parole_player_range_value_changed (GtkRange *range,
void parole_player_play_pause_clicked (GtkButton *button,
ParolePlayer *player);
+
void parole_player_stop_clicked (GtkButton *button,
ParolePlayer *player);
-void parole_player_seekf_cb (GtkButton *button,
+void parole_player_forward_cb (GtkButton *button,
ParolePlayer *player);
-void parole_player_seekb_cb (GtkButton *button,
+void parole_player_back_cb (GtkButton *button,
ParolePlayer *player);
gboolean parole_player_scroll_event_cb (GtkWidget *widget,
@@ -255,8 +257,9 @@ struct ParolePlayerPrivate
GtkWidget *playlist_nt;
GtkWidget *main_nt; /*Main notebook*/
GtkWidget *show_hide_playlist;
+ GtkWidget *shuffle_menu_item;
+ GtkWidget *repeat_menu_item;
GtkWidget *play_pause;
- GtkWidget *stop;
GtkWidget *seekf;
GtkWidget *seekb;
GtkWidget *range;
@@ -276,7 +279,6 @@ struct ParolePlayerPrivate
GtkWidget *main_box;
GtkWidget *volume;
- /*GtkWidget *volume_image;*/
GtkWidget *menu_bar;
GtkWidget *play_box;
@@ -284,7 +286,7 @@ struct ParolePlayerPrivate
gboolean full_screen;
- ParoleMediaState state;
+ ParoleState state;
gboolean user_seeking;
gboolean internal_range_change;
gboolean buffering;
@@ -293,6 +295,15 @@ struct ParolePlayerPrivate
};
+enum
+{
+ SHUFFLE_TOGGLED,
+ REPEAT_TOGGLED,
+ LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0 };
+
G_DEFINE_TYPE (ParolePlayer, parole_player, G_TYPE_OBJECT)
void parole_show_about (GtkWidget *widget)
@@ -536,7 +547,7 @@ parole_player_uri_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlay
static void
parole_player_media_cursor_changed_cb (ParoleMediaList *list, gboolean media_selected, ParolePlayer *player)
{
- if (player->priv->state < PAROLE_MEDIA_STATE_PAUSED)
+ if (player->priv->state < PAROLE_STATE_PAUSED)
{
gtk_widget_set_sensitive (player->priv->play_pause,
media_selected || !parole_media_list_is_empty (player->priv->list));
@@ -544,19 +555,45 @@ parole_player_media_cursor_changed_cb (ParoleMediaList *list, gboolean media_sel
}
static void
+parole_player_media_list_shuffle_toggled_cb (ParoleMediaList *list, gboolean shuffle_toggled, ParolePlayer *player)
+{
+ gboolean toggled;
+
+ toggled = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(player->priv->shuffle_menu_item));
+
+ if (toggled != shuffle_toggled)
+ {
+ gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(player->priv->shuffle_menu_item), shuffle_toggled);
+ }
+}
+
+static void
+parole_player_media_list_repeat_toggled_cb (ParoleMediaList *list, gboolean repeat_toggled, ParolePlayer *player)
+{
+ gboolean toggled;
+
+ toggled = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(player->priv->repeat_menu_item));
+
+ if (toggled != repeat_toggled)
+ {
+ gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM(player->priv->repeat_menu_item), repeat_toggled);
+ }
+}
+
+static void
parole_player_media_progressed_cb (ParoleGst *gst, const ParoleStream *stream, gint64 value, ParolePlayer *player)
{
#ifdef DEBUG
g_return_if_fail (value > 0);
#endif
- if ( !player->priv->user_seeking && player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
+ if ( !player->priv->user_seeking && player->priv->state == PAROLE_STATE_PLAYING )
{
parole_player_change_range_value (player, value);
gchar pos_text[128];
get_time_string (pos_text, value);
/*text = g_strdup_printf ("%s %s/%s",
- state == PAROLE_MEDIA_STATE_PAUSED ? _("Paused") : _("Playing"),
+ state == PAROLE_STATE_PAUSED ? _("Paused") : _("Playing"),
pos_text,
dur_text);*/
gtk_label_set_text (GTK_LABEL (player->priv->label_elapsed), pos_text);
@@ -851,7 +888,7 @@ parole_player_reset_saver_changed (ParolePlayer *player, const ParoleStream *str
if ( !reset_saver )
parole_screen_saver_uninhibit (player->priv->screen_saver);
- else if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
+ else if ( player->priv->state == PAROLE_STATE_PLAYING )
{
gboolean has_video;
@@ -869,30 +906,36 @@ parole_player_reset_saver_changed (ParolePlayer *player, const ParoleStream *str
}
static void
-parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, ParoleMediaState state, ParolePlayer *player)
+parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, ParoleState state, ParolePlayer *player)
{
- PAROLE_DEBUG_ENUM ("State callback", state, GST_ENUM_TYPE_MEDIA_STATE);
+ PAROLE_DEBUG_ENUM ("State callback", state, PAROLE_ENUM_TYPE_STATE);
player->priv->state = state;
parole_player_reset_saver_changed (player, stream);
- if ( state == PAROLE_MEDIA_STATE_PLAYING )
+ if ( state == PAROLE_STATE_PLAYING )
{
parole_player_playing (player, stream);
}
- else if ( state == PAROLE_MEDIA_STATE_PAUSED )
+ else if ( state == PAROLE_STATE_PAUSED )
{
parole_player_paused (player);
}
- else if ( state == PAROLE_MEDIA_STATE_STOPPED )
+ else if ( state == PAROLE_STATE_STOPPED )
{
parole_player_stopped (player);
}
- else if ( state == PAROLE_MEDIA_STATE_FINISHED )
+ else if ( state == PAROLE_STATE_PLAYBACK_FINISHED || state == PAROLE_STATE_ABOUT_TO_FINISH)
{
- TRACE ("***Playback finished***");
+#ifdef DEBUG
+ if (state == PAROLE_STATE_PLAYBACK_FINISHED )
+ TRACE ("***Playback finished***");
+ else
+ TRACE ("***Playback about to finish***");
+#endif
+
parole_player_play_next (player, TRUE);
}
}
@@ -900,9 +943,9 @@ parole_player_media_state_cb (ParoleGst *gst, const ParoleStream *stream, Parole
void
parole_player_play_pause_clicked (GtkButton *button, ParolePlayer *player)
{
- if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
+ if ( player->priv->state == PAROLE_STATE_PLAYING )
parole_gst_pause (PAROLE_GST (player->priv->gst));
- else if ( player->priv->state == PAROLE_MEDIA_STATE_PAUSED )
+ else if ( player->priv->state == PAROLE_STATE_PAUSED )
parole_gst_resume (PAROLE_GST (player->priv->gst));
else
parole_player_play_selected_row (player);
@@ -930,26 +973,16 @@ parole_player_get_seek_value (ParolePlayer *player)
return val;
}
-void parole_player_seekf_cb (GtkButton *button, ParolePlayer *player)
+void parole_player_forward_cb (GtkButton *button, ParolePlayer *player)
{
- gdouble seek;
-
- seek = parole_gst_get_stream_position (PAROLE_GST (player->priv->gst) )
- +
- parole_player_get_seek_value (player);
-
- parole_gst_seek (PAROLE_GST (player->priv->gst), seek);
+ if ( !parole_disc_menu_seek_next (player->priv->disc_menu))
+ parole_player_play_next (player, FALSE);
}
-void parole_player_seekb_cb (GtkButton *button, ParolePlayer *player)
+void parole_player_back_cb (GtkButton *button, ParolePlayer *player)
{
- gdouble seek;
-
- seek = parole_gst_get_stream_position (PAROLE_GST (player->priv->gst) )
- -
- parole_player_get_seek_value (player);
-
- parole_gst_seek (PAROLE_GST (player->priv->gst), seek);
+ if ( !parole_disc_menu_seek_prev (player->priv->disc_menu))
+ parole_player_play_prev (player);
}
gboolean parole_player_scroll_event_cb (GtkWidget *widget, GdkEventScroll *ev, ParolePlayer *player)
@@ -958,12 +991,12 @@ gboolean parole_player_scroll_event_cb (GtkWidget *widget, GdkEventScroll *ev, P
if ( ev->direction == GDK_SCROLL_UP )
{
- parole_player_seekf_cb (NULL, player);
+ parole_player_forward_cb (NULL, player);
ret_val = TRUE;
}
else if ( ev->direction == GDK_SCROLL_DOWN )
{
- parole_player_seekb_cb (NULL, player);
+ parole_player_back_cb (NULL, player);
ret_val = TRUE;
}
@@ -1046,7 +1079,7 @@ parole_player_buffering_cb (ParoleGst *gst, const ParoleStream *stream, gint per
player->priv->buffering = TRUE;
- if ( player->priv->state == PAROLE_MEDIA_STATE_PLAYING )
+ if ( player->priv->state == PAROLE_STATE_PLAYING )
parole_gst_pause (PAROLE_GST (player->priv->gst));
gchar *buff;
@@ -1083,12 +1116,6 @@ parole_player_play_menu_item_activate (ParolePlayer *player)
}
static void
-parole_player_stop_menu_item_activate (ParolePlayer *player)
-{
- gtk_widget_activate (player->priv->stop);
-}
-
-static void
parole_player_next_menu_item_activate (ParolePlayer *player)
{
parole_disc_menu_seek_next (player->priv->disc_menu);
@@ -1202,7 +1229,7 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
/*Play menu item
*/
- mi = gtk_image_menu_item_new_from_stock (player->priv->state == PAROLE_MEDIA_STATE_PLAYING
+ mi = gtk_image_menu_item_new_from_stock (player->priv->state == PAROLE_STATE_PLAYING
? GTK_STOCK_MEDIA_PAUSE : GTK_STOCK_MEDIA_PLAY,
NULL);
@@ -1221,10 +1248,10 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
*/
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_FORWARD, NULL);
- gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_MEDIA_STATE_PAUSED));
+ gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_STATE_PAUSED));
gtk_widget_show (mi);
g_signal_connect (mi, "activate",
- G_CALLBACK (parole_player_seekf_cb), player);
+ G_CALLBACK (parole_player_forward_cb), player);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
/*
@@ -1232,10 +1259,10 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
*/
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_REWIND, NULL);
- gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_MEDIA_STATE_PAUSED));
+ gtk_widget_set_sensitive (mi, (player->priv->state >= PAROLE_STATE_PAUSED));
gtk_widget_show (mi);
g_signal_connect (mi, "activate",
- G_CALLBACK (parole_player_seekb_cb), player);
+ G_CALLBACK (parole_player_back_cb), player);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
/*
@@ -1243,11 +1270,11 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
*/
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_STOP, NULL);
- gtk_widget_set_sensitive (mi, player->priv->state == PAROLE_MEDIA_STATE_PLAYING);
+ gtk_widget_set_sensitive (mi, player->priv->state == PAROLE_STATE_PLAYING);
gtk_widget_show (mi);
- g_signal_connect_swapped (mi, "activate",
+ /*g_signal_connect_swapped (mi, "activate",
G_CALLBACK (parole_player_stop_menu_item_activate), player);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);*/
/*
* Next chapter menu item
@@ -1255,7 +1282,7 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
mi = gtk_image_menu_item_new_with_label (media_type == PAROLE_MEDIA_TYPE_CDDA ? _("Next Track") : _("Next Chapter"));
img = gtk_image_new_from_stock (GTK_STOCK_MEDIA_NEXT, GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi),img);
- gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_MEDIA_STATE_PLAYING) && dvd_menu);
+ gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_STATE_PLAYING) && dvd_menu);
gtk_widget_show (mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (parole_player_next_menu_item_activate), player);
@@ -1268,7 +1295,7 @@ parole_player_show_menu (ParolePlayer *player, guint button, guint activate_time
img = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PREVIOUS, GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
- gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_MEDIA_STATE_PLAYING) && dvd_menu);
+ gtk_widget_set_sensitive (mi, (player->priv->state == PAROLE_STATE_PLAYING) && dvd_menu);
gtk_widget_show (mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (parole_player_previous_menu_item_activate), player);
@@ -1591,12 +1618,12 @@ parole_player_handle_key_press (GdkEventKey *ev, ParolePlayer *player)
case GDK_Right:
/* Media seekable ?*/
if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
- parole_player_seekf_cb (NULL, player);
+ parole_player_forward_cb (NULL, player);
ret_val = TRUE;
break;
case GDK_Left:
if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
- parole_player_seekb_cb (NULL, player);
+ parole_player_back_cb (NULL, player);
ret_val = TRUE;
break;
case GDK_s:
@@ -1906,7 +1933,7 @@ parole_player_init (ParolePlayer *player)
g_signal_connect_swapped (player->priv->session, "die",
G_CALLBACK (parole_player_session_die_cb), player);
- player->priv->gst = parole_gst_new (FALSE, player->priv->conf);
+ player->priv->gst = parole_gst_new (player->priv->conf);
player->priv->disc = parole_disc_new ();
g_signal_connect (player->priv->disc, "disc-selected",
@@ -1917,7 +1944,7 @@ parole_player_init (ParolePlayer *player)
player->priv->screen_saver = parole_screen_saver_new ();
player->priv->list = PAROLE_MEDIA_LIST (parole_media_list_get ());
- player->priv->state = PAROLE_MEDIA_STATE_STOPPED;
+ player->priv->state = PAROLE_STATE_STOPPED;
player->priv->user_seeking = FALSE;
player->priv->internal_range_change = FALSE;
player->priv->exit = FALSE;
@@ -1968,13 +1995,12 @@ parole_player_init (ParolePlayer *player)
player->priv->main_nt = GTK_WIDGET (gtk_builder_get_object (builder, "main-notebook"));
- player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, "play_box"));
+ player->priv->playcontrol_box = GTK_WIDGET (gtk_builder_get_object (builder, "playing_box"));
player->priv->progressbar_buffering = GTK_WIDGET (gtk_builder_get_object (builder, "progressbar_buffering"));
player->priv->label_duration = GTK_WIDGET(gtk_builder_get_object(builder, "label_duration"));
player->priv->label_elapsed = GTK_WIDGET(gtk_builder_get_object(builder, "label_elapsed"));
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->seekf = GTK_WIDGET (gtk_builder_get_object (builder, "forward"));
player->priv->seekb = GTK_WIDGET (gtk_builder_get_object (builder, "back"));
@@ -1986,6 +2012,10 @@ parole_player_init (ParolePlayer *player)
player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, "play-box"));
player->priv->playlist_nt = GTK_WIDGET (gtk_builder_get_object (builder, "notebook-playlist"));
player->priv->show_hide_playlist = GTK_WIDGET (gtk_builder_get_object (builder, "show-hide-list"));
+
+ player->priv->shuffle_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "shuffle"));
+ player->priv->repeat_menu_item = GTK_WIDGET (gtk_builder_get_object (builder, "repeat"));
+
player->priv->control = GTK_WIDGET (gtk_builder_get_object (builder, "control"));
player->priv->go_fs = GTK_WIDGET (gtk_builder_get_object (builder, "go_fs"));
player->priv->leave_fs = GTK_WIDGET (gtk_builder_get_object (builder, "leave_fs"));
@@ -2042,6 +2072,12 @@ parole_player_init (ParolePlayer *player)
g_signal_connect (player->priv->list, "uri-opened",
G_CALLBACK (parole_player_uri_opened_cb), player);
+
+ g_signal_connect (player->priv->list, "repeat-toggled",
+ G_CALLBACK (parole_player_media_list_repeat_toggled_cb), player);
+
+ g_signal_connect (player->priv->list, "shuffle-toggled",
+ G_CALLBACK (parole_player_media_list_shuffle_toggled_cb), player);
/*
* Load auto saved media list.
@@ -2168,6 +2204,24 @@ parole_player_dbus_class_init (ParolePlayerClass *klass)
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
&dbus_glib_parole_player_object_info);
+ signals[SHUFFLE_TOGGLED] =
+ g_signal_new ("shuffle-toggled",
+ PAROLE_TYPE_PLAYER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParolePlayerClass, shuffle_toggled),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals[REPEAT_TOGGLED] =
+ g_signal_new ("repeat-toggled",
+ PAROLE_TYPE_PLAYER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParolePlayerClass, repeat_toggled),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
}
static void
@@ -2212,14 +2266,14 @@ static gboolean parole_player_dbus_prev_track (ParolePlayer *player,
static gboolean parole_player_dbus_seek_forward (ParolePlayer *player,
GError *error)
{
- parole_player_seekf_cb (NULL, player);
+ parole_player_forward_cb (NULL, player);
return TRUE;
}
static gboolean parole_player_dbus_seek_backward (ParolePlayer *player,
GError *error)
{
- parole_player_seekb_cb (NULL, player);
+ parole_player_back_cb (NULL, player);
return TRUE;
}
diff --git a/src/parole-player.h b/src/parole-player.h
index 8817852..64ba339 100644
--- a/src/parole-player.h
+++ b/src/parole-player.h
@@ -43,6 +43,13 @@ typedef struct
{
GObjectClass parent_class;
+ void (*shuffle_toggled) (ParolePlayer *list,
+ gboolean shuffle_toggled);
+
+ void (*repeat_toggled) (ParolePlayer *list,
+ gboolean repeat_toggled);
+
+
} ParolePlayerClass;
GType parole_player_get_type (void) G_GNUC_CONST;
diff --git a/src/parole-plugin-player.c b/src/parole-plugin-player.c
index 0f580ca..d173efe 100644
--- a/src/parole-plugin-player.c
+++ b/src/parole-plugin-player.c
@@ -188,7 +188,7 @@ static void parole_plugin_player_iface_init (ParoleProviderPlayerIface *iface)
static void
parole_plugin_player_media_state_changed_cb (ParoleGst *gst, const ParoleStream *stream,
- ParoleMediaState state, ParolePluginPlayer *player)
+ ParoleState state, ParolePluginPlayer *player)
{
g_signal_emit_by_name (G_OBJECT (player), "state-changed", stream, state);
}
More information about the Xfce4-commits
mailing list