[Xfce4-commits] <parole:bluesabre/gtk3> Merge latest from trunk into gtk3

Sean Davis noreply at xfce.org
Sun Aug 11 15:18:33 CEST 2013


Updating branch refs/heads/bluesabre/gtk3
         to 0b2de95d94f29a1855936b51df9c1d0c1ed62de6 (commit)
       from 48525dc35407c9e54d5dac9572cdde2b45391108 (commit)

commit 0b2de95d94f29a1855936b51df9c1d0c1ed62de6
Merge: 48525dc 44bbee4
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Aug 11 09:14:02 2013 -0400

    Merge latest from trunk into gtk3

commit 44bbee42bb9e5279181af96c4c98f398e3e25685
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 15:44:26 2013 -0500

    GTK+3 Parole interface.

commit 5172df1b1d530b7ecccee022e397fa055ae3d207
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 11:25:30 2013 -0500

    GTK+3 Playlist.

commit 2114d25306708c290ecaae4abdb9329cd8871e67
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 09:44:01 2013 -0500

    GTK+3 Save Playlist dialog.

commit 9a37941ca3c6cd55c31fd5171f6324891187c5c1
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 09:24:08 2013 -0500

    GTK+3 Plugins dialog.

commit e50b87ae5721c8110ba86cc77d0acda18c7d88d6
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 08:53:37 2013 -0500

    GTK+3 Open Location dialog.

commit 74bb2f66a7ea49c9fabefc1cc61bdc03053be655
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 08:28:21 2013 -0500

    GTK+3 Media Chooser dialog.

commit 27d42a8846498524420ca7c1c021b1a4de90f9b7
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 08:12:48 2013 -0500

    GTK+3 Settings dialog.

commit b383387fb57927437be8792d3a6eddaca9d9e5a6
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 03:28:38 2013 -0500

    Fix visualization loading.

commit 8060b259e08aea7a45653f39332719c78b5ee904
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Feb 17 01:42:10 2013 -0500

    Initial GTK+3 port. Configure with --enable-gtk3=yes

commit c6429490cb5a519be718f7f78798b7fd7c428ff4
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sat Feb 16 10:33:10 2013 -0500

    Prepared for gtk3 with -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE

 configure.ac.in                                    |   40 +-
 data/interfaces/Makefile.am                        |   49 +-
 data/interfaces/mediachooser-3.ui                  |   96 +++
 .../{open-location.ui => open-location-3.ui}       |   68 +-
 data/interfaces/{parole.ui => parole-3.ui}         |  251 +++-----
 data/interfaces/parole-settings-3.ui               |  648 ++++++++++++++++++++
 data/interfaces/parole.ui                          |    4 +-
 data/interfaces/{playlist.ui => playlist-3.ui}     |   84 +--
 data/interfaces/{plugins.ui => plugins-3.ui}       |  222 +++----
 data/interfaces/plugins.ui                         |    2 -
 .../{save-playlist.ui => save-playlist-3.ui}       |   36 +-
 src/common/parole-common.c                         |    5 +
 src/common/parole-screensaver.c                    |    8 +
 src/gst/parole-gst.c                               |  217 +++++--
 src/parole-button.c                                |   28 +-
 src/parole-conf-dialog.c                           |   20 +
 src/parole-disc.c                                  |    2 +-
 src/parole-mediachooser.c                          |    2 +-
 src/parole-medialist.c                             |   20 +-
 src/parole-open-location.c                         |    2 +-
 src/parole-player.c                                |  143 ++++-
 src/plugins/tray/tray-provider.c                   |    4 +-
 22 files changed, 1433 insertions(+), 518 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index 0242d99..d621f66 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -110,18 +110,39 @@ AC_DEFINE_UNQUOTED(GSTREAMER_API_VERSION, $gstreamer_api_version, [Define the GS
 m4_define([dbus_minimum_version], [0.60])
 m4_define([dbus_glib_minimum_version], [0.70])
 
-m4_define([libxfce4ui_minimum_version],[4.8.0])
-m4_define([libxfce4util_minimum_version],[4.8.0])
+m4_define([libxfce4ui_minimum_version],[4.10.0])
+m4_define([libxfce4util_minimum_version],[4.10.0])
 
 m4_define([libnotify_minimum_version], [0.4.1])
 
-XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [gtk_minimum_version])
 XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [glib_minimum_version])
 XDT_CHECK_PACKAGE([GOBJECT], [gobject-2.0], [glib_minimum_version])
 XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [glib_minimum_version])
 XDT_CHECK_PACKAGE([GMODULE], [gmodule-2.0], [glib_minimum_version])
 XDT_CHECK_PACKAGE([GIO], [gio-2.0], [glib_minimum_version])
 
+XDT_CHECK_PACKAGE([DBUS], [dbus-1], [dbus_minimum_version])
+XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [dbus_glib_minimum_version])
+
+XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0],[libxfce4util_minimum_version])
+XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.10.0])
+
+dnl ************************************
+dnl *** Compile against GTK3 or GTK2 ***
+dnl ************************************
+AC_ARG_ENABLE([gtk3],
+              [AC_HELP_STRING([--enable-gtk3],
+              [Compile against GTK+-3.0 (default=disabled)])],
+              [enable_gtk3=$enableval], [enable_gtk3=no])
+if test "x$enable_gtk3" = "xyes"; then
+    XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-2], [4.10.0])
+    XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [3.2.0])
+else
+    XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.10.0])
+    XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.24.0])
+fi
+AM_CONDITIONAL([ENABLE_GTK3], [test "x$enable_gtk3" = "xyes"])
+
 XDT_CHECK_PACKAGE([GST], [gstreamer-${gstreamer_api_version}], [${gstreamer_minimum_version}])
 XDT_CHECK_PACKAGE([GST_BASE], [gstreamer-base-${gstreamer_api_version}], [${gstreamer_minimum_version}])
 XDT_CHECK_PACKAGE([GST_VIDEO], [gstreamer-video-${gstreamer_api_version}], [${gstreamer_minimum_version}])
@@ -134,13 +155,7 @@ else
   GST_LIBS="$GST_LIBS -lgstbase-$GST_API_VERSION -lgstvideo-$GST_API_VERSION -lgstaudio-$GST_API_VERSION -lgstpbutils-$GST_API_VERSION -lgsttag-$GST_API_VERSION"
 fi
 
-XDT_CHECK_PACKAGE([DBUS], [dbus-1], [dbus_minimum_version])
-XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [dbus_glib_minimum_version])
-
-XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1],[libxfce4ui_minimum_version])
-XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0],[libxfce4util_minimum_version])
 
-XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.10.0])
 
 XDT_CHECK_LIBX11()
 
@@ -271,6 +286,12 @@ docs/plugin-api/Makefile
 po/Makefile.in
 ])
 
+if test x"$enable_gtk3" = x"yes"; then
+gtk_toolkit_version="GTK+-3"
+else
+gtk_toolkit_version="GTK+-2"
+fi
+
 echo "
 ------------------------------------------------------
             Parole Media Player $VERSION
@@ -283,6 +304,7 @@ echo "
         Debug:                          $enable_debug
         Building plugin api docs:       ${enable_gtk_doc}
         GStreamer API version:          ${gstreamer_api_version}
+        GTK+ version:                   $gtk_toolkit_version
 
         Optional dependencies:
         ======================
diff --git a/data/interfaces/Makefile.am b/data/interfaces/Makefile.am
index f17d0ed..5a2c446 100644
--- a/data/interfaces/Makefile.am
+++ b/data/interfaces/Makefile.am
@@ -6,10 +6,49 @@ interfaces =					\
 	save-playlist.ui			\
 	plugins.ui				\
 	open-location.ui
-
+	
 interfaces_h = 					\
 	$(interfaces:.ui=_ui.h)
 
+
+if ENABLE_GTK3
+interfaces =					\
+	parole-3.ui				\
+	parole-settings-3.ui			\
+	playlist-3.ui				\
+	mediachooser-3.ui				\
+	save-playlist-3.ui			\
+	plugins-3.ui				\
+	open-location-3.ui
+
+if MAINTAINER_MODE
+BUILT_SOURCES = $(interfaces_h)
+
+parole_ui.h: parole-3.ui
+	xdt-csource --static --strip-comments --strip-content --name=parole_ui $< > $@
+
+parole-settings_ui.h: parole-settings-3.ui
+	xdt-csource --static --strip-comments --strip-content --name=parole_settings_ui $< > $@
+
+playlist_ui.h: playlist-3.ui
+	xdt-csource --static --strip-comments --strip-content --name=playlist_ui $< > $@
+
+mediachooser_ui.h: mediachooser-3.ui
+	xdt-csource --static --strip-comments --strip-content --name=mediachooser_ui $< > $@
+
+save-playlist_ui.h: save-playlist-3.ui
+	xdt-csource --static --strip-comments --strip-content --name=save_playlist_ui $< > $@
+
+open-location_ui.h: open-location-3.ui
+	xdt-csource --static --strip-comments --strip-content --name=open_location_ui $< > $@
+
+plugins_ui.h: plugins-3.ui
+	xdt-csource --static --strip-comments --strip-content --name=plugins_ui $< > $@
+	
+endif
+
+else
+
 if MAINTAINER_MODE
 BUILT_SOURCES = $(interfaces_h)
 
@@ -34,11 +73,13 @@ open-location_ui.h: open-location.ui
 plugins_ui.h: plugins.ui
 	xdt-csource --static --strip-comments --strip-content --name=plugins_ui $< > $@
 
+endif
+
+endif
+
 DISTCLEANFILES =					\
 	$(interfaces_h)
 	
-endif
-
 EXTRA_DIST =					\
 	$(interfaces)				\
-	$(interfaces_h)
+	$(interfaces_h)
\ No newline at end of file
diff --git a/data/interfaces/mediachooser-3.ui b/data/interfaces/mediachooser-3.ui
new file mode 100644
index 0000000..9112a03
--- /dev/null
+++ b/data/interfaces/mediachooser-3.ui
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkDialog" id="chooser">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Open Media Files</property>
+    <property name="modal">True</property>
+    <property name="default_width">640</property>
+    <property name="default_height">480</property>
+    <property name="type_hint">dialog</property>
+    <signal name="destroy" handler="parole_media_chooser_destroy_cb" swapped="no"/>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkSpinner" id="spinner">
+                <property name="can_focus">False</property>
+                <property name="no_show_all">True</property>
+                <property name="active">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+                <property name="secondary">True</property>
+                <property name="non_homogeneous">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="close">
+                <property name="label">gtk-cancel</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" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="open">
+                <property name="label">gtk-open</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="parole_media_chooser_add_clicked" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</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="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>
+            <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">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">close</action-widget>
+      <action-widget response="0">open</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/data/interfaces/open-location.ui b/data/interfaces/open-location-3.ui
similarity index 83%
copy from data/interfaces/open-location.ui
copy to data/interfaces/open-location-3.ui
index 98eb497..69725ad 100644
--- a/data/interfaces/open-location.ui
+++ b/data/interfaces/open-location-3.ui
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.24"/>
-  <!-- interface-naming-policy project-wide -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkImage" id="image1">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -9,67 +8,64 @@
   </object>
   <object class="GtkDialog" id="open-location">
     <property name="can_focus">False</property>
+    <property name="border_width">5</property>
     <property name="title" translatable="yes">Open Network Location</property>
-    <property name="modal">True</property>
     <property name="default_width">450</property>
     <property name="icon_name">parole</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
-        <property name="visible">True</property>
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">12</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
-              <object class="GtkButton" id="cancel">
-                <property name="label">gtk-cancel</property>
+              <object class="GtkButton" id="clear-history">
+                <property name="label" translatable="yes">Clear History</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>
+                <property name="image">image1</property>
               </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
+                <property name="secondary">True</property>
+                <property name="non_homogeneous">True</property>
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="open">
-                <property name="label">gtk-open</property>
+              <object class="GtkButton" id="cancel">
+                <property name="label">gtk-cancel</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">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="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="clear-history">
-                <property name="label" translatable="yes">Clear History</property>
+              <object class="GtkButton" id="open">
+                <property name="label">gtk-open</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
                 <property name="receives_default">True</property>
-                <property name="use_action_appearance">False</property>
-                <property name="image">image1</property>
+                <property name="use_stock">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="fill">True</property>
                 <property name="position">2</property>
-                <property name="secondary">True</property>
               </packing>
             </child>
           </object>
@@ -81,13 +77,13 @@
           </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox1">
+          <object class="GtkBox" id="box1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="border_width">12</property>
+            <property name="border_width">5</property>
             <property name="spacing">12</property>
             <child>
-              <object class="GtkImage" id="image4">
+              <object class="GtkImage" id="image2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="yalign">0</property>
@@ -101,9 +97,10 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox1">
+              <object class="GtkBox" id="box2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="label1">
@@ -124,11 +121,19 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="has_focus">True</property>
+                    <property name="is_focus">True</property>
                     <property name="has_entry">True</property>
                     <property name="entry_text_column">0</property>
+                    <child internal-child="entry">
+                      <object class="GtkEntry" id="comboboxtext-entry">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="input_purpose">url</property>
+                      </object>
+                    </child>
                   </object>
                   <packing>
-                    <property name="expand">True</property>
+                    <property name="expand">False</property>
                     <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
@@ -147,15 +152,12 @@
             <property name="position">1</property>
           </packing>
         </child>
-        <child>
-          <placeholder/>
-        </child>
       </object>
     </child>
     <action-widgets>
+      <action-widget response="0">clear-history</action-widget>
       <action-widget response="-6">cancel</action-widget>
       <action-widget response="-5">open</action-widget>
-      <action-widget response="0">clear-history</action-widget>
     </action-widgets>
   </object>
 </interface>
diff --git a/data/interfaces/parole.ui b/data/interfaces/parole-3.ui
similarity index 86%
copy from data/interfaces/parole.ui
copy to data/interfaces/parole-3.ui
index 75f1bdc..a30c833 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole-3.ui
@@ -1,27 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.24"/>
-  <!-- interface-naming-policy project-wide -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkImage" id="image1">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
+    <property name="stock">gtk-network</property>
+    <property name="icon-size">1</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="pixel_size">16</property>
     <property name="icon_name">parole-extension</property>
   </object>
-  <object class="GtkImage" id="image_cd_rom">
+  <object class="GtkImage" id="image3">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="icon_name">media-optical</property>
+    <property name="pixel_size">16</property>
+    <property name="icon_name">audio-volume-high</property>
   </object>
-  <object class="GtkImage" id="image_fullscreen">
+  <object class="GtkImage" id="image4">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-fullscreen</property>
-    <property name="icon-size">3</property>
+    <property name="pixel_size">16</property>
+    <property name="icon_name">audio-volume-low</property>
   </object>
-  <object class="GtkImage" id="image_network">
+  <object class="GtkImage" id="image5">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-network</property>
+    <property name="pixel_size">16</property>
+    <property name="icon_name">audio-volume-muted</property>
+  </object>
+  <object class="GtkImage" id="image_fullscreen">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="tooltip_text" translatable="yes">Fullscreen</property>
+    <property name="stock">gtk-fullscreen</property>
+    <property name="icon-size">3</property>
   </object>
   <object class="GtkImage" id="image_play_next">
     <property name="visible">True</property>
@@ -41,35 +56,7 @@
     <property name="stock">gtk-media-previous</property>
     <property name="icon-size">3</property>
   </object>
-  <object class="GtkImage" id="image_volume_down">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="icon_name">audio-volume-low</property>
-  </object>
-  <object class="GtkImage" id="image_volume_mute">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="icon_name">audio-volume-muted</property>
-  </object>
-  <object class="GtkImage" id="image_volume_up">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="icon_name">audio-volume-high</property>
-  </object>
-  <object class="GtkListStore" id="liststore_audiotrack">
-    <columns>
-      <!-- column-name track_title -->
-      <column type="gchararray"/>
-    </columns>
-  </object>
-  <object class="GtkListStore" id="liststore_subtitles">
-    <columns>
-      <!-- column-name subtitle_name -->
-      <column type="gchararray"/>
-    </columns>
-  </object>
   <object class="GtkWindow" id="main-window">
-    <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="title" translatable="yes">Parole Media Player</property>
     <property name="window_position">center</property>
@@ -77,11 +64,12 @@
     <signal name="destroy" handler="parole_player_destroy_cb" swapped="no"/>
     <signal name="configure-event" handler="parole_player_configure_event_cb" swapped="no"/>
     <signal name="key-press-event" handler="parole_player_key_press" swapped="no"/>
-    <signal name="delete-event" handler="parole_player_delete_event_cb" after="yes" swapped="no"/>
+    <signal name="delete-event" handler="parole_player_delete_event_cb" swapped="no"/>
     <child>
-      <object class="GtkVBox" id="vbox1">
+      <object class="GtkBox" id="vbox1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <child>
           <object class="GtkMenuBar" id="menubar">
             <property name="visible">True</property>
@@ -90,11 +78,10 @@
               <object class="GtkMenuItem" id="media-menu-item">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">_Media</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
-                  <object class="GtkMenu" id="media-menu">
+                  <object class="GtkMenu" id="menu1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
@@ -102,7 +89,6 @@
                         <property name="label">gtk-open</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
@@ -114,9 +100,8 @@
                         <property name="label" translatable="yes">Open _Location</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
-                        <property name="image">image_network</property>
+                        <property name="image">image1</property>
                         <property name="use_stock">False</property>
                         <accelerator key="l" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                         <signal name="activate" handler="parole_player_menu_open_location_cb" swapped="no"/>
@@ -126,7 +111,6 @@
                       <object class="GtkMenuItem" id="recent_menu">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">Open Recent</property>
                         <property name="use_underline">True</property>
                       </object>
@@ -139,17 +123,15 @@
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="menu-open-disc">
-                        <property name="label" translatable="yes">Insert Disc</property>
+                        <property name="label">gtk-cdrom</property>
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
-                        <property name="image">image_cd_rom</property>
-                        <property name="use_stock">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparatorMenuItem" id="separatormenuitem4">
+                      <object class="GtkSeparatorMenuItem" id="separatormenuitem2">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                       </object>
@@ -159,7 +141,6 @@
                         <property name="label">gtk-quit</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
@@ -174,18 +155,16 @@
               <object class="GtkMenuItem" id="edit-menu">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">_Edit</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
-                  <object class="GtkMenu" id="menu4">
+                  <object class="GtkMenu" id="menu2">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
                       <object class="GtkCheckMenuItem" id="repeat">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">_Repeat</property>
                         <property name="use_underline">True</property>
                         <signal name="toggled" handler="parole_player_repeat_toggled_cb" swapped="no"/>
@@ -195,14 +174,13 @@
                       <object class="GtkCheckMenuItem" id="shuffle">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">_Shuffle</property>
                         <property name="use_underline">True</property>
                         <signal name="toggled" handler="parole_player_shuffle_toggled_cb" swapped="no"/>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparatorMenuItem" id="separatormenuitem2">
+                      <object class="GtkSeparatorMenuItem" id="separatormenuitem3">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                       </object>
@@ -212,8 +190,7 @@
                         <property name="label" translatable="yes">Plugins</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
-                        <property name="image">image1</property>
+                        <property name="image">image2</property>
                         <property name="use_stock">False</property>
                       </object>
                     </child>
@@ -222,7 +199,6 @@
                         <property name="label">gtk-preferences</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <signal name="activate" handler="parole_player_open_preferences_cb" swapped="no"/>
@@ -236,11 +212,10 @@
               <object class="GtkMenuItem" id="view-menu">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">_View</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
-                  <object class="GtkMenu" id="menu2">
+                  <object class="GtkMenu" id="menu3">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
@@ -248,7 +223,6 @@
                         <property name="label">gtk-fullscreen</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="F11" signal="activate"/>
@@ -256,7 +230,7 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparatorMenuItem" id="separatormenuitem3">
+                      <object class="GtkSeparatorMenuItem" id="separatormenuitem4">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                       </object>
@@ -265,18 +239,16 @@
                       <object class="GtkMenuItem" id="menuitem1">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">_Aspect Ratio</property>
                         <property name="use_underline">True</property>
                         <child type="submenu">
-                          <object class="GtkMenu" id="menu5">
+                          <object class="GtkMenu" id="menu4">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <child>
                               <object class="GtkRadioMenuItem" id="ratio_none">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">None</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
@@ -287,7 +259,6 @@
                               <object class="GtkRadioMenuItem" id="ratio_auto">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">Auto</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
@@ -299,7 +270,6 @@
                               <object class="GtkRadioMenuItem" id="ratio_square">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">Square</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
@@ -311,7 +281,6 @@
                               <object class="GtkRadioMenuItem" id="ratio_4_3">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">4:3 (TV)</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
@@ -323,7 +292,6 @@
                               <object class="GtkRadioMenuItem" id="ratio_16_9">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">16:9 (Widescreen)</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
@@ -335,7 +303,6 @@
                               <object class="GtkRadioMenuItem" id="ratio_20_9">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">20:9 (DVB)</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
@@ -348,17 +315,15 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparatorMenuItem" id="menuitem3">
+                      <object class="GtkSeparatorMenuItem" id="separatormenuitem5">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkMenuItem" id="menuitem4">
+                      <object class="GtkMenuItem" id="menuitem2">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">Subtitles</property>
                         <property name="use_underline">True</property>
                         <child type="submenu">
@@ -369,34 +334,29 @@
                               <object class="GtkRadioMenuItem" id="subtitles-menu-none">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">None</property>
                                 <property name="use_underline">True</property>
                                 <property name="draw_as_radio">True</property>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkSeparatorMenuItem" id="menuitem7">
+                              <object class="GtkSeparatorMenuItem" id="separatormenuitem7">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkMenuItem" id="subtitles-menu-custom">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">Select Text Subtitles...</property>
                                 <property name="use_underline">True</property>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkSeparatorMenuItem" id="menuitem9">
+                              <object class="GtkSeparatorMenuItem" id="separatormenuitem8">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                               </object>
                             </child>
                           </object>
@@ -404,21 +364,19 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparatorMenuItem" id="menuitem5">
+                      <object class="GtkSeparatorMenuItem" id="separatormenuitem6">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkCheckMenuItem" id="show-hide-list">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">Show _playlist</property>
                         <property name="use_underline">True</property>
                         <accelerator key="F9" signal="activate"/>
-                        <signal name="activate" handler="parole_player_show_hide_playlist" swapped="no"/>
+                        <signal name="toggled" handler="parole_player_show_hide_playlist" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -429,18 +387,16 @@
               <object class="GtkMenuItem" id="sound">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">Audio</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
-                  <object class="GtkMenu" id="menu1">
+                  <object class="GtkMenu" id="menu5">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkMenuItem" id="menuitem10">
+                      <object class="GtkMenuItem" id="menuitem3">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">Languages</property>
                         <property name="use_underline">True</property>
                         <child type="submenu">
@@ -452,7 +408,6 @@
                                 <property name="visible">True</property>
                                 <property name="sensitive">False</property>
                                 <property name="can_focus">False</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="label" translatable="yes">Empty</property>
                                 <property name="use_underline">True</property>
                               </object>
@@ -462,10 +417,9 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparatorMenuItem" id="menuitem12">
+                      <object class="GtkSeparatorMenuItem" id="separatormenuitem9">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                       </object>
                     </child>
                     <child>
@@ -473,11 +427,9 @@
                         <property name="label" translatable="yes">Volume _Up</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
-                        <property name="image">image_volume_up</property>
+                        <property name="image">image3</property>
                         <property name="use_stock">False</property>
-                        <accelerator key="KP_Add" signal="activate"/>
                         <accelerator key="equal" signal="activate"/>
                         <accelerator key="plus" signal="activate"/>
                         <signal name="activate" handler="parole_player_volume_up" swapped="no"/>
@@ -488,12 +440,10 @@
                         <property name="label" translatable="yes">Volume _Down</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
-                        <property name="image">image_volume_down</property>
+                        <property name="image">image4</property>
                         <property name="use_stock">False</property>
                         <accelerator key="minus" signal="activate"/>
-                        <accelerator key="KP_Subtract" signal="activate"/>
                         <signal name="activate" handler="parole_player_volume_down" swapped="no"/>
                       </object>
                     </child>
@@ -502,9 +452,8 @@
                         <property name="label" translatable="yes">_Mute</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
-                        <property name="image">image_volume_mute</property>
+                        <property name="image">image5</property>
                         <property name="use_stock">False</property>
                         <accelerator key="0" signal="activate"/>
                         <signal name="activate" handler="parole_player_volume_mute" swapped="no"/>
@@ -518,11 +467,10 @@
               <object class="GtkMenuItem" id="help-menu">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">_Help</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
-                  <object class="GtkMenu" id="menu3">
+                  <object class="GtkMenu" id="menu6">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
@@ -530,7 +478,6 @@
                         <property name="label">gtk-about</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <signal name="activate" handler="parole_show_about" swapped="no"/>
@@ -554,31 +501,33 @@
             <property name="show_tabs">False</property>
             <property name="show_border">False</property>
             <property name="scrollable">True</property>
-            <property name="group_id">0</property>
             <child>
-              <object class="GtkVBox" id="main-box">
+              <object class="GtkBox" id="main-box">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
                 <property name="spacing">5</property>
                 <child>
-                  <object class="GtkHPaned" id="hpaned">
+                  <object class="GtkPaned" id="hpaned">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <child>
-                      <object class="GtkVBox" id="vbox_player">
+                      <object class="GtkBox" id="vbox_player">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="orientation">vertical</property>
                         <child>
-                          <object class="GtkHBox" id="hbox_infobar">
+                          <object class="GtkBox" id="hbox_infobar">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
                             <child>
-                              <object class="GtkHBox" id="infobar_contents">
+                              <object class="GtkBox" id="infobar_contents">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="spacing">12</property>
                                 <child>
-                                  <object class="GtkHBox" id="hbox3">
+                                  <object class="GtkBox" id="hbox3">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
                                     <property name="spacing">6</property>
@@ -586,7 +535,6 @@
                                       <object class="GtkLabel" id="label1">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">1</property>
                                         <property name="label" translatable="yes">Audio Track:</property>
                                       </object>
                                       <packing>
@@ -599,7 +547,6 @@
                                       <object class="GtkComboBox" id="combobox_audiotrack">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="model">liststore_audiotrack</property>
                                         <signal name="changed" handler="parole_player_combo_box_audiotrack_changed_cb" swapped="no"/>
                                       </object>
                                       <packing>
@@ -610,13 +557,13 @@
                                     </child>
                                   </object>
                                   <packing>
-                                    <property name="expand">True</property>
+                                    <property name="expand">False</property>
                                     <property name="fill">True</property>
                                     <property name="position">0</property>
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkHBox" id="hbox4">
+                                  <object class="GtkBox" id="hbox4">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
                                     <property name="spacing">6</property>
@@ -624,7 +571,6 @@
                                       <object class="GtkLabel" id="label2">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">1</property>
                                         <property name="label" translatable="yes">Subtitles:</property>
                                       </object>
                                       <packing>
@@ -637,7 +583,6 @@
                                       <object class="GtkComboBox" id="combobox_subtitles">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="model">liststore_subtitles</property>
                                         <signal name="changed" handler="parole_player_combo_box_subtitles_changed_cb" swapped="no"/>
                                       </object>
                                       <packing>
@@ -648,7 +593,7 @@
                                     </child>
                                   </object>
                                   <packing>
-                                    <property name="expand">True</property>
+                                    <property name="expand">False</property>
                                     <property name="fill">True</property>
                                     <property name="position">1</property>
                                   </packing>
@@ -671,9 +616,10 @@
                           <object class="GtkEventBox" id="eventbox_output">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
                             <signal name="button-press-event" handler="parole_player_gst_widget_button_press" swapped="no"/>
                             <child>
-                              <object class="GtkHBox" id="output">
+                              <object class="GtkBox" id="output">
                                 <property name="visible">True</property>
                                 <property name="app_paintable">True</property>
                                 <property name="can_focus">False</property>
@@ -693,9 +639,10 @@
                           <object class="GtkEventBox" id="audiobox">
                             <property name="can_focus">False</property>
                             <property name="no_show_all">True</property>
+                            <property name="hexpand">True</property>
                             <signal name="button-press-event" handler="parole_player_gst_widget_button_press" swapped="no"/>
                             <child>
-                              <object class="GtkHBox" id="hbox_audiobox">
+                              <object class="GtkBox" id="hbox_audiobox">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="spacing">24</property>
@@ -715,9 +662,10 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkVBox" id="vbox3">
+                                  <object class="GtkBox" id="vbox3">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
+                                    <property name="orientation">vertical</property>
                                     <property name="spacing">6</property>
                                     <child>
                                       <object class="GtkLabel" id="audiobox_title">
@@ -727,7 +675,6 @@
                                         <property name="yalign">1</property>
                                         <property name="label" translatable="yes"><span color='#F4F4F4'><b><big>Unknown Song</big></b></span></property>
                                         <property name="use_markup">True</property>
-                                        <property name="ellipsize">end</property>
                                       </object>
                                       <packing>
                                         <property name="expand">True</property>
@@ -742,7 +689,6 @@
                                         <property name="xalign">0</property>
                                         <property name="label" translatable="yes"><big><span color='#BBBBBB'><i>on</i></span> <span color='#F4F4F4'>Unknown Album</span></big></property>
                                         <property name="use_markup">True</property>
-                                        <property name="ellipsize">end</property>
                                       </object>
                                       <packing>
                                         <property name="expand">False</property>
@@ -758,7 +704,6 @@
                                         <property name="yalign">0</property>
                                         <property name="label" translatable="yes"><big><span color='#BBBBBB'><i>by</i></span> <span color='#F4F4F4'>Unknown Artist</span></big></property>
                                         <property name="use_markup">True</property>
-                                        <property name="ellipsize">end</property>
                                       </object>
                                       <packing>
                                         <property name="expand">True</property>
@@ -783,20 +728,23 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkVBox" id="control">
+                          <object class="GtkBox" id="control">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
+                            <property name="valign">end</property>
+                            <property name="orientation">vertical</property>
                             <child>
-                              <object class="GtkVBox" id="play-box">
+                              <object class="GtkBox" id="play-box">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
+                                <property name="orientation">vertical</property>
                                 <child>
-                                  <object class="GtkHBox" id="hbox6">
+                                  <object class="GtkBox" id="hbox6">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
                                     <property name="spacing">6</property>
                                     <child>
-                                      <object class="GtkHBox" id="playback_buttons">
+                                      <object class="GtkBox" id="playback_buttons">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
                                         <child>
@@ -806,7 +754,6 @@
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
                                             <property name="tooltip_text" translatable="yes">Previous</property>
-                                            <property name="use_action_appearance">False</property>
                                             <property name="image">image_play_prev</property>
                                             <property name="relief">none</property>
                                             <property name="focus_on_click">False</property>
@@ -821,15 +768,11 @@
                                         <child>
                                           <object class="GtkButton" id="play-pause">
                                             <property name="visible">True</property>
-                                            <property name="sensitive">False</property>
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
-                                            <property name="tooltip_text" translatable="yes">Play</property>
-                                            <property name="use_action_appearance">False</property>
                                             <property name="image">image_play_pause</property>
                                             <property name="relief">none</property>
                                             <property name="focus_on_click">False</property>
-                                            <signal name="clicked" handler="parole_player_play_pause_clicked" swapped="no"/>
                                           </object>
                                           <packing>
                                             <property name="expand">False</property>
@@ -844,7 +787,6 @@
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
                                             <property name="tooltip_text" translatable="yes">Next</property>
-                                            <property name="use_action_appearance">False</property>
                                             <property name="image">image_play_next</property>
                                             <property name="relief">none</property>
                                             <property name="focus_on_click">False</property>
@@ -864,14 +806,14 @@
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkHBox" id="playing_box">
+                                      <object class="GtkBox" id="playing_box">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
                                         <child>
                                           <object class="GtkLabel" id="label_elapsed">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
-                                            <property name="label">00:00</property>
+                                            <property name="label" translatable="yes">00:00</property>
                                             <property name="single_line_mode">True</property>
                                           </object>
                                           <packing>
@@ -882,14 +824,16 @@
                                           </packing>
                                         </child>
                                         <child>
-                                          <object class="GtkHScale" id="scale">
+                                          <object class="GtkScale" id="scale">
                                             <property name="visible">True</property>
                                             <property name="sensitive">False</property>
                                             <property name="can_focus">True</property>
+                                            <property name="round_digits">1</property>
                                             <property name="draw_value">False</property>
                                             <signal name="button-press-event" handler="parole_player_range_button_press" swapped="no"/>
                                             <signal name="button-release-event" handler="parole_player_range_button_release" swapped="no"/>
                                             <signal name="value-changed" handler="parole_player_range_value_changed" swapped="no"/>
+                                            <signal name="scroll-event" handler="parole_player_scroll_event_cb" swapped="no"/>
                                           </object>
                                           <packing>
                                             <property name="expand">True</property>
@@ -901,7 +845,7 @@
                                           <object class="GtkLabel" id="label_duration">
                                             <property name="visible">True</property>
                                             <property name="can_focus">False</property>
-                                            <property name="label">00:00</property>
+                                            <property name="label" translatable="yes">00:00</property>
                                             <property name="single_line_mode">True</property>
                                           </object>
                                           <packing>
@@ -922,8 +866,8 @@
                                       <object class="GtkProgressBar" id="progressbar_buffering">
                                         <property name="can_focus">False</property>
                                         <property name="no_show_all">True</property>
-                                        <property name="show_text">True</property>
                                         <property name="text" translatable="yes">Buffering (0%)</property>
+                                        <property name="show_text">True</property>
                                       </object>
                                       <packing>
                                         <property name="expand">True</property>
@@ -932,7 +876,7 @@
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkHBox" id="extra_controls">
+                                      <object class="GtkBox" id="extra_controls">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
                                         <child>
@@ -940,7 +884,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="has_tooltip">True</property>
                                             <property name="relief">none</property>
                                             <property name="focus_on_click">False</property>
                                             <property name="orientation">vertical</property>
@@ -963,11 +907,9 @@ audio-volume-medium</property>
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
-                                            <property name="no_show_all">True</property>
-                                            <property name="tooltip_text" translatable="yes">Fullscreen</property>
-                                            <property name="use_action_appearance">False</property>
                                             <property name="image">image_fullscreen</property>
                                             <property name="relief">none</property>
+                                            <property name="focus_on_click">False</property>
                                             <signal name="clicked" handler="parole_player_full_screen_activated_cb" swapped="no"/>
                                           </object>
                                           <packing>
@@ -982,9 +924,9 @@ audio-volume-medium</property>
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
                                             <property name="no_show_all">True</property>
-                                            <property name="use_action_appearance">False</property>
                                             <property name="relief">none</property>
                                             <property name="use_stock">True</property>
+                                            <property name="focus_on_click">False</property>
                                             <signal name="clicked" handler="parole_player_leave_fs_cb" swapped="no"/>
                                           </object>
                                           <packing>
@@ -999,7 +941,6 @@ audio-volume-medium</property>
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">True</property>
                                             <property name="no_show_all">True</property>
-                                            <property name="use_action_appearance">False</property>
                                             <property name="image">show-hide-list-image</property>
                                             <property name="relief">none</property>
                                             <property name="focus_on_click">False</property>
@@ -1035,7 +976,7 @@ audio-volume-medium</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
-                            <property name="fill">True</property>
+                            <property name="fill">False</property>
                             <property name="position">3</property>
                           </packing>
                         </child>
@@ -1077,18 +1018,6 @@ audio-volume-medium</property>
                 <property name="tab_fill">False</property>
               </packing>
             </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child type="tab">
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child type="tab">
-              <placeholder/>
-            </child>
           </object>
           <packing>
             <property name="expand">True</property>
diff --git a/data/interfaces/parole-settings-3.ui b/data/interfaces/parole-settings-3.ui
new file mode 100644
index 0000000..dfcf9d6
--- /dev/null
+++ b/data/interfaces/parole-settings-3.ui
@@ -0,0 +1,648 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <!-- interface-requires libxfce4ui 4.5 -->
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-revert-to-saved</property>
+  </object>
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name gchararray1 -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="XfceTitledDialog" id="settings-dialog">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Parole Settings</property>
+    <property name="modal">True</property>
+    <property name="icon_name">parole</property>
+    <property name="border_width">5</property>
+    <property name="type_hint">dialog</property>
+    <property name="subtitle" translatable="yes">Configure your media player</property>
+    <signal name="response" handler="parole_conf_dialog_response_cb" swapped="no"/>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</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>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</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="GtkNotebook" id="notebook1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <child>
+              <object class="GtkBox" id="box1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_left">6</property>
+                <property name="margin_right">6</property>
+                <property name="margin_top">9</property>
+                <property name="margin_bottom">6</property>
+                <property name="orientation">vertical</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="xalign">0</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">False</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="GtkBox" id="box2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <property name="spacing">4</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="xalign">0</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">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box3">
+                                <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>
+                                    <property name="model">liststore1</property>
+                                    <signal name="changed" handler="parole_conf_dialog_vis_plugin_changed_cb" swapped="no"/>
+                                    <child>
+                                      <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                                      <attributes>
+                                        <attribute name="text">0</attribute>
+                                      </attributes>
+                                    </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">False</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">False</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="xalign">0</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">False</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="GtkBox" id="box4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_left">12</property>
+                <property name="margin_right">12</property>
+                <property name="margin_top">9</property>
+                <property name="margin_bottom">12</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkGrid" id="grid1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="row_spacing">3</property>
+                    <property name="column_spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label9">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Brightness:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label10">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Contrast:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label11">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Hue:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label12">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Saturation:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">3</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkScale" id="brightness">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hexpand">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="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkScale" id="contrast">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="draw_value">False</property>
+                        <signal name="value-changed" handler="contrast_value_changed_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkScale" id="hue">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="draw_value">False</property>
+                        <signal name="value-changed" handler="hue_value_changed_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkScale" id="saturation">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="draw_value">False</property>
+                        <signal name="value-changed" handler="saturation_value_changed_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">3</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButtonBox" id="buttonbox1">
+                    <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="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="image">image2</property>
+                        <signal name="clicked" handler="reset_color_clicked_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="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="GtkBox" id="box5">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_left">12</property>
+                <property name="margin_right">12</property>
+                <property name="margin_top">9</property>
+                <property name="margin_bottom">12</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">3</property>
+                <child>
+                  <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="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <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="GtkCheckButton" id="remove-duplicated">
+                    <property name="label" translatable="yes">Check and remove duplicate media entries</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="xalign">0</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="xalign">0</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>
+                <child>
+                  <object class="GtkCheckButton" id="remember-playlist">
+                    <property name="label" translatable="yes">Remember playlist</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <signal name="toggled" handler="remember_playlist_toggled_cb" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="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="GtkBox" id="box6">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_left">12</property>
+                <property name="margin_right">12</property>
+                <property name="margin_top">9</property>
+                <property name="margin_bottom">12</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">4</property>
+                <child>
+                  <object class="GtkCheckButton" id="enable-subtitle">
+                    <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="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                    <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="GtkGrid" id="grid2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="row_spacing">2</property>
+                    <property name="column_spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label13">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Font:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label14">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Encoding:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkFontButton" id="fontbutton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="hexpand">True</property>
+                        <property name="font">Sans 12</property>
+                        <property name="preview_text"/>
+                        <property name="show_preview_entry">False</property>
+                        <property name="font_name">Sans Bold 20</property>
+                        <signal name="font-set" handler="parole_conf_dialog_font_set_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkComboBox" id="encoding">
+                        <property name="visible">True</property>
+                        <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>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">3</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Subtitles</property>
+              </object>
+              <packing>
+                <property name="position">3</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-7">close</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index 75f1bdc..c716ea5 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -886,6 +886,7 @@
                                             <property name="visible">True</property>
                                             <property name="sensitive">False</property>
                                             <property name="can_focus">True</property>
+                                            <property name="round_digits">1</property>
                                             <property name="draw_value">False</property>
                                             <signal name="button-press-event" handler="parole_player_range_button_press" swapped="no"/>
                                             <signal name="button-release-event" handler="parole_player_range_button_release" swapped="no"/>
@@ -1035,7 +1036,8 @@ audio-volume-medium</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
-                            <property name="fill">True</property>
+                            <property name="fill">False</property>
+                            <property name="pack_type">end</property>
                             <property name="position">3</property>
                           </packing>
                         </child>
diff --git a/data/interfaces/playlist.ui b/data/interfaces/playlist-3.ui
similarity index 82%
copy from data/interfaces/playlist.ui
copy to data/interfaces/playlist-3.ui
index 957c9fe..99b23c4 100644
--- a/data/interfaces/playlist.ui
+++ b/data/interfaces/playlist-3.ui
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.24"/>
-  <!-- interface-naming-policy project-wide -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkMenu" id="dvd-menu">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -9,7 +8,6 @@
       <object class="GtkMenuItem" id="dvd-menu-menu">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">DVD Menu</property>
         <property name="use_underline">True</property>
       </object>
@@ -18,7 +16,6 @@
       <object class="GtkMenuItem" id="dvd-menu-title">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Title Menu</property>
         <property name="use_underline">True</property>
       </object>
@@ -27,7 +24,6 @@
       <object class="GtkMenuItem" id="dvd-menu-audio">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Audio Menu</property>
         <property name="use_underline">True</property>
       </object>
@@ -36,7 +32,6 @@
       <object class="GtkMenuItem" id="dvd-menu-angle">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Angle Menu</property>
         <property name="use_underline">True</property>
       </object>
@@ -45,7 +40,6 @@
       <object class="GtkMenuItem" id="dvd-menu-chapter">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Chapter Menu</property>
         <property name="use_underline">True</property>
       </object>
@@ -87,23 +81,22 @@
     <property name="pixel_size">24</property>
     <property name="icon_name">media-playlist-shuffle</property>
   </object>
-  <object class="GtkVBox" id="playlist-box">
+  <object class="GtkBox" id="playlist-box">
     <property name="width_request">220</property>
     <property name="visible">True</property>
     <property name="can_focus">False</property>
+    <property name="orientation">vertical</property>
     <child>
       <object class="GtkNotebook" id="playlist_notebook">
         <property name="visible">True</property>
         <property name="can_focus">True</property>
         <property name="tab_pos">bottom</property>
         <property name="show_tabs">False</property>
-        <property name="show_border">False</property>
         <child>
           <object class="GtkScrolledWindow" id="scrolledwindow1">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="hscrollbar_policy">never</property>
-            <property name="vscrollbar_policy">automatic</property>
             <property name="window_placement_set">True</property>
             <property name="shadow_type">in</property>
             <child>
@@ -113,10 +106,13 @@
                 <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="key-press-event" handler="parole_media_list_key_press" swapped="no"/>
                 <signal name="query-tooltip" handler="parole_media_list_query_tooltip" swapped="no"/>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection" id="treeview-selection1"/>
+                </child>
               </object>
             </child>
           </object>
@@ -132,17 +128,18 @@
           </packing>
         </child>
         <child>
-          <object class="GtkVBox" id="vbox1">
+          <object class="GtkBox" id="box2">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
             <child>
               <object class="GtkToggleButton" id="dvd_menu_button">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
-                <property name="use_action_appearance">False</property>
                 <child>
-                  <object class="GtkHBox" id="hbox1">
+                  <object class="GtkBox" id="hbox1">
+                    <property name="width_request">220</property>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="spacing">3</property>
@@ -164,7 +161,6 @@
                         <property name="can_focus">False</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">DVD Name</property>
-                        <property name="ellipsize">end</property>
                       </object>
                       <packing>
                         <property name="expand">True</property>
@@ -181,7 +177,6 @@
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">True</property>
-                        <property name="pack_type">end</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
@@ -199,8 +194,6 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="hscrollbar_policy">never</property>
-                <property name="vscrollbar_policy">automatic</property>
-                <property name="window_placement_set">True</property>
                 <property name="shadow_type">in</property>
                 <child>
                   <object class="GtkTreeView" id="disc-list">
@@ -208,7 +201,9 @@
                     <property name="can_focus">True</property>
                     <property name="headers_visible">False</property>
                     <property name="rules_hint">True</property>
-                    <signal name="row-activated" handler="parole_media_list_row_activated_cb" swapped="no"/>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection3"/>
+                    </child>
                   </object>
                 </child>
               </object>
@@ -242,20 +237,7 @@
       </packing>
     </child>
     <child>
-      <object class="GtkLabel" id="n_items">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">Playlist empty</property>
-        <property name="ellipsize">end</property>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">False</property>
-        <property name="position">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkHBox" id="playlist_controls">
+      <object class="GtkBox" id="box1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="spacing">2</property>
@@ -265,10 +247,7 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
-            <property name="tooltip_text" translatable="yes">Add…</property>
-            <property name="use_action_appearance">False</property>
             <property name="image">image_add</property>
-            <property name="focus_on_click">False</property>
             <signal name="clicked" handler="parole_media_list_add_clicked_cb" swapped="no"/>
           </object>
           <packing>
@@ -283,10 +262,7 @@
             <property name="sensitive">False</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
-            <property name="tooltip_text" translatable="yes">Remove</property>
-            <property name="use_action_appearance">False</property>
             <property name="image">image_remove</property>
-            <property name="focus_on_click">False</property>
             <signal name="clicked" handler="parole_media_list_remove_clicked_cb" swapped="no"/>
           </object>
           <packing>
@@ -301,14 +277,11 @@
             <property name="sensitive">False</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
-            <property name="tooltip_text" translatable="yes">Clear</property>
-            <property name="use_action_appearance">False</property>
             <property name="image">image_clear</property>
-            <property name="focus_on_click">False</property>
             <signal name="clicked" handler="parole_media_list_clear_clicked_cb" swapped="no"/>
           </object>
           <packing>
-            <property name="expand">True</property>
+            <property name="expand">False</property>
             <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
@@ -318,14 +291,11 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
-            <property name="tooltip_text" translatable="yes">Repeat</property>
-            <property name="use_action_appearance">False</property>
             <property name="image">image_repeat</property>
-            <property name="focus_on_click">False</property>
             <signal name="toggled" handler="parole_media_list_repeat_toggled_cb" swapped="no"/>
           </object>
           <packing>
-            <property name="expand">True</property>
+            <property name="expand">False</property>
             <property name="fill">True</property>
             <property name="position">3</property>
           </packing>
@@ -335,14 +305,11 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
-            <property name="tooltip_text" translatable="yes">Shuffle</property>
-            <property name="use_action_appearance">False</property>
             <property name="image">image_shuffle</property>
-            <property name="focus_on_click">False</property>
             <signal name="toggled" handler="parole_media_list_shuffle_toggled_cb" swapped="no"/>
           </object>
           <packing>
-            <property name="expand">True</property>
+            <property name="expand">False</property>
             <property name="fill">True</property>
             <property name="position">4</property>
           </packing>
@@ -352,13 +319,10 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">True</property>
-            <property name="tooltip_text" translatable="yes">Playlist options</property>
-            <property name="use_action_appearance">False</property>
             <property name="image">image_settings</property>
-            <property name="focus_on_click">False</property>
           </object>
           <packing>
-            <property name="expand">True</property>
+            <property name="expand">False</property>
             <property name="fill">True</property>
             <property name="position">5</property>
           </packing>
@@ -368,7 +332,7 @@
         <property name="expand">False</property>
         <property name="fill">False</property>
         <property name="padding">2</property>
-        <property name="position">2</property>
+        <property name="position">1</property>
       </packing>
     </child>
   </object>
@@ -379,7 +343,6 @@
       <object class="GtkCheckMenuItem" id="menu-repeat">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Repeat</property>
         <property name="use_underline">True</property>
       </object>
@@ -388,7 +351,6 @@
       <object class="GtkCheckMenuItem" id="menu-shuffle">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Shuffle</property>
         <property name="use_underline">True</property>
       </object>
@@ -397,14 +359,12 @@
       <object class="GtkSeparatorMenuItem" id="menuitem1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
       </object>
     </child>
     <child>
       <object class="GtkCheckMenuItem" id="menu-replace">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Replace playlist when opening files</property>
         <property name="use_underline">True</property>
       </object>
@@ -413,7 +373,6 @@
       <object class="GtkCheckMenuItem" id="menu-play-opened">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Play opened files</property>
         <property name="use_underline">True</property>
       </object>
@@ -422,7 +381,6 @@
       <object class="GtkCheckMenuItem" id="menu-remember">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Remember playlist</property>
         <property name="use_underline">True</property>
       </object>
@@ -431,14 +389,12 @@
       <object class="GtkSeparatorMenuItem" id="menuitem2">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
       </object>
     </child>
     <child>
       <object class="GtkMenuItem" id="menu-clear">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="use_action_appearance">False</property>
         <property name="label" translatable="yes">Clear</property>
         <property name="use_underline">True</property>
       </object>
diff --git a/data/interfaces/plugins.ui b/data/interfaces/plugins-3.ui
similarity index 50%
copy from data/interfaces/plugins.ui
copy to data/interfaces/plugins-3.ui
index e900d09..efb68f7 100644
--- a/data/interfaces/plugins.ui
+++ b/data/interfaces/plugins-3.ui
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.24"/>
+  <!-- interface-requires gtk+ 3.0 -->
   <!-- interface-requires libxfce4ui 4.5 -->
-  <!-- interface-naming-policy project-wide -->
   <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">600</property>
     <property name="default_height">300</property>
@@ -16,12 +16,12 @@
     <property name="subtitle" translatable="yes">Extend your media player</property>
     <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>
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
-            <property name="visible">True</property>
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
@@ -33,12 +33,11 @@
                 <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="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
@@ -51,55 +50,48 @@
           </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox1">
+          <object class="GtkBox" id="box1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="spacing">10</property>
             <child>
-              <object class="GtkViewport" id="viewport1">
+              <object class="GtkScrolledWindow" id="scrolledwindow1">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="resize_mode">queue</property>
-                <property name="shadow_type">none</property>
+                <property name="can_focus">True</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="shadow_type">in</property>
                 <child>
-                  <object class="GtkScrolledWindow" id="scrolledwindow1">
+                  <object class="GtkTreeView" id="treeview">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <property name="hscrollbar_policy">never</property>
-                    <property name="vscrollbar_policy">automatic</property>
+                    <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" swapped="no"/>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                    </child>
                     <child>
-                      <object class="GtkTreeView" id="treeview">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <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" swapped="no"/>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                        <property name="title" translatable="yes">Enabled</property>
                         <child>
-                          <object class="GtkTreeViewColumn" id="treeviewcolumn1">
-                            <property name="resizable">True</property>
-                            <property name="title" translatable="yes">Enabled</property>
-                            <property name="clickable">True</property>
-                            <child>
-                              <object class="GtkCellRendererToggle" id="cellrenderertoggle">
-                                <signal name="toggled" handler="parole_plugins_manager_cell_toggled_cb" swapped="no"/>
-                              </object>
-                              <attributes>
-                                <attribute name="active">0</attribute>
-                              </attributes>
-                            </child>
+                          <object class="GtkCellRendererToggle" id="cellrenderertoggle">
+                            <signal name="toggled" handler="parole_plugins_manager_cell_toggled_cb" swapped="no"/>
                           </object>
+                          <attributes>
+                            <attribute name="active">0</attribute>
+                          </attributes>
                         </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+                        <property name="title" translatable="yes">Plugin</property>
                         <child>
-                          <object class="GtkTreeViewColumn" id="treeviewcolumn2">
-                            <property name="title" translatable="yes">Plugin</property>
-                            <child>
-                              <object class="GtkCellRendererText" id="cellrenderertext1"/>
-                              <attributes>
-                                <attribute name="text">1</attribute>
-                              </attributes>
-                            </child>
-                          </object>
+                          <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                          <attributes>
+                            <attribute name="text">1</attribute>
+                          </attributes>
                         </child>
                       </object>
                     </child>
@@ -113,115 +105,103 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox1">
+              <object class="GtkBox" id="box2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="spacing">10</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">12</property>
                 <child>
-                  <object class="GtkVBox" id="vbox2">
+                  <object class="GtkFrame" id="frame1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="spacing">12</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
                     <child>
-                      <object class="GtkFrame" id="frame1">
+                      <object class="GtkAlignment" id="alignment1">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="label_xalign">0</property>
-                        <property name="shadow_type">none</property>
+                        <property name="left_padding">12</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="GtkLabel" id="description">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="yalign">0</property>
-                                <property name="wrap">True</property>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel" id="label1">
+                          <object class="GtkLabel" id="description">
                             <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>
+                            <property name="xalign">0</property>
+                            <property name="yalign">0</property>
+                            <property name="wrap">True</property>
                           </object>
                         </child>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
                     </child>
+                    <child type="label">
+                      <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>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</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="GtkFrame" id="frame2">
+                      <object class="GtkAlignment" id="alignment2">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="label_xalign">0</property>
-                        <property name="shadow_type">none</property>
+                        <property name="left_padding">12</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="GtkLabel" id="author">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="yalign">0</property>
-                                <property name="wrap">True</property>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel" id="label2">
+                          <object class="GtkLabel" id="author">
                             <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>
+                            <property name="xalign">0</property>
+                            <property name="yalign">0</property>
+                            <property name="wrap">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="GtkLinkButton" id="sitebutton">
-                        <property name="label" translatable="yes">Visit Website</property>
+                    <child type="label">
+                      <object class="GtkLabel" id="label2">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="has_tooltip">True</property>
-                        <property name="use_action_appearance">False</property>
-                        <property name="relief">none</property>
-                        <property name="uri">http://goodies.xfce.org</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes"><b>Author</b></property>
+                        <property name="use_markup">True</property>
                       </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
                     </child>
                   </object>
                   <packing>
-                    <property name="expand">True</property>
+                    <property name="expand">False</property>
                     <property name="fill">True</property>
-                    <property name="position">0</property>
+                    <property name="position">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHButtonBox" id="hbuttonbox1">
+                  <object class="GtkLinkButton" id="sitebutton">
+                    <property name="label" translatable="yes">Visit Website</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="has_tooltip">True</property>
+                    <property name="relief">none</property>
+                    <property name="uri">http://goodies.xfce.org</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButtonBox" id="buttonbox1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="layout_style">end</property>
@@ -231,7 +211,6 @@
                         <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" swapped="no"/>
                       </object>
@@ -245,7 +224,8 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">True</property>
-                    <property name="position">1</property>
+                    <property name="pack_type">end</property>
+                    <property name="position">3</property>
                   </packing>
                 </child>
               </object>
diff --git a/data/interfaces/plugins.ui b/data/interfaces/plugins.ui
index e900d09..5b5d696 100644
--- a/data/interfaces/plugins.ui
+++ b/data/interfaces/plugins.ui
@@ -77,9 +77,7 @@
                         <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>
                             <property name="title" translatable="yes">Enabled</property>
-                            <property name="clickable">True</property>
                             <child>
                               <object class="GtkCellRendererToggle" id="cellrenderertoggle">
                                 <signal name="toggled" handler="parole_plugins_manager_cell_toggled_cb" swapped="no"/>
diff --git a/data/interfaces/save-playlist.ui b/data/interfaces/save-playlist-3.ui
similarity index 85%
copy from data/interfaces/save-playlist.ui
copy to data/interfaces/save-playlist-3.ui
index 68bb6b8..5a2d511 100644
--- a/data/interfaces/save-playlist.ui
+++ b/data/interfaces/save-playlist-3.ui
@@ -1,53 +1,50 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <requires lib="gtk+" version="2.24"/>
-  <!-- interface-naming-policy project-wide -->
+  <!-- interface-requires gtk+ 3.0 -->
   <object class="GtkFileChooserDialog" id="filechooserdialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
+    <property name="role">GtkFileChooserDialog</property>
     <property name="window_position">center-on-parent</property>
-    <property name="type_hint">normal</property>
+    <property name="type_hint">dialog</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>
+      <object class="GtkBox" id="filechooserdialog-vbox1">
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
+          <object class="GtkButtonBox" id="filechooserdialog-action_area1">
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
-              <object class="GtkButton" id="button2">
+              <object class="GtkButton" id="button1">
                 <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="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="button1">
+              <object class="GtkButton" id="button2">
                 <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="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
@@ -69,9 +66,12 @@
                 <property name="can_focus">True</property>
                 <property name="model">liststore</property>
                 <signal name="cursor-changed" handler="parole_media_list_format_cursor_changed_cb" swapped="no"/>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection" id="treeview-selection1"/>
+                </child>
                 <child>
                   <object class="GtkTreeViewColumn" id="treeviewcolumn1">
-                    <property name="title">File Type</property>
+                    <property name="title" translatable="yes">File Type</property>
                     <property name="expand">True</property>
                     <child>
                       <object class="GtkCellRendererText" id="cellrenderertext1"/>
@@ -83,7 +83,7 @@
                 </child>
                 <child>
                   <object class="GtkTreeViewColumn" id="treeviewcolumn2">
-                    <property name="title">Extension</property>
+                    <property name="title" translatable="yes">Extension</property>
                     <child>
                       <object class="GtkCellRendererText" id="cellrenderertext2"/>
                       <attributes>
@@ -104,15 +104,15 @@
           </object>
           <packing>
             <property name="expand">False</property>
-            <property name="fill">False</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
       </object>
     </child>
     <action-widgets>
-      <action-widget response="0">button2</action-widget>
       <action-widget response="0">button1</action-widget>
+      <action-widget response="0">button2</action-widget>
     </action-widgets>
   </object>
   <object class="GtkListStore" id="liststore">
@@ -127,7 +127,7 @@
     <data>
       <row>
         <col id="0" translatable="yes">By Extension</col>
-        <col id="1" translatable="yes"></col>
+        <col id="1" translatable="yes"/>
         <col id="2">0</col>
       </row>
     </data>
diff --git a/src/common/parole-common.c b/src/common/parole-common.c
index a405c5a..d730218 100644
--- a/src/common/parole-common.c
+++ b/src/common/parole-common.c
@@ -84,7 +84,12 @@ void parole_window_busy_cursor		(GdkWindow *window)
 	
     cursor = gdk_cursor_new (GDK_WATCH);
     gdk_window_set_cursor (window, cursor);
+    
+#if GTK_CHECK_VERSION(3, 0, 0)
+    g_object_unref (cursor);
+#else
     gdk_cursor_unref (cursor);
+#endif
 
     gdk_flush ();
 }
diff --git a/src/common/parole-screensaver.c b/src/common/parole-screensaver.c
index 6c291c8..d902477 100644
--- a/src/common/parole-screensaver.c
+++ b/src/common/parole-screensaver.c
@@ -80,7 +80,11 @@ void parole_screen_saver_inhibit (ParoleScreenSaver *saver, GtkWindow *window)
 
     g_return_if_fail (PAROLE_IS_SCREENSAVER (saver));
 
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cmd = g_strdup_printf("xdg-screensaver suspend %i", (int)GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window))));
+#else
     cmd = g_strdup_printf("xdg-screensaver suspend %lu", GDK_DRAWABLE_XID (gtk_widget_get_window (GTK_WIDGET (window))));
+#endif
     returncode = system(cmd);
     
     TRACE("\'xdg-screensaver suspend\' returned %i", returncode);
@@ -95,7 +99,11 @@ void parole_screen_saver_uninhibit (ParoleScreenSaver *saver, GtkWindow *window)
 
     g_return_if_fail (PAROLE_IS_SCREENSAVER (saver));
 
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cmd = g_strdup_printf("xdg-screensaver resume %i", (int)GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (window))));
+#else
     cmd = g_strdup_printf("xdg-screensaver resume %lu", GDK_DRAWABLE_XID (gtk_widget_get_window (GTK_WIDGET (window))));
+#endif
     returncode = system(cmd);
     
     TRACE("\'xdg-screensaver resume\' returned %i", returncode);
diff --git a/src/gst/parole-gst.c b/src/gst/parole-gst.c
index f828448..6166712 100644
--- a/src/gst/parole-gst.c
+++ b/src/gst/parole-gst.c
@@ -222,17 +222,22 @@ parole_gst_configure_event_cb (GtkWidget *widget, GdkEventConfigure *ev, ParoleG
 static gboolean
 parole_gst_parent_expose_event (GtkWidget *w, GdkEventExpose *ev, ParoleGst *gst)
 {
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     cairo_t *cr;
     
-    cr = gdk_cairo_create (w->window);
+    gtk_widget_get_allocation(w, allocation);
+    
+    cr = gdk_cairo_create ( gtk_widget_get_window(w) );
     
     cairo_set_source_rgb (cr, 0.0f, 0.0f, 0.0f);
     
-    cairo_rectangle (cr, w->allocation.x, w->allocation.y, w->allocation.width, w->allocation.height);
+    cairo_rectangle (cr, allocation->x, allocation->y, allocation->width, allocation->height);
     
     cairo_fill (cr);
     cairo_destroy (cr);
     
+    g_free(allocation);
+    
     return FALSE;
 }
 
@@ -240,19 +245,29 @@ static void
 parole_gst_realize (GtkWidget *widget)
 {
     ParoleGst *gst;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     GdkWindowAttr attr;
+#if GTK_CHECK_VERSION(3, 0, 0)
+    GdkRGBA color;
+#else
     GdkColor color;
+#endif
     gint mask;
     
-    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+    gtk_widget_set_realized (widget, TRUE);
     gst = PAROLE_GST (widget);
     
-    attr.x = widget->allocation.x;
-    attr.y = widget->allocation.y;
-    attr.width = widget->allocation.width;
-    attr.height = widget->allocation.height;
+    gtk_widget_get_allocation(widget, allocation);
+    
+    attr.x = allocation->x;
+    attr.y = allocation->y;
+    attr.width = allocation->width;
+    attr.height = allocation->height;
     attr.visual = gtk_widget_get_visual (widget);
+#if GTK_CHECK_VERSION(3, 0, 0)
+#else
     attr.colormap = gtk_widget_get_colormap (widget);
+#endif
     attr.wclass = GDK_INPUT_OUTPUT;
     attr.window_type = GDK_WINDOW_CHILD;
     attr.event_mask = gtk_widget_get_events (widget) | 
@@ -262,32 +277,48 @@ parole_gst_realize (GtkWidget *widget)
 		      GDK_POINTER_MOTION_MASK |
 		      GDK_KEY_PRESS_MASK;
 		      
+#if GTK_CHECK_VERSION(3, 0, 0)
+    mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
+#else
     mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+#endif
 	
-    widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
-				     &attr, mask);
+    gtk_widget_set_window(widget, gdk_window_new (gtk_widget_get_parent_window (widget),
+				     &attr, mask) );
 				     
-    gdk_window_set_user_data (widget->window, widget);
+    gdk_window_set_user_data (gtk_widget_get_window(widget), widget);
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+    gdk_rgba_parse (&color, "black");
+    gdk_window_set_background_rgba (gtk_widget_get_window(widget), &color);
+#else
     gdk_color_parse ("black", &color);
     gdk_colormap_alloc_color (gtk_widget_get_colormap (widget), &color,
 			      TRUE, TRUE);
-    
-    gdk_window_set_background (widget->window, &color);
-    widget->style = gtk_style_attach (widget->style, widget->window);
+
+    gdk_window_set_background (gtk_widget_get_window(widget), &color);
+
+    gtk_widget_set_style(widget, gtk_style_attach (gtk_widget_get_style(widget), gtk_widget_get_window(widget)));
+#endif
     
     g_signal_connect (gtk_widget_get_toplevel (widget), "configure_event",
 		      G_CALLBACK (parole_gst_configure_event_cb), gst);
 		      
+#if GTK_CHECK_VERSION(3, 0, 0)
+    g_signal_connect (gtk_widget_get_parent (widget), "draw",
+#else
     g_signal_connect (gtk_widget_get_parent (widget), "expose_event",
+#endif
 		      G_CALLBACK (parole_gst_parent_expose_event), gst);
-
+		      
+    g_free(allocation);
 }
 
 static void
 parole_gst_show (GtkWidget *widget)
 {
-    if ( widget->window )
-	gdk_window_show (widget->window);
+    if ( gtk_widget_get_window(widget) )
+	gdk_window_show (gtk_widget_get_window(widget));
     
     if ( GTK_WIDGET_CLASS (parole_gst_parent_class)->show )
 	GTK_WIDGET_CLASS (parole_gst_parent_class)->show (widget);
@@ -302,8 +333,11 @@ parole_gst_get_video_output_size (ParoleGst *gst, gint *ret_w, gint *ret_h)
      * 2) Playing audio.
      * 3) Playing video but we don't have its correct size yet.
      */
-    *ret_w = GTK_WIDGET (gst)->allocation.width;
-    *ret_h = GTK_WIDGET (gst)->allocation.height;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
+    gtk_widget_get_allocation(GTK_WIDGET(gst), allocation);
+    *ret_w = allocation->width;
+    *ret_h = allocation->height;
+    g_free(allocation);
 		
     if ( gst->priv->state >= GST_STATE_PAUSED )
     {
@@ -380,9 +414,9 @@ parole_gst_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 {
     g_return_if_fail (allocation != NULL);
     
-    widget->allocation = *allocation;
+    gtk_widget_set_allocation(widget, allocation);
 
-    if ( GTK_WIDGET_REALIZED (widget) )
+    if ( gtk_widget_get_realized (widget) )
     {
 	gint w, h;
 	gdouble ratio, width, height;
@@ -405,7 +439,7 @@ parole_gst_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 	width *= ratio;
 	height *= ratio;
 
-	gdk_window_move_resize (widget->window,
+	gdk_window_move_resize (gtk_widget_get_window(widget),
                                 allocation->x + (allocation->width - width)/2, 
 				allocation->y + (allocation->height - height)/2,
                                 width, 
@@ -419,55 +453,99 @@ static void
 parole_gst_draw_logo (ParoleGst *gst)
 {
     static GdkPixbuf *pix = NULL;
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cairo_region_t *region;
+    GdkRGBA *color;
+    cairo_t *cr;
+#else
     GdkRegion *region;
+#endif
     GdkRectangle rect;
     GtkWidget *widget;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
 
     widget = GTK_WIDGET (gst);
 
-    if ( !widget->window)
+    if ( !gtk_widget_get_window(widget) )
 	return;
 
     rect.x = 0;
     rect.y = 0;
     
-    rect.width = widget->allocation.width;
-    rect.height = widget->allocation.height;
+    gtk_widget_get_allocation(widget, allocation);
+    rect.width = allocation->width;
+    rect.height = allocation->height;
 
+#if GTK_CHECK_VERSION(3, 0, 0)
+    region = cairo_region_create_rectangle(&rect);
+#else
     region = gdk_region_rectangle (&rect);
+#endif
     
-    gdk_window_begin_paint_region (widget->window,
+    gdk_window_begin_paint_region (gtk_widget_get_window(widget),
 				   region);
 
-    gdk_region_destroy (region);
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cairo_region_destroy (region);
 
-    gdk_window_clear_area (widget->window,
-			   0, 0,
-			   widget->allocation.width,
-			   widget->allocation.height);
+    GdkWindow *window;
+    cairo_surface_t *target;
+
+    window = gtk_widget_get_window (widget);
+    target = cairo_get_group_target (cr);
+
+    /* Clear to parent-relative pixmap
+    * We need to use direct X access here because GDK doesn't know about
+    * the parent relative pixmap. */
+    cairo_surface_flush (target);
+
+    XClearArea (GDK_WINDOW_XDISPLAY (window),
+                GDK_WINDOW_XID (window),
+                0, 0,
+                allocation->width, allocation->height,
+                False);
+    cairo_surface_mark_dirty_rectangle (target,
+                                        0, 0,
+                                        allocation->width, allocation->height);
+#else
+    gdk_region_destroy (region);
     
+    gdk_window_clear_area (gtk_widget_get_window(widget),
+			   0, 0,
+			   allocation->width,
+			   allocation->height);
+#endif
+
     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,
+				       allocation->width,
+				       allocation->height,
 				       GDK_INTERP_BILINEAR);
 	gst->priv->scale_logo = FALSE;
     }
 
-    gdk_draw_pixbuf (GDK_DRAWABLE (widget->window),
-		     GTK_WIDGET(widget)->style->fg_gc[0],
+#if GTK_CHECK_VERSION(3, 0, 0)
+    cr = gdk_cairo_create (gtk_widget_get_window(widget));
+    gdk_cairo_set_source_pixbuf (cr, pix, 0, 0);
+    cairo_paint (cr);
+    cairo_destroy (cr);
+#else
+    gdk_draw_pixbuf (GDK_DRAWABLE (gtk_widget_get_window(widget)),
+		     gtk_widget_get_style(widget)->fg_gc[0],
 		     pix,
 		     0, 0, 0, 0,
-		     widget->allocation.width,
-		     widget->allocation.height,
+		     allocation->width,
+		     allocation->height,
 		     GDK_RGB_DITHER_NONE,
 		     0, 0);
+#endif
 
-   
-    gdk_window_end_paint (GTK_WIDGET (gst)->window);
+    gdk_window_end_paint (gtk_widget_get_window(GTK_WIDGET (gst)));
+    
+    g_free(allocation);
 }
 
 static void
@@ -522,13 +600,13 @@ parole_gst_set_video_overlay (ParoleGst *gst)
 		  
     g_assert (video_sink != NULL);
     
-    if ( GDK_IS_WINDOW (GTK_WIDGET (gst)->window) )
+    if ( GDK_IS_WINDOW (gtk_widget_get_window(GTK_WIDGET (gst))) )
 #if GST_CHECK_VERSION(1, 0, 0)
 	gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (video_sink),
-				      GDK_WINDOW_XWINDOW (GTK_WIDGET (gst)->window));
+				      GDK_WINDOW_XWINDOW ( gtk_widget_get_window(GTK_WIDGET (gst)) ));
 #else
     gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (video_sink),
-                      GDK_WINDOW_XWINDOW (GTK_WIDGET (gst)->window));
+                      GDK_WINDOW_XID ( gtk_widget_get_window(GTK_WIDGET (gst)) ));
 #endif
     
     gst_object_unref (video_sink);
@@ -818,6 +896,7 @@ parole_gst_get_pad_capabilities (GObject *object, GParamSpec *pspec, ParoleGst *
 {
     GstPad *pad;
     GstStructure *st;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     gint width;
     gint height;
     guint num;
@@ -865,7 +944,9 @@ parole_gst_get_pad_capabilities (GObject *object, GParamSpec *pspec, ParoleGst *
 			  NULL);
 	}
 
-	parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
+    gtk_widget_get_allocation( GTK_WIDGET (gst), allocation );
+	parole_gst_size_allocate (GTK_WIDGET (gst), allocation);
+	g_free(allocation);
     }
 #if GST_CHECK_VERSION(1, 0, 0)
     gst_caps_unref (caps);
@@ -984,6 +1065,7 @@ parole_gst_update_vis (ParoleGst *gst)
 static void
 parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState pending)
 {
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     TRACE ("State change new %i old %i pending %i", new, old, pending);
     
     gst->priv->state = new;
@@ -993,7 +1075,7 @@ parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState
     if ( gst->priv->target == new )
     {
 	gtk_widget_queue_draw (GTK_WIDGET (gst));
-	parole_gst_set_window_cursor (GTK_WIDGET (gst)->window, NULL);
+	parole_gst_set_window_cursor ( gtk_widget_get_window(GTK_WIDGET (gst)), NULL);
 	if ( gst->priv->state_change_id != 0 )
 	    g_source_remove (gst->priv->state_change_id);
     }
@@ -1041,7 +1123,9 @@ 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), &GTK_WIDGET (gst)->allocation);
+	    gtk_widget_get_allocation( GTK_WIDGET (gst), allocation );
+		parole_gst_size_allocate (GTK_WIDGET (gst), allocation);
+		g_free(allocation);
 		parole_gst_draw_logo (gst);
 	    }
 	    break;
@@ -1514,6 +1598,7 @@ parole_gst_get_meta_data (ParoleGst *gst, GstTagList *tag)
 static void
 parole_gst_application_message (ParoleGst *gst, GstMessage *msg)
 {
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
 #if GST_CHECK_VERSION(1, 0, 0)
     if ( gst_message_has_name (msg, "notify-streaminfo") )
 #else
@@ -1535,7 +1620,9 @@ parole_gst_application_message (ParoleGst *gst, GstMessage *msg)
     else if ( !g_strcmp0 (name, "video-size") )
 #endif
     {
-	parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
+    gtk_widget_get_allocation(GTK_WIDGET (gst), allocation);
+	parole_gst_size_allocate (GTK_WIDGET (gst), allocation);
+	g_free(allocation);
     }
 }
 
@@ -1647,7 +1734,7 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
 	{
 	    GError *error = NULL;
 	    gchar *debug;
-	    parole_gst_set_window_cursor (GTK_WIDGET (gst)->window, NULL);
+	    parole_gst_set_window_cursor (gtk_widget_get_window(GTK_WIDGET (gst)), NULL);
 	    gst->priv->target = GST_STATE_NULL;
 	    gst->priv->buffering = FALSE;
 	    parole_gst_change_state (gst, GST_STATE_NULL);
@@ -1722,7 +1809,11 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data)
                 gtk_widget_get_realized (GTK_WIDGET (gst)))
             {
                 gst_install_plugins_context_set_xid (ctx,
-                    GDK_WINDOW_XID (GTK_WIDGET (gst)->window));
+#if GTK_CHECK_VERSION(3, 0, 0)
+                    gdk_x11_window_get_xid (gtk_widget_get_window(GTK_WIDGET (gst))));
+#else
+                    gdk_x11_drawable_get_xid (gtk_widget_get_window(GTK_WIDGET (gst))));
+#endif
             }
 #endif /* GDK_WINDOWING_X11 */
 
@@ -2054,7 +2145,7 @@ parole_gst_terminate_internal (ParoleGst *gst)
     parole_stream_init_properties (gst->priv->stream);
     g_mutex_unlock (&gst->priv->lock);
 
-    parole_window_busy_cursor (GTK_WIDGET (gst)->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (gst)));
     
     parole_gst_change_state (gst, GST_STATE_NULL);
 }
@@ -2075,6 +2166,7 @@ parole_gst_about_to_finish_cb (GstElement *elm, gpointer data)
 static void
 parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
 {
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     if ( !g_strcmp0 ("vis-enabled", spec->name) || !g_strcmp0 ("vis-name", spec->name) )
     {
 	gst->priv->update_vis = TRUE;
@@ -2100,8 +2192,10 @@ parole_gst_conf_notify_cb (GObject *object, GParamSpec *spec, ParoleGst *gst)
 	g_object_get (G_OBJECT (gst->priv->conf),
 		      "aspect-ratio", &gst->priv->aspect_ratio,
 		      NULL);
-		  
-	parole_gst_size_allocate (GTK_WIDGET (gst), &GTK_WIDGET (gst)->allocation);
+    
+    gtk_widget_get_allocation( GTK_WIDGET (gst), allocation );
+	parole_gst_size_allocate (GTK_WIDGET (gst), allocation);
+	g_free(allocation);
     }
 }
 
@@ -2331,7 +2425,12 @@ parole_gst_class_init (ParoleGstClass *klass)
     widget_class->realize = parole_gst_realize;
     widget_class->show = parole_gst_show;
     widget_class->size_allocate = parole_gst_size_allocate;
+#if GTK_CHECK_VERSION(3, 0, 0)
+    // FIXME: parole-gst.c:2429:24: warning: assignment from incompatible pointer type [enabled by default]
+    widget_class->draw = parole_gst_expose_event;
+#else
     widget_class->expose_event = parole_gst_expose_event;
+#endif
     widget_class->motion_notify_event = parole_gst_motion_notify_event;
     widget_class->button_press_event = parole_gst_button_press_event;
     widget_class->button_release_event = parole_gst_button_release_event;
@@ -2457,13 +2556,13 @@ parole_gst_init (ParoleGst *gst)
     gst->priv->volume = -1.0;
     gst->priv->conf = NULL;
     
-    GTK_WIDGET_SET_FLAGS (GTK_WIDGET (gst), GTK_CAN_FOCUS);
+    gtk_widget_set_can_focus (GTK_WIDGET (gst), TRUE);
     
     /*
      * Disable double buffering on the video output to avoid
      * flickering when resizing the window.
      */
-    GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (gst), GTK_DOUBLE_BUFFERED);
+    gtk_widget_set_double_buffered (GTK_WIDGET (gst), FALSE);
 }
 
 GtkWidget *
@@ -2559,7 +2658,7 @@ void parole_gst_play_uri (ParoleGst *gst, const gchar *uri, const gchar *subtitl
 							    (GSourceFunc) parole_gst_check_state_change_timeout, 
 							    gst);
     
-    parole_window_busy_cursor (GTK_WIDGET (gst)->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (gst)));
     
     g_idle_add ((GSourceFunc) parole_gst_play_idle, gst);
     
@@ -2599,7 +2698,7 @@ void parole_gst_pause (ParoleGst *gst)
     
     g_mutex_unlock (&gst->priv->lock);
 
-    parole_window_busy_cursor (GTK_WIDGET (gst)->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (gst)));
     parole_gst_change_state (gst, GST_STATE_PAUSED);
 }
 
@@ -2611,7 +2710,7 @@ void parole_gst_resume (ParoleGst *gst)
     
     g_mutex_unlock (&gst->priv->lock);
 
-    parole_window_busy_cursor (GTK_WIDGET (gst)->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (gst)));
     parole_gst_change_state (gst, GST_STATE_PLAYING);
 }
 
@@ -2636,7 +2735,7 @@ void parole_gst_stop (ParoleGst *gst)
 		  
     g_mutex_unlock (&gst->priv->lock);
 
-    parole_window_busy_cursor (GTK_WIDGET (gst)->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (gst)));
     
     g_idle_add ((GSourceFunc) parole_gst_stop_idle, gst);
 }
@@ -2801,11 +2900,11 @@ parole_gst_set_cursor_visible (ParoleGst *gst, gboolean visible)
 {
     if ( visible )
     {
-	gst->priv->target == gst->priv->state ? gdk_window_set_cursor (GTK_WIDGET (gst)->window, NULL):
-						parole_window_busy_cursor (GTK_WIDGET (gst)->window);
+	gst->priv->target == gst->priv->state ? gdk_window_set_cursor (gtk_widget_get_window(GTK_WIDGET (gst)), NULL):
+						parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (gst)));
     }
     else
-	parole_window_invisible_cursor (GTK_WIDGET (gst)->window);
+	parole_window_invisible_cursor (gtk_widget_get_window(GTK_WIDGET (gst)));
 }
 
 GList *
diff --git a/src/parole-button.c b/src/parole-button.c
index 2ea6686..ad8c578 100644
--- a/src/parole-button.c
+++ b/src/parole-button.c
@@ -149,17 +149,23 @@ parole_button_filter_x_events (GdkXEvent *xevent, GdkEvent *ev, gpointer data)
 static gboolean
 parole_button_grab_keystring (ParoleButton *button, guint keycode)
 {
-    Display *display;
+    GdkDisplay *display;
     guint ret;
     guint modmask = 0;
     
-    display = GDK_DISPLAY ();
+    display = gdk_display_get_default();
     
     gdk_error_trap_push ();
 
-    ret = XGrabKey (display, keycode, modmask,
-		    GDK_WINDOW_XID (button->priv->window), True,
+#if GTK_CHECK_VERSION(3, 0, 0)
+    ret = XGrabKey (GDK_DISPLAY_XDISPLAY(display), keycode, modmask,
+		    gdk_x11_window_get_xid (button->priv->window), True,
 		    GrabModeAsync, GrabModeAsync);
+#else
+    ret = XGrabKey (GDK_DISPLAY_XDISPLAY(display), keycode, modmask,
+		    gdk_x11_drawable_get_xid (button->priv->window), True,
+		    GrabModeAsync, GrabModeAsync);
+#endif
 		    
     if ( ret == BadAccess )
     {
@@ -168,8 +174,12 @@ parole_button_grab_keystring (ParoleButton *button, guint keycode)
 	return FALSE;
     }
 	
-    ret = XGrabKey (display, keycode, LockMask | modmask,
-		    GDK_WINDOW_XID (button->priv->window), True,
+    ret = XGrabKey (GDK_DISPLAY_XDISPLAY(display), keycode, LockMask | modmask,
+#if GTK_CHECK_VERSION(3, 0, 0)
+            gdk_x11_window_get_xid (button->priv->window), True,
+#else
+		    gdk_x11_drawable_get_xid (button->priv->window), True,
+#endif
 		    GrabModeAsync, GrabModeAsync);
 			
     if (ret == BadAccess)
@@ -180,7 +190,11 @@ parole_button_grab_keystring (ParoleButton *button, guint keycode)
     }
 
     gdk_flush ();
+#if GTK_CHECK_VERSION(3, 0, 0)
+    gdk_error_trap_pop_ignored ();
+#else
     gdk_error_trap_pop ();
+#endif
     return TRUE;
 }
 
@@ -197,7 +211,7 @@ parole_button_grab_keystring (ParoleButton *button, guint keycode)
 static gboolean
 parole_button_xevent_key (ParoleButton *button, guint keysym , ParoleButtonKey key)
 {
-    guint keycode = XKeysymToKeycode (GDK_DISPLAY(), keysym);
+    guint keycode = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), keysym);
 
     if ( keycode == 0 )
     {
diff --git a/src/parole-conf-dialog.c b/src/parole-conf-dialog.c
index 35c3224..fb2a22c 100644
--- a/src/parole-conf-dialog.c
+++ b/src/parole-conf-dialog.c
@@ -251,7 +251,17 @@ void parole_conf_dialog_vis_plugin_changed_cb (GtkComboBox *widget,  ParoleConfD
     gchar *active;
     GstElementFactory *f;
     
+#if GTK_CHECK_VERSION(3, 0, 0)
+    GtkTreeIter iter;
+    gchar *text = NULL;
+    
+    GtkTreeModel *model = gtk_combo_box_get_model(widget);
+    
+    if (gtk_combo_box_get_active_iter (widget, &iter))
+        gtk_tree_model_get (model, &iter, 0, &active, -1);
+#else
     active = gtk_combo_box_get_active_text (widget);
+#endif
     
     f = g_hash_table_lookup (self->priv->vis_plugins, active);
     
@@ -331,7 +341,17 @@ parole_conf_dialog_init (ParoleConfDialog *self)
 static void
 parole_conf_dialog_add_vis_plugins (gpointer key, gpointer value, GtkWidget *combox)
 {
+#if GTK_CHECK_VERSION(3, 0, 0)
+    GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combox)));
+    GtkTreeIter iter;
+    
+    gtk_list_store_append( store, &iter );
+    gtk_list_store_set( store, &iter, 0, (const gchar *) key, -1 );
+    
+    g_object_unref (store);
+#else
     gtk_combo_box_append_text (GTK_COMBO_BOX (combox), (const gchar *) key);
+#endif
 }
 
 /* Set the combobox to the default visualisation plugin */
diff --git a/src/parole-disc.c b/src/parole-disc.c
index e708af5..fca07b8 100644
--- a/src/parole-disc.c
+++ b/src/parole-disc.c
@@ -481,7 +481,7 @@ parole_disc_get_drives (ParoleDisc *disc)
  * needed, perform it when the menu item is activated.
  **/
 static void
-parole_disc_select_cb (GtkItem *item, ParoleDisc *disc)
+parole_disc_select_cb (GtkMenuItem *item, ParoleDisc *disc)
 {
     if ( disc->priv->needs_update )
 	parole_disc_get_drives (disc);
diff --git a/src/parole-mediachooser.c b/src/parole-mediachooser.c
index 8372f32..74e958e 100644
--- a/src/parole-mediachooser.c
+++ b/src/parole-mediachooser.c
@@ -161,7 +161,7 @@ parole_media_chooser_add_idle (gpointer data)
 static void
 parole_media_chooser_open (ParoleMediaChooser *chooser)
 {
-    parole_window_busy_cursor (chooser->window->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET(chooser->window)));
 
     gtk_widget_show( chooser->spinner );
     
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index 5f699d7..e9232fd 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -505,13 +505,13 @@ void	parole_media_list_drag_data_received_cb (GtkWidget *widget,
     guint added = 0;
     gboolean play;
     
-    parole_window_busy_cursor (GTK_WIDGET (list)->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (list)));
     
     g_object_get (G_OBJECT (list->priv->conf),
 		  "play-opened-files", &play,
 		  NULL);
     
-    uri_list = g_uri_list_extract_uris ((const gchar *)data->data);
+    uri_list = g_uri_list_extract_uris ((const gchar *)gtk_selection_data_get_data(data));
     
     for ( i = 0; uri_list[i] != NULL; i++)
     {
@@ -523,7 +523,7 @@ void	parole_media_list_drag_data_received_cb (GtkWidget *widget,
 
     g_strfreev (uri_list);
 
-    gdk_window_set_cursor (GTK_WIDGET (list)->window, NULL);
+    gdk_window_set_cursor (gtk_widget_get_window(GTK_WIDGET (list)), NULL);
     gtk_drag_finish (drag_context, added == i ? TRUE : FALSE, FALSE, drag_time);
 }
 
@@ -532,15 +532,27 @@ gboolean parole_media_list_key_press (GtkWidget *widget, GdkEventKey *ev, Parole
     GtkWidget *vbox_player;
     switch ( ev->keyval )
     {
+#if GTK_CHECK_VERSION(3, 0, 0)
+        case GDK_KEY_Delete:
+#else
         case GDK_Delete:
+#endif
             parole_media_list_remove_clicked_cb (NULL, list);
             return TRUE;
             break;
+#if GTK_CHECK_VERSION(3, 0, 0)
+        case GDK_KEY_Right:
+        case GDK_KEY_Left:
+        case GDK_KEY_Page_Down:
+        case GDK_KEY_Page_Up:
+        case GDK_KEY_Escape:
+#else
         case GDK_Right:
         case GDK_Left:
         case GDK_Page_Down:
         case GDK_Page_Up:
         case GDK_Escape:
+#endif
             vbox_player = GTK_WIDGET(gtk_container_get_children( GTK_CONTAINER(gtk_widget_get_parent(gtk_widget_get_parent(gtk_widget_get_parent(gtk_widget_get_parent(gtk_widget_get_parent(gtk_widget_get_parent(widget))))))) )[0].data);
             gtk_widget_grab_focus(vbox_player);
             return TRUE;
@@ -2287,7 +2299,7 @@ static gboolean	 parole_media_list_dbus_add_files (ParoleMediaList *list,
 
 void parole_media_list_grab_focus (ParoleMediaList *list)
 {
-    if (GTK_WIDGET_VISIBLE (list->priv->view) )
+    if (gtk_widget_get_visible (list->priv->view) )
 	gtk_widget_grab_focus (list->priv->view);
 }
 
diff --git a/src/parole-open-location.c b/src/parole-open-location.c
index a908a66..99277a5 100644
--- a/src/parole-open-location.c
+++ b/src/parole-open-location.c
@@ -105,7 +105,7 @@ parole_open_location_get_completion_model (void)
     gchar **lines = NULL;
     guint i;
     
-    store = gtk_list_store_new (N_COLS, GTK_TYPE_STRING);
+    store = gtk_list_store_new (N_COLS, G_TYPE_STRING);
     
     lines = parole_get_history ();
     
diff --git a/src/parole-player.c b/src/parole-player.c
index bbd8e8e..edb1669 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -158,8 +158,12 @@ gboolean    parole_player_window_state_event (GtkWidget *widget,
 
 void		parole_player_leave_fs_cb		(GtkButton *button,
 							 ParolePlayer *player);
+							 
+gboolean    parole_player_window_state_event (GtkWidget *widget, 
+                                  GdkEventWindowState *event,
+                                  ParolePlayer *player);
 
-void            parole_player_destroy_cb                (GtkObject *window, 
+void            parole_player_destroy_cb                (GObject *window, 
 							 ParolePlayer *player);
 
 gboolean	parole_player_delete_event_cb		(GtkWidget *widget, 
@@ -439,6 +443,7 @@ void ratio_20_9_toggled_cb (GtkWidget *widget, ParolePlayer *player)
 void parole_player_set_playlist_visible (ParolePlayer *player, gboolean visibility)
 {
     gint window_w, window_h, playlist_w;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     
     if (gtk_widget_get_visible (player->priv->playlist_nt) == visibility)
         return;
@@ -446,7 +451,8 @@ void parole_player_set_playlist_visible (ParolePlayer *player, gboolean visibili
     gtk_window_get_size (GTK_WINDOW (player->priv->window), &window_w, &window_h);
     
     /* Get the playlist width.  If we fail to get it, use the default 220. */
-    playlist_w = player->priv->playlist_nt->allocation.width;
+    gtk_widget_get_allocation( GTK_WIDGET( player->priv->playlist_nt ), allocation );
+    playlist_w = allocation->width;
     if (playlist_w == 1)
         playlist_w = 220;
 
@@ -481,7 +487,7 @@ void parole_player_show_hide_playlist (GtkWidget *widget, ParolePlayer *player)
 {
     gboolean   visible;
     
-    visible = GTK_WIDGET_VISIBLE (player->priv->playlist_nt);
+    visible = gtk_widget_get_visible (player->priv->playlist_nt);
 
     parole_player_set_playlist_visible( player, !visible );
 }
@@ -896,7 +902,7 @@ parole_player_show_audiobox (ParolePlayer *player)
         !gst_get_has_vis   ( PAROLE_GST(player->priv->gst) ) )
     {
 	gtk_widget_show(player->priv->audiobox);
-	gtk_widget_hide_all(player->priv->eventbox_output);
+	gtk_widget_hide(player->priv->eventbox_output);
     }
     else
     {
@@ -1828,7 +1834,7 @@ parole_player_dvd_chapter_change_cb (ParoleGst *gst, gint chapter_count, ParoleP
 
 gboolean parole_player_delete_event_cb (GtkWidget *widget, GdkEvent *ev, ParolePlayer *player)
 {
-    parole_window_busy_cursor (GTK_WIDGET (player->priv->window)->window);
+    parole_window_busy_cursor (gtk_widget_get_window(GTK_WIDGET (player->priv->window)));
     
     player->priv->exit = TRUE;
     parole_gst_terminate (PAROLE_GST (player->priv->gst));
@@ -1837,7 +1843,7 @@ gboolean parole_player_delete_event_cb (GtkWidget *widget, GdkEvent *ev, ParoleP
 }
 
 void
-parole_player_destroy_cb (GtkObject *window, ParolePlayer *player)
+parole_player_destroy_cb (GObject *window, ParolePlayer *player)
 {
 }
 
@@ -1852,20 +1858,24 @@ parole_player_move_fs_window (ParolePlayer *player)
 {
     GdkScreen *screen;
     GdkRectangle rect;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     
     screen = gtk_window_get_screen (GTK_WINDOW (player->priv->fs_window));
     
     gdk_screen_get_monitor_geometry (screen,
-				     gdk_screen_get_monitor_at_window (screen, player->priv->window->window),
+				     gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window( GTK_WIDGET(player->priv->window))),
 				     &rect);
     
+    gtk_widget_get_allocation( GTK_WIDGET(player->priv->play_box), allocation );
     gtk_window_resize (GTK_WINDOW (player->priv->fs_window), 
 		       rect.width, 
-		       player->priv->play_box->allocation.height);
+		       allocation->height);
     
     gtk_window_move (GTK_WINDOW (player->priv->fs_window),
 		     rect.x, 
-		     rect.height + rect.y - player->priv->play_box->allocation.height);
+		     rect.height + rect.y - allocation->height);
+
+    g_free(allocation);
 }
 
 gboolean
@@ -2098,18 +2108,33 @@ parole_player_gst_widget_button_release (GtkWidget *widget, GdkEventButton *ev,
 static gboolean parole_player_hide_fs_window (gpointer data)
 {
     ParolePlayer *player;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
     GdkWindow *gdkwindow;
     gint x, y, w, h;
     
+#if GTK_CHECK_VERSION (3, 0, 0)
+    GdkDevice *dev;
+    GdkDeviceManager *devmgr;
+#endif
+    
     player = PAROLE_PLAYER (data);
     
-    if ( GTK_WIDGET_VISIBLE (player->priv->fs_window) )
+    if ( gtk_widget_get_visible (player->priv->fs_window) )
     {
 	/* Don't hide the popup if the pointer is above it*/
-	w = player->priv->fs_window->allocation.width;
-	h = player->priv->fs_window->allocation.height;
-	
+	gtk_widget_get_allocation( GTK_WIDGET(player->priv->fs_window), allocation );
+	w = allocation->width;
+	h = allocation->height;
+	g_free(allocation);
+	
+#if GTK_CHECK_VERSION (3, 0, 0)
+    devmgr = gdk_display_get_device_manager(gtk_widget_get_display(GTK_WIDGET(player->priv->fs_window)));
+    dev = gdk_device_manager_get_client_pointer(devmgr);
+    gdk_window_get_device_position( gtk_widget_get_window(GTK_WIDGET(player->priv->fs_window)),
+                                    dev, &x, &y, NULL);
+#else
 	gtk_widget_get_pointer (player->priv->fs_window, &x, &y);
+#endif
 	
 	if ((x >= 0) && (x <= w) && (y >= 0) && (y <= h))
 	    return TRUE;
@@ -2470,50 +2495,86 @@ parole_player_handle_key_press (GdkEventKey *ev, ParolePlayer *player)
     
     switch (ev->keyval)
     {
-	case GDK_f:
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_f:
+	case GDK_KEY_F:
+#else
+    case GDK_f:
 	case GDK_F:
+#endif
             if ( player->priv->embedded != TRUE ) parole_player_full_screen_menu_item_activate (player);
 	    ret_val = TRUE;
 	    break;
-	case GDK_space:
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_space:
+	case GDK_KEY_p:
+	case GDK_KEY_P:
+#else
+    case GDK_space:
 	case GDK_p:
 	case GDK_P:
+#endif
 	    parole_player_play_pause_clicked (NULL, player);
 	    ret_val = TRUE;
 	    break;
+#if GTK_CHECK_VERSION(3, 0, 0)
+    case GDK_KEY_Right:
+#else
     case GDK_Right:
+#endif
 	    /* Media seekable ?*/
-	    if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
+	    if ( gtk_widget_get_sensitive (player->priv->range) )
 	    {
 		if (ev->state & GDK_CONTROL_MASK) parole_player_seekf_cb (NULL, player, seek_medium);
 		else parole_player_seekf_cb (NULL, player, seek_short);
 	    }
 	    ret_val = TRUE;
 	    break;
-	case GDK_Left:
-	    if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_Left:
+#else
+    case GDK_Left:
+#endif
+	    if ( gtk_widget_get_sensitive (player->priv->range) )
 	    {
 		if (ev->state & GDK_CONTROL_MASK) parole_player_seekb_cb (NULL, player, seek_medium);
 		else parole_player_seekb_cb (NULL, player, seek_short);
 	    }
 	    ret_val = TRUE;
 	    break;
-	case GDK_Page_Down:
-	    if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_Page_Down:
+#else
+    case GDK_Page_Down:
+#endif
+	    if ( gtk_widget_get_sensitive (player->priv->range) )
 		parole_player_seekb_cb (NULL, player, seek_long);
 	    ret_val = TRUE;
 	    break;
-	case GDK_Page_Up:
-	    if ( GTK_WIDGET_SENSITIVE (player->priv->range) )
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_Page_Up:
+#else
+    case GDK_Page_Up:
+#endif
+	    if ( gtk_widget_get_sensitive (player->priv->range) )
 		parole_player_seekf_cb (NULL, player, seek_long);
 	    ret_val = TRUE;
 	    break;
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_s:
+	case GDK_KEY_S:
+#else
 	case GDK_s:
 	case GDK_S:
+#endif
 	    parole_player_stop_clicked (NULL, player);
 	    ret_val = TRUE;
 	    break;
-	case GDK_Escape:
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_Escape:
+#else
+    case GDK_Escape:
+#endif
 	    parole_player_full_screen (player, FALSE);
 	    break;
 #ifdef HAVE_XF86_KEYSYM
@@ -2527,8 +2588,13 @@ parole_player_handle_key_press (GdkEventKey *ev, ParolePlayer *player)
 	 * Pass these to the media list and tell it to
 	 * grab the focus
 	 */
-	case GDK_Up:
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_Up:
+	case GDK_KEY_Down:
+#else
+    case GDK_Up:
 	case GDK_Down:
+#endif
 	    if (!player->priv->full_screen && gtk_widget_get_visible(player->priv->playlist_nt))
 	        parole_media_list_grab_focus (player->priv->list);
 	    break;
@@ -2550,7 +2616,11 @@ parole_player_key_press (GtkWidget *widget, GdkEventKey *ev, ParolePlayer *playe
 
     switch (ev->keyval)
     {
-	case GDK_F11:
+#if GTK_CHECK_VERSION(3, 0, 0)
+	case GDK_KEY_F11:
+#else
+    case GDK_F11:
+#endif
             if ( player->priv->embedded != TRUE ) parole_player_full_screen_menu_item_activate (player);
 	    return TRUE;
 #ifdef HAVE_XF86_KEYSYM
@@ -2651,7 +2721,11 @@ parole_gst_set_default_aspect_ratio (ParolePlayer *player, GtkBuilder *builder)
 static gboolean
 parole_audiobox_expose_event (GtkWidget *w, GdkEventExpose *ev, ParolePlayer *player)
 {
-    gboolean homogeneous = w->allocation.width > 536;
+    GtkAllocation *allocation = g_new0 (GtkAllocation, 1);
+    gboolean homogeneous;
+    gtk_widget_get_allocation(w, allocation);
+    homogeneous = allocation->width > 536;
+    g_free(allocation);
     
     if ( gtk_box_get_homogeneous( GTK_BOX(w) ) == homogeneous )
         return FALSE;
@@ -2713,9 +2787,9 @@ parole_player_drag_data_received_cb (GtkWidget *widget,
     guint added  = 0;
     guint i;
     
-    parole_window_busy_cursor (widget->window);
+    parole_window_busy_cursor (gtk_widget_get_window(widget));
     
-    uri_list = g_uri_list_extract_uris ((const gchar *)data->data);
+    uri_list = g_uri_list_extract_uris ((const gchar *)gtk_selection_data_get_data(data));
     for ( i = 0; uri_list[i] != NULL; i++)
     {
 	gchar *path;
@@ -2727,7 +2801,7 @@ parole_player_drag_data_received_cb (GtkWidget *widget,
     
     g_strfreev (uri_list);
 
-    gdk_window_set_cursor (widget->window, NULL);
+    gdk_window_set_cursor (gtk_widget_get_window(widget), NULL);
     gtk_drag_finish (drag_context, added == i ? TRUE : FALSE, FALSE, drag_time);
 }
 
@@ -2779,7 +2853,11 @@ parole_player_set_wm_opacity_hint (GtkWidget *widget)
     
     gdkwindow = gtk_widget_get_window (widget);
     
-    XChangeProperty (xdisplay, GDK_WINDOW_XID (gdkwindow),
+#if GTK_CHECK_VERSION(3, 0, 0)
+    XChangeProperty (xdisplay, gdk_x11_window_get_xid (gdkwindow),
+#else
+    XChangeProperty (xdisplay, gdk_x11_drawable_get_xid (gdkwindow),
+#endif
 		     atom, XA_CARDINAL,
 		     32, PropModeAppend,
 		     (guchar *) &mode, 
@@ -2976,6 +3054,7 @@ parole_player_init (ParolePlayer *player)
     player->priv->seekf = GTK_WIDGET (gtk_builder_get_object (builder, "forward"));
     player->priv->seekb = GTK_WIDGET (gtk_builder_get_object (builder, "back"));
     
+    // FIXME: parole-player.c:3057:5: warning: ‘gtk_rc_parse’ is deprecated (declared at /usr/include/gtk-3.0/gtk/deprecated/gtkrc.h:172): Use 'GtkStyleContext' instead [-Wdeprecated-declarations]
     gtk_rc_parse( RC_STYLE_FILE );
      
     player->priv->range = GTK_WIDGET (gtk_builder_get_object (builder, "scale"));
@@ -3004,7 +3083,11 @@ parole_player_init (ParolePlayer *player)
     
     /* Audio box */
     hbox_audiobox = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_audiobox"));
+#if GTK_CHECK_VERSION(3, 0, 0)
+    g_signal_connect(hbox_audiobox, "draw",
+#else
     g_signal_connect(hbox_audiobox, "expose-event",
+#endif
         G_CALLBACK(parole_audiobox_expose_event), player);
     
     gdk_color_parse("black", &background);
diff --git a/src/plugins/tray/tray-provider.c b/src/plugins/tray/tray-provider.c
index 5c46305..db401fa 100644
--- a/src/plugins/tray/tray-provider.c
+++ b/src/plugins/tray/tray-provider.c
@@ -76,7 +76,7 @@ exit_activated_cb (TrayProvider *tray)
     menu_selection_done_cb (tray);
     
     ev.type = GDK_DELETE;
-    ev.window = tray->window->window;
+    ev.window = gtk_widget_get_window(tray->window);
     ev.send_event = TRUE;
 
     g_signal_handler_block (tray->window, tray->sig);
@@ -155,7 +155,7 @@ popup_menu_cb (GtkStatusIcon *icon, guint button,
 static void
 tray_activate_cb (GtkStatusIcon *tray_icon, TrayProvider *tray)
 {
-    if ( GTK_WIDGET_VISIBLE (tray->window) )
+    if ( gtk_widget_get_visible (tray->window) )
 	gtk_widget_hide (tray->window);
     else
 	gtk_widget_show (tray->window);


More information about the Xfce4-commits mailing list