[135031] trunk/dports/multimedia

Jeremy Huddleston Sequoia jeremyhu at apple.com
Sat Apr 18 13:18:23 PDT 2015


Whoops, I forgot to attach the patch.

If you want to support users still using libstdc++, then I suggest you create ports based on older versions of audacious for them (like we did for webkit-gtk).

-------------- next part --------------
A non-text attachment was scrubbed...
Name: audacious.patch
Type: application/octet-stream
Size: 5326 bytes
Desc: not available
URL: <https://lists.macosforge.org/pipermail/macports-dev/attachments/20150418/d67f6040/attachment-0001.obj>
-------------- next part --------------


> On Apr 18, 2015, at 13:13, Jeremy Huddleston Sequoia <jeremyhu at apple.com> wrote:
> 
> Please fix this in the next couple days, or I will do what I can to fix these missteps.  This "The system libraries in OS X 10.8 and lower use libstdc++. Thus, libstdc++ is not supported for this port." is incorrect as we discussed on the list last week.  I don't see why this is still in our ports tree given the rather lengthy discussion we just had about why this is wrong.
> 
> --Jeremy
> 
>> On Apr 13, 2015, at 09:24, ionic at macports.org wrote:
>> 
>> Revision
>> 135031
>> Author
>> ionic at macports.org
>> Date
>> 2015-04-13 09:24:21 -0700 (Mon, 13 Apr 2015)
>> Log Message
>> 
>> audacious{,-{core,plugins}}: update to 3.6.1. Also:
>> 
>>  - Upstream now uses C++11. Insert abomination to make that work on
>>    10.6+.
>>  - Re-do patches. Replace -std=gnu++11 with -std=c++11 to not pull in
>>    libstdc++ unnecessarily.
>>  - Require either gtk2 or gtk3, but make gtk2 preferred.
>>  - Drop universal variant.
>>  - Add optional Qt5 support.
>>  - Drop libsdl patch for audacious-plugins. Merged upstream.
>>  - Enable cdaudio variant now that libcdio-paranoia is ported.
>>  - Enable cdaudio by default.
>>  - Use MacPorts-provided libxml2.
>>  - Remove deleted configure flags.
>>  - Enable coreaudio output plugin by default. May not work on 10.6.
>>  - Add mac-media-keys as disabled, as it's currently broken.
>> 
>> Modified Paths
>> 
>> 	? trunk/dports/multimedia/audacious/Portfile
>> 	? trunk/dports/multimedia/audacious-core/Portfile
>> 	? trunk/dports/multimedia/audacious-core/files/patch-buildsys.diff
>> 	? trunk/dports/multimedia/audacious-plugins/Portfile
>> 	? trunk/dports/multimedia/audacious-plugins/files/patch-buildsys.diff
>> Added Paths
>> 
>> 	? trunk/dports/multimedia/audacious-core/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff
>> 	? trunk/dports/multimedia/audacious-core/files/patch-gtk3.diff
>> 	? trunk/dports/multimedia/audacious-plugins/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff
>> 	? trunk/dports/multimedia/audacious-plugins/files/patch-gtk3.diff
>> Removed Paths
>> 
>> 	? trunk/dports/multimedia/audacious-plugins/files/patch-configure.ac-select-libsdl.diff
>> Diff
>> 
>> Modified: trunk/dports/multimedia/audacious/Portfile (135030 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious/Portfile	2015-04-13 16:07:33 UTC (rev 135030)
>> +++ trunk/dports/multimedia/audacious/Portfile	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -6,7 +6,7 @@
>> 
>> name                audacious
>> 
>> 
>> 
>> # Please keep audacious, audacious-core and audacious-plugins synchronized.
>> 
>> -version             3.5.2
>> 
>> +version             3.6.1
>> 
>> revision            0
>> 
>> 
>> 
>> license             BSD GPL-2+
>> 
>> Modified: trunk/dports/multimedia/audacious-core/Portfile (135030 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-core/Portfile	2015-04-13 16:07:33 UTC (rev 135030)
>> +++ trunk/dports/multimedia/audacious-core/Portfile	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -3,12 +3,13 @@
>> 
>> 
>> 
>> PortSystem          1.0
>> 
>> PortGroup           conflicts_build 1.0
>> 
>> +PortGroup           compiler_blacklist_versions 1.0
>> 
>> 
>> 
>> name                audacious-core
>> 
>> set real_name       audacious
>> 
>> 
>> 
>> # Please keep audacious, audacious-core and audacious-plugins synchronized.
>> 
>> -version             3.5.2
>> 
>> +version             3.6.1
>> 
>> revision            0
>> 
>> 
>> 
>> license             BSD
>> 
>> @@ -31,12 +32,15 @@
>> 
>> master_sites        http://distfiles.audacious-media-player.org
>> distname            ${real_name}-${version}
>> 
>> use_bzip2           yes
>> 
>> -checksums           rmd160  dd41e56544d9563b47401a670d96a34d7be920b6 \
>> -                    sha256  3915b9692ef8acb2588b0e26c2738e59e36766cfe83e7e52c0e601688e6c1956
>> 
>> +checksums           rmd160  45efb8bd90e0c0529be6c4ce82952f300b422e90 \
>> +                    sha256  85d1d5a80240f45c858bb25af6565c13d53e4b92882eb15fb2b18511fabf3de6
>> 
>> 
>> 
>> +universal_variant   no
>> +
>> 
>> conflicts_build     ${name}
>> 
>> 
>> 
>> -patchfiles          patch-buildsys.diff
>> 
>> +patchfiles          patch-buildsys.diff \
>> +                    patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff
>> 
>> 
>> 
>> depends_build       path:bin/pkg-config:pkgconfig \
>> 
>>                     path:bin/aclocal:automake \
>> 
>> @@ -45,8 +49,7 @@
>> 
>> depends_lib         port:libiconv \
>> 
>>                     port:gettext \
>> 
>>                     path:lib/pkgconfig/dbus-1.pc:dbus \
>> 
>> -                    path:lib/pkgconfig/glib-2.0.pc:glib2 \
>> -                    path:lib/pkgconfig/gtk-3.0.pc:gtk3
>> 
>> +                    path:lib/pkgconfig/glib-2.0.pc:glib2
>> 
>> 
>> 
>> # Note: rpath is required on Mac OS X.
>> 
>> configure.args      --enable-nls \
>> 
>> @@ -59,17 +62,48 @@
>> 
>> autoreconf.cmd      ./autogen.sh
>> 
>> autoreconf.args
>> 
>> 
>> 
>> +# A compiler supporting C++11 is required to build audacious and its plugins.
>> +# The newer, the merrier.
>> +# Compilers supporting C++11 are GCC >= 4.6 and clang >= 3.3.
>> +# We do not know what "cc" is, so blacklist it as well.
>> +compiler.blacklist-append   {*gcc-4.[0-5]} {clang < 500} macports-clang-2.* \
>> +                            {macports-clang-3.[0-2]} cc
>> +
>> 
>> platform darwin {
>> 
>> -    if {${configure.cxx_stdlib} ne {} &&
>> -        [string equal ${configure.cxx_stdlib} "libc++"]} {
>> -        if {${os.major} > 10} {
>> -            configure.ldflags-append  "-mmacosx-version-min=10.7"
>> 
>> +    if {${os.major} >= 13} {
>> +        if {${configure.cxx_stdlib} ne {} &&
>> +            [string equal ${configure.cxx_stdlib} "libc++"]} {
>> +            # Blacklist all GCC compilers to not accidentally pull in libstdc++.
>> +            compiler.blacklist-append {*gcc*}
>> +
>> +            # Make sure binary runs on 10.9+ only.
>> +            configure.ldflags-append  "-mmacosx-version-min=10.9"
>> 
>>         } else {
>> 
>> -            ui_error "libc++ is only supported on OS X 10.7 and up for this port."
>> -            error "libc++ supported on >= 10.7 only."
>> 
>> +            ui_error "The system libraries in OS X 10.9 and higher use libc++. Thus, libstdc++ is not supported for this port."
>> +            error "libstdc++ supported on <= 10.8 only."
>> 
>>         }
>> 
>>     } else {
>> 
>> -        configure.ldflags-append  "-mmacosx-version-min=10.5"
>> 
>> +        if {${configure.cxx_stdlib} ne {} &&
>> +            [string equal ${configure.cxx_stdlib} "libc++"]} {
>> +            ui_error "The system libraries in OS X 10.8 and lower use libstdc++. Thus, libstdc++ is not supported for this port."
>> +            error "libc++ supported on >= 10.9 only."
>> +        } else {
>> +            # Shameless copy from rust.
>> +            depends_lib-append          {path:lib/libstdc\\+\\+.6.dylib:libgcc}
>> +
>> +            # Force GCC 4.9.
>> +            compiler.blacklist-append   {*clang*}
>> +            compiler.fallback-append    macports-gcc-4.9
>> +
>> +            # Make sure binary runs on 10.5+ only.
>> +            configure.ldflags-append    "-mmacosx-version-min=10.5"
>> +
>> +            notes-append {
>> +                            Upstream for some reason requires libc++.
>> +                            Your build will use libstdc++. The maintainer assumes this
>> +                            to be OK, but you're on your own if stuff breaks.\
>> +            }
>> +        }
>> 
>>     }
>> 
>> }
>> 
>> 
>> 
>> @@ -86,6 +120,39 @@
>> 
>> #                           --enable-chardet
>> 
>> #}
>> 
>> 
>> 
>> +variant qt5 description {Add Qt5 support} {
>> +    PortGroup   qt5 1.0
>> +
>> +    configure.args-replace  --disable-qt \
>> +                            --enable-qt
>> +
>> +    notes-append {
>> +                    Qt5 support is optional and untested.
>> +                    If it breaks, you've got to keep the pieces.\
>> +    }
>> +}
>> +
>> +variant gtk2 conflicts gtk3 description {Add GTK2 support} {
>> +    depends_lib-append      path:lib/pkgconfig/gtk-2.0.pc:gtk2
>> +
>> +    configure.args-replace  --disable-gtk \
>> +                            --enable-gtk
>> +}
>> +
>> +variant gtk3 conflicts gtk2 description {Add GTK3 support} {
>> +    depends_lib-append      path:lib/pkgconfig/gtk-3.0.pc:gtk3
>> +
>> +    patchfiles-append       patch-gtk3.diff
>> +
>> +    configure.args-replace  --disable-gtk \
>> +                            --enable-gtk
>> +}
>> +
>> +# Need either one of gtk2 or gtk3. Default to gtk2, which is preferred by upstream.
>> +if {![variant_isset gtk2] && ![variant_isset gtk3]} {
>> +    default_variants-append +gtk2
>> +}
>> +
>> 
>> livecheck.type      regex
>> 
>> livecheck.url       ${master_sites}
>> 
>> livecheck.regex     "${real_name}-(\\d+(?:\\.\\d+)*)${extract.suffix}
>> "
>> 
>> Added: trunk/dports/multimedia/audacious-core/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff (0 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-core/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff	                        (rev 0)
>> +++ trunk/dports/multimedia/audacious-core/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -0,0 +1,22 @@
>> 
>> +--- acinclude.m4.orig
>> ++++ acinclude.m4
>> +@@ -83,8 +83,8 @@ AC_REQUIRE([AC_SYS_LARGEFILE])
>> + if test "x$GCC" = "xyes"; then
>> +     CFLAGS="$CFLAGS -std=gnu99 -ffast-math -Wall -pipe"
>> +     if test "x$HAVE_DARWIN" = "xyes"; then
>> +-        CXXFLAGS="$CXXFLAGS -stdlib=libc++ -std=gnu++11 -ffast-math -Wall -pipe"
>> +-        LDFLAGS="$LDFLAGS -lc++ -stdlib=libc++"
>> ++        CXXFLAGS="$CXXFLAGS -std=c++11 -ffast-math -Wall -pipe"
>> ++        LDFLAGS="$LDFLAGS"
>> +     else
>> +         CXXFLAGS="$CXXFLAGS -std=gnu++11 -ffast-math -Wall -pipe"
>> +     fi
>> +@@ -101,7 +101,7 @@ if test "x$HAVE_DARWIN" = "xyes"; then
>> +     AC_PROG_OBJCXX
>> +     AC_PROG_OBJCXXCPP
>> + 
>> +-    OBJCXXFLAGS="$OBJCXXFLAGS -stdlib=libc++ -std=c++11"
>> ++    OBJCXXFLAGS="$OBJCXXFLAGS -std=c++11"
>> + fi
>> + 
>> + dnl Enable "-Wl,-z,defs" only on Linux
>> 
>> Modified: trunk/dports/multimedia/audacious-core/files/patch-buildsys.diff (135030 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-core/files/patch-buildsys.diff	2015-04-13 16:07:33 UTC (rev 135030)
>> +++ trunk/dports/multimedia/audacious-core/files/patch-buildsys.diff	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -1,4 +1,4 @@
>> 
>> ---- buildsys.mk.in.old
>> 
>> +--- buildsys.mk.in.orig
>> 
>> +++ buildsys.mk.in
>> 
>> @@ -107,19 +107,24 @@ PLUGIN_OBJS = ${OBJS:.o=.plugin.o}
>> 
>> 
>> 
>> @@ -383,22 +383,23 @@
>> 
>> +
>> 
>> +.CURDIR ?= .
>> 
>> +include ${.CURDIR}/.deps
>> 
>> ---- m4/buildsys.m4.old
>> 
>> +--- m4/buildsys.m4.orig
>> 
>> +++ m4/buildsys.m4
>> 
>> -@@ -109,14 +109,14 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
>> 
>> +@@ -108,13 +108,13 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
>> + 	case "$host_os" in
>> 
>>  		darwin*)
>> 
>>  			AC_MSG_RESULT(Darwin)
>> 
>> - 			LIB_CFLAGS='-fPIC -DPIC'
>> --			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR}'
>> 
>> +-			LIB_CFLAGS='-fPIC -DPIC -mmacosx-version-min=10.7'
>> +-			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR} -mmacosx-version-min=10.7 -install_name "${libdir}/$$(i=${SHARED_LIB}; echo $${i%${LIB_SUFFIX}}).${LIB_MAJOR}${LIB_SUFFIX}"'
>> ++			LIB_CFLAGS='-fPIC -DPIC'
>> 
>> +			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR} -Wl,-install_name,${libdir}/$${out%.dylib}.${LIB_MAJOR}.dylib'
>> 
>>  			LIB_PREFIX='lib'
>> 
>>  			LIB_SUFFIX='.dylib'
>> 
>>  			LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
>> 
>> - 			PLUGIN_CFLAGS='-fPIC -DPIC'
>> - 			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup'
>> 
>> +-			PLUGIN_CFLAGS='-fPIC -DPIC -mmacosx-version-min=10.7'
>> +-			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup -mmacosx-version-min=10.7'
>> ++			PLUGIN_CFLAGS='-fPIC -DPIC'
>> ++			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup'
>> 
>>  			PLUGIN_SUFFIX='.bundle'
>> 
>> --			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && install_name_tool -id ${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
>> -+			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
>> 
>> + 			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
>> 
>>  			UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib'
>> 
>> - 			CLEAN_LIB=''
>> - 			;;
>> 
>> Added: trunk/dports/multimedia/audacious-core/files/patch-gtk3.diff (0 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-core/files/patch-gtk3.diff	                        (rev 0)
>> +++ trunk/dports/multimedia/audacious-core/files/patch-gtk3.diff	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -0,0 +1,1009 @@
>> 
>> +--- acinclude.m4.old
>> ++++ acinclude.m4
>> +@@ -164,7 +164,7 @@ AC_ARG_ENABLE(gtk,
>> +  USE_GTK=$enableval, USE_GTK=yes)
>> + 
>> + if test $USE_GTK = yes ; then
>> +-    PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.24)
>> ++    PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.4)
>> +     AC_DEFINE(USE_GTK, 1, [Define if GTK+ support enabled])
>> + fi
>> + 
>> +--- src/libaudgui/about.cc.old
>> ++++ src/libaudgui/
>> about.cc
>> 
>> +@@ -72,7 +72,7 @@ static GtkWidget * create_about_window ()
>> + 
>> +     audgui_destroy_on_escape (about_window);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_container_add ((GtkContainer *) about_window, vbox);
>> + 
>> +     StringBuf logo_path = filename_build ({data_dir, "images", "about-logo.png"});
>> +@@ -84,11 +84,9 @@ static GtkWidget * create_about_window ()
>> +     gtk_label_set_justify ((GtkLabel *) label, GTK_JUSTIFY_CENTER);
>> +     gtk_box_pack_start ((GtkBox *) vbox, label, false, false, 0);
>> + 
>> +-    GtkWidget * align = gtk_alignment_new (0.5, 0.5, 0, 0);
>> +-    gtk_box_pack_start ((GtkBox *) vbox, align, false, false, 0);
>> +-
>> +     GtkWidget * button = gtk_link_button_new (website);
>> +-    gtk_container_add ((GtkContainer *) align, button);
>> ++    gtk_widget_set_halign (button, GTK_ALIGN_CENTER);
>> ++    gtk_box_pack_start ((GtkBox *) vbox, button, false, false, 0);
>> + 
>> +     char * credits, * license;
>> + 
>> +--- src/libaudgui/equalizer.cc.old
>> ++++ src/libaudgui/
>> equalizer.cc
>> 
>> +@@ -63,13 +63,14 @@ static void slider_moved (GtkRange * slider)
>> + 
>> + static GtkWidget * create_slider (const char * name, int band, GtkWidget * hbox)
>> + {
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> + 
>> +     GtkWidget * label = gtk_label_new (name);
>> +     gtk_label_set_angle ((GtkLabel *) label, 90);
>> +     gtk_box_pack_start ((GtkBox *) vbox, label, true, false, 0);
>> + 
>> +-    GtkWidget * slider = gtk_vscale_new_with_range (-AUD_EQ_MAX_GAIN, AUD_EQ_MAX_GAIN, 1);
>> ++    GtkWidget * slider = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL,
>> ++     -AUD_EQ_MAX_GAIN, AUD_EQ_MAX_GAIN, 1);
>> +     gtk_scale_set_draw_value ((GtkScale *) slider, true);
>> +     gtk_scale_set_value_pos ((GtkScale *) slider, GTK_POS_BOTTOM);
>> +     gtk_range_set_inverted ((GtkRange *) slider, true);
>> +@@ -127,18 +128,19 @@ static GtkWidget * create_window ()
>> +     gtk_container_set_border_width ((GtkContainer *) window, 6);
>> +     audgui_destroy_on_escape (window);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_container_add ((GtkContainer *) window, vbox);
>> + 
>> +     gtk_box_pack_start ((GtkBox *) vbox, create_on_off (), false, false, 0);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,  6);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hbox, false, false, 0);
>> + 
>> +     GtkWidget * preamp = create_slider (_("Preamp"), -1, hbox);
>> +     g_object_set_data ((GObject *) window, "preamp", preamp);
>> + 
>> +-    gtk_box_pack_start ((GtkBox *) hbox, gtk_vseparator_new (), false, false, 0);
>> ++    gtk_box_pack_start ((GtkBox *) hbox,
>> ++     gtk_separator_new (GTK_ORIENTATION_VERTICAL), false, false, 0);
>> + 
>> +     for (int i = 0; i < AUD_EQ_NBANDS; i ++)
>> +     {
>> +--- src/libaudgui/file-opener.cc.old
>> ++++ src/libaudgui/
>> file-opener.cc
>> 
>> +@@ -96,9 +96,8 @@ static GtkWidget * create_filebrowser (gboolean open)
>> +     gtk_window_set_type_hint ((GtkWindow *) window, GDK_WINDOW_TYPE_HINT_DIALOG);
>> +     gtk_window_set_title ((GtkWindow *) window, window_title);
>> +     gtk_window_set_default_size ((GtkWindow *) window, 700, 450);
>> +-    gtk_container_set_border_width ((GtkContainer *) window, 10);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_container_add ((GtkContainer *) window, vbox);
>> + 
>> +     GtkWidget * chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN);
>> +@@ -108,17 +107,24 @@ static GtkWidget * create_filebrowser (gboolean open)
>> +     if (path[0])
>> +         gtk_file_chooser_set_current_folder ((GtkFileChooser *) chooser, path);
>> + 
>> +-    gtk_box_pack_start ((GtkBox *) vbox, chooser, true, true, 3);
>> ++    gtk_box_pack_start ((GtkBox *) vbox, chooser, true, true, 0);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 0);
>> +-    gtk_box_pack_end ((GtkBox *) vbox, hbox, false, false, 3);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> ++    gtk_box_pack_end ((GtkBox *) vbox, hbox, false, false, 0);
>> ++
>> ++#if GTK_CHECK_VERSION (3, 14, 0)
>> ++    gtk_container_set_border_width ((GtkContainer *) hbox, 6);
>> ++#else
>> ++    gtk_widget_set_margin_top (hbox, 12);
>> ++    gtk_container_set_border_width ((GtkContainer *) window, 12);
>> ++#endif
>> + 
>> +     GtkWidget * toggle = gtk_check_button_new_with_mnemonic (toggle_text);
>> +     gtk_toggle_button_set_active ((GtkToggleButton *) toggle, aud_get_bool ("audgui", option));
>> +     g_signal_connect (toggle, "toggled", (GCallback) toggled_cb, (void *) option);
>> +     gtk_box_pack_start ((GtkBox *) hbox, toggle, true, true, 0);
>> + 
>> +-    GtkWidget * bbox = gtk_hbutton_box_new ();
>> ++    GtkWidget * bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
>> +     gtk_button_box_set_layout ((GtkButtonBox *) bbox, GTK_BUTTONBOX_END);
>> +     gtk_box_set_spacing ((GtkBox *) bbox, 6);
>> +     gtk_box_pack_end ((GtkBox *) hbox, bbox, true, true, 0);
>> +--- src/libaudgui/infopopup.cc.old
>> ++++ src/libaudgui/
>> infopopup.cc
>> 
>> +@@ -37,9 +37,6 @@
>> + 
>> + static void infopopup_move_to_mouse (GtkWidget * infopopup);
>> + 
>> +-static const GdkColor gray = {0, 40960, 40960, 40960};
>> +-static const GdkColor white = {0, 65535, 65535, 65535};
>> +-
>> + static struct {
>> +     GtkWidget * title_header, * title_label;
>> +     GtkWidget * artist_header, * artist_label;
>> +@@ -107,56 +104,21 @@ static gboolean infopopup_progress_cb (void *)
>> +     return true;
>> + }
>> + 
>> +-static void infopopup_realized (GtkWidget * widget)
>> +-{
>> +-    GdkWindow * window = gtk_widget_get_window (widget);
>> +-    gdk_window_set_back_pixmap (window, nullptr, false);
>> +-    infopopup_move_to_mouse (widget);
>> +-}
>> +-
>> +-/* borrowed from the gtkui infoarea */
>> +-static gboolean infopopup_draw_bg (GtkWidget * widget)
>> +-{
>> +-    GtkAllocation alloc;
>> +-    gtk_widget_get_allocation (widget, & alloc);
>> +-
>> +-    cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget));
>> +-
>> +-    cairo_pattern_t * gradient = cairo_pattern_create_linear (0, 0, 0, alloc.height);
>> +-    cairo_pattern_add_color_stop_rgb (gradient, 0, 0.25, 0.25, 0.25);
>> +-    cairo_pattern_add_color_stop_rgb (gradient, 0.5, 0.15, 0.15, 0.15);
>> +-    cairo_pattern_add_color_stop_rgb (gradient, 0.5, 0.1, 0.1, 0.1);
>> +-    cairo_pattern_add_color_stop_rgb (gradient, 1, 0, 0, 0);
>> +-
>> +-    cairo_set_source (cr, gradient);
>> +-    cairo_rectangle (cr, 0, 0, alloc.width, alloc.height);
>> +-    cairo_fill (cr);
>> +-
>> +-    cairo_pattern_destroy (gradient);
>> +-    cairo_destroy (cr);
>> +-    return false;
>> +-}
>> +-
>> + static void infopopup_add_category (GtkWidget * grid, int position,
>> +  const char * text, GtkWidget * * header, GtkWidget * * label)
>> + {
>> +     * header = gtk_label_new (nullptr);
>> +     * label = gtk_label_new (nullptr);
>> + 
>> +-    gtk_misc_set_alignment ((GtkMisc *) * header, 1, 0.5);
>> +-    gtk_misc_set_alignment ((GtkMisc *) * label, 0, 0.5);
>> +-
>> +-    gtk_widget_modify_fg (* header, GTK_STATE_NORMAL, & gray);
>> +-    gtk_widget_modify_fg (* label, GTK_STATE_NORMAL, & white);
>> ++    gtk_widget_set_halign (* header, GTK_ALIGN_END);
>> ++    gtk_widget_set_halign (* label, GTK_ALIGN_START);
>> + 
>> +     char * markup = g_markup_printf_escaped ("<span style=\"italic\">%s</span>", text);
>> +     gtk_label_set_markup ((GtkLabel *) * header, markup);
>> +     g_free (markup);
>> + 
>> +-    gtk_table_attach ((GtkTable *) grid, * header, 0, 1, position, position + 1,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> +-    gtk_table_attach ((GtkTable *) grid, * label, 1, 2, position, position + 1,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach ((GtkGrid *) grid, * header, 0, position, 1, 1);
>> ++    gtk_grid_attach ((GtkGrid *) grid, * label, 1, position, 1, 1);
>> + 
>> +     gtk_widget_set_no_show_all (* header, true);
>> +     gtk_widget_set_no_show_all (* label, true);
>> +@@ -185,7 +147,7 @@ static GtkWidget * infopopup_create ()
>> +     gtk_window_set_decorated ((GtkWindow *) infopopup, false);
>> +     gtk_container_set_border_width ((GtkContainer *) infopopup, 4);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,  6);
>> +     gtk_container_add ((GtkContainer *) infopopup, hbox);
>> + 
>> +     widgets.image = gtk_image_new ();
>> +@@ -193,8 +155,8 @@ static GtkWidget * infopopup_create ()
>> +     gtk_box_pack_start ((GtkBox *) hbox, widgets.image, false, false, 0);
>> +     gtk_widget_set_no_show_all (widgets.image, true);
>> + 
>> +-    GtkWidget * grid = gtk_table_new (0, 0, false);
>> +-    gtk_table_set_col_spacings ((GtkTable *) grid, 6);
>> ++    GtkWidget * grid = gtk_grid_new ();
>> ++    gtk_grid_set_column_spacing ((GtkGrid *) grid, 6);
>> +     gtk_box_pack_start ((GtkBox *) hbox, grid, true, true, 0);
>> + 
>> +     infopopup_add_category (grid, 0, _("Title"), & widgets.title_header, & widgets.title_label);
>> +@@ -207,23 +169,15 @@ static GtkWidget * infopopup_create ()
>> + 
>> +     /* track progress */
>> +     widgets.progress = gtk_progress_bar_new ();
>> ++    gtk_widget_set_margin_top (widgets.progress, 6);
>> ++    gtk_progress_bar_set_show_text ((GtkProgressBar *) widgets.progress, true);
>> +     gtk_progress_bar_set_text ((GtkProgressBar *) widgets.progress, "");
>> +-    gtk_table_set_row_spacing ((GtkTable *) grid, 6, 4);
>> +-    gtk_table_attach ((GtkTable *) grid, widgets.progress, 0, 2, 7, 8,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach ((GtkGrid *) grid, widgets.progress, 0, 7, 2, 1);
>> + 
>> +     /* do not show the track progress */
>> +     gtk_widget_set_no_show_all (widgets.progress, true);
>> + 
>> +-    /* override background drawing */
>> +-    gtk_widget_set_app_paintable (infopopup, true);
>> +-
>> +-    GtkStyle * style = gtk_style_new ();
>> +-    gtk_widget_set_style (infopopup, style);
>> +-    g_object_unref (style);
>> +-
>> +-    g_signal_connect (infopopup, "realize", (GCallback) infopopup_realized, nullptr);
>> +-    g_signal_connect (infopopup, "expose-event", (GCallback) infopopup_draw_bg, nullptr);
>> ++    g_signal_connect (infopopup, "realize", (GCallback) infopopup_move_to_mouse, nullptr);
>> + 
>> +     return infopopup;
>> + }
>> +--- src/libaudgui/infowin.cc.old
>> ++++ src/libaudgui/
>> infowin.cc
>> 
>> +@@ -132,7 +132,7 @@ static GtkWidget * small_label_new (const char * text)
>> + 
>> +     GtkWidget * label = gtk_label_new (text);
>> +     gtk_label_set_attributes ((GtkLabel *) label, attrs);
>> +-    gtk_misc_set_alignment ((GtkMisc *) label, 0, 0.5);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_START);
>> + 
>> +     return label;
>> + }
>> +@@ -301,10 +301,11 @@ static void add_entry (GtkWidget * grid, const char * title, GtkWidget * entry,
>> + {
>> +     GtkWidget * label = small_label_new (title);
>> + 
>> +-    gtk_table_attach ((GtkTable *) grid, label, x, x + span, y, y + 1,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> +-    gtk_table_attach ((GtkTable *) grid, entry, x, x + span, y + 1, y + 2,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    if (y > 0)
>> ++        gtk_widget_set_margin_top (label, 6);
>> ++
>> ++    gtk_grid_attach ((GtkGrid *) grid, label, x, y, span, 1);
>> ++    gtk_grid_attach ((GtkGrid *) grid, entry, x, y + 1, span, 1);
>> + 
>> +     g_signal_connect (entry, "changed", (GCallback) entry_changed, nullptr);
>> + }
>> +@@ -317,44 +318,41 @@ static void create_infowin ()
>> +     gtk_window_set_type_hint ((GtkWindow *) infowin,
>> +      GDK_WINDOW_TYPE_HINT_DIALOG);
>> + 
>> +-    GtkWidget * main_grid = gtk_table_new (0, 0, false);
>> +-    gtk_table_set_col_spacings ((GtkTable *) main_grid, 6);
>> +-    gtk_table_set_row_spacings ((GtkTable *) main_grid, 6);
>> ++    GtkWidget * main_grid = gtk_grid_new ();
>> ++    gtk_grid_set_column_spacing ((GtkGrid *) main_grid, 6);
>> ++    gtk_grid_set_row_spacing ((GtkGrid *) main_grid, 6);
>> +     gtk_container_add ((GtkContainer *) infowin, main_grid);
>> + 
>> +     widgets.image = audgui_scaled_image_new (nullptr);
>> +-    gtk_table_attach_defaults ((GtkTable *) main_grid, widgets.image, 0, 1, 0, 1);
>> ++    gtk_widget_set_hexpand (widgets.image, true);
>> ++    gtk_widget_set_vexpand (widgets.image, true);
>> ++    gtk_grid_attach ((GtkGrid *) main_grid, widgets.image, 0, 0, 1, 1);
>> + 
>> +     widgets.location = gtk_label_new ("");
>> +-    gtk_widget_set_size_request (widgets.location, 200, -1);
>> ++    gtk_label_set_max_width_chars ((GtkLabel *) widgets.location, 40);
>> +     gtk_label_set_line_wrap ((GtkLabel *) widgets.location, true);
>> +     gtk_label_set_line_wrap_mode ((GtkLabel *) widgets.location, PANGO_WRAP_WORD_CHAR);
>> +     gtk_label_set_selectable ((GtkLabel *) widgets.location, true);
>> +-    gtk_table_attach ((GtkTable *) main_grid, widgets.location, 0, 1, 1, 2,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach ((GtkGrid *) main_grid, widgets.location, 0, 1, 1, 1);
>> + 
>> +-    GtkWidget * codec_grid = gtk_table_new (0, 0, false);
>> +-    gtk_table_set_row_spacings ((GtkTable *) codec_grid, 2);
>> +-    gtk_table_set_col_spacings ((GtkTable *) codec_grid, 12);
>> +-    gtk_table_attach ((GtkTable *) main_grid, codec_grid, 0, 1, 2, 3,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    GtkWidget * codec_grid = gtk_grid_new ();
>> ++    gtk_grid_set_row_spacing ((GtkGrid *) codec_grid, 3);
>> ++    gtk_grid_set_column_spacing ((GtkGrid *) codec_grid, 12);
>> ++    gtk_grid_attach ((GtkGrid *) main_grid, codec_grid, 0, 2, 1, 1);
>> + 
>> +     for (int row = 0; row < CODEC_ITEMS; row ++)
>> +     {
>> +         GtkWidget * label = small_label_new (_(codec_labels[row]));
>> +-        gtk_table_attach ((GtkTable *) codec_grid, label, 0, 1, row, row + 1,
>> +-         GTK_FILL, GTK_FILL, 0, 0);
>> ++        gtk_grid_attach ((GtkGrid *) codec_grid, label, 0, row, 1, 1);
>> + 
>> +         widgets.codec[row] = small_label_new (nullptr);
>> +-        gtk_table_attach ((GtkTable *) codec_grid, widgets.codec[row], 1, 2, row, row + 1,
>> +-         GTK_FILL, GTK_FILL, 0, 0);
>> ++        gtk_grid_attach ((GtkGrid *) codec_grid, widgets.codec[row], 1, row, 1, 1);
>> +     }
>> + 
>> +-    GtkWidget * grid = gtk_table_new (0, 0, false);
>> +-    gtk_table_set_row_spacings ((GtkTable *) grid, 2);
>> +-    gtk_table_set_col_spacings ((GtkTable *) grid, 6);
>> +-    gtk_table_attach ((GtkTable *) main_grid, grid, 1, 2, 0, 3,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    GtkWidget * grid = gtk_grid_new ();
>> ++    gtk_grid_set_column_homogeneous ((GtkGrid *) grid, true);
>> ++    gtk_grid_set_column_spacing ((GtkGrid *) grid, 6);
>> ++    gtk_grid_attach ((GtkGrid *) main_grid, grid, 1, 0, 1, 3);
>> + 
>> +     widgets.title = gtk_entry_new ();
>> +     add_entry (grid, _("Title"), widgets.title, 0, 0, 2);
>> +@@ -381,9 +379,8 @@ static void create_infowin ()
>> +     widgets.track = gtk_entry_new ();
>> +     add_entry (grid, _("Track Number"), widgets.track, 1, 12, 1);
>> + 
>> +-    GtkWidget * bottom_hbox = gtk_hbox_new (false, 6);
>> +-    gtk_table_attach ((GtkTable *) main_grid, bottom_hbox, 0, 2, 3, 4,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    GtkWidget * bottom_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> ++    gtk_grid_attach ((GtkGrid *) main_grid, bottom_hbox, 0, 3, 2, 1);
>> + 
>> +     widgets.clear = gtk_check_button_new_with_mnemonic
>> +      (_("Clea_r fields when moving to next song"));
>> +--- src/libaudgui/jump-to-track.cc.old
>> ++++ src/libaudgui/
>> jump-to-track.cc
>> 
>> +@@ -31,6 +31,10 @@
>> + #include "list.h"
>> + #include "jump-to-track-cache.h"
>> + 
>> ++#if GTK_CHECK_VERSION (3, 12, 0)
>> ++#define gtk_widget_set_margin_left gtk_widget_set_margin_start
>> ++#endif
>> ++
>> + static void update_cb (void * data, void *);
>> + static void activate_cb (void * data, void *);
>> + 
>> +@@ -243,7 +247,7 @@ static GtkWidget * create_window ()
>> +     gtk_container_set_border_width ((GtkContainer *) jump_to_track_win, 10);
>> +     gtk_window_set_default_size ((GtkWindow *) jump_to_track_win, 600, 500);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
>> +     gtk_container_add ((GtkContainer *) jump_to_track_win, vbox);
>> + 
>> +     treeview = audgui_list_new (& callbacks, nullptr, 0);
>> +@@ -256,7 +260,7 @@ static GtkWidget * create_window ()
>> +      "changed", (GCallback) selection_changed, nullptr);
>> +     g_signal_connect (treeview, "row-activated", (GCallback) do_jump, nullptr);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hbox, false, false, 3);
>> + 
>> +     /* filter box */
>> +@@ -280,17 +284,14 @@ static GtkWidget * create_window ()
>> +     gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scrollwin, GTK_SHADOW_IN);
>> +     gtk_box_pack_start ((GtkBox *) vbox, scrollwin, true, true, 0);
>> + 
>> +-    GtkWidget * hbox2 = gtk_hbox_new (false, 0);
>> ++    GtkWidget * hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> +     gtk_box_pack_end ((GtkBox *) vbox, hbox2, false, false, 0);
>> + 
>> +-    GtkWidget * bbox = gtk_hbutton_box_new ();
>> ++    GtkWidget * bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
>> +     gtk_button_box_set_layout ((GtkButtonBox *) bbox, GTK_BUTTONBOX_END);
>> ++    gtk_widget_set_margin_left (bbox, 6);
>> +     gtk_box_set_spacing ((GtkBox *) bbox, 6);
>> +-
>> +-    GtkWidget * alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
>> +-    gtk_alignment_set_padding ((GtkAlignment *) alignment, 0, 0, 6, 0);
>> +-    gtk_container_add ((GtkContainer *) alignment, bbox);
>> +-    gtk_box_pack_end ((GtkBox *) hbox2, alignment, true, true, 0);
>> ++    gtk_box_pack_end ((GtkBox *) hbox2, bbox, true, true, 0);
>> + 
>> +     /* close dialog toggle */
>> +     GtkWidget * toggle = gtk_check_button_new_with_mnemonic (_("C_lose on jump"));
>> +--- src/libaudgui/list.cc.old
>> ++++ src/libaudgui/
>> list.cc
>> 
>> +@@ -386,7 +386,7 @@ static gboolean autoscroll (GtkWidget * widget)
>> +     ListModel * model = (ListModel *) gtk_tree_view_get_model
>> +      ((GtkTreeView *) widget);
>> + 
>> +-    GtkAdjustment * adj = gtk_tree_view_get_vadjustment ((GtkTreeView *) widget);
>> ++    GtkAdjustment * adj = gtk_scrollable_get_vadjustment ((GtkScrollable *) widget);
>> +     if (! adj)
>> +     {
>> +         stop_autoscroll (model);
>> +@@ -458,7 +458,7 @@ static gboolean drag_motion (GtkWidget * widget, GdkDragContext * context,
>> + 
>> +     int height;
>> +     gdk_window_get_geometry (gtk_tree_view_get_bin_window ((GtkTreeView *)
>> +-     widget), nullptr, nullptr, nullptr, & height, nullptr);
>> ++     widget), nullptr, nullptr, nullptr, & height);
>> +     gtk_tree_view_convert_widget_to_bin_window_coords ((GtkTreeView *) widget,
>> +      x, y, & x, & y);
>> + 
>> +@@ -534,6 +534,10 @@ static void drag_data_received (GtkWidget * widget, GdkDragContext * context, in
>> + 
>> + static void destroy_cb (GtkWidget * list, ListModel * model)
>> + {
>> ++    /* workaround for Gnome bug #679291 */
>> ++    g_signal_handlers_disconnect_matched (list, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
>> ++     NULL, model);
>> ++
>> +     stop_autoscroll (model);
>> +     g_list_free (model->column_types);
>> +     g_object_unref (model);
>> +--- src/libaudgui/menu.cc.old
>> ++++ src/libaudgui/
>> menu.cc
>> 
>> +@@ -23,6 +23,10 @@
>> + #include <libaudcore/i18n.h>
>> + #include <libaudcore/runtime.h>
>> + 
>> ++/* we still use GtkImageMenuItem until there is a good alternative */
>> ++#pragma GCC diagnostic push
>> ++#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> ++
>> + static GtkWidget * image_menu_item_new (const char * text, const char * icon)
>> + {
>> +     GtkWidget * widget = gtk_image_menu_item_new_with_mnemonic (text);
>> +@@ -36,6 +40,8 @@ static GtkWidget * image_menu_item_new (const char * text, const char * icon)
>> +     return widget;
>> + }
>> + 
>> ++#pragma GCC diagnostic pop
>> ++
>> + static void toggled_cb (GtkCheckMenuItem * check, const AudguiMenuItem * item)
>> + {
>> +     gboolean on = gtk_check_menu_item_get_active (check);
>> +--- src/libaudgui/plugin-prefs.cc.old
>> ++++ src/libaudgui/
>> plugin-prefs.cc
>> 
>> +@@ -168,7 +168,7 @@ EXPORT void audgui_show_plugin_prefs (PluginHandle * plugin)
>> +     }
>> + 
>> +     GtkWidget * content = gtk_dialog_get_content_area ((GtkDialog *) window);
>> +-    GtkWidget * box = gtk_vbox_new (false, 0);
>> ++    GtkWidget * box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     audgui_create_widgets_with_domain (box, p->widgets, header->info.domain);
>> +     gtk_box_pack_start ((GtkBox *) content, box, true, true, 0);
>> + 
>> +--- src/libaudgui/plugin-view.cc.old
>> ++++ src/libaudgui/
>> plugin-view.cc
>> 
>> +@@ -214,7 +214,7 @@ static void button_destroy (GtkWidget * b)
>> + 
>> + GtkWidget * plugin_view_new (PluginType type)
>> + {
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_container_set_border_width ((GtkContainer *) vbox, 6);
>> + 
>> +     GtkWidget * scrolled = gtk_scrolled_window_new (nullptr, nullptr);
>> +@@ -229,7 +229,7 @@ GtkWidget * plugin_view_new (PluginType type)
>> +     g_signal_connect (tree, "realize", (GCallback) list_fill, aud::to_ptr (type));
>> +     g_signal_connect (tree, "destroy", (GCallback) list_destroy, nullptr);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,  6);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hbox, false, false, 0);
>> + 
>> +     GtkWidget * config = audgui_button_new (_("_Settings"), "preferences-system", do_config, tree);
>> +--- src/libaudgui/prefs-widget.cc.old
>> ++++ src/libaudgui/
>> prefs-widget.cc
>> 
>> +@@ -28,6 +28,10 @@
>> + 
>> + #include "libaudgui-gtk.h"
>> + 
>> ++#if GTK_CHECK_VERSION (3, 12, 0)
>> ++#define gtk_widget_set_margin_left gtk_widget_set_margin_start
>> ++#endif
>> ++
>> + static void widget_changed (GtkWidget * widget, const PreferencesWidget * w)
>> + {
>> +     switch (w->type)
>> +@@ -181,7 +185,7 @@ static void create_label (const PreferencesWidget * widget, GtkWidget * * label,
>> +     * label = gtk_label_new_with_mnemonic (dgettext (domain, widget->label));
>> +     gtk_label_set_use_markup ((GtkLabel *) * label, true);
>> +     gtk_label_set_line_wrap ((GtkLabel *) * label, true);
>> +-    gtk_misc_set_alignment ((GtkMisc *) * label, 0, 0.5);
>> ++    gtk_widget_set_halign (* label, GTK_ALIGN_START);
>> + }
>> + 
>> + /* WIDGET_SPIN_BTN */
>> +@@ -206,13 +210,15 @@ void create_font_btn (const PreferencesWidget * widget, GtkWidget * * label,
>> +  GtkWidget * * font_btn, const char * domain)
>> + {
>> +     * font_btn = gtk_font_button_new ();
>> ++    gtk_widget_set_hexpand (* font_btn, true);
>> ++
>> +     gtk_font_button_set_use_font ((GtkFontButton *) * font_btn, true);
>> +     gtk_font_button_set_use_size ((GtkFontButton *) * font_btn, true);
>> + 
>> +     if (widget->label)
>> +     {
>> +         * label = gtk_label_new (dgettext (domain, widget->label));
>> +-        gtk_misc_set_alignment ((GtkMisc *) * label, 1, 0.5);
>> ++        gtk_widget_set_halign (* label, GTK_ALIGN_END);
>> +     }
>> + 
>> +     if (widget->data.font_btn.title)
>> +@@ -228,12 +234,13 @@ static void create_entry (const PreferencesWidget * widget, GtkWidget * * label,
>> +  GtkWidget * * entry, const char * domain)
>> + {
>> +     * entry = gtk_entry_new ();
>> ++    gtk_widget_set_hexpand (* entry, true);
>> +     gtk_entry_set_visibility ((GtkEntry *) * entry, ! widget->data.entry.password);
>> + 
>> +     if (widget->label)
>> +     {
>> +         * label = gtk_label_new (dgettext (domain, widget->label));
>> +-        gtk_misc_set_alignment ((GtkMisc *) * label, 1, 0.5);
>> ++        gtk_widget_set_halign (* label, GTK_ALIGN_END);
>> +     }
>> + 
>> +     widget_init (* entry, widget);
>> +@@ -251,8 +258,7 @@ static void combobox_update (GtkWidget * combobox, const PreferencesWidget * wid
>> + 
>> +     g_object_set_data ((GObject *) combobox, "comboitems", (void *) items.data);
>> + 
>> +-    /* no gtk_combo_box_text_clear()? */
>> +-    gtk_list_store_clear ((GtkListStore *) gtk_combo_box_get_model ((GtkComboBox *) combobox));
>> ++    gtk_combo_box_text_remove_all ((GtkComboBoxText *) combobox);
>> + 
>> +     for (const ComboItem & item : items)
>> +         gtk_combo_box_text_append_text ((GtkComboBoxText *) combobox,
>> +@@ -306,7 +312,6 @@ static void fill_table (GtkWidget * table,
>> +     for (const PreferencesWidget & w : widgets)
>> +     {
>> +         GtkWidget * widget_left = nullptr, * widget_middle = nullptr, * widget_right = nullptr;
>> +-        GtkAttachOptions middle_policy = (GtkAttachOptions) (GTK_FILL);
>> + 
>> +         switch (w.type)
>> +         {
>> +@@ -321,17 +326,14 @@ static void fill_table (GtkWidget * table,
>> + 
>> +             case PreferencesWidget::FontButton:
>> +                 create_font_btn (& w, & widget_left, & widget_middle, domain);
>> +-                middle_policy = (GtkAttachOptions) (GTK_EXPAND | GTK_FILL);
>> +                 break;
>> + 
>> +             case PreferencesWidget::Entry:
>> +                 create_entry (& w, & widget_left, & widget_middle, domain);
>> +-                middle_policy = (GtkAttachOptions) (GTK_EXPAND | GTK_FILL);
>> +                 break;
>> + 
>> +             case PreferencesWidget::ComboBox:
>> +                 create_cbox (& w, & widget_left, & widget_middle, domain);
>> +-                middle_policy = (GtkAttachOptions) (GTK_EXPAND | GTK_FILL);
>> +                 break;
>> + 
>> +             default:
>> +@@ -341,16 +343,13 @@ static void fill_table (GtkWidget * table,
>> +         int i = & w - widgets.data;
>> + 
>> +         if (widget_left)
>> +-            gtk_table_attach ((GtkTable *) table, widget_left, 0, 1, i, i + 1,
>> +-             GTK_FILL, GTK_FILL, 0, 0);
>> ++            gtk_grid_attach ((GtkGrid *) table, widget_left, 0, i, 1, 1);
>> + 
>> +         if (widget_middle)
>> +-            gtk_table_attach ((GtkTable *) table, widget_middle, 1, 2, i, i + 1,
>> +-             middle_policy, GTK_FILL, 0, 0);
>> ++            gtk_grid_attach ((GtkGrid *) table, widget_middle, 1, i, 1, 1);
>> + 
>> +         if (widget_right)
>> +-            gtk_table_attach ((GtkTable *) table, widget_right, 2, 3, i, i + 1,
>> +-             GTK_FILL, GTK_FILL, 0, 0);
>> ++            gtk_grid_attach ((GtkGrid *) table, widget_right, 2, i, 1, 1);
>> +     }
>> + }
>> + 
>> +@@ -371,13 +370,11 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> +         {
>> +             if (! child_box)
>> +             {
>> +-                child_box = gtk_vbox_new (false, 0);
>> ++                child_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +                 g_object_set_data ((GObject *) widget, "child", child_box);
>> + 
>> +-                GtkWidget * alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
>> +-                gtk_box_pack_start ((GtkBox *) box, alignment, false, false, 0);
>> +-                gtk_alignment_set_padding ((GtkAlignment *) alignment, 0, 0, 12, 0);
>> +-                gtk_container_add ((GtkContainer *) alignment, child_box);
>> ++                gtk_widget_set_margin_left (child_box, 12);
>> ++                gtk_box_pack_start ((GtkBox *) box, child_box, false, false, 0);
>> + 
>> +                 if (GTK_IS_TOGGLE_BUTTON (widget))
>> +                     gtk_widget_set_sensitive (child_box,
>> +@@ -387,15 +384,13 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> +         else
>> +             child_box = nullptr;
>> + 
>> +-        GtkWidget * alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
>> +-        gtk_alignment_set_padding ((GtkAlignment *) alignment, 6, 0, 12, 0);
>> +-        gtk_box_pack_start ((GtkBox *) (child_box ? child_box : box), alignment, false, false, 0);
>> +-
>> +         widget = nullptr;
>> + 
>> +         if (radio_btn_group && w.type != PreferencesWidget::RadioButton)
>> +             radio_btn_group = nullptr;
>> + 
>> ++        int pad_left = 12, pad_top = 6;
>> ++
>> +         switch (w.type)
>> +         {
>> +             case PreferencesWidget::Button:
>> +@@ -410,22 +405,24 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> + 
>> +             case PreferencesWidget::Label:
>> +             {
>> +-                if (strstr (w.label, "<b>"))
>> +-                    gtk_alignment_set_padding ((GtkAlignment *) alignment,
>> +-                     (& w == widgets.data) ? 0 : 12, 0, 0, 0);
>> +-
>> +                 GtkWidget * icon = nullptr;
>> +                 create_label (& w, & label, & icon, domain);
>> + 
>> +                 if (icon)
>> +                 {
>> +-                    widget = gtk_hbox_new (false, 6);
>> ++                    widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +                     gtk_box_pack_start ((GtkBox *) widget, icon, false, false, 0);
>> +                     gtk_box_pack_start ((GtkBox *) widget, label, false, false, 0);
>> +                 }
>> +                 else
>> +                     widget = label;
>> + 
>> ++                if (strstr (w.label, "<b>"))
>> ++                {
>> ++                    pad_left = 0;
>> ++                    pad_top = (& w == widgets.data) ? 0 : 12;
>> ++                }
>> ++
>> +                 break;
>> +             }
>> + 
>> +@@ -438,7 +435,7 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> + 
>> +             case PreferencesWidget::SpinButton:
>> +             {
>> +-                widget = gtk_hbox_new (false, 6);
>> ++                widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> + 
>> +                 GtkWidget * label_pre = nullptr, * spin_btn = nullptr, * label_past = nullptr;
>> +                 create_spin_button (& w, & label_pre, & spin_btn, & label_past, domain);
>> +@@ -461,7 +458,7 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> + 
>> +             case PreferencesWidget::FontButton:
>> +             {
>> +-                widget = gtk_hbox_new (false, 6);
>> ++                widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> + 
>> +                 GtkWidget * font_btn = nullptr;
>> +                 create_font_btn (& w, & label, & font_btn, domain);
>> +@@ -475,9 +472,9 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> +             }
>> + 
>> +             case PreferencesWidget::Table:
>> +-                widget = gtk_table_new (0, 0, false);
>> +-                gtk_table_set_col_spacings ((GtkTable *) widget, 6);
>> +-                gtk_table_set_row_spacings ((GtkTable *) widget, 6);
>> ++                widget = gtk_grid_new ();
>> ++                gtk_grid_set_column_spacing ((GtkGrid *) widget, 6);
>> ++                gtk_grid_set_row_spacing ((GtkGrid *) widget, 6);
>> + 
>> +                 fill_table (widget, w.data.table.widgets, domain);
>> + 
>> +@@ -485,7 +482,7 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> + 
>> +             case PreferencesWidget::Entry:
>> +             {
>> +-                widget = gtk_hbox_new (false, 6);
>> ++                widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> + 
>> +                 GtkWidget * entry = nullptr;
>> +                 create_entry (& w, & label, & entry, domain);
>> +@@ -500,7 +497,7 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> + 
>> +             case PreferencesWidget::ComboBox:
>> +             {
>> +-                widget = gtk_hbox_new (false, 6);
>> ++                widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> + 
>> +                 GtkWidget * combo = nullptr;
>> +                 create_cbox (& w, & label, & combo, domain);
>> +@@ -515,9 +512,9 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> + 
>> +             case PreferencesWidget::Box:
>> +                 if (w.data.box.horizontal)
>> +-                    widget = gtk_hbox_new (false, 6);
>> ++                    widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +                 else
>> +-                    widget = gtk_vbox_new (false, 0);
>> ++                    widget = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> + 
>> +                 audgui_create_widgets_with_domain (widget, w.data.box.widgets, domain);
>> + 
>> +@@ -531,13 +528,11 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> +                 break;
>> + 
>> +             case PreferencesWidget::Notebook:
>> +-                gtk_alignment_set_padding ((GtkAlignment *) alignment, 0, 0, 0, 0);
>> +-
>> +                 widget = gtk_notebook_new ();
>> + 
>> +                 for (const NotebookTab & tab : w.data.notebook.tabs)
>> +                 {
>> +-                    GtkWidget * vbox = gtk_vbox_new (false, 0);
>> ++                    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +                     gtk_container_set_border_width ((GtkContainer *) vbox, 6);
>> + 
>> +                     audgui_create_widgets_with_domain (vbox, tab.widgets, domain);
>> +@@ -546,11 +541,13 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> +                      gtk_label_new (dgettext (domain, tab.name)));
>> +                 }
>> + 
>> ++                pad_top = 0;
>> ++
>> +                 break;
>> + 
>> +             case PreferencesWidget::Separator:
>> +-                widget = w.data.separator.horizontal ?
>> +-                 gtk_hseparator_new () : gtk_vseparator_new ();
>> ++                widget = gtk_separator_new (w.data.separator.horizontal
>> ++                 ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL);
>> +                 break;
>> + 
>> +             default:
>> +@@ -560,11 +557,14 @@ void audgui_create_widgets_with_domain (GtkWidget * box,
>> +         if (widget)
>> +         {
>> +             /* use uniform spacing for horizontal boxes */
>> +-            if (gtk_orientable_get_orientation ((GtkOrientable *) box) ==
>> ++            if (gtk_orientable_get_orientation ((GtkOrientable *) box) !=
>> +              GTK_ORIENTATION_HORIZONTAL)
>> +-                gtk_alignment_set_padding ((GtkAlignment *) alignment, 0, 0, 0, 0);
>> ++            {
>> ++                gtk_widget_set_margin_left (widget, pad_left);
>> ++                gtk_widget_set_margin_top (widget, pad_top);
>> ++            }
>> + 
>> +-            gtk_container_add ((GtkContainer *) alignment, widget);
>> ++            gtk_box_pack_start ((GtkBox *) (child_box ? child_box : box), widget, false, false, 0);
>> +         }
>> +     }
>> + }
>> +--- src/libaudgui/prefs-window.cc.old
>> ++++ src/libaudgui/
>> prefs-window.cc
>> 
>> +@@ -498,29 +498,32 @@ static void create_titlestring_widgets (GtkWidget * * cbox, GtkWidget * * entry)
>> + 
>> + static void * create_titlestring_table ()
>> + {
>> +-    GtkWidget * grid = gtk_table_new (0, 0, false);
>> +-    gtk_table_set_row_spacings ((GtkTable *) grid, 6);
>> +-    gtk_table_set_col_spacings ((GtkTable *) grid, 6);
>> ++    GtkWidget * grid = gtk_grid_new ();
>> ++    gtk_grid_set_row_spacing ((GtkGrid *) grid, 4);
>> ++    gtk_grid_set_column_spacing ((GtkGrid *) grid, 12);
>> + 
>> +     GtkWidget * label = gtk_label_new (_("Title format:"));
>> +-    gtk_misc_set_alignment ((GtkMisc *) label, 1, 0.5);
>> +-    gtk_table_attach ((GtkTable *) grid, label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach ((GtkGrid *) grid, label, 0, 0, 1, 1);
>> ++    gtk_label_set_justify ((GtkLabel *) label, GTK_JUSTIFY_RIGHT);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_END);
>> + 
>> +     label = gtk_label_new (_("Custom string:"));
>> +-    gtk_misc_set_alignment ((GtkMisc *) label, 1, 0.5);
>> +-    gtk_table_attach ((GtkTable *) grid, label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach ((GtkGrid *) grid, label, 0, 1, 1, 1);
>> ++    gtk_label_set_justify ((GtkLabel *) label, GTK_JUSTIFY_RIGHT);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_END);
>> + 
>> +     GtkWidget * titlestring_cbox;
>> +     create_titlestring_widgets (& titlestring_cbox, & titlestring_entry);
>> +-    gtk_table_attach_defaults ((GtkTable *) grid, titlestring_cbox, 1, 2, 0, 1);
>> +-    gtk_table_attach_defaults ((GtkTable *) grid, titlestring_entry, 1, 2, 1, 2);
>> ++    gtk_widget_set_hexpand (titlestring_cbox, true);
>> ++    gtk_widget_set_hexpand (titlestring_entry, true);
>> ++    gtk_grid_attach ((GtkGrid *) grid, titlestring_cbox, 1, 0, 1, 1);
>> ++    gtk_grid_attach ((GtkGrid *) grid, titlestring_entry, 1, 1, 1, 1);
>> + 
>> +     GtkWidget * titlestring_help_button = gtk_button_new ();
>> +     gtk_widget_set_can_focus (titlestring_help_button, false);
>> +     gtk_button_set_focus_on_click ((GtkButton *) titlestring_help_button, false);
>> +     gtk_button_set_relief ((GtkButton *) titlestring_help_button, GTK_RELIEF_HALF);
>> +-    gtk_table_attach ((GtkTable *) grid, titlestring_help_button, 2, 3, 1, 2,
>> +-     GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach ((GtkGrid *) grid, titlestring_help_button, 2, 1, 1, 1);
>> + 
>> +     GtkWidget * titlestring_tag_menu = create_titlestring_tag_menu ();
>> + 
>> +@@ -535,14 +538,14 @@ static void * create_titlestring_table ()
>> + 
>> + static void create_playlist_category ()
>> + {
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_container_add ((GtkContainer *) category_notebook, vbox);
>> +     audgui_create_widgets (vbox, playlist_page_widgets);
>> + }
>> + 
>> + static void create_song_info_category ()
>> + {
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_container_add ((GtkContainer *) category_notebook, vbox);
>> +     audgui_create_widgets (vbox, song_info_page_widgets);
>> + }
>> +@@ -593,14 +596,14 @@ static ArrayRef<ComboItem> iface_combo_fill ()
>> + 
>> + static void * iface_create_prefs_box ()
>> + {
>> +-    iface_prefs_box = gtk_vbox_new (false, 0);
>> ++    iface_prefs_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     iface_fill_prefs_box ();
>> +     return iface_prefs_box;
>> + }
>> + 
>> + static void create_appearance_category ()
>> + {
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_container_add ((GtkContainer *) category_notebook, vbox);
>> +     audgui_create_widgets (vbox, appearance_page_widgets);
>> + }
>> +@@ -666,17 +669,17 @@ static void * output_create_about_button ()
>> + 
>> + static void create_audio_category ()
>> + {
>> +-    GtkWidget * audio_page_vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * audio_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     audgui_create_widgets (audio_page_vbox, audio_page_widgets);
>> +     gtk_container_add ((GtkContainer *) category_notebook, audio_page_vbox);
>> + }
>> + 
>> + static void create_connectivity_category ()
>> + {
>> +-    GtkWidget * connectivity_page_vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * connectivity_page_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_container_add ((GtkContainer *) category_notebook, connectivity_page_vbox);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_box_pack_start ((GtkBox *) connectivity_page_vbox, vbox, true, true, 0);
>> + 
>> +     audgui_create_widgets (vbox, connectivity_page_widgets);
>> +@@ -711,10 +714,10 @@ static void create_prefs_window ()
>> +     gtk_window_set_title ((GtkWindow *) prefswin, _("Audacious Settings"));
>> +     gtk_window_set_default_size ((GtkWindow *) prefswin, 680, 400);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 0);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_container_add ((GtkContainer *) prefswin, vbox);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,  8);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hbox, true, true, 0);
>> + 
>> +     GtkWidget * scrolledwindow = gtk_scrolled_window_new (nullptr, nullptr);
>> +@@ -744,17 +747,17 @@ static void create_prefs_window ()
>> +     create_song_info_category ();
>> +     create_plugin_category ();
>> + 
>> +-    GtkWidget * hseparator = gtk_hseparator_new ();
>> ++    GtkWidget * hseparator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hseparator, false, false, 6);
>> + 
>> +-    hbox = gtk_hbox_new (false, 0);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,  0);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hbox, false, false, 0);
>> + 
>> +     GtkWidget * audversionlabel = gtk_label_new (aud_version_string);
>> +     gtk_box_pack_start ((GtkBox *) hbox, audversionlabel, false, false, 0);
>> +     gtk_label_set_use_markup ((GtkLabel *) audversionlabel, true);
>> + 
>> +-    GtkWidget * prefswin_button_box = gtk_hbutton_box_new ();
>> ++    GtkWidget * prefswin_button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
>> +     gtk_box_pack_start ((GtkBox *) hbox, prefswin_button_box, true, true, 0);
>> +     gtk_button_box_set_layout ((GtkButtonBox *) prefswin_button_box, GTK_BUTTONBOX_END);
>> +     gtk_box_set_spacing ((GtkBox *) prefswin_button_box, 6);
>> +--- src/libaudgui/scaled-image.cc.old
>> ++++ src/libaudgui/
>> scaled-image.cc
>> 
>> +@@ -59,7 +59,7 @@ static GdkPixbuf * get_scaled (GtkWidget * widget, int maxwidth, int maxheight)
>> +     return scaled;
>> + }
>> + 
>> +-static int expose_cb (GtkWidget * widget, GdkEventExpose * event)
>> ++static gboolean draw_cb (GtkWidget * widget, GdkEventExpose * event)
>> + {
>> +     GdkRectangle rect;
>> +     gtk_widget_get_allocation (widget, & rect);
>> +@@ -107,7 +107,7 @@ EXPORT GtkWidget * audgui_scaled_image_new (GdkPixbuf * pixbuf)
>> + {
>> +     GtkWidget * widget = gtk_drawing_area_new ();
>> + 
>> +-    g_signal_connect (widget, "expose-event", (GCallback) expose_cb, nullptr);
>> ++    g_signal_connect (widget, "draw", (GCallback) draw_cb, nullptr);
>> +     g_signal_connect (widget, "destroy", (GCallback) destroy_cb, nullptr);
>> + 
>> +     audgui_scaled_image_set (widget, pixbuf);
>> +--- src/libaudgui/status.cc.old
>> ++++ src/libaudgui/
>> status.cc
>> 
>> +@@ -37,7 +37,7 @@ static void create_progress_window ()
>> +     gtk_window_set_resizable ((GtkWindow *) progress_window, false);
>> +     gtk_container_set_border_width ((GtkContainer *) progress_window, 6);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_container_add ((GtkContainer *) progress_window, vbox);
>> + 
>> +     progress_label = gtk_label_new (nullptr);
>> +--- src/libaudgui/util.cc.old
>> ++++ src/libaudgui/
>> util.cc
>> 
>> +@@ -46,12 +46,27 @@ EXPORT int audgui_get_digit_width (GtkWidget * widget)
>> + 
>> + EXPORT void audgui_get_mouse_coords (GtkWidget * widget, int * x, int * y)
>> + {
>> +-    gtk_widget_get_pointer (widget, x, y);
>> ++    int xwin, ywin;
>> ++    GdkRectangle alloc;
>> ++
>> ++    GdkWindow * window = gtk_widget_get_window (widget);
>> ++    GdkDisplay * display = gdk_window_get_display (window);
>> ++    GdkDeviceManager * manager = gdk_display_get_device_manager (display);
>> ++    GdkDevice * device = gdk_device_manager_get_client_pointer (manager);
>> ++
>> ++    gdk_window_get_device_position (window, device, & xwin, & ywin, nullptr);
>> ++    gtk_widget_get_allocation (widget, & alloc);
>> ++
>> ++    * x = xwin - alloc.x;
>> ++    * y = ywin - alloc.y;
>> + }
>> + 
>> + EXPORT void audgui_get_mouse_coords (GdkScreen * screen, int * x, int * y)
>> + {
>> +-    gdk_display_get_pointer (gdk_screen_get_display (screen), nullptr, x, y, nullptr);
>> ++    GdkDisplay * display = gdk_screen_get_display (screen);
>> ++    GdkDeviceManager * manager = gdk_display_get_device_manager (display);
>> ++    GdkDevice * device = gdk_device_manager_get_client_pointer (manager);
>> ++    gdk_device_get_position (device, nullptr, x, y);
>> + }
>> + 
>> + EXPORT void audgui_get_monitor_geometry (GdkScreen * screen, int x, int y, GdkRectangle * geom)
>> +@@ -105,6 +120,22 @@ EXPORT GtkWidget * audgui_button_new (const char * text, const char * icon,
>> +     return button;
>> + }
>> + 
>> ++static const char * icon_for_message_type (GtkMessageType type)
>> ++{
>> ++    switch (type)
>> ++    {
>> ++        case GTK_MESSAGE_INFO: return "dialog-information";
>> ++        case GTK_MESSAGE_WARNING: return "dialog-warning";
>> ++        case GTK_MESSAGE_QUESTION: return "dialog-question";
>> ++        case GTK_MESSAGE_ERROR: return "dialog-error";
>> ++        default: return nullptr;
>> ++    }
>> ++}
>> ++
>> ++/* style choices should not be enforced by deprecating API functions */
>> ++#pragma GCC diagnostic push
>> ++#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> ++
>> + EXPORT GtkWidget * audgui_dialog_new (GtkMessageType type, const char * title,
>> +  const char * text, GtkWidget * button1, GtkWidget * button2)
>> + {
>> +@@ -112,6 +143,13 @@ EXPORT GtkWidget * audgui_dialog_new (GtkMessageType type, const char * title,
>> +      GTK_BUTTONS_NONE, "%s", text);
>> +     gtk_window_set_title ((GtkWindow *) dialog, title);
>> + 
>> ++    const char * icon = icon_for_message_type (type);
>> ++    if (icon)
>> ++    {
>> ++        GtkWidget * image = gtk_image_new_from_icon_name (icon, GTK_ICON_SIZE_DIALOG);
>> ++        gtk_message_dialog_set_image ((GtkMessageDialog *) dialog, image);
>> ++    }
>> ++
>> +     if (button2)
>> +     {
>> +         gtk_dialog_add_action_widget ((GtkDialog *) dialog, button2, GTK_RESPONSE_NONE);
>> +@@ -127,6 +165,8 @@ EXPORT GtkWidget * audgui_dialog_new (GtkMessageType type, const char * title,
>> +     return dialog;
>> + }
>> + 
>> ++#pragma GCC diagnostic pop
>> ++
>> + EXPORT void audgui_dialog_add_widget (GtkWidget * dialog, GtkWidget * widget)
>> + {
>> +     GtkWidget * box = gtk_message_dialog_get_message_area ((GtkMessageDialog *) dialog);
>> 
>> Modified: trunk/dports/multimedia/audacious-plugins/Portfile (135030 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-plugins/Portfile	2015-04-13 16:07:33 UTC (rev 135030)
>> +++ trunk/dports/multimedia/audacious-plugins/Portfile	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -3,12 +3,13 @@
>> 
>> 
>> 
>> PortSystem          1.0
>> 
>> PortGroup           conflicts_build 1.0
>> 
>> +PortGroup           compiler_blacklist_versions 1.0
>> 
>> 
>> 
>> name                audacious-plugins
>> 
>> 
>> 
>> # Please keep audacious, audacious-core and audacious-plugins synchronized.
>> 
>> -version             3.5.2
>> -revision            3
>> 
>> +version             3.6.1
>> +revision            0
>> 
>> 
>> 
>> # FIXME: probably more licenses involved here...
>> 
>> license             BSD GPL-2+
>> 
>> @@ -27,13 +28,15 @@
>> 
>> 
>> 
>> master_sites        http://distfiles.audacious-media-player.org
>> use_bzip2           yes
>> 
>> -checksums           rmd160  2cf98e4fbf0e778672d509cd486274a8f7e4f10d \
>> -                    sha256  179600d7f8ae31a7d9c5785ce6fa7e09184dbd1271e0adb8c57760432c6a4cd9
>> 
>> +checksums           rmd160  68d302c3cb9d1dce98fa801e6ed220fa48e17e03 \
>> +                    sha256  0ae17d573dd094b3124e0bbec0c059c4ca668436830c922eb00f0b7eb9745195
>> 
>> 
>> 
>> +universal_variant   no
>> +
>> 
>> conflicts_build     ${name}
>> 
>> 
>> 
>> patchfiles          patch-buildsys.diff \
>> 
>> -                    patch-configure.ac-select-libsdl.diff
>> 
>> +                    patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff
>> 
>> 
>> 
>> depends_build       path:bin/pkg-config:pkgconfig \
>> 
>>                     path:bin/aclocal:automake \
>> 
>> @@ -43,29 +46,33 @@
>> 
>>                     port:gettext\
>> 
>>                     port:libxml2 \
>> 
>>                     path:lib/pkgconfig/glib-2.0.pc:glib2 \
>> 
>> -                    path:lib/pkgconfig/gtk-3.0.pc:gtk3 \
>> -                    path:lib/pkgconfig/gdk-x11-3.0.pc:gtk3 \
>> 
>>                     port:neon
>> 
>> 
>> 
>> depends_run         port:unzip
>> 
>> 
>> 
>> # Note: rpath is required on Mac OS X.
>> 
>> #       sdlout is the only working audio output plugin at the moment on OS X.
>> 
>> +#       coreaudio is always enabled on OS X.
>> 
>> #       Try PulseAudio at your own risk.
>> 
>> +#       --with-system-libxml2 enables or disables usage of libxml2 in /usr.
>> +#       Play it safe and use our libxml2 port.
>> +#       mac-media-keys is currently broken.
>> 
>> configure.args      --enable-nls \
>> 
>> +                    --disable-gtk \
>> +                    --disable-qt \
>> +                    --with-system-libxml2=no \
>> 
>>                     --enable-xsf \
>> 
>>                     --enable-psf \
>> 
>>                     --enable-hotkey \
>> 
>>                     --enable-songchange \
>> 
>> -                    --enable-statusicon \
>> 
>>                     --enable-neon \
>> 
>>                     --enable-filewriter \
>> 
>>                     --enable-rpath \
>> 
>> -                    --enable-gtkui \
>> -                    --enable-skins \
>> 
>>                     --enable-lyricwiki \
>> 
>>                     --disable-console \
>> 
>> +                    --disable-qtaudio \
>> 
>>                     --disable-pulse \
>> 
>> +                    --enable-coreaudio \
>> 
>>                     --disable-sdlout \
>> 
>>                     --disable-mp3 \
>> 
>>                     --disable-gnomeshortcuts \
>> 
>> @@ -99,7 +106,13 @@
>> 
>>                     --disable-resample \
>> 
>>                     --disable-speedpitch \
>> 
>>                     --disable-soxr \
>> 
>> -                    --disable-glspectrum
>> 
>> +                    --disable-glspectrum \
>> +                    --disable-qtglspectrum \
>> +                    --enable-vtx \
>> +                    --enable-ladspa \
>> +                    --enable-blur-scope \
>> +                    --enable-cairo-spectrum \
>> +                    --disable-mac-media-keys
>> 
>> 
>> 
>> default_variants    +full
>> 
>> 
>> 
>> @@ -107,23 +120,53 @@
>> 
>> autoreconf.cmd      ./autogen.sh
>> 
>> autoreconf.args
>> 
>> 
>> 
>> +# A compiler supporting C++11 is required to build audacious and its plugins.
>> +# The newer, the merrier.
>> +# Compilers supporting C++11 are GCC >= 4.6 and clang >= 3.3.
>> +# We do not know what "cc" is, so blacklist it as well.
>> +compiler.blacklist-append   {*gcc-4.[0-5]} {clang < 500} macports-clang-2.* \
>> +                            {macports-clang-3.[0-2]} cc
>> +
>> 
>> platform darwin {
>> 
>> -    if {${configure.cxx_stdlib} ne {} &&
>> -        [string equal ${configure.cxx_stdlib} "libc++"]} {
>> -        if {${os.major} > 10} {
>> -            configure.ldflags-append  "-mmacosx-version-min=10.7"
>> 
>> +    if {${os.major} >= 13} {
>> +        if {${configure.cxx_stdlib} ne {} &&
>> +            [string equal ${configure.cxx_stdlib} "libc++"]} {
>> +            # Blacklist all GCC compilers to not accidentally pull in libstdc++.
>> +            compiler.blacklist-append {*gcc*}
>> +
>> +            # Make sure binary runs on 10.9+ only.
>> +            configure.ldflags-append  "-mmacosx-version-min=10.9"
>> 
>>         } else {
>> 
>> -            ui_error "libc++ is only supported on OS X 10.7 and up for this port."
>> -            error "libc++ supported on >= 10.7 only."
>> 
>> +            ui_error "The system libraries in OS X 10.9 and higher use libc++. Thus, libstdc++ is not supported for this port."
>> +            error "libstdc++ supported on <= 10.8 only."
>> 
>>         }
>> 
>>     } else {
>> 
>> -        configure.ldflags-append  "-mmacosx-version-min=10.5"
>> 
>> +        if {${configure.cxx_stdlib} ne {} &&
>> +            [string equal ${configure.cxx_stdlib} "libc++"]} {
>> +            ui_error "The system libraries in OS X 10.8 and lower use libstdc++. Thus, libstdc++ is not supported for this port."
>> +            error "libc++ supported on >= 10.9 only."
>> +        } else {
>> +            # Shameless copy from rust.
>> +            depends_lib-append          {path:lib/libstdc\\+\\+.6.dylib:libgcc}
>> +
>> +            # Force GCC 4.9.
>> +            compiler.blacklist-append   {*clang*}
>> +            compiler.fallback-append    macports-gcc-4.9
>> +
>> +            # Make sure binary runs on 10.5+ only.
>> +            configure.ldflags-append    "-mmacosx-version-min=10.5"
>> +
>> +            notes-append {
>> +                            Upstream for some reason requires libc++.
>> +                            Your build will use libstdc++. The maintainer assumes this
>> +                            to be OK, but you're on your own if stuff breaks.\
>> +            }
>> +        }
>> 
>>     }
>> 
>> }
>> 
>> 
>> 
>> post-destroot {
>> 
>>     xinstall -d -m 0755 ${destroot}${prefix}/share/doc/${name}
>> 
>> -    xinstall -m 0644 ${worksrcpath}/AUTHORS ${destroot}${prefix}/share/doc/${name}
>> 
>>     xinstall -m 0644 ${worksrcpath}/COPYING ${destroot}${prefix}/share/doc/${name}
>> 
>> }
>> 
>> 
>> 
>> @@ -251,13 +294,13 @@
>> 
>>                             --enable-amidiplug
>> 
>> }
>> 
>> 
>> 
>> -# libcdio-paranoia not ported yet
>> -#variant cdaudio description {Add support for CDAudio-NG} {
>> -#    depends_lib-append      port:libcdio \
>> -#                            port:libcddb
>> -#    configure.args-replace  --disable-cdaudio \
>> -#                            --enable-cdaudio
>> -#}
>> 
>> +variant cdaudio description {Add support for CDAudio-NG} {
>> +    depends_lib-append      port:libcdio \
>> +                            port:libcdio-paranoia \
>> +                            port:libcddb
>> +    configure.args-replace  --disable-cdaudio \
>> +                            --enable-cdaudio
>> +}
>> 
>> 
>> 
>> variant lastfm description {Add support for last.fm} {
>> 
>>     depends_lib-append      port:curl
>> 
>> @@ -318,9 +361,47 @@
>> 
>>     configure.args-append   --with-libsdl=2
>> 
>> }
>> 
>> 
>> 
>> +variant qt5 description {Add Qt5 support} {
>> +    PortGroup   qt5 1.0
>> +
>> +    configure.args-replace  --disable-qt \
>> +                            --enable-qt
>> +
>> +    if {[variant_isset opengl]} {
>> +        configure.args-replace  --disable-qtglspectrum \
>> +                                --enable-qtglspectrum
>> +    }
>> +
>> +    configure.args-replace  --disable-qtaudio \
>> +                            --enable-qtaudio
>> +
>> +    notes-append {
>> +                    Qt5 support is optional and untested.
>> +                    If it breaks, you've got to keep the pieces.\
>> +    }
>> +}
>> +
>> +variant gtk2 conflicts gtk3 description {Add GTK2 support} {
>> +    depends_lib-append      path:lib/pkgconfig/gtk-2.0.pc:gtk2 \
>> +                            path:lib/pkgconfig/gdk-x11-2.0.pc:gtk2
>> +
>> +    configure.args-replace  --disable-gtk \
>> +                            --enable-gtk
>> +}
>> +
>> +variant gtk3 conflicts gtk2 description {Add GTK3 support} {
>> +    depends_lib-append      path:lib/pkgconfig/gtk-3.0.pc:gtk3 \
>> +                            path:lib/pkgconfig/gdk-x11-3.0.pc:gtk3
>> +
>> +    patchfiles-append       patch-gtk3.diff
>> +
>> +    configure.args-replace  --disable-gtk \
>> +                            --enable-gtk
>> +}
>> +
>> 
>> variant full requires console mp3 dbus lirc osd osd_composite notifications \
>> 
>> -                      vorbis flac wavpack aac sndfile modplug midi lastfm mms \
>> -                      cue lame transform opengl \
>> 
>> +                      vorbis flac wavpack aac sndfile modplug midi cdaudio \
>> +                      lastfm mms cue lame transform opengl \
>> 
>>              description {Build all plugins, except additional sound output plugins and potentially conflicting variants} {}
>> 
>> 
>> 
>> if {[variant_isset jack]} {
>> 
>> @@ -328,7 +409,7 @@
>> 
>>                     You have selected the JACK audio output plugin.
>> 
>>                     To use this plugin, jackd needs to be started manually.
>> 
>>                     The plugin is known to have issues leading to crackling sound output.
>> 
>> -                    Please don't report bugs against this plugin.
>> 
>> +                    Please don't report bugs against this plugin.\
>> 
>>     }
>> 
>> }
>> 
>> 
>> 
>> @@ -336,6 +417,11 @@
>> 
>>     default_variants-append +sdl1 +ffmpeg
>> 
>> }
>> 
>> 
>> 
>> +# Need either one of gtk2 or gtk3. Default to gtk2, which is preferred by upstream.
>> +if {![variant_isset gtk2] && ![variant_isset gtk3]} {
>> +    default_variants-append +gtk2
>> +}
>> +
>> 
>> livecheck.type      regex
>> 
>> livecheck.url       ${master_sites}
>> 
>> livecheck.regex     "${name}-(\\d+(?:\\.\\d+)*)${extract.suffix}
>> "
>> 
>> Added: trunk/dports/multimedia/audacious-plugins/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff (0 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-plugins/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff	                        (rev 0)
>> +++ trunk/dports/multimedia/audacious-plugins/files/patch-acinclude.m4-drop-libc++-switch-from-gnu++11-to-c++11.diff	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -0,0 +1,22 @@
>> 
>> +--- acinclude.m4.orig
>> ++++ acinclude.m4
>> +@@ -83,8 +83,8 @@ AC_REQUIRE([AC_SYS_LARGEFILE])
>> + if test "x$GCC" = "xyes"; then
>> +     CFLAGS="$CFLAGS -std=gnu99 -ffast-math -Wall -pipe"
>> +     if test "x$HAVE_DARWIN" = "xyes"; then
>> +-        CXXFLAGS="$CXXFLAGS -stdlib=libc++ -std=gnu++11 -ffast-math -Wall -pipe"
>> +-        LDFLAGS="$LDFLAGS -lc++ -stdlib=libc++"
>> ++        CXXFLAGS="$CXXFLAGS -std=c++11 -ffast-math -Wall -pipe"
>> ++        LDFLAGS="$LDFLAGS"
>> +     else
>> +         CXXFLAGS="$CXXFLAGS -std=gnu++11 -ffast-math -Wall -pipe"
>> +     fi
>> +@@ -101,7 +101,7 @@ if test "x$HAVE_DARWIN" = "xyes"; then
>> +     AC_PROG_OBJCXX
>> +     AC_PROG_OBJCXXCPP
>> + 
>> +-    OBJCXXFLAGS="$OBJCXXFLAGS -stdlib=libc++ -std=c++11"
>> ++    OBJCXXFLAGS="$OBJCXXFLAGS -std=c++11"
>> + fi
>> + 
>> + dnl Enable "-Wl,-z,defs" only on Linux
>> 
>> Modified: trunk/dports/multimedia/audacious-plugins/files/patch-buildsys.diff (135030 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-plugins/files/patch-buildsys.diff	2015-04-13 16:07:33 UTC (rev 135030)
>> +++ trunk/dports/multimedia/audacious-plugins/files/patch-buildsys.diff	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -1,4 +1,4 @@
>> 
>> ---- buildsys.mk.in.old
>> 
>> +--- buildsys.mk.in.orig
>> 
>> +++ buildsys.mk.in
>> 
>> @@ -107,19 +107,24 @@ PLUGIN_OBJS = ${OBJS:.o=.plugin.o}
>> 
>> 
>> 
>> @@ -383,22 +383,23 @@
>> 
>> +
>> 
>> +.CURDIR ?= .
>> 
>> +include ${.CURDIR}/.deps
>> 
>> ---- m4/buildsys.m4.old
>> 
>> +--- m4/buildsys.m4.orig
>> 
>> +++ m4/buildsys.m4
>> 
>> -@@ -109,14 +109,14 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
>> 
>> +@@ -108,13 +108,13 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
>> + 	case "$host_os" in
>> 
>>  		darwin*)
>> 
>>  			AC_MSG_RESULT(Darwin)
>> 
>> - 			LIB_CFLAGS='-fPIC -DPIC'
>> --			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR}'
>> 
>> +-			LIB_CFLAGS='-fPIC -DPIC -mmacosx-version-min=10.7'
>> +-			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR} -mmacosx-version-min=10.7 -install_name "${libdir}/$$(i=${SHARED_LIB}; echo $${i%${LIB_SUFFIX}}).${LIB_MAJOR}${LIB_SUFFIX}"'
>> ++			LIB_CFLAGS='-fPIC -DPIC'
>> 
>> +			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR} -Wl,-install_name,${libdir}/$${out%.dylib}.${LIB_MAJOR}.dylib'
>> 
>>  			LIB_PREFIX='lib'
>> 
>>  			LIB_SUFFIX='.dylib'
>> 
>>  			LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
>> 
>> - 			PLUGIN_CFLAGS='-fPIC -DPIC'
>> - 			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup'
>> 
>> +-			PLUGIN_CFLAGS='-fPIC -DPIC -mmacosx-version-min=10.7'
>> +-			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup -mmacosx-version-min=10.7'
>> ++			PLUGIN_CFLAGS='-fPIC -DPIC'
>> ++			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup'
>> 
>>  			PLUGIN_SUFFIX='.bundle'
>> 
>> --			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && install_name_tool -id ${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
>> -+			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
>> 
>> + 			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
>> 
>>  			UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib'
>> 
>> - 			CLEAN_LIB=''
>> - 			;;
>> 
>> Deleted: trunk/dports/multimedia/audacious-plugins/files/patch-configure.ac-select-libsdl.diff (135030 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-plugins/files/patch-configure.ac-select-libsdl.diff	2015-04-13 16:07:33 UTC (rev 135030)
>> +++ trunk/dports/multimedia/audacious-plugins/files/patch-configure.ac-select-libsdl.diff	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -1,57 +0,0 @@
>> 
>> ---- configure.ac.old
>> -+++ configure.ac
>> -@@ -578,17 +578,47 @@ AC_ARG_ENABLE(sdlout,
>> -  [AS_HELP_STRING([--disable-sdlout], [disable SDL output plugin])],
>> -  [enable_sdlout=$enableval], [enable_sdlout=auto])
>> - 
>> -+if test "x$enable_sdlout" != "xno"; then
>> -+    AC_ARG_WITH(libsdl,
>> -+                [AS_HELP_STRING([--with-libsdl=VER], [select which SDL version to use. Set VER to 1 for libsdl1, to 2 for libsdl2. @<:@default=check@:>@])],
>> -+                [case "x$withval" in
>> -+                     x1) ;;
>> -+                     x2) ;;
>> -+                     x*) withval=check;;
>> -+                 esac
>> -+                 with_libsdl=$withval], [with_libsdl=check])
>> -+fi
>> -+
>> -+libsdl1_min="1.2.11";
>> -+libsdl2_min="2.0";
>> -+
>> - have_sdlout=no
>> - if test "x$enable_sdlout" != "xno"; then
>> --    PKG_CHECK_MODULES([SDL], [sdl2 >= 2.0],
>> --       [have_sdlout=yes
>> --        OUTPUT_PLUGINS="$OUTPUT_PLUGINS sdlout"],
>> --       [PKG_CHECK_MODULES([SDL], [sdl >= 1.2.11],
>> -+    if test "x$with_libsdl" = "xcheck"; then
>> -+        PKG_CHECK_MODULES([SDL], [sdl2 >= $libsdl2_min],
>> -            [have_sdlout=yes
>> -             OUTPUT_PLUGINS="$OUTPUT_PLUGINS sdlout"],
>> --           [if test "x$enable_sdlout" = "xyes"; then
>> --               AC_MSG_ERROR([Cannot find SDL development files (ver >= 1.2.11), but compilation of SDL output plugin has been explicitly requested; please install SDL dev files and run configure again])
>> --            fi])])
>> -+           [PKG_CHECK_MODULES([SDL], [sdl >= $libsdl1_min],
>> -+               [have_sdlout=yes
>> -+                OUTPUT_PLUGINS="$OUTPUT_PLUGINS sdlout"],
>> -+               [if test "x$enable_sdlout" = "xyes"; then
>> -+                   AC_MSG_ERROR([Cannot find SDL development files (ver >= $libsdl1_min), but compilation of SDL output plugin has been explicitly requested; please install SDL dev files and run configure again])
>> -+                fi])])
>> -+    elif test "x$with_libsdl" = "x1"; then
>> -+        PKG_CHECK_MODULES([SDL], [sdl >= $libsdl1_min],
>> -+            [have_sdlout=yes
>> -+             OUTPUT_PLUGINS="$OUTPUT_PLUGINS sdlout"],
>> -+            [if test "x$enable_sdlout" = "xyes"; then
>> -+                 AC_MSG_ERROR([Cannot find SDL1 development files (ver >= $libsdl1_min), but compilation of SDL output plugin has been explicitly requested; please install SDL1 dev files and run configure again])
>> -+             fi])
>> -+    elif test "x$with_libsdl" = "x2"; then
>> -+        PKG_CHECK_MODULES([SDL], [sdl2 >= $libsdl2_min],
>> -+            [have_sdlout=yes
>> -+             OUTPUT_PLUGINS="$OUTPUT_PLUGINS sdlout"],
>> -+            [if test "x$enable_sdlout" = "xyes"; then
>> -+                 AC_MSG_ERROR([Cannot find SDL2 development files (ver >= $libsdl2_min), but compilation of SDL output plugin has been explicitly requested; please install SDL2 dev files and run configure again])
>> -+             fi])
>> -+    fi
>> - fi
>> - 
>> - dnl *** sndio output
>> 
>> Added: trunk/dports/multimedia/audacious-plugins/files/patch-gtk3.diff (0 => 135031)
>> 
>> --- trunk/dports/multimedia/audacious-plugins/files/patch-gtk3.diff	                        (rev 0)
>> +++ trunk/dports/multimedia/audacious-plugins/files/patch-gtk3.diff	2015-04-13 16:24:21 UTC (rev 135031)
>> 
>> @@ -0,0 +1,2362 @@
>> 
>> +--- acinclude.m4.old
>> ++++ acinclude.m4
>> +@@ -164,7 +164,7 @@ AC_ARG_ENABLE(gtk,
>> +  USE_GTK=$enableval, USE_GTK=yes)
>> + 
>> + if test $USE_GTK = yes ; then
>> +-    PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.24)
>> ++    PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.4)
>> +     AC_DEFINE(USE_GTK, 1, [Define if GTK+ support enabled])
>> + fi
>> + 
>> +--- configure.ac.old
>> ++++ configure.ac
>> +@@ -72,7 +72,7 @@ CONTAINER_PLUGINS="asx asx3 audpl m3u pls xspf"
>> + TRANSPORT_PLUGINS="gio"
>> + 
>> + if test "x$USE_GTK" = "xyes" ; then
>> +-    GENERAL_PLUGINS="$GENERAL_PLUGINS alarm albumart delete-files playlist-manager search-tool statusicon"
>> ++    GENERAL_PLUGINS="$GENERAL_PLUGINS alarm albumart delete-files playlist-manager search-tool"
>> +     GENERAL_PLUGINS="$GENERAL_PLUGINS gtkui skins"
>> + fi
>> + 
>> +@@ -204,11 +204,11 @@ AC_ARG_ENABLE(hotkey,
>> + 
>> + have_hotkey=no
>> + if test "x$enable_hotkey" != "xno"; then
>> +-    PKG_CHECK_MODULES(GDKX11, [gdk-x11-2.0],
>> ++    PKG_CHECK_MODULES(GDKX11, [gdk-x11-3.0],
>> +         [have_hotkey="yes"
>> +          GENERAL_PLUGINS="$GENERAL_PLUGINS hotkey"],
>> +         [if test "x$enable_hotkey" = "xyes"; then
>> +-            AC_MSG_ERROR([Cannot find gdk-x11-2.0 development files, but compilation of X11 Global Hotkey plugin has been explicitly requested; please install gdk-x11-2.0 dev files and run configure again])
>> ++            AC_MSG_ERROR([Cannot find gdk-x11-3.0 development files, but compilation of X11 Global Hotkey plugin has been explicitly requested; please install gdk-x11-3.0 dev files and run configure again])
>> +          fi]
>> +     )
>> + else
>> +@@ -271,6 +271,17 @@ if test "x$enable_songchange" != "xno"; then
>> +     )
>> + fi
>> + 
>> ++dnl Status Icon
>> ++dnl ===========
>> ++
>> ++AC_ARG_ENABLE(statusicon,
>> ++ [AS_HELP_STRING([--enable-statusicon], [enable X11 Status Icon plugin (default=disabled)])],
>> ++ [have_statusicon=$enableval], [have_statusicon="no"])
>> ++
>> ++if test "x$have_statusicon" != "xno"; then
>> ++    GENERAL_PLUGINS="$GENERAL_PLUGINS statusicon"
>> ++fi
>> ++
>> + dnl *** Audacious OSD plugin (pangocairo-based)
>> + 
>> + AC_ARG_ENABLE(aosd,
>> +@@ -1170,7 +1181,7 @@ echo "  MPRIS 2 Server:                         $have_mpris2"
>> + echo "  Playlist Manager:                       $USE_GTK"
>> + echo "  Search Tool:                            $USE_GTK"
>> + echo "  Song Change:                            $have_songchange"
>> +-echo "  Status Icon:                            $USE_GTK"
>> ++echo "  Status Icon:                            $have_statusicon"
>> + echo "  Audacious OSD:                          $have_aosd"
>> + echo "    -> X Composite support:               $have_aosd_xcomp"
>> + echo "  libnotify OSD:                          $have_notify"
>> +--- src/alarm/interface.cc.old
>> ++++ src/alarm/
>> interface.cc
>> 
>> +@@ -23,6 +23,10 @@
>> + 
>> + #include "callbacks.h"
>> + 
>> ++#if GTK_CHECK_VERSION (3, 12, 0)
>> ++    #define gtk_widget_set_margin_right(w, m) gtk_widget_set_margin_end(w, m)
>> ++#endif
>> ++
>> + const char *help[] =
>> + {
>> +    N_("Time\n"
>> +@@ -169,62 +173,67 @@ GtkWidget *create_config_notebook (void)
>> + 
>> +     /* Page 1 */
>> +     frame = gtk_frame_new (_("Time"));
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> +-    grid = gtk_table_new (0, 0, FALSE);
>> +-    gtk_table_set_col_spacings (GTK_TABLE (grid), 6);
>> +-    gtk_table_set_row_spacings (GTK_TABLE (grid), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (grid), 6);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> ++    grid = gtk_grid_new ();
>> ++    gtk_grid_set_column_spacing (GTK_GRID (grid), 3);
>> ++    gtk_grid_set_row_homogeneous (GTK_GRID (grid), TRUE);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (grid), 5);
>> + 
>> +     label = gtk_label_new (_("Alarm at (default):"));
>> +-    gtk_table_attach (GTK_TABLE (grid), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_widget_set_margin_right (label, 10);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
>> + 
>> +-    adjustment = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
>> ++    adjustment = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
>> +     alarm_h_spin = gtk_spin_button_new (adjustment, 1, 0);
>> +     g_object_set_data (G_OBJECT (notebook), "alarm_h_spin", alarm_h_spin);
>> +     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (alarm_h_spin), GTK_UPDATE_IF_VALID);
>> +     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (alarm_h_spin), TRUE);
>> +     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (alarm_h_spin), TRUE);
>> +-    gtk_table_attach (GTK_TABLE (grid), alarm_h_spin, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), alarm_h_spin, 1, 0, 1, 1);
>> + 
>> +     label = gtk_label_new (":");
>> +-    gtk_table_attach (GTK_TABLE (grid), label, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1);
>> + 
>> +-    adjustment = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
>> ++    adjustment = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
>> +     alarm_m_spin = gtk_spin_button_new (adjustment, 1, 0);
>> +     g_object_set_data (G_OBJECT (notebook), "alarm_m_spin", alarm_m_spin);
>> +     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (alarm_m_spin), GTK_UPDATE_IF_VALID);
>> +     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (alarm_m_spin), TRUE);
>> +     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (alarm_m_spin), TRUE);
>> +-    gtk_table_attach (GTK_TABLE (grid), alarm_m_spin, 3, 4, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), alarm_m_spin, 3, 0, 1, 1);
>> + 
>> +     label = gtk_label_new (_("h"));
>> +-    gtk_table_attach (GTK_TABLE (grid), label, 4, 5, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_START);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 4, 0, 1, 1);
>> + 
>> +     stop_checkb = gtk_check_button_new_with_label (_("Quiet after:"));
>> +     g_object_set_data (G_OBJECT (notebook), "stop_checkb", stop_checkb);
>> +-    gtk_table_attach (GTK_TABLE (grid), stop_checkb, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_widget_set_margin_right (stop_checkb, 10);
>> ++    gtk_widget_set_valign (stop_checkb, GTK_ALIGN_CENTER);
>> ++    gtk_grid_attach (GTK_GRID (grid), stop_checkb, 0, 1, 1, 1);
>> + 
>> +-    adjustment = (GtkAdjustment *) gtk_adjustment_new (0, 0, 100, 1, 10, 0);
>> ++    adjustment = gtk_adjustment_new (0, 0, 100, 1, 10, 0);
>> +     stop_h_spin = gtk_spin_button_new (adjustment, 1, 0);
>> +     g_object_set_data (G_OBJECT (notebook), "stop_h_spin", stop_h_spin);
>> +     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (stop_h_spin), GTK_UPDATE_IF_VALID);
>> +     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (stop_h_spin), TRUE);
>> +     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (stop_h_spin), TRUE);
>> +-    gtk_table_attach (GTK_TABLE (grid), stop_h_spin, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), stop_h_spin, 1, 1, 1, 1);
>> + 
>> +     label = gtk_label_new (_("hours"));
>> +-    gtk_table_attach (GTK_TABLE (grid), label, 2, 3, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_widget_set_margin_right (label, 10);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 2, 1, 1, 1);
>> + 
>> +-    adjustment = (GtkAdjustment *) gtk_adjustment_new (0, 0, 59, 1, 10, 0);
>> ++    adjustment = gtk_adjustment_new (0, 0, 59, 1, 10, 0);
>> +     stop_m_spin = gtk_spin_button_new (adjustment, 1, 0);
>> +     g_object_set_data (G_OBJECT (notebook), "stop_m_spin", stop_m_spin);
>> +     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (stop_m_spin), GTK_UPDATE_IF_VALID);
>> +     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (stop_m_spin), TRUE);
>> +     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (stop_m_spin), TRUE);
>> +-    gtk_table_attach (GTK_TABLE (grid), stop_m_spin, 3, 4, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), stop_m_spin, 3, 1, 1, 1);
>> + 
>> +     label = gtk_label_new (_("minutes"));
>> +-    gtk_table_attach (GTK_TABLE (grid), label, 4, 5, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 4, 1, 1, 1);
>> +     gtk_container_add (GTK_CONTAINER (frame), grid);
>> + 
>> +     label = gtk_label_new (_("Time"));
>> +@@ -233,24 +242,25 @@ GtkWidget *create_config_notebook (void)
>> + 
>> +     /* Page 2 */
>> +     frame = gtk_frame_new (_("Choose the days for the alarm to come on"));
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> +-    grid = gtk_table_new (0, 0, FALSE);
>> +-    gtk_table_set_col_spacings (GTK_TABLE (grid), 6);
>> +-    gtk_table_set_row_spacings (GTK_TABLE (grid), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (grid), 6);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> ++    grid = gtk_grid_new ();
>> ++    gtk_grid_set_column_spacing (GTK_GRID (grid), 15);
>> ++    gtk_grid_set_row_homogeneous (GTK_GRID (grid), TRUE);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (grid), 5);
>> + 
>> +     label = gtk_label_new (_("Day"));
>> +-    gtk_table_attach (GTK_TABLE (grid), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
>> + 
>> +     label = gtk_label_new (_("Time"));
>> +-    gtk_table_attach (GTK_TABLE (grid), label, 2, 5, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 3, 1);
>> + 
>> +     for (i = 0; i < 7; i ++)
>> +     {
>> +         widget[i] = gtk_check_button_new_with_label (weekdays[i]);
>> +         g_object_set_data (G_OBJECT (notebook), day_cb[i], widget[i]);
>> +         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget[i]), TRUE);
>> +-        gtk_table_attach (GTK_TABLE (grid), widget[i], 0, 1, i + 1, i + 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++        gtk_widget_set_valign (widget[i], GTK_ALIGN_CENTER);
>> ++        gtk_grid_attach (GTK_GRID (grid), widget[i], 0, i + 1, 1, 1);
>> +     }
>> +     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget[6]), FALSE);
>> + 
>> +@@ -259,30 +269,31 @@ GtkWidget *create_config_notebook (void)
>> +         checkbutton = gtk_check_button_new_with_label (_("Default"));
>> +         g_object_set_data (G_OBJECT (notebook), day_def[i], checkbutton);
>> +         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), TRUE);
>> ++        gtk_widget_set_valign (checkbutton, GTK_ALIGN_CENTER);
>> +         g_signal_connect (checkbutton, "toggled", G_CALLBACK (cb_def[i]), nullptr);
>> +-        gtk_table_attach (GTK_TABLE (grid), checkbutton, 1, 2, i + 1, i + 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++        gtk_grid_attach (GTK_GRID (grid), checkbutton, 1, i + 1, 1, 1);
>> +     }
>> + 
>> +     for (i = 7, j = 0; i < 14; i ++, j ++)
>> +     {
>> +-        adjustment = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
>> ++        adjustment = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
>> +         widget[i] = gtk_spin_button_new (adjustment, 1, 0);
>> +         g_object_set_data (G_OBJECT (notebook), day_h[j], widget[i]);
>> +-        gtk_table_attach (GTK_TABLE (grid), widget[i], 2, 3, j + 1, j + 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++        gtk_grid_attach (GTK_GRID (grid), widget[i], 2, j + 1, 1, 1);
>> +     }
>> + 
>> +     for (i = 0; i < 7; i ++)
>> +     {
>> +         label = gtk_label_new (":");
>> +-        gtk_table_attach (GTK_TABLE (grid), label, 3, 4, i + 1, i + 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++        gtk_grid_attach (GTK_GRID (grid), label, 3, i + 1, 1, 1);
>> +     }
>> + 
>> +     for (i = 14, j = 0; i < 21; i ++, j ++)
>> +     {
>> +-        adjustment = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
>> ++        adjustment = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
>> +         widget[i] = gtk_spin_button_new (adjustment, 1, 0);
>> +         g_object_set_data (G_OBJECT (notebook), day_m[j], widget[i]);
>> +-        gtk_table_attach (GTK_TABLE (grid), widget[i], 4, 5, j + 1, j + 2, GTK_FILL, GTK_FILL, 0, 0);
>> ++        gtk_grid_attach (GTK_GRID (grid), widget[i], 4, j + 1, 1, 1);
>> +     }
>> + 
>> +     label = gtk_label_new (_("Days"));
>> +@@ -291,110 +302,117 @@ GtkWidget *create_config_notebook (void)
>> + 
>> + 
>> +     /* Page 3 */
>> +-    vbox = gtk_vbox_new (FALSE, 6);
>> +-    hbox = gtk_hbox_new (FALSE, 6);
>> ++    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> + 
>> +     frame = gtk_frame_new (_("Fading"));
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
>> +-    adjustment = (GtkAdjustment *) gtk_adjustment_new (120, 0, 3600, 1, 10, 0);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
>> ++    adjustment = gtk_adjustment_new (120, 0, 3600, 1, 10, 0);
>> +     fading_spin = gtk_spin_button_new (adjustment, 1, 0);
>> +     g_object_set_data (G_OBJECT (notebook), "fading_spin", fading_spin);
>> +     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fading_spin), TRUE);
>> +     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (fading_spin), GTK_UPDATE_IF_VALID);
>> +     label = gtk_label_new (_("seconds"));
>> + 
>> +-    gtk_box_pack_start (GTK_BOX (hbox), fading_spin, TRUE, TRUE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (hbox), fading_spin);
>> ++    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 3);
>> +     gtk_container_add (GTK_CONTAINER (frame), hbox);
>> +-    gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (vbox), frame);
>> + 
>> +     frame = gtk_frame_new (_("Volume"));
>> +-    vbox2 = gtk_vbox_new (FALSE, 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (vbox2), 6);
>> ++    vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
>> + 
>> +     label = gtk_label_new (_("Start at"));
>> +-    gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
>> ++    gtk_widget_set_margin_bottom (label, 2);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_START);
>> ++    gtk_container_add (GTK_CONTAINER (vbox2), label);
>> + 
>> +-    quiet_vol_scale = gtk_hscale_new ((GtkAdjustment *) gtk_adjustment_new (20, 0, 100, 1, 5, 0));
>> ++    quiet_vol_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, gtk_adjustment_new (20, 0, 100, 1, 5, 0));
>> +     g_object_set_data (G_OBJECT (notebook), "quiet_vol_scale", quiet_vol_scale);
>> +     gtk_scale_set_value_pos (GTK_SCALE (quiet_vol_scale), GTK_POS_RIGHT);
>> +     gtk_scale_set_digits (GTK_SCALE (quiet_vol_scale), 0);
>> +     label = gtk_label_new ("%");
>> +-    hbox2 = gtk_hbox_new (FALSE, 6);
>> ++    hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
>> +     gtk_box_pack_start (GTK_BOX (hbox2), quiet_vol_scale, TRUE, TRUE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (hbox2), label);
>> ++    gtk_container_add (GTK_CONTAINER (vbox2), hbox2);
>> + 
>> +-    separator = gtk_hseparator_new ();
>> +-    gtk_box_pack_start (GTK_BOX (vbox2), separator, FALSE, FALSE, 0);
>> ++    separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
>> ++    gtk_box_pack_start (GTK_BOX (vbox2), separator, FALSE, FALSE, 10);
>> + 
>> +     label = gtk_label_new (_("Final"));
>> +-    gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
>> ++    gtk_widget_set_margin_bottom (label, 2);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_START);
>> ++    gtk_container_add (GTK_CONTAINER (vbox2), label);
>> + 
>> +-    vol_scale = gtk_hscale_new ((GtkAdjustment *) gtk_adjustment_new (80, 0, 100, 1, 5, 0));
>> ++    vol_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, gtk_adjustment_new (80, 0, 100, 1, 5, 0));
>> +     g_object_set_data (G_OBJECT (notebook), "vol_scale", vol_scale);
>> +     gtk_scale_set_value_pos (GTK_SCALE (vol_scale), GTK_POS_RIGHT);
>> +     gtk_scale_set_digits (GTK_SCALE (vol_scale), 0);
>> +     label = gtk_label_new ("%");
>> +-    hbox2 = gtk_hbox_new (FALSE, 6);
>> ++    hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
>> +     gtk_box_pack_start (GTK_BOX (hbox2), vol_scale, TRUE, TRUE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, FALSE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (hbox2), label);
>> ++    gtk_container_add (GTK_CONTAINER (vbox2), hbox2);
>> + 
>> +     current_button = gtk_button_new_with_label (_("Current"));
>> ++    gtk_widget_set_margin_top (current_button, 10);
>> ++    gtk_widget_set_halign (current_button, GTK_ALIGN_END);
>> +     g_signal_connect (current_button, "clicked", G_CALLBACK (alarm_current_volume), nullptr);
>> +-    gtk_box_pack_start (GTK_BOX (vbox2), current_button, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (vbox2), current_button);
>> + 
>> +     gtk_container_add (GTK_CONTAINER (frame), vbox2);
>> +-    gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (vbox), frame);
>> + 
>> +     label = gtk_label_new (_("Volume"));
>> +     gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);
>> + 
>> + 
>> +     /* Page 4 */
>> +-    vbox = gtk_vbox_new (FALSE, 6);
>> ++    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     frame = gtk_frame_new (_("Additional Command"));
>> +-    hbox = gtk_hbox_new (FALSE, 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
>> +     cmd_entry = gtk_entry_new ();
>> +     g_object_set_data (G_OBJECT (notebook), "cmd_entry", cmd_entry);
>> +     cmd_checkb = gtk_check_button_new_with_label (_("enable"));
>> +     g_object_set_data (G_OBJECT (notebook), "cmd_checkb", cmd_checkb);
>> +     gtk_box_pack_start (GTK_BOX (hbox), cmd_entry, TRUE, TRUE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (hbox), cmd_checkb, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (hbox), cmd_checkb);
>> +     gtk_container_add (GTK_CONTAINER (frame), hbox);
>> +-    gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (vbox), frame);
>> + 
>> +     frame = gtk_frame_new (_("Playlist (optional)"));
>> +-    hbox = gtk_hbox_new (FALSE, 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
>> +     playlist_entry = gtk_entry_new ();
>> +     g_object_set_data (G_OBJECT (notebook), "playlist", playlist_entry);
>> + 
>> +     file_chooser_button = gtk_file_chooser_button_new (_("Select a playlist"), GTK_FILE_CHOOSER_ACTION_OPEN);
>> ++    gtk_widget_set_valign (file_chooser_button, GTK_ALIGN_CENTER);
>> +     g_signal_connect (file_chooser_button, "file-set", G_CALLBACK (file_set_cb), playlist_entry);
>> +     gtk_box_pack_start (GTK_BOX (hbox), playlist_entry, TRUE, TRUE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (hbox), file_chooser_button, TRUE, TRUE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (hbox), file_chooser_button);
>> +     gtk_container_add (GTK_CONTAINER (frame), hbox);
>> +-    gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (vbox), frame);
>> + 
>> +     frame = gtk_frame_new (_("Reminder"));
>> +-    hbox = gtk_hbox_new (FALSE, 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (hbox), 8);
>> +     reminder_text = gtk_entry_new ();
>> +     reminder_checkb = gtk_check_button_new_with_label (_("enable"));
>> +     g_object_set_data (G_OBJECT (notebook), "reminder_text", reminder_text);
>> +     g_object_set_data (G_OBJECT (notebook), "reminder_cb", reminder_checkb);
>> +     gtk_box_pack_start (GTK_BOX (hbox), reminder_text, TRUE, TRUE, 0);
>> +-    gtk_box_pack_start (GTK_BOX (hbox), reminder_checkb, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (hbox), reminder_checkb);
>> +     gtk_container_add (GTK_CONTAINER (frame), hbox);
>> +-    gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
>> ++    gtk_container_add (GTK_CONTAINER (vbox), frame);
>> + 
>> +     label = gtk_label_new (_("Options"));
>> +     gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);
>> +@@ -402,7 +420,7 @@ GtkWidget *create_config_notebook (void)
>> + 
>> +     /* Page 5 */
>> +     frame = gtk_frame_new (_("What do these options mean?"));
>> +-    gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
>> +     view = gtk_text_view_new ();
>> +     gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
>> +     gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
>> +--- src/amidi-plug/i_configure-fluidsynth.cc.old
>> ++++ src/amidi-plug/i_configure-
>> fluidsynth.cc
>> 
>> +@@ -216,9 +216,8 @@ void * create_soundfont_list (void)
>> +             g_strfreev (sffiles);
>> +         }
>> + 
>> +-        soundfont_file_hbox = gtk_hbox_new (FALSE, 2);
>> ++        soundfont_file_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
>> +         soundfont_file_lv = gtk_tree_view_new_with_model (GTK_TREE_MODEL (soundfont_file_store));
>> +-        gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (soundfont_file_lv), TRUE);
>> +         g_object_unref (soundfont_file_store);
>> +         soundfont_file_lv_text_rndr = gtk_cell_renderer_text_new();
>> +         soundfont_file_lv_fname_col = gtk_tree_view_column_new_with_attributes (
>> +@@ -241,7 +240,7 @@ void * create_soundfont_list (void)
>> +         gtk_container_add (GTK_CONTAINER (soundfont_file_lv_sw), soundfont_file_lv);
>> + 
>> +         /* soundfont settings - soundfont files - buttonbox */
>> +-        soundfont_file_bbox_vbox = gtk_vbox_new (FALSE, 0);
>> ++        soundfont_file_bbox_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +         soundfont_file_bbox_addbt = gtk_button_new();
>> +         gtk_button_set_image (GTK_BUTTON (soundfont_file_bbox_addbt),
>> +                               gtk_image_new_from_icon_name ("list-add", GTK_ICON_SIZE_MENU));
>> +--- src/amidi-plug/i_fileinfo.cc.old
>> ++++ src/amidi-plug/i_fileinfo.cc
>> +@@ -47,11 +47,14 @@ void i_fileinfo_grid_add_entry (char * field_text, char * value_text,
>> +     GtkWidget * field, *value;
>> +     field = gtk_label_new (field_text);
>> +     gtk_label_set_attributes (GTK_LABEL (field), attrlist);
>> +-    gtk_misc_set_alignment (GTK_MISC (field), 0, 0);
>> +-    gtk_table_attach (GTK_TABLE (grid), field, 0, 1, line, line + 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_widget_set_halign (field, GTK_ALIGN_START);
>> ++    gtk_label_set_justify (GTK_LABEL (field), GTK_JUSTIFY_LEFT);
>> ++    gtk_grid_attach (GTK_GRID (grid), field, 0, line, 1, 1);
>> +     value = gtk_label_new (value_text);
>> +-    gtk_misc_set_alignment (GTK_MISC (value), 0, 0);
>> +-    gtk_table_attach (GTK_TABLE (grid), value, 1, 2, line, line + 1, GTK_FILL, GTK_FILL, 0, 0);
>> ++    gtk_widget_set_halign (value, GTK_ALIGN_START);
>> ++    gtk_label_set_justify (GTK_LABEL (value), GTK_JUSTIFY_LEFT);
>> ++    gtk_grid_attach (GTK_GRID (grid), value, 1, line, 1, 1);
>> ++    return;
>> + }
>> + 
>> + 
>> +@@ -139,7 +142,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file)
>> +     g_signal_connect (G_OBJECT (fileinfowin), "destroy", G_CALLBACK (gtk_widget_destroyed), &fileinfowin);
>> +     gtk_container_set_border_width (GTK_CONTAINER (fileinfowin), 10);
>> + 
>> +-    fileinfowin_vbox = gtk_vbox_new (FALSE, 10);
>> ++    fileinfowin_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
>> +     gtk_container_add (GTK_CONTAINER (fileinfowin), fileinfowin_vbox);
>> + 
>> +     /* pango attributes */
>> +@@ -151,13 +154,12 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file)
>> + 
>> +     /******************
>> +      *** TITLE LINE ***/
>> +-    title_hbox = gtk_hbox_new (FALSE, 5);
>> ++    title_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
>> +     gtk_box_pack_start (GTK_BOX (fileinfowin_vbox), title_hbox, FALSE, FALSE, 0);
>> + 
>> +     title_icon_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) amidiplug_xpm_midiicon);
>> +     title_icon_image = gtk_image_new_from_pixbuf (title_icon_pixbuf);
>> +     g_object_unref (title_icon_pixbuf);
>> +-    gtk_misc_set_alignment (GTK_MISC (title_icon_image), 0, 0);
>> +     gtk_box_pack_start (GTK_BOX (title_hbox), title_icon_image, FALSE, FALSE, 0);
>> + 
>> +     title_name_f_label = gtk_label_new (_("Name:"));
>> +@@ -169,12 +171,12 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file)
>> +     gtk_widget_set_size_request (GTK_WIDGET (title_name_v_entry), 200, -1);
>> +     gtk_box_pack_start (GTK_BOX (title_hbox), title_name_v_entry, TRUE, TRUE, 0);
>> + 
>> +-    fileinfowin_columns_hbox = gtk_hbox_new (FALSE, 2);
>> ++    fileinfowin_columns_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
>> +     gtk_box_pack_start (GTK_BOX (fileinfowin_vbox), fileinfowin_columns_hbox, TRUE, TRUE, 0);
>> + 
>> +     /*********************
>> +      *** MIDI INFO BOX ***/
>> +-    midiinfoboxes_vbox = gtk_vbox_new (FALSE, 2);
>> ++    midiinfoboxes_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
>> +     gtk_box_pack_start (GTK_BOX (fileinfowin_columns_hbox), midiinfoboxes_vbox, FALSE, FALSE, 0);
>> + 
>> +     info_frame_tl = gtk_label_new ("");
>> +@@ -183,10 +185,10 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file)
>> + 
>> +     info_frame = gtk_frame_new (nullptr);
>> +     gtk_box_pack_start (GTK_BOX (midiinfoboxes_vbox), info_frame, TRUE, TRUE, 0);
>> +-    info_grid = gtk_table_new (0, 0, FALSE);
>> +-    gtk_table_set_row_spacings (GTK_TABLE (info_grid), 2);
>> +-    gtk_table_set_col_spacings (GTK_TABLE (info_grid), 6);
>> +-    gtk_container_set_border_width (GTK_CONTAINER (info_grid), 6);
>> ++    info_grid = gtk_grid_new();
>> ++    gtk_grid_set_row_spacing (GTK_GRID (info_grid), 4);
>> ++    gtk_grid_set_column_spacing (GTK_GRID (info_grid), 10);
>> ++    gtk_container_set_border_width (GTK_CONTAINER (info_grid), 3);
>> +     gtk_container_add (GTK_CONTAINER (info_frame), info_grid);
>> +     value_gstring = g_string_new ("");
>> + 
>> +@@ -223,7 +225,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file)
>> + 
>> +     /**********************************
>> +      *** MIDI COMMENTS/LYRICS BOXES ***/
>> +-    miditextboxes_vbox = gtk_vbox_new (FALSE, 2);
>> ++    miditextboxes_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
>> +     gtk_box_pack_start (GTK_BOX (fileinfowin_columns_hbox), miditextboxes_vbox, TRUE, TRUE, 0);
>> + 
>> +     text_frame_tl = gtk_label_new ("");
>> +@@ -231,7 +233,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file)
>> +                           _("<span size=\"smaller\"> MIDI Comments and Lyrics </span>"));
>> +     gtk_box_pack_start (GTK_BOX (miditextboxes_vbox), text_frame_tl, FALSE, FALSE, 0);
>> + 
>> +-    miditextboxes_paned = gtk_vpaned_new ();
>> ++    miditextboxes_paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
>> +     gtk_box_pack_start (GTK_BOX (miditextboxes_vbox), miditextboxes_paned, TRUE, TRUE, 0);
>> + 
>> +     text_frame = gtk_frame_new (nullptr);
>> +@@ -295,7 +297,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file)
>> + 
>> +     /**************
>> +      *** FOOTER ***/
>> +-    footer_hbbox = gtk_hbutton_box_new ();
>> ++    footer_hbbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
>> +     gtk_button_box_set_layout (GTK_BUTTON_BOX (footer_hbbox), GTK_BUTTONBOX_END);
>> +     footer_bclose = gtk_button_new_with_mnemonic (_("_Close"));
>> +     g_signal_connect (G_OBJECT (footer_bclose), "clicked", G_CALLBACK (i_fileinfo_ev_close), fileinfowin);
>> +--- src/aosd/aosd_ui.cc.old
>> ++++ src/aosd/aosd_ui.cc
>> +@@ -33,25 +33,29 @@
>> + #include "aosd_osd.h"
>> + 
>> + 
>> +-static void chooser_get_aosd_color (GtkColorButton * chooser, aosd_color_t * color)
>> ++static void chooser_get_aosd_color (GtkColorChooser * chooser, aosd_color_t * color)
>> + {
>> +-  GdkColor gdk_color;
>> +-  gtk_color_button_get_color (chooser, & gdk_color);
>> ++  GdkRGBA rgba;
>> ++  gtk_color_chooser_get_rgba (chooser, & rgba);
>> + 
>> +-  color->red = gdk_color.red;
>> +-  color->green = gdk_color.green;
>> +-  color->blue = gdk_color.blue;
>> +-  color->alpha = gtk_color_button_get_alpha (chooser);
>> ++  color->red = rint (rgba.red * 65535.0);
>> ++  color->green = rint (rgba.green * 65535.0);
>> ++  color->blue = rint (rgba.blue * 65535.0);
>> ++  color->alpha = rint (rgba.alpha * 65535.0);
>> + }
>> + 
>> + 
>> +-static void chooser_set_aosd_color (GtkColorButton * chooser, const aosd_color_t * color)
>> ++static void chooser_set_aosd_color (GtkColorChooser * chooser, const aosd_color_t * color)
>> + {
>> +-  GdkColor gdk_color = {0, (uint16_t) color->red, (uint16_t) color->green, (uint16_t) color->blue};
>> +-
>> +-  gtk_color_button_set_color (chooser, & gdk_color);
>> +-  gtk_color_button_set_use_alpha (chooser, TRUE);
>> +-  gtk_color_button_set_alpha (chooser, color->alpha);
>> ++  GdkRGBA rgba = {
>> ++      color->red / 65535.0,
>> ++      color->green / 65535.0,
>> ++      color->blue / 65535.0,
>> ++      color->alpha / 65535.0
>> ++  };
>> ++
>> ++  gtk_color_chooser_set_use_alpha (chooser, TRUE);
>> ++  gtk_color_chooser_set_rgba (chooser, & rgba);
>> + }
>> + 
>> + 
>> +@@ -80,16 +84,14 @@ aosd_callback_list_run ( aosd_cfg_t * cfg )
>> + 
>> + static gboolean
>> + aosd_cb_configure_position_expose ( GtkWidget * darea ,
>> +-                                    GdkEventExpose * event ,
>> ++                                    cairo_t * cr ,
>> +                                     void * coord_gp )
>> + {
>> +   int coord = GPOINTER_TO_INT(coord_gp);
>> + 
>> +-  cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (darea));
>> +   cairo_set_source_rgb ( cr , 0 , 0 , 0 );
>> +   cairo_rectangle ( cr , (coord % 3) * 10 , (coord / 3) * 16 , 20 , 8 );
>> +   cairo_fill ( cr );
>> +-  cairo_destroy (cr);
>> + 
>> +   return FALSE;
>> + }
>> +@@ -157,16 +159,16 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg )
>> +   int monitors_num = gdk_screen_get_n_monitors( gdk_screen_get_default() );
>> +   int i = 0;
>> + 
>> +-  pos_vbox = gtk_vbox_new( FALSE , 4 );
>> ++  pos_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 4 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(pos_vbox) , 6 );
>> + 
>> +   pos_placement_frame = gtk_frame_new( _("Placement") );
>> +-  pos_placement_hbox = gtk_hbox_new( FALSE , 0 );
>> ++  pos_placement_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 0 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(pos_placement_hbox) , 6 );
>> +   gtk_container_add( GTK_CONTAINER(pos_placement_frame) , pos_placement_hbox );
>> +   gtk_box_pack_start( GTK_BOX(pos_vbox) , pos_placement_frame , FALSE , FALSE , 0 );
>> + 
>> +-  pos_placement_grid = gtk_table_new (0, 0, FALSE);
>> ++  pos_placement_grid = gtk_grid_new();
>> +   for ( i = 0 ; i < 9 ; i++ )
>> +   {
>> +     if ( i == 0 )
>> +@@ -177,10 +179,9 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg )
>> +     pos_placement_bt_darea[i] = gtk_drawing_area_new();
>> +     gtk_widget_set_size_request( pos_placement_bt_darea[i] , 40 , 40 );
>> +     gtk_container_add( GTK_CONTAINER(pos_placement_bt[i]) , pos_placement_bt_darea[i] );
>> +-    g_signal_connect( G_OBJECT(pos_placement_bt_darea[i]) , "expose-event" ,
>> ++    g_signal_connect( G_OBJECT(pos_placement_bt_darea[i]) , "draw" ,
>> +                       G_CALLBACK(aosd_cb_configure_position_expose) , GINT_TO_POINTER(i) );
>> +-    gtk_table_attach_defaults( GTK_TABLE(pos_placement_grid) , pos_placement_bt[i] ,
>> +-                               (i % 3) , (i % 3) + 1 , (i / 3) , (i / 3) + 1 );
>> ++    gtk_grid_attach( GTK_GRID(pos_placement_grid) , pos_placement_bt[i] , (i % 3) , (i / 3) , 1 , 1 );
>> +     g_object_set_data( G_OBJECT(pos_placement_bt[i]) , "value" , GINT_TO_POINTER(i+1) );
>> +     if ( cfg->position.placement == (i+1) )
>> +       gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(pos_placement_bt[i]) , TRUE );
>> +@@ -188,38 +189,38 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg )
>> +   gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , pos_placement_grid , FALSE , FALSE , 0 );
>> +   aosd_cb_list.append( pos_placement_grid , aosd_cb_configure_position_placement_commit );
>> + 
>> +-  gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , gtk_vseparator_new() , FALSE , FALSE , 6 );
>> ++  gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , gtk_separator_new(GTK_ORIENTATION_VERTICAL) , FALSE , FALSE , 6 );
>> + 
>> +-  pos_offset_grid = gtk_table_new (0, 0, FALSE);
>> +-  gtk_table_set_row_spacings( GTK_TABLE(pos_offset_grid) , 4 );
>> +-  gtk_table_set_col_spacings( GTK_TABLE(pos_offset_grid) , 4 );
>> ++  pos_offset_grid = gtk_grid_new();
>> ++  gtk_grid_set_row_spacing( GTK_GRID(pos_offset_grid) , 4 );
>> ++  gtk_grid_set_column_spacing( GTK_GRID(pos_offset_grid) , 4 );
>> +   pos_offset_x_label = gtk_label_new( _( "Relative X offset:" ) );
>> +-  gtk_misc_set_alignment( GTK_MISC(pos_offset_x_label) , 0 , 0.5 );
>> +-  gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_x_label , 0 , 1 , 0 , 1 );
>> ++  gtk_widget_set_halign( pos_offset_x_label , GTK_ALIGN_START );
>> ++  gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_x_label , 0 , 0 , 1 , 1 );
>> +   pos_offset_x_spinbt = gtk_spin_button_new_with_range( -9999 , 9999 , 1 );
>> +   gtk_spin_button_set_value( GTK_SPIN_BUTTON(pos_offset_x_spinbt) , cfg->position.offset_x );
>> +-  gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_x_spinbt , 1 , 2 , 0 , 1 );
>> ++  gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_x_spinbt , 1 , 0 , 1 , 1 );
>> +   g_object_set_data( G_OBJECT(pos_offset_grid) , "offx" , pos_offset_x_spinbt );
>> +   pos_offset_y_label = gtk_label_new( _( "Relative Y offset:" ) );
>> +-  gtk_misc_set_alignment( GTK_MISC(pos_offset_y_label) , 0 , 0.5 );
>> +-  gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_y_label , 0 , 1 , 1 , 2 );
>> ++  gtk_widget_set_halign( pos_offset_y_label , GTK_ALIGN_START );
>> ++  gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_y_label , 0 , 1 , 1 , 1 );
>> +   pos_offset_y_spinbt = gtk_spin_button_new_with_range( -9999 , 9999 , 1 );
>> +   gtk_spin_button_set_value( GTK_SPIN_BUTTON(pos_offset_y_spinbt) , cfg->position.offset_y );
>> +-  gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_y_spinbt , 1 , 2 , 1 , 2 );
>> ++  gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_y_spinbt , 1 , 1 , 1 , 1 );
>> +   g_object_set_data( G_OBJECT(pos_offset_grid) , "offy" , pos_offset_y_spinbt );
>> +   pos_maxsize_width_label = gtk_label_new( _("Max OSD width:") );
>> +-  gtk_misc_set_alignment( GTK_MISC(pos_maxsize_width_label) , 0 , 0.5 );
>> +-  gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_maxsize_width_label , 0 , 1 , 2 , 3 );
>> ++  gtk_widget_set_halign( pos_maxsize_width_label , GTK_ALIGN_START );
>> ++  gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_maxsize_width_label , 0 , 2 , 1 , 1 );
>> +   pos_maxsize_width_spinbt = gtk_spin_button_new_with_range( 0 , 99999 , 1 );
>> +   g_object_set_data( G_OBJECT(pos_offset_grid) , "maxsize_width" , pos_maxsize_width_spinbt );
>> +   gtk_spin_button_set_value( GTK_SPIN_BUTTON(pos_maxsize_width_spinbt) , cfg->position.maxsize_width );
>> +-  gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_maxsize_width_spinbt , 1 , 2 , 2 , 3 );
>> ++  gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_maxsize_width_spinbt , 1 , 2 , 1 , 1 );
>> +   gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , pos_offset_grid , FALSE , FALSE , 0 );
>> +   aosd_cb_list.append( pos_offset_grid , aosd_cb_configure_position_offset_commit );
>> +   aosd_cb_list.append( pos_offset_grid , aosd_cb_configure_position_maxsize_commit );
>> + 
>> +   pos_multimon_frame = gtk_frame_new( _("Multi-Monitor options") );
>> +-  pos_multimon_hbox = gtk_hbox_new( FALSE , 4 );
>> ++  pos_multimon_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(pos_multimon_hbox) , 6 );
>> +   gtk_container_add( GTK_CONTAINER(pos_multimon_frame), pos_multimon_hbox );
>> +   pos_multimon_label = gtk_label_new( _("Display OSD using:") );
>> +@@ -245,7 +246,7 @@ static GtkWidget *
>> + aosd_ui_configure_animation_timing ( char * label_string )
>> + {
>> +   GtkWidget *hbox, *desc_label, *spinbt;
>> +-  hbox = gtk_hbox_new( FALSE , 4 );
>> ++  hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 );
>> +   desc_label = gtk_label_new( label_string );
>> +   spinbt = gtk_spin_button_new_with_range( 0 , 99999 , 1 );
>> +   gtk_box_pack_start( GTK_BOX(hbox) , desc_label , FALSE , FALSE , 0 );
>> +@@ -275,10 +276,10 @@ aosd_ui_configure_animation ( aosd_cfg_t * cfg )
>> +   GtkWidget *ani_timing_fadein_widget, *ani_timing_fadeout_widget, *ani_timing_stay_widget;
>> +   GtkSizeGroup *sizegroup;
>> + 
>> +-  ani_vbox = gtk_vbox_new( FALSE , 0 );
>> ++  ani_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(ani_vbox) , 6 );
>> + 
>> +-  ani_timing_hbox = gtk_hbox_new( FALSE , 0 );
>> ++  ani_timing_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 0 );
>> +   ani_timing_frame = gtk_frame_new( _("Timing (ms)") );
>> +   gtk_container_set_border_width( GTK_CONTAINER(ani_timing_hbox) , 6 );
>> +   gtk_container_add( GTK_CONTAINER(ani_timing_frame) , ani_timing_hbox );
>> +@@ -288,12 +289,12 @@ aosd_ui_configure_animation ( aosd_cfg_t * cfg )
>> +   gtk_spin_button_set_value( GTK_SPIN_BUTTON(g_object_get_data(
>> +     G_OBJECT(ani_timing_stay_widget),"spinbt")) , cfg->animation.timing_display );
>> +   gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , ani_timing_stay_widget , TRUE , TRUE , 0 );
>> +-  gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_vseparator_new() , FALSE , FALSE , 4 );
>> ++  gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_separator_new(GTK_ORIENTATION_VERTICAL) , FALSE , FALSE , 4 );
>> +   ani_timing_fadein_widget = aosd_ui_configure_animation_timing( _("Fade in:") );
>> +   gtk_spin_button_set_value( GTK_SPIN_BUTTON(g_object_get_data(
>> +     G_OBJECT(ani_timing_fadein_widget),"spinbt")) , cfg->animation.timing_fadein );
>> +   gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , ani_timing_fadein_widget , TRUE , TRUE , 0 );
>> +-  gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_vseparator_new() , FALSE , FALSE , 4 );
>> ++  gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_separator_new(GTK_ORIENTATION_VERTICAL) , FALSE , FALSE , 4 );
>> +   ani_timing_fadeout_widget = aosd_ui_configure_animation_timing( _("Fade out:") );
>> +   gtk_spin_button_set_value( GTK_SPIN_BUTTON(g_object_get_data(
>> +     G_OBJECT(ani_timing_fadeout_widget),"spinbt")) , cfg->animation.timing_fadeout );
>> +@@ -329,7 +330,7 @@ static void
>> + aosd_cb_configure_text_font_commit ( GtkWidget * fontbt , aosd_cfg_t * cfg )
>> + {
>> +   int fontnum = GPOINTER_TO_INT(g_object_get_data( G_OBJECT(fontbt) , "fontnum" ));
>> +-  GtkColorButton * chooser;
>> ++  GtkColorChooser * chooser;
>> + 
>> +   cfg->text.fonts_name[fontnum] =
>> +    String (gtk_font_button_get_font_name (GTK_FONT_BUTTON (fontbt)));
>> +@@ -337,10 +338,10 @@ aosd_cb_configure_text_font_commit ( GtkWidget * fontbt , aosd_cfg_t * cfg )
>> +   cfg->text.fonts_draw_shadow[fontnum] = gtk_toggle_button_get_active(
>> +     GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(fontbt),"use_shadow")) );
>> + 
>> +-  chooser = (GtkColorButton *) g_object_get_data ((GObject *) fontbt, "color");
>> ++  chooser = (GtkColorChooser *) g_object_get_data ((GObject *) fontbt, "color");
>> +   chooser_get_aosd_color (chooser, & cfg->text.fonts_color[fontnum]);
>> + 
>> +-  chooser = (GtkColorButton *) g_object_get_data ((GObject *) fontbt, "shadow_color");
>> ++  chooser = (GtkColorChooser *) g_object_get_data ((GObject *) fontbt, "shadow_color");
>> +   chooser_get_aosd_color (chooser, & cfg->text.fonts_shadow_color[fontnum]);
>> + }
>> + 
>> +@@ -355,14 +356,14 @@ aosd_ui_configure_text ( aosd_cfg_t * cfg )
>> +   GtkWidget *tex_font_shadow_colorbt[3];
>> +   int i = 0;
>> + 
>> +-  tex_vbox = gtk_vbox_new( FALSE , 4 );
>> ++  tex_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 4 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(tex_vbox) , 6 );
>> + 
>> +   tex_font_frame = gtk_frame_new( _("Fonts") );
>> +-  tex_font_grid = gtk_table_new (0, 0, FALSE);
>> ++  tex_font_grid = gtk_grid_new();
>> +   gtk_container_set_border_width( GTK_CONTAINER(tex_font_grid) , 6 );
>> +-  gtk_table_set_row_spacings( GTK_TABLE(tex_font_grid) , 4 );
>> +-  gtk_table_set_col_spacings( GTK_TABLE(tex_font_grid) , 4 );
>> ++  gtk_grid_set_row_spacing ( GTK_GRID(tex_font_grid) , 4 );
>> ++  gtk_grid_set_column_spacing ( GTK_GRID(tex_font_grid) , 4 );
>> +   for ( i = 0 ; i < AOSD_TEXT_FONTS_NUM ; i++ )
>> +   {
>> +     char *label_str = g_strdup_printf( _("Font %i:") , i+1 );
>> +@@ -374,16 +375,17 @@ aosd_ui_configure_text ( aosd_cfg_t * cfg )
>> +     gtk_font_button_set_use_font( GTK_FONT_BUTTON(tex_font_fontbt[i]) , FALSE );
>> +     gtk_font_button_set_use_size( GTK_FONT_BUTTON(tex_font_fontbt[i]) , FALSE );
>> +     gtk_font_button_set_font_name( GTK_FONT_BUTTON(tex_font_fontbt[i]) , cfg->text.fonts_name[i] );
>> ++    gtk_widget_set_hexpand( tex_font_fontbt[i] , TRUE );
>> + 
>> +     tex_font_colorbt[i] = gtk_color_button_new ();
>> +-    chooser_set_aosd_color ((GtkColorButton *) tex_font_colorbt[i],
>> ++    chooser_set_aosd_color ((GtkColorChooser *) tex_font_colorbt[i],
>> +      & cfg->text.fonts_color[i]);
>> + 
>> +     tex_font_shadow_togglebt[i] = gtk_toggle_button_new_with_label( _("Shadow") );
>> +     gtk_toggle_button_set_mode( GTK_TOGGLE_BUTTON(tex_font_shadow_togglebt[i]) , FALSE );
>> + 
>> +     tex_font_shadow_colorbt[i] = gtk_color_button_new ();
>> +-    chooser_set_aosd_color ((GtkColorButton *) tex_font_shadow_colorbt[i],
>> ++    chooser_set_aosd_color ((GtkColorChooser *) tex_font_shadow_colorbt[i],
>> +      & cfg->text.fonts_shadow_color[i]);
>> + 
>> +     gtk_widget_set_sensitive( tex_font_shadow_colorbt[i] , FALSE );
>> +@@ -392,11 +394,11 @@ aosd_ui_configure_text ( aosd_cfg_t * cfg )
>> +                       tex_font_shadow_colorbt[i] );
>> +     gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(tex_font_shadow_togglebt[i]) ,
>> +       cfg->text.fonts_draw_shadow[i] );
>> +-    gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_label[i] , 0 , 1 , i , i + 1 );
>> +-    gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_fontbt[i] , 1 , 2 , i , i + 1 );
>> +-    gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_colorbt[i] , 2 , 3 , i , i + 1 );
>> +-    gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_shadow_togglebt[i] , 3 , 4 , i , i + 1 );
>> +-    gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_shadow_colorbt[i] , 4 , 5 , i , i + 1 );
>> ++    gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_label[i] , 0 , 0 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_fontbt[i] , 1 , 0 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_colorbt[i] , 2 , 0 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_shadow_togglebt[i] , 3 , 0 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_shadow_colorbt[i] , 4 , 0 , 1 , 1 );
>> +     g_object_set_data( G_OBJECT(tex_font_fontbt[i]) , "fontnum" , GINT_TO_POINTER(i) );
>> +     g_object_set_data( G_OBJECT(tex_font_fontbt[i]) , "color" , tex_font_colorbt[i] );
>> +     g_object_set_data( G_OBJECT(tex_font_fontbt[i]) , "use_shadow" , tex_font_shadow_togglebt[i] );
>> +@@ -430,7 +432,7 @@ static void
>> + aosd_cb_configure_decoration_color_commit ( GtkWidget * colorbt , aosd_cfg_t * cfg )
>> + {
>> +   aosd_color_t color;
>> +-  chooser_get_aosd_color ((GtkColorButton *) colorbt, & color);
>> ++  chooser_get_aosd_color ((GtkColorChooser *) colorbt, & color);
>> + 
>> +   int colnum = GPOINTER_TO_INT( g_object_get_data( G_OBJECT(colorbt) , "colnum" ) );
>> +   cfg->decoration.colors[colnum] = color;
>> +@@ -451,7 +453,7 @@ aosd_ui_configure_decoration ( aosd_cfg_t * cfg )
>> +   GtkWidget *dec_rstyleopts_frame, *dec_rstyleopts_grid;
>> +   int colors_max_num = 0, i = 0;
>> + 
>> +-  dec_hbox = gtk_hbox_new( FALSE , 4 );
>> ++  dec_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(dec_hbox) , 6 );
>> + 
>> +   /* decoration style model
>> +@@ -495,31 +497,31 @@ aosd_ui_configure_decoration ( aosd_cfg_t * cfg )
>> +   gtk_box_pack_start( GTK_BOX(dec_hbox) , dec_rstyle_lv_frame , FALSE , FALSE , 0 );
>> +   aosd_cb_list.append( dec_rstyle_lv , aosd_cb_configure_decoration_style_commit );
>> + 
>> +-  dec_rstyle_hbox = gtk_vbox_new( FALSE , 4 );
>> ++  dec_rstyle_hbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 4 );
>> +   gtk_box_pack_start( GTK_BOX(dec_hbox) , dec_rstyle_hbox , TRUE , TRUE , 0 );
>> + 
>> +   /* in colors_max_num now there's the maximum number of colors used by decoration styles */
>> +   dec_rstyleopts_frame = gtk_frame_new( _("Colors") );
>> +-  dec_rstyleopts_grid = gtk_table_new (0, 0, FALSE);
>> ++  dec_rstyleopts_grid = gtk_grid_new();
>> +   gtk_container_set_border_width( GTK_CONTAINER(dec_rstyleopts_grid) , 6 );
>> +-  gtk_table_set_row_spacings( GTK_TABLE(dec_rstyleopts_grid) , 4 );
>> +-  gtk_table_set_col_spacings( GTK_TABLE(dec_rstyleopts_grid) , 8 );
>> ++  gtk_grid_set_row_spacing( GTK_GRID(dec_rstyleopts_grid) , 4 );
>> ++  gtk_grid_set_column_spacing( GTK_GRID(dec_rstyleopts_grid) , 8 );
>> +   gtk_container_add( GTK_CONTAINER(dec_rstyleopts_frame) , dec_rstyleopts_grid );
>> +   for ( i = 0 ; i < colors_max_num ; i++ )
>> +   {
>> +     GtkWidget *hbox, *label;
>> +     char *label_str = nullptr;
>> +-    hbox = gtk_hbox_new( FALSE , 4 );
>> ++    hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 );
>> +     label_str = g_strdup_printf( _("Color %i:") , i+1 );
>> +     label = gtk_label_new( label_str );
>> +     g_free( label_str );
>> + 
>> +     GtkWidget * colorbt = gtk_color_button_new ();
>> +-    chooser_set_aosd_color ((GtkColorButton *) colorbt, & cfg->decoration.colors[i]);
>> ++    chooser_set_aosd_color ((GtkColorChooser *) colorbt, & cfg->decoration.colors[i]);
>> + 
>> +     gtk_box_pack_start( GTK_BOX(hbox) , label , FALSE , FALSE , 0 );
>> +     gtk_box_pack_start( GTK_BOX(hbox) , colorbt , FALSE , FALSE , 0 );
>> +-    gtk_table_attach_defaults( GTK_TABLE(dec_rstyleopts_grid) , hbox , (i % 3) , (i % 3) + 1, (i / 3) , (i / 3) + 1);
>> ++    gtk_grid_attach( GTK_GRID(dec_rstyleopts_grid) , hbox , (i % 3) , (i / 3) , 1 , 1 );
>> +     g_object_set_data( G_OBJECT(colorbt) , "colnum" , GINT_TO_POINTER(i) );
>> +     aosd_cb_list.append( colorbt , aosd_cb_configure_decoration_color_commit );
>> +   }
>> +@@ -573,7 +575,7 @@ aosd_ui_configure_trigger ( aosd_cfg_t * cfg )
>> +   gtk_notebook_set_show_tabs( GTK_NOTEBOOK(tri_event_nb) , FALSE );
>> +   gtk_notebook_set_show_border( GTK_NOTEBOOK(tri_event_nb) , FALSE );
>> + 
>> +-  tri_hbox = gtk_hbox_new( FALSE , 4 );
>> ++  tri_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(tri_hbox) , 6 );
>> + 
>> +   /* trigger model
>> +@@ -591,19 +593,19 @@ aosd_ui_configure_trigger ( aosd_cfg_t * cfg )
>> +     gtk_list_store_set( tri_event_store , &iter ,
>> +       0 , _(aosd_trigger_get_name( i )) ,
>> +       1 , i , 2 , i , -1 );
>> +-    vbox = gtk_vbox_new( FALSE , 0 );
>> ++    vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 );
>> +     gtk_container_set_border_width( GTK_CONTAINER(vbox) , 6 );
>> +     label = gtk_label_new( _(aosd_trigger_get_desc( i )) );
>> +     gtk_label_set_line_wrap( GTK_LABEL(label) , TRUE );
>> +     gtk_label_set_max_width_chars( GTK_LABEL(label), 40 );
>> +-    gtk_misc_set_alignment( GTK_MISC(label) , 0.0 , 0.0 );
>> ++    gtk_widget_set_halign( label , GTK_ALIGN_START );
>> +     checkbt = gtk_check_button_new_with_label( _("Enable trigger") );
>> +     if ( cfg->trigger.enabled[i] )
>> +       gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(checkbt) , TRUE );
>> +     else
>> +       gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(checkbt) , FALSE );
>> +     gtk_box_pack_start( GTK_BOX(vbox) , checkbt , FALSE , FALSE , 0 );
>> +-    gtk_box_pack_start( GTK_BOX(vbox) , gtk_hseparator_new() , FALSE , FALSE , 4 );
>> ++    gtk_box_pack_start( GTK_BOX(vbox) , gtk_separator_new(GTK_ORIENTATION_HORIZONTAL) , FALSE , FALSE , 4 );
>> +     gtk_box_pack_start( GTK_BOX(vbox) , label , FALSE , FALSE , 0 );
>> +     frame = gtk_frame_new( nullptr );
>> +     gtk_container_add( GTK_CONTAINER(frame) , vbox );
>> +@@ -699,10 +701,10 @@ aosd_ui_configure_misc ( aosd_cfg_t * cfg )
>> +   GtkWidget *mis_transp_status_frame, *mis_transp_status_hbox;
>> +   GtkWidget *mis_transp_status_img, *mis_transp_status_label;
>> + 
>> +-  mis_vbox = gtk_vbox_new( FALSE , 0 );
>> ++  mis_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 );
>> +   gtk_container_set_border_width( GTK_CONTAINER(mis_vbox) , 6 );
>> + 
>> +-  mis_transp_vbox = gtk_vbox_new( FALSE , 0 );
>> ++  mis_transp_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 );
>> +   mis_transp_frame = gtk_frame_new( _("Transparency") );
>> +   gtk_container_set_border_width( GTK_CONTAINER(mis_transp_vbox) , 6 );
>> +   gtk_container_add( GTK_CONTAINER(mis_transp_frame) , mis_transp_vbox );
>> +@@ -719,16 +721,15 @@ aosd_ui_configure_misc ( aosd_cfg_t * cfg )
>> +   gtk_box_pack_start( GTK_BOX(mis_transp_vbox) , mis_transp_fake_rbt , TRUE , TRUE , 0 );
>> +   gtk_box_pack_start( GTK_BOX(mis_transp_vbox) , mis_transp_real_rbt , TRUE , TRUE , 0 );
>> + 
>> +-  mis_transp_status_hbox = gtk_hbox_new( FALSE , 4 );
>> ++  mis_transp_status_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 );
>> +   mis_transp_status_frame = gtk_frame_new( nullptr );
>> +   gtk_container_set_border_width( GTK_CONTAINER(mis_transp_status_hbox) , 3 );
>> +   gtk_container_add( GTK_CONTAINER(mis_transp_status_frame) , mis_transp_status_hbox );
>> +   gtk_box_pack_start( GTK_BOX(mis_transp_vbox) , mis_transp_status_frame , TRUE , TRUE , 0 );
>> + 
>> +   mis_transp_status_img = gtk_image_new();
>> +-  gtk_misc_set_alignment( GTK_MISC(mis_transp_status_img) , 0.5 , 0 );
>> +   mis_transp_status_label = gtk_label_new( "" );
>> +-  gtk_misc_set_alignment( GTK_MISC(mis_transp_status_label) , 0 , 0.5 );
>> ++  gtk_widget_set_halign( mis_transp_status_label , GTK_ALIGN_START );
>> +   gtk_label_set_line_wrap( GTK_LABEL(mis_transp_status_label) , TRUE );
>> +   gtk_box_pack_start( GTK_BOX(mis_transp_status_hbox) , mis_transp_status_img , FALSE , FALSE , 0 );
>> +   gtk_box_pack_start( GTK_BOX(mis_transp_status_hbox) , mis_transp_status_label , TRUE , TRUE , 0 );
>> +--- src/blur_scope/blur_scope.cc.old
>> ++++ src/blur_scope/blur_scope.cc
>> +@@ -73,13 +73,14 @@ public:
>> + 
>> + private:
>> +     void resize (int w, int h);
>> ++    void draw_to_cairo (cairo_t * cr);
>> +     void draw ();
>> + 
>> +     void blur ();
>> +     void draw_vert_line (int x, int y1, int y2);
>> + 
>> +     static gboolean configure_event (GtkWidget * widget, GdkEventConfigure * event, void * user);
>> +-    static gboolean expose_event (GtkWidget * widget, GdkEventExpose * event, void * user);
>> ++    static gboolean draw_cb (GtkWidget * widget, cairo_t * cr, void * user);
>> + 
>> +     GtkWidget * area = nullptr;
>> +     int width = 0, height = 0, stride = 0, image_size = 0;
>> +@@ -115,17 +116,22 @@ void BlurScope::resize (int w, int h)
>> +     corner = image + stride + 1;
>> + }
>> + 
>> +-void BlurScope::draw ()
>> ++void BlurScope::draw_to_cairo (cairo_t * cr)
>> + {
>> +-    if (! area || ! gtk_widget_get_window (area))
>> +-        return;
>> +-
>> +-    cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (area));
>> +     cairo_surface_t * surf = cairo_image_surface_create_for_data
>> +      ((unsigned char *) image, CAIRO_FORMAT_RGB24, width, height, stride << 2);
>> +     cairo_set_source_surface (cr, surf, 0, 0);
>> +     cairo_paint (cr);
>> +     cairo_surface_destroy (surf);
>> ++}
>> ++
>> ++void BlurScope::draw ()
>> ++{
>> ++    if (! area || ! gtk_widget_get_window (area))
>> ++        return;
>> ++
>> ++    cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (area));
>> ++    draw_to_cairo (cr);
>> +     cairo_destroy (cr);
>> + }
>> + 
>> +@@ -135,9 +141,9 @@ gboolean BlurScope::configure_event (GtkWidget * widget, GdkEventConfigure * eve
>> +     return TRUE;
>> + }
>> + 
>> +-gboolean BlurScope::expose_event (GtkWidget * widget, GdkEventExpose * event, void * user)
>> ++gboolean BlurScope::draw_cb (GtkWidget * widget, cairo_t * cr, void * user)
>> + {
>> +-    ((BlurScope *) user)->draw ();
>> ++    ((BlurScope *) user)->draw_to_cairo (cr);
>> +     return TRUE;
>> + }
>> + 
>> +@@ -147,7 +153,7 @@ void * BlurScope::get_gtk_widget ()
>> +     gtk_widget_set_size_request (area, D_WIDTH, D_HEIGHT);
>> +     resize (D_WIDTH, D_HEIGHT);
>> + 
>> +-    g_signal_connect (area, "expose-event", (GCallback) expose_event, this);
>> ++    g_signal_connect (area, "draw_cb", (GCallback) draw_cb, this);
>> +     g_signal_connect (area, "configure-event", (GCallback) configure_event, this);
>> +     g_signal_connect (area, "destroy", (GCallback) gtk_widget_destroyed, & area);
>> + 
>> +@@ -216,17 +222,25 @@ void BlurScope::render_mono_pcm (const float * pcm)
>> + 
>> + static void color_set_cb (GtkWidget * chooser)
>> + {
>> +-    GdkColor gdk_color;
>> +-    gtk_color_button_get_color ((GtkColorButton *) chooser, & gdk_color);
>> +-    bscope_color = ((gdk_color.red & 0xff00) << 8) | (gdk_color.green & 0xff00) | (gdk_color.blue >> 8);
>> ++    GdkRGBA rgba;
>> ++    gtk_color_chooser_get_rgba ((GtkColorChooser *) chooser, & rgba);
>> ++
>> ++    int red = round (rgba.red * 255);
>> ++    int green = round (rgba.green * 255);
>> ++    int blue = round (rgba.blue * 255);
>> ++    bscope_color = (red << 16) | (green << 8) | blue;
>> + }
>> + 
>> + static void /* GtkWidget */ * bscope_get_color_chooser (void)
>> + {
>> +-    GdkColor gdk_color = {0, (uint16_t) ((bscope_color & 0xff0000) >> 8),
>> +-     (uint16_t) (bscope_color & 0xff00), (uint16_t) ((bscope_color & 0xff) << 8)};
>> +-    GtkWidget * chooser = gtk_color_button_new_with_color (& gdk_color);
>> +-    gtk_color_button_set_use_alpha ((GtkColorButton *) chooser, FALSE);
>> ++    GdkRGBA rgba = {
>> ++        ((bscope_color & 0xff0000) >> 16) / 255.0,
>> ++        ((bscope_color & 0xff00) >> 8) / 255.0,
>> ++        (bscope_color & 0xff) / 255.0
>> ++    };
>> ++
>> ++    GtkWidget * chooser = gtk_color_button_new_with_rgba (& rgba);
>> ++    gtk_color_chooser_set_use_alpha ((GtkColorChooser *) chooser, false);
>> + 
>> +     g_signal_connect (chooser, "color-set", (GCallback) color_set_cb, nullptr);
>> + 
>> +--- src/cairo-spectrum/cairo-spectrum.cc.old
>> ++++ src/cairo-spectrum/
>> cairo-spectrum.cc
>> 
>> +@@ -183,12 +183,29 @@ static void hsv_to_rgb (float h, float s, float v, float * r, float * g, float *
>> +     * b = v * (1 - s * (1 - * b));
>> + }
>> + 
>> +-static void get_color (GtkWidget * widget, int i, float * r, float * g, float * b)
>> ++static void get_color (gint i, gfloat * r, gfloat * g, gfloat * b)
>> + {
>> +-    GdkColor * c = (gtk_widget_get_style (widget))->base + GTK_STATE_SELECTED;
>> +-    float h, s, v;
>> ++    static GdkRGBA c;
>> ++    static gboolean valid = FALSE;
>> ++    gfloat h, s, v, n;
>> + 
>> +-    rgb_to_hsv (c->red / 65535.0, c->green / 65535.0, c->blue / 65535.0, & h, & s, & v);
>> ++    if (! valid)
>> ++    {
>> ++        /* we want a color that matches the current theme
>> ++         * selected color of a GtkEntry should be reasonable */
>> ++        GtkStyleContext * style = gtk_style_context_new ();
>> ++        GtkWidgetPath * path = gtk_widget_path_new ();
>> ++        gtk_widget_path_append_type (path, GTK_TYPE_ENTRY);
>> ++        gtk_style_context_set_path (style, path);
>> ++        gtk_widget_path_free (path);
>> ++        gtk_style_context_add_class (style, "entry");
>> ++        gtk_style_context_get_background_color (style,
>> ++         (GtkStateFlags) (GTK_STATE_FLAG_FOCUSED | GTK_STATE_FLAG_SELECTED), & c);
>> ++        g_object_unref (style);
>> ++        valid = TRUE;
>> ++    }
>> ++
>> ++    rgb_to_hsv (c.red, c.green, c.blue, & h, & s, & v);
>> + 
>> +     if (s < 0.1) /* monochrome theme? use blue instead */
>> +     {
>> +@@ -196,8 +213,9 @@ static void get_color (GtkWidget * widget, int i, float * r, float * g, float *
>> +         s = 0.75;
>> +     }
>> + 
>> +-    s = 1 - 0.9 * i / (bands - 1);
>> +-    v = 0.75 + 0.25 * i / (bands - 1);
>> ++    n = i / (gfloat) (bands - 1);
>> ++    s = 1 - 0.9 * n;
>> ++    v = 0.75 + 0.25 * n;
>> + 
>> +     hsv_to_rgb (h, s, v, r, g, b);
>> + }
>> +@@ -218,7 +236,7 @@ static void draw_visualizer (GtkWidget *widget, cairo_t *cr)
>> +         int x = ((width / bands) * i) + 2;
>> +         float r, g, b;
>> + 
>> +-        get_color (widget, i, & r, & g, & b);
>> ++        get_color (i, & r, & g, & b);
>> +         cairo_set_source_rgb (cr, r, g, b);
>> +         cairo_rectangle (cr, x + 1, height - (bars[i] * height / 40),
>> +          (width / bands) - 1, (bars[i] * height / 40));
>> +@@ -239,14 +257,11 @@ static gboolean configure_event (GtkWidget * widget, GdkEventConfigure * event)
>> +     return TRUE;
>> + }
>> + 
>> +-static gboolean draw_event (GtkWidget * widget)
>> ++static gboolean draw_event (GtkWidget * widget, cairo_t * cr, GtkWidget * area)
>> + {
>> +-    cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget));
>> +-
>> +     draw_background (widget, cr);
>> +     draw_visualizer (widget, cr);
>> + 
>> +-    cairo_destroy (cr);
>> +     return TRUE;
>> + }
>> + 
>> +@@ -255,7 +270,7 @@ void * CairoSpectrum::get_gtk_widget ()
>> +     GtkWidget *area = gtk_drawing_area_new();
>> +     spect_widget = area;
>> + 
>> +-    g_signal_connect(area, "expose-event", (GCallback) draw_event, nullptr);
>> ++    g_signal_connect(area, "draw", (GCallback) draw_event, nullptr);
>> +     g_signal_connect(area, "configure-event", (GCallback) configure_event, nullptr);
>> +     g_signal_connect(area, "destroy", (GCallback) gtk_widget_destroyed, & spect_widget);
>> + 
>> +--- src/filewriter/filewriter.cc.old
>> ++++ src/filewriter/
>> filewriter.cc
>> 
>> +@@ -378,9 +378,9 @@ static void filenamefromfilename_cb(GtkWidget *button, void * data)
>> + 
>> + static void * file_configure (void)
>> + {
>> +-        GtkWidget * configure_vbox = gtk_vbox_new (FALSE, 6);
>> ++        GtkWidget * configure_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> + 
>> +-        GtkWidget * fileext_hbox = gtk_hbox_new (FALSE, 5);
>> ++        GtkWidget * fileext_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_box_pack_start(GTK_BOX(configure_vbox), fileext_hbox, FALSE, FALSE, 0);
>> + 
>> +         GtkWidget * fileext_label = gtk_label_new (_("Output file format:"));
>> +@@ -404,9 +404,9 @@ static void * file_configure (void)
>> +         gtk_widget_set_sensitive(plugin_button, plugin->configure != nullptr);
>> +         gtk_box_pack_end(GTK_BOX(fileext_hbox), plugin_button, FALSE, FALSE, 0);
>> + 
>> +-        gtk_box_pack_start(GTK_BOX(configure_vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
>> ++        gtk_box_pack_start(GTK_BOX(configure_vbox), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 0);
>> + 
>> +-        GtkWidget * saveplace_hbox = gtk_hbox_new (FALSE, 5);
>> ++        GtkWidget * saveplace_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_add(GTK_CONTAINER(configure_vbox), saveplace_hbox);
>> + 
>> +         GtkWidget * saveplace1 = gtk_radio_button_new_with_label (nullptr,
>> +@@ -421,7 +421,7 @@ static void * file_configure (void)
>> + 
>> +         gtk_box_pack_start ((GtkBox *) saveplace_hbox, saveplace2, FALSE, FALSE, 0);
>> + 
>> +-        path_hbox = gtk_hbox_new (FALSE, 5);
>> ++        path_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_box_pack_start(GTK_BOX(configure_vbox), path_hbox, FALSE, FALSE, 0);
>> + 
>> +         GtkWidget * path_label = gtk_label_new (_("Output file folder:"));
>> +@@ -436,9 +436,9 @@ static void * file_configure (void)
>> +         if (save_original)
>> +             gtk_widget_set_sensitive(path_hbox, FALSE);
>> + 
>> +-        gtk_box_pack_start(GTK_BOX(configure_vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
>> ++        gtk_box_pack_start(GTK_BOX(configure_vbox), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 0);
>> + 
>> +-        filenamefrom_hbox = gtk_hbox_new (FALSE, 5);
>> ++        filenamefrom_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_add(GTK_CONTAINER(configure_vbox), filenamefrom_hbox);
>> + 
>> +         filenamefrom_label = gtk_label_new(_("Generate file name from:"));
>> +@@ -463,7 +463,7 @@ static void * file_configure (void)
>> +         if (filenamefromtags)
>> +             gtk_widget_set_sensitive(use_suffix_toggle, FALSE);
>> + 
>> +-        gtk_box_pack_start(GTK_BOX(configure_vbox), gtk_hseparator_new(), FALSE, FALSE, 0);
>> ++        gtk_box_pack_start(GTK_BOX(configure_vbox), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 0);
>> + 
>> +         prependnumber_toggle = gtk_check_button_new_with_label(_("Prepend track number to file name"));
>> +         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prependnumber_toggle), prependnumber);
>> +--- src/filewriter/mp3.cc.old
>> ++++ src/filewriter/
>> mp3.cc
>> 
>> +@@ -669,10 +669,10 @@ static void mp3_configure(void)
>> + 
>> +         /* Quality */
>> + 
>> +-        quality_vbox = gtk_vbox_new (FALSE, 5);
>> ++        quality_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(quality_vbox), 5);
>> + 
>> +-        quality_hbox1 = gtk_hbox_new (FALSE, 5);
>> ++        quality_hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_box_pack_start(GTK_BOX(quality_vbox), quality_hbox1, FALSE,
>> +                            FALSE, 0);
>> + 
>> +@@ -684,7 +684,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(quality_hbox1), alg_quality_frame,
>> +                            FALSE, FALSE, 0);
>> + 
>> +-        alg_quality_hbox = gtk_hbox_new (FALSE, 5);
>> ++        alg_quality_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(alg_quality_hbox),
>> +                                        10);
>> +         gtk_container_add(GTK_CONTAINER(alg_quality_frame),
>> +@@ -708,7 +708,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(quality_hbox1), samplerate_frame, FALSE,
>> +                            FALSE, 0);
>> + 
>> +-        samplerate_hbox = gtk_hbox_new (FALSE, 5);
>> ++        samplerate_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(samplerate_hbox), 10);
>> +         gtk_container_add(GTK_CONTAINER(samplerate_frame),
>> +                           samplerate_hbox);
>> +@@ -731,7 +731,7 @@ static void mp3_configure(void)
>> +         g_signal_connect (combo, "changed", (GCallback) samplerate_changed, nullptr);
>> + 
>> +         samplerate_label = gtk_label_new(_("(Hz)"));
>> +-        gtk_misc_set_alignment(GTK_MISC(samplerate_label), 0, 0.5);
>> ++        gtk_widget_set_halign(samplerate_label, GTK_ALIGN_START);
>> +         gtk_box_pack_start(GTK_BOX(samplerate_hbox), samplerate_label,
>> +                            FALSE, FALSE, 0);
>> + 
>> +@@ -744,14 +744,14 @@ static void mp3_configure(void)
>> +                            FALSE, 0);
>> + 
>> +         // vbox sorrounding hbox1 and hbox2
>> +-        enc_quality_vbox = gtk_vbox_new (FALSE, 5);
>> ++        enc_quality_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(enc_quality_vbox), 10);
>> + 
>> +         // pack vbox to frame
>> +         gtk_container_add(GTK_CONTAINER(enc_quality_frame), enc_quality_vbox);
>> + 
>> +         // hbox1 for bitrate
>> +-        hbox1 = gtk_hbox_new (FALSE, 5);
>> ++        hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_add(GTK_CONTAINER(enc_quality_vbox), hbox1);
>> + 
>> +         // radio 1
>> +@@ -781,7 +781,7 @@ static void mp3_configure(void)
>> +         g_signal_connect (combo, "changed", (GCallback) bitrate_changed, nullptr);
>> + 
>> +         // hbox2 for compression ratio
>> +-        hbox2 = gtk_hbox_new (FALSE, 5);
>> ++        hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_add(GTK_CONTAINER(enc_quality_vbox), hbox2);
>> + 
>> +         // radio 2
>> +@@ -822,7 +822,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(quality_vbox), mode_frame, FALSE, FALSE,
>> +                            0);
>> + 
>> +-        mode_hbox = gtk_hbox_new (FALSE, 10);
>> ++        mode_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
>> +         gtk_container_set_border_width(GTK_CONTAINER(mode_hbox), 10);
>> +         gtk_container_add(GTK_CONTAINER(mode_frame), mode_hbox);
>> + 
>> +@@ -847,7 +847,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(quality_vbox), misc_frame, FALSE, FALSE,
>> +                            0);
>> + 
>> +-        misc_vbox = gtk_vbox_new (FALSE, 5);
>> ++        misc_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(misc_vbox), 5);
>> +         gtk_container_add(GTK_CONTAINER(misc_frame), misc_vbox);
>> + 
>> +@@ -880,7 +880,7 @@ static void mp3_configure(void)
>> + 
>> +         /* VBR/ABR */
>> + 
>> +-        vbr_vbox = gtk_vbox_new (FALSE, 5);
>> ++        vbr_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(vbr_vbox), 5);
>> + 
>> +         /* Toggle VBR */
>> +@@ -889,7 +889,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(vbr_vbox), vbr_toggle, FALSE, FALSE, 2);
>> +         g_signal_connect (vbr_toggle, "toggled", (GCallback) toggle_vbr, nullptr);
>> + 
>> +-        vbr_options_vbox = gtk_vbox_new (FALSE, 0);
>> ++        vbr_options_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
>> +         gtk_container_add(GTK_CONTAINER(vbr_vbox), vbr_options_vbox);
>> +         gtk_widget_set_sensitive(vbr_options_vbox, FALSE);
>> + 
>> +@@ -900,7 +900,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(vbr_options_vbox), vbr_type_frame,
>> +                            FALSE, FALSE, 2);
>> + 
>> +-        vbr_type_hbox = gtk_hbox_new (FALSE, 5);
>> ++        vbr_type_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(vbr_type_hbox), 5);
>> +         gtk_container_add(GTK_CONTAINER(vbr_type_frame), vbr_type_hbox);
>> + 
>> +@@ -933,19 +933,19 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(vbr_options_vbox), vbr_frame, FALSE,
>> +                            FALSE, 2);
>> + 
>> +-        vbr_options_vbox2 = gtk_vbox_new (FALSE, 5);
>> ++        vbr_options_vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(vbr_options_vbox2),
>> +                                        5);
>> +         gtk_container_add(GTK_CONTAINER(vbr_frame), vbr_options_vbox2);
>> + 
>> +-        vbr_options_hbox1 = gtk_hbox_new (FALSE, 5);
>> ++        vbr_options_hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(vbr_options_hbox1),
>> +                                        5);
>> +         gtk_container_add(GTK_CONTAINER(vbr_options_vbox2),
>> +                           vbr_options_hbox1);
>> + 
>> +         vbr_min_label = gtk_label_new(_("Minimum bitrate (kbps):"));
>> +-        gtk_misc_set_alignment(GTK_MISC(vbr_min_label), 0, 0.5);
>> ++        gtk_widget_set_halign(vbr_min_label, GTK_ALIGN_START);
>> +         gtk_box_pack_start(GTK_BOX(vbr_options_hbox1), vbr_min_label, TRUE,
>> +                            TRUE, 0);
>> + 
>> +@@ -964,14 +964,14 @@ static void mp3_configure(void)
>> +          0);
>> +         g_signal_connect (combo, "changed", (GCallback) vbr_min_changed, nullptr);
>> + 
>> +-        vbr_options_hbox2 = gtk_hbox_new (FALSE, 5);
>> ++        vbr_options_hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(vbr_options_hbox2),
>> +                                        5);
>> +         gtk_container_add(GTK_CONTAINER(vbr_options_vbox2),
>> +                           vbr_options_hbox2);
>> + 
>> +         vbr_max_label = gtk_label_new(_("Maximum bitrate (kbps):"));
>> +-        gtk_misc_set_alignment(GTK_MISC(vbr_max_label), 0, 0.5);
>> ++        gtk_widget_set_halign(vbr_max_label, GTK_ALIGN_START);
>> +         gtk_box_pack_start(GTK_BOX(vbr_options_hbox2), vbr_max_label, TRUE,
>> +                            TRUE, 0);
>> + 
>> +@@ -1010,12 +1010,12 @@ static void mp3_configure(void)
>> +                            FALSE, 2);
>> +         gtk_widget_set_sensitive(abr_frame, FALSE);
>> + 
>> +-        abr_hbox = gtk_hbox_new (FALSE, 5);
>> ++        abr_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(abr_hbox), 5);
>> +         gtk_container_add(GTK_CONTAINER(abr_frame), abr_hbox);
>> + 
>> +         abr_label = gtk_label_new(_("Average bitrate (kbps):"));
>> +-        gtk_misc_set_alignment(GTK_MISC(abr_label), 0, 0.5);
>> ++        gtk_widget_set_halign(abr_label, GTK_ALIGN_START);
>> +         gtk_box_pack_start(GTK_BOX(abr_hbox), abr_label, TRUE, TRUE, 0);
>> + 
>> +         combo = gtk_combo_box_text_new ();
>> +@@ -1035,14 +1035,14 @@ static void mp3_configure(void)
>> + 
>> +         /* Quality Level */
>> + 
>> +-        vbr_options_hbox3 = gtk_hbox_new (FALSE, 5);
>> ++        vbr_options_hbox3 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(vbr_options_hbox3),
>> +                                        5);
>> +         gtk_container_add(GTK_CONTAINER(vbr_options_vbox),
>> +                           vbr_options_hbox3);
>> + 
>> +         vbr_quality_label = gtk_label_new(_("VBR quality level:"));
>> +-        gtk_misc_set_alignment(GTK_MISC(vbr_quality_label), 0, 0.5);
>> ++        gtk_widget_set_halign(vbr_quality_label, GTK_ALIGN_START);
>> +         gtk_box_pack_start(GTK_BOX(vbr_options_hbox3), vbr_quality_label,
>> +                            TRUE, TRUE, 0);
>> + 
>> +@@ -1077,7 +1077,7 @@ static void mp3_configure(void)
>> + 
>> +         /* Tags */
>> + 
>> +-        tags_vbox = gtk_vbox_new (FALSE, 5);
>> ++        tags_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(tags_vbox), 5);
>> + 
>> +         /* Frame Params */
>> +@@ -1088,7 +1088,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(tags_vbox), tags_frames_frame, FALSE,
>> +                            FALSE, 2);
>> + 
>> +-        tags_frames_hbox = gtk_hbox_new (FALSE, 5);
>> ++        tags_frames_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(tags_frames_hbox), 5);
>> +         gtk_container_add(GTK_CONTAINER(tags_frames_frame),
>> +                           tags_frames_hbox);
>> +@@ -1122,7 +1122,7 @@ static void mp3_configure(void)
>> +         gtk_box_pack_start(GTK_BOX(tags_vbox), tags_id3_frame, FALSE,
>> +                            FALSE, 2);
>> + 
>> +-        tags_id3_vbox = gtk_vbox_new (FALSE, 5);
>> ++        tags_id3_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(tags_id3_vbox), 5);
>> +         gtk_container_add(GTK_CONTAINER(tags_id3_frame), tags_id3_vbox);
>> + 
>> +@@ -1134,7 +1134,7 @@ static void mp3_configure(void)
>> +         g_signal_connect (tags_force_id3v2_toggle, "toggled", (GCallback)
>> +          force_v2_toggle, nullptr);
>> + 
>> +-        tags_id3_hbox = gtk_hbox_new (FALSE, 5);
>> ++        tags_id3_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_add(GTK_CONTAINER(tags_id3_vbox), tags_id3_hbox);
>> + 
>> +         tags_only_v1_toggle =
>> +--- src/filewriter/vorbis.cc.old
>> ++++ src/filewriter/
>> vorbis.cc
>> 
>> +@@ -207,17 +207,17 @@ static void vorbis_configure(void)
>> +         gtk_container_set_border_width(GTK_CONTAINER(quality_frame), 5);
>> +         gtk_box_pack_start(GTK_BOX(vbox), quality_frame, FALSE, FALSE, 2);
>> + 
>> +-        quality_vbox = gtk_vbox_new (FALSE, 5);
>> ++        quality_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(quality_vbox), 10);
>> +         gtk_container_add(GTK_CONTAINER(quality_frame), quality_vbox);
>> + 
>> +         /* quality option: vbr level */
>> +-        quality_hbox1 = gtk_hbox_new (FALSE, 5);
>> ++        quality_hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
>> +         gtk_container_set_border_width(GTK_CONTAINER(quality_hbox1), 10);
>> +         gtk_container_add(GTK_CONTAINER(quality_vbox), quality_hbox1);
>> + 
>> +         quality_label = gtk_label_new(_("Quality level (0 - 10):"));
>> +-        gtk_misc_set_alignment(GTK_MISC(quality_label), 0, 0.5);
>> ++        gtk_widget_set_halign(quality_label, GTK_ALIGN_START);
>> +         gtk_box_pack_start(GTK_BOX(quality_hbox1), quality_label, TRUE, TRUE, 0);
>> + 
>> +         quality_adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 10, 0.1, 1, 0);
>> +--- src/gl-spectrum/gl-spectrum.cc.old
>> ++++ src/gl-spectrum/
>> gl-spectrum.cc
>> 
>> +@@ -246,7 +246,7 @@ static void draw_bars ()
>> +     glPopMatrix ();
>> + }
>> + 
>> +-static gboolean draw_cb (GtkWidget * widget)
>> ++static gboolean draw_cb (GtkWidget * widget, cairo_t * cr)
>> + {
>> + #ifdef GDK_WINDOWING_X11
>> +     if (! s_context)
>> +@@ -415,7 +415,7 @@ void * GLSpectrum::get_gtk_widget ()
>> + 
>> +     s_widget = gtk_drawing_area_new ();
>> + 
>> +-    g_signal_connect (s_widget, "expose-event", (GCallback) draw_cb, nullptr);
>> ++    g_signal_connect (s_widget, "draw", (GCallback) draw_cb, nullptr);
>> +     g_signal_connect (s_widget, "realize", (GCallback) widget_realized, nullptr);
>> +     g_signal_connect (s_widget, "destroy", (GCallback) widget_destroyed, nullptr);
>> + 
>> +--- src/gtkui/columns.cc.old
>> ++++ src/gtkui/
>> columns.cc
>> 
>> +@@ -294,7 +294,7 @@ void * pw_col_create_chooser ()
>> +             avail.append (i, false);
>> +     }
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     gtk_widget_set_size_request (hbox, -1, 160);
>> + 
>> +     GtkWidget * scroll = gtk_scrolled_window_new (nullptr, nullptr);
>> +@@ -308,7 +308,7 @@ void * pw_col_create_chooser ()
>> +     audgui_list_add_column (avail_list, _("Available columns"), 0, G_TYPE_STRING, -1);
>> +     gtk_container_add ((GtkContainer *) scroll, avail_list);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) hbox, vbox, false, false, 0);
>> + 
>> +     GtkWidget * button = gtk_button_new ();
>> +--- src/gtkui/layout.cc.old
>> ++++ src/gtkui/
>> layout.cc
>> 
>> +@@ -97,8 +97,9 @@ static int item_by_name (Item * item, const char * name)
>> + GtkWidget * layout_new ()
>> + {
>> +     g_return_val_if_fail (! layout, nullptr);
>> +-    layout = gtk_alignment_new (0, 0, 1, 1);
>> +-    gtk_alignment_set_padding ((GtkAlignment *) layout, 3, 3, 3, 3);
>> ++    layout = gtk_frame_new (NULL);
>> ++    gtk_frame_set_shadow_type ((GtkFrame *) layout, GTK_SHADOW_NONE);
>> ++    gtk_container_set_border_width ((GtkContainer *) layout, 3);
>> +     NULL_ON_DESTROY (layout);
>> +     return layout;
>> + }
>> +@@ -187,7 +188,7 @@ static GtkWidget * vbox_new (GtkWidget * widget, const char * name)
>> + {
>> +     g_return_val_if_fail (widget && name, nullptr);
>> + 
>> +-    GtkWidget * vbox = gtk_vbox_new (false, 2);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
>> + 
>> +     GtkWidget * ebox = gtk_event_box_new ();
>> +     gtk_box_pack_start ((GtkBox *) vbox, ebox, false, false, 0);
>> +@@ -198,7 +199,7 @@ static GtkWidget * vbox_new (GtkWidget * widget, const char * name)
>> +     char * markup = g_markup_printf_escaped ("<small><b>%s</b></small>", name);
>> +     gtk_label_set_markup ((GtkLabel *) label, markup);
>> +     g_free (markup);
>> +-    gtk_misc_set_alignment ((GtkMisc *) label, 0, 0);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_START);
>> +     gtk_container_add ((GtkContainer *) ebox, label);
>> + 
>> +     gtk_box_pack_start ((GtkBox *) vbox, widget, true, true, 0);
>> +@@ -229,10 +230,13 @@ static gboolean restore_size_cb (RestoreSizeData * d)
>> + 
>> + static GtkWidget * paned_new (bool vertical, bool after, int w, int h)
>> + {
>> +-    GtkWidget * paned = vertical ? gtk_vpaned_new () : gtk_hpaned_new ();
>> ++    GtkWidget * paned = gtk_paned_new (vertical ? GTK_ORIENTATION_VERTICAL :
>> ++     GTK_ORIENTATION_HORIZONTAL);
>> + 
>> +-    GtkWidget * mine = gtk_alignment_new (0, 0, 1, 1);
>> +-    GtkWidget * next = gtk_alignment_new (0, 0, 1, 1);
>> ++    GtkWidget * mine = gtk_frame_new (nullptr);
>> ++    GtkWidget * next = gtk_frame_new (nullptr);
>> ++    gtk_frame_set_shadow_type ((GtkFrame *) mine, GTK_SHADOW_NONE);
>> ++    gtk_frame_set_shadow_type ((GtkFrame *) next, GTK_SHADOW_NONE);
>> +     gtk_paned_pack1 ((GtkPaned *) paned, after ? next : mine, after, false);
>> +     gtk_paned_pack2 ((GtkPaned *) paned, after ? mine : next, ! after, false);
>> + 
>> +--- src/gtkui/ui_gtk.cc.old
>> ++++ src/gtkui/ui_gtk.cc
>> +@@ -794,14 +794,16 @@ bool GtkUI::init ()
>> +     accel = gtk_accel_group_new ();
>> +     gtk_window_add_accel_group ((GtkWindow *) window, accel);
>> + 
>> +-    vbox_outer = gtk_vbox_new (false, 0);
>> ++    vbox_outer = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
>> +     gtk_container_add ((GtkContainer *) window, vbox_outer);
>> + 
>> +-    menu_box = gtk_hbox_new (false, 0);
>> ++    menu_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> +     gtk_box_pack_start ((GtkBox *) vbox_outer, menu_box, false, false, 0);
>> + 
>> +     toolbar = gtk_toolbar_new ();
>> +     gtk_toolbar_set_style ((GtkToolbar *) toolbar, GTK_TOOLBAR_ICONS);
>> ++    GtkStyleContext * context = gtk_widget_get_style_context (toolbar);
>> ++    gtk_style_context_add_class (context, GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
>> +     gtk_box_pack_start ((GtkBox *) vbox_outer, toolbar, false, false, 0);
>> + 
>> +     /* search button */
>> +@@ -827,12 +829,13 @@ bool GtkUI::init ()
>> +     gtk_tool_item_set_expand (boxitem1, true);
>> +     gtk_toolbar_insert ((GtkToolbar *) toolbar, boxitem1, -1);
>> + 
>> +-    GtkWidget * box1 = gtk_hbox_new (false, 0);
>> ++    GtkWidget * box1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> +     gtk_container_add ((GtkContainer *) boxitem1, box1);
>> + 
>> +-    slider = gtk_hscale_new (nullptr);
>> ++    slider = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, nullptr);
>> +     gtk_scale_set_draw_value ((GtkScale *) slider, false);
>> +     gtk_widget_set_size_request (slider, 120, -1);
>> ++    gtk_widget_set_valign (slider, GTK_ALIGN_CENTER);
>> +     gtk_widget_set_can_focus (slider, false);
>> +     gtk_box_pack_start ((GtkBox *) box1, slider, true, true, 6);
>> + 
>> +@@ -854,7 +857,7 @@ bool GtkUI::init ()
>> +     GtkToolItem * boxitem2 = gtk_tool_item_new ();
>> +     gtk_toolbar_insert ((GtkToolbar *) toolbar, boxitem2, -1);
>> + 
>> +-    GtkWidget * box2 = gtk_hbox_new (false, 0);
>> ++    GtkWidget * box2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> +     gtk_container_add ((GtkContainer *) boxitem2, box2);
>> + 
>> +     volume = gtk_volume_button_new ();
>> +@@ -874,7 +877,7 @@ bool GtkUI::init ()
>> +     GtkWidget * layout = layout_new ();
>> +     gtk_box_pack_start ((GtkBox *) vbox_outer, layout, true, true, 0);
>> + 
>> +-    vbox = gtk_vbox_new (false, 6);
>> ++    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     layout_add_center (vbox);
>> + 
>> +     ui_playlist_notebook_new ();
>> +@@ -969,15 +972,13 @@ void GtkUI::cleanup ()
>> + 
>> + static void menu_position_cb (GtkMenu * menu, int * x, int * y, int * push, void * button)
>> + {
>> +-    GtkAllocation alloc;
>> +     int xorig, yorig, xwin, ywin;
>> + 
>> +-    gtk_widget_get_allocation ((GtkWidget *) button, & alloc);
>> +     gdk_window_get_origin (gtk_widget_get_window (window), & xorig, & yorig);
>> +     gtk_widget_translate_coordinates ((GtkWidget *) button, window, 0, 0, & xwin, & ywin);
>> + 
>> +     * x = xorig + xwin;
>> +-    * y = yorig + ywin + alloc.height;
>> ++    * y = yorig + ywin + gtk_widget_get_allocated_height ((GtkWidget *) button);
>> +     * push = true;
>> + }
>> + 
>> +--- src/gtkui/ui_infoarea.cc.old
>> ++++ src/gtkui/ui_infoarea.cc
>> +@@ -232,12 +232,29 @@ static void hsv_to_rgb (float h, float s, float v, float * r, float * g,
>> +     * b = v * (1 - s * (1 - * b));
>> + }
>> + 
>> +-static void get_color (GtkWidget * widget, int i, float * r, float * g, float * b)
>> ++static void get_color (int i, float * r, float * g, float * b)
>> + {
>> +-    GdkColor * c = (gtk_widget_get_style (widget))->base + GTK_STATE_SELECTED;
>> +-    float h, s, v;
>> ++    static GdkRGBA c;
>> ++    static gboolean valid = FALSE;
>> ++
>> ++    if (! valid)
>> ++    {
>> ++        /* we want a color that matches the current theme
>> ++         * selected color of a GtkEntry should be reasonable */
>> ++        GtkStyleContext * style = gtk_style_context_new ();
>> ++        GtkWidgetPath * path = gtk_widget_path_new ();
>> ++        gtk_widget_path_append_type (path, GTK_TYPE_ENTRY);
>> ++        gtk_style_context_set_path (style, path);
>> ++        gtk_widget_path_free (path);
>> ++        gtk_style_context_add_class (style, "entry");
>> ++        gtk_style_context_get_background_color (style,
>> ++         (GtkStateFlags) (GTK_STATE_FLAG_FOCUSED | GTK_STATE_FLAG_SELECTED), & c);
>> ++        g_object_unref (style);
>> ++        valid = TRUE;
>> ++    }
>> + 
>> +-    rgb_to_hsv (c->red / 65535.0, c->green / 65535.0, c->blue / 65535.0, & h, & s, & v);
>> ++    float h, s, v;
>> ++    rgb_to_hsv (c.red, c.green, c.blue, & h, & s, & v);
>> + 
>> +     if (s < 0.1) /* monochrome theme? use blue instead */
>> +     {
>> +@@ -251,10 +268,8 @@ static void get_color (GtkWidget * widget, int i, float * r, float * g, float *
>> +     hsv_to_rgb (h, s, v, r, g, b);
>> + }
>> + 
>> +-static int expose_vis_cb (GtkWidget * widget, GdkEventExpose * event)
>> ++static gboolean draw_vis_cb (GtkWidget * widget, cairo_t * cr)
>> + {
>> +-    cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget));
>> +-
>> +     clear (widget, cr);
>> + 
>> +     for (int i = 0; i < VIS_BANDS; i++)
>> +@@ -264,7 +279,7 @@ static int expose_vis_cb (GtkWidget * widget, GdkEventExpose * event)
>> +         int m = aud::min (VIS_CENTER + vis.bars[i], HEIGHT);
>> + 
>> +         float r, g, b;
>> +-        get_color (widget, i, & r, & g, & b);
>> ++        get_color (i, & r, & g, & b);
>> + 
>> +         cairo_set_source_rgb (cr, r, g, b);
>> +         cairo_rectangle (cr, x, t, 6, VIS_CENTER - t);
>> +@@ -275,7 +290,6 @@ static int expose_vis_cb (GtkWidget * widget, GdkEventExpose * event)
>> +         cairo_fill (cr);
>> +     }
>> + 
>> +-    cairo_destroy (cr);
>> +     return true;
>> + }
>> + 
>> +@@ -326,16 +340,15 @@ static void draw_title (cairo_t * cr)
>> +          0.7, 0.7, area->last_alpha, "9", area->last_album);
>> + }
>> + 
>> +-static int expose_cb (GtkWidget * widget, GdkEventExpose * event)
>> ++static gboolean draw_cb (GtkWidget * widget, cairo_t * cr)
>> + {
>> +-    cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget));
>> ++    g_return_val_if_fail (area, FALSE);
>> + 
>> +     clear (widget, cr);
>> + 
>> +     draw_album_art (cr);
>> +     draw_title (cr);
>> + 
>> +-    cairo_destroy (cr);
>> +     return true;
>> + }
>> + 
>> +@@ -480,7 +493,7 @@ void ui_infoarea_show_vis (bool show)
>> +         gtk_widget_set_size_request (vis.widget, VIS_WIDTH + 2 * SPACING, HEIGHT);
>> +         gtk_box_pack_start ((GtkBox *) area->box, vis.widget, false, false, 0);
>> + 
>> +-        g_signal_connect (vis.widget, "expose-event", (GCallback) expose_vis_cb, nullptr);
>> ++        g_signal_connect (vis.widget, "draw", (GCallback) draw_vis_cb, nullptr);
>> +         gtk_widget_show (vis.widget);
>> + 
>> +         aud_visualizer_add (& vis);
>> +@@ -530,13 +543,13 @@ GtkWidget * ui_infoarea_new ()
>> +     g_return_val_if_fail (! area, nullptr);
>> +     area = new UIInfoArea ();
>> + 
>> +-    area->box = gtk_hbox_new (false, 0);
>> ++    area->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> + 
>> +     area->main = gtk_drawing_area_new ();
>> +     gtk_widget_set_size_request (area->main, ICON_SIZE + 2 * SPACING, HEIGHT);
>> +     gtk_box_pack_start ((GtkBox *) area->box, area->main, true, true, 0);
>> + 
>> +-    g_signal_connect (area->main, "expose-event", (GCallback) expose_cb, nullptr);
>> ++    g_signal_connect (area->main, "draw", (GCallback) draw_cb, nullptr);
>> + 
>> +     hook_associate ("tuple change", (HookFunction) ui_infoarea_set_title, nullptr);
>> +     hook_associate ("playback ready", (HookFunction) ui_infoarea_playback_start, nullptr);
>> +--- src/gtkui/ui_playlist_notebook.cc.old
>> ++++ src/gtkui/ui_playlist_notebook.cc
>> +@@ -48,6 +48,7 @@ void apply_column_widths (GtkWidget * treeview)
>> +     {
>> +         GtkTreeViewColumn * col = gtk_tree_view_get_column ((GtkTreeView *) treeview, i);
>> +         gtk_tree_view_column_set_fixed_width (col, pw_col_widths[pw_cols[i]]);
>> ++        gtk_tree_view_column_set_expand (col, FALSE);
>> +     }
>> + }
>> + 
>> +@@ -110,14 +111,6 @@ static void close_button_cb (GtkWidget * button, void * id)
>> +     audgui_confirm_playlist_delete (aud_playlist_by_unique_id (GPOINTER_TO_INT (id)));
>> + }
>> + 
>> +-static void close_button_style_set (GtkWidget * button)
>> +-{
>> +-    int w, h;
>> +-    gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (button),
>> +-     GTK_ICON_SIZE_MENU, & w, & h);
>> +-    gtk_widget_set_size_request (button, w + 2, h + 2);
>> +-}
>> +-
>> + static GtkWidget * make_close_button (GtkWidget * ebox, int list)
>> + {
>> +     GtkWidget * button = gtk_button_new ();
>> +@@ -130,19 +123,22 @@ static GtkWidget * make_close_button (GtkWidget * ebox, int list)
>> +     g_signal_connect (button, "clicked", (GCallback) close_button_cb,
>> +      GINT_TO_POINTER (aud_playlist_get_unique_id (list)));
>> + 
>> +-    gtk_rc_parse_string (
>> +-     "style \"gtkui-tab-close-button-style\" {"
>> +-     " GtkButton::default-border = {0, 0, 0, 0}"
>> +-     " GtkButton::default-outside-border = {0, 0, 0, 0}"
>> +-     " GtkButton::inner-border = {0, 0, 0, 0}"
>> +-     " GtkWidget::focus-padding = 0"
>> +-     " GtkWidget::focus-line-width = 0"
>> +-     " xthickness = 0"
>> +-     " ythickness = 0 }"
>> +-     "widget \"*.gtkui-tab-close-button\" style \"gtkui-tab-close-button-style\""
>> +-    );
>> +-
>> +-    g_signal_connect (button, "style-set", (GCallback) close_button_style_set, nullptr);
>> ++    GtkCssProvider * provider = gtk_css_provider_new ();
>> ++    gtk_css_provider_load_from_data (provider,
>> ++     "#gtkui-tab-close-button {"
>> ++     " -GtkButton-default-border: 0;"
>> ++     " -GtkButton-default-outside-border: 0;"
>> ++     " -GtkButton-inner-border: 0;"
>> ++     " -GtkWidget-focus-padding: 0;"
>> ++     " -GtkWidget-focus-line-width: 0;"
>> ++     " margin: 0;"
>> ++     " padding: 0; }",
>> ++     -1, nullptr);
>> ++
>> ++    gtk_style_context_add_provider (gtk_widget_get_style_context (button),
>> ++     GTK_STYLE_PROVIDER (provider),
>> ++     GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
>> ++    g_object_unref (provider);
>> + 
>> +     gtk_widget_show (button);
>> + 
>> +@@ -304,7 +300,7 @@ void ui_playlist_notebook_create_tab (int playlist)
>> +     GtkWidget * ebox = gtk_event_box_new ();
>> +     gtk_event_box_set_visible_window ((GtkEventBox *) ebox, false);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 2);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
>> + 
>> +     GtkWidget * label = gtk_label_new ("");
>> +     set_tab_label (playlist, (GtkLabel *) label);
>> +--- src/gtkui/ui_statusbar.cc.old
>> ++++ src/gtkui/ui_statusbar.cc
>> +@@ -135,7 +135,7 @@ static void ui_statusbar_destroy_cb ()
>> + 
>> + GtkWidget * ui_statusbar_new ()
>> + {
>> +-    GtkWidget * hbox = gtk_hbox_new (false, 3);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
>> +     GtkWidget * status = gtk_widget_new (GTK_TYPE_LABEL, "xalign", 0.0, nullptr);
>> +     GtkWidget * length = gtk_widget_new (GTK_TYPE_LABEL, "xalign", 1.0, nullptr);
>> + 
>> +--- src/hotkey/gui.cc.old
>> ++++ src/hotkey/
>> gui.cc
>> 
>> +@@ -324,16 +324,18 @@ KeyControls* add_event_controls(KeyControls* list,
>> +     }
>> + 
>> +     controls->combobox = gtk_combo_box_text_new();
>> ++    gtk_widget_set_hexpand(controls->combobox, TRUE);
>> +     for (i=0;i<EVENT_MAX;i++)
>> +     {
>> +         gtk_combo_box_text_append_text((GtkComboBoxText *) controls->combobox, _(event_desc[i]));
>> +     }
>> +     gtk_combo_box_set_active(GTK_COMBO_BOX(controls->combobox), controls->hotkey.event);
>> +-    gtk_table_attach_defaults (GTK_TABLE (grid), controls->combobox, 0, 1, row, row + 1);
>> ++    gtk_grid_attach (GTK_GRID (grid), controls->combobox, 0, row, 1, 1);
>> + 
>> + 
>> +     controls->keytext = gtk_entry_new ();
>> +-    gtk_table_attach_defaults (GTK_TABLE (grid), controls->keytext, 1, 2, row, row + 1);
>> ++    gtk_widget_set_hexpand (controls->keytext, TRUE);
>> ++    gtk_grid_attach (GTK_GRID (grid), controls->keytext, 1, row, 1, 1);
>> +     gtk_editable_set_editable(GTK_EDITABLE(controls->keytext), FALSE);
>> + 
>> + 
>> +@@ -351,7 +353,7 @@ KeyControls* add_event_controls(KeyControls* list,
>> +     controls->button = gtk_button_new();
>> +     gtk_button_set_image (GTK_BUTTON (controls->button),
>> +      gtk_image_new_from_icon_name ("edit-delete", GTK_ICON_SIZE_BUTTON));
>> +-    gtk_table_attach_defaults (GTK_TABLE (grid), controls->button, 2, 3, row, row + 1);
>> ++    gtk_grid_attach (GTK_GRID (grid), controls->button, 2, row, 1, 1);
>> +     g_signal_connect (G_OBJECT (controls->button), "clicked",
>> +             G_CALLBACK (clear_keyboard), controls);
>> + 
>> +@@ -363,7 +365,6 @@ void *make_config_widget ()
>> + {
>> +     KeyControls *current_controls;
>> +     GtkWidget *main_vbox, *hbox;
>> +-    GtkWidget *alignment;
>> +     GtkWidget *frame;
>> +     GtkWidget *label;
>> +     GtkWidget *image;
>> +@@ -379,18 +380,15 @@ void *make_config_widget ()
>> + 
>> +     ungrab_keys();
>> + 
>> +-    main_vbox = gtk_vbox_new (FALSE, 4);
>> ++    main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4);
>> + 
>> +-    alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
>> +-    gtk_box_pack_start (GTK_BOX (main_vbox), alignment, FALSE, TRUE, 0);
>> +-    gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 4, 0, 0, 0);
>> +-    hbox = gtk_hbox_new (FALSE, 2);
>> +-    gtk_container_add (GTK_CONTAINER (alignment), hbox);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
>> ++    gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
>> +     image = gtk_image_new_from_icon_name ("dialog-information", GTK_ICON_SIZE_DIALOG);
>> +     gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0);
>> +     label = gtk_label_new (_("Press a key combination inside a text field.\nYou can also bind mouse buttons."));
>> +     gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
>> +-    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_START);
>> + 
>> +     label = gtk_label_new (nullptr);
>> +     gtk_label_set_markup (GTK_LABEL (label), _("Hotkeys:"));
>> +@@ -398,27 +396,23 @@ void *make_config_widget ()
>> +     gtk_frame_set_label_widget (GTK_FRAME (frame), label);
>> +     gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
>> +     gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
>> +-    alignment = gtk_alignment_new (0, 0, 1, 0);
>> +-    gtk_container_add (GTK_CONTAINER (frame), alignment);
>> +-    gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 3, 3, 3, 3);
>> + 
>> +-    grid = gtk_table_new (0, 0, FALSE);
>> +-    gtk_table_set_col_spacings (GTK_TABLE (grid), 2);
>> +-    gtk_container_add (GTK_CONTAINER (alignment), grid);
>> ++    grid = gtk_grid_new ();
>> ++    gtk_container_set_border_width (GTK_CONTAINER (grid), 3);
>> ++    gtk_grid_set_column_spacing (GTK_GRID (grid), 2);
>> ++    gtk_container_add (GTK_CONTAINER (frame), grid);
>> + 
>> +     label = gtk_label_new (nullptr);
>> +     gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
>> +-    gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
>> +     gtk_label_set_markup (GTK_LABEL (label),
>> +             _("<b>Action:</b>"));
>> +-    gtk_table_attach_defaults (GTK_TABLE (grid), label, 0, 1, 0, 1);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
>> + 
>> +     label = gtk_label_new (nullptr);
>> +     gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
>> +-    gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
>> +     gtk_label_set_markup (GTK_LABEL (label),
>> +             _("<b>Key Binding:</b>"));
>> +-    gtk_table_attach_defaults (GTK_TABLE (grid), label, 1, 2, 0, 1);
>> ++    gtk_grid_attach (GTK_GRID (grid), label, 1, 0, 1, 1);
>> + 
>> + 
>> +     hotkey = &(plugin_cfg->first);
>> +@@ -457,10 +451,10 @@ void *make_config_widget ()
>> +     add_event_controls(current_controls, grid, i, &temphotkey);
>> + 
>> + 
>> +-    hbox = gtk_hbox_new (FALSE, 0);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
>> +     gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
>> + 
>> +-    button_box = gtk_hbutton_box_new ();
>> ++    button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
>> +     gtk_box_pack_start (GTK_BOX (hbox), button_box, FALSE, TRUE, 0);
>> +     gtk_button_box_set_layout (GTK_BUTTON_BOX (button_box), GTK_BUTTONBOX_START);
>> +     gtk_box_set_spacing (GTK_BOX (button_box), 4);
>> +@@ -520,9 +514,9 @@ static void clear_keyboard (GtkWidget *widget, void * data)
>> +             gtk_container_remove( GTK_CONTAINER(c->grid) , c->keytext);
>> +             gtk_container_remove( GTK_CONTAINER(c->grid) , c->button);
>> + 
>> +-            gtk_table_attach_defaults (GTK_TABLE (c->grid), c->combobox, 0, 1, row, row + 1);
>> +-            gtk_table_attach_defaults (GTK_TABLE (c->grid), c->keytext, 1, 2, row, row + 1);
>> +-            gtk_table_attach_defaults (GTK_TABLE (c->grid), c->button, 2, 3, row, row + 1);
>> ++            gtk_grid_attach (GTK_GRID (c->grid), c->combobox, 0, row, 1, 1);
>> ++            gtk_grid_attach (GTK_GRID (c->grid), c->keytext, 1, row, 1, 1);
>> ++            gtk_grid_attach (GTK_GRID (c->grid), c->button, 2, row, 1, 1);
>> + 
>> +             g_object_unref(c->combobox);
>> +             g_object_unref(c->keytext);
>> +--- src/ladspa/plugin.cc.old
>> ++++ src/ladspa/
>> plugin.cc
>> 
>> +@@ -33,6 +33,10 @@
>> + 
>> + #include "plugin.h"
>> + 
>> ++#if GTK_CHECK_VERSION (3, 12, 0)
>> ++#define gtk_widget_set_margin_left gtk_widget_set_margin_start
>> ++#endif
>> ++
>> + const char * const LADSPAHost::defaults[] = {
>> +  "plugin_count", "0",
>> +  nullptr};
>> +@@ -423,7 +427,7 @@ static void configure_plugin (LoadedPlugin & loaded)
>> +     {
>> +         ControlData & control = plugin.controls[i];
>> + 
>> +-        GtkWidget * hbox = gtk_hbox_new (FALSE, 6);
>> ++        GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +         gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0);
>> + 
>> +         if (
>> control.is
>> _toggle)
>> +@@ -469,10 +473,10 @@ static void configure_selected ()
>> + 
>> + static void * make_config_widget ()
>> + {
>> +-    GtkWidget * vbox = gtk_vbox_new (FALSE, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_widget_set_size_request (vbox, 480, 360);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (FALSE, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0);
>> + 
>> +     GtkWidget * label = gtk_label_new (_("Module paths:"));
>> +@@ -483,17 +487,17 @@ static void * make_config_widget ()
>> +      _("<small>Separate multiple paths with a colon.\n"
>> +      "These paths are searched in addition to LADSPA_PATH.\n"
>> +      "After adding new paths, press Enter to scan for new plugins.</small>"));
>> +-    gtk_misc_set_padding ((GtkMisc *) label, 12, 6);
>> +-    gtk_misc_set_alignment ((GtkMisc *) label, 0, 0);
>> ++    gtk_widget_set_margin_left (label, 12);
>> ++    gtk_widget_set_halign (label, GTK_ALIGN_START);
>> +     gtk_box_pack_start ((GtkBox *) vbox, label, 0, 0, 0);
>> + 
>> +     GtkWidget * entry = gtk_entry_new ();
>> +     gtk_box_pack_start ((GtkBox *) hbox, entry, 1, 1, 0);
>> + 
>> +-    hbox = gtk_hbox_new (FALSE, 6);
>> ++    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) vbox, hbox, 1, 1, 0);
>> + 
>> +-    GtkWidget * vbox2 = gtk_vbox_new (FALSE, 6);
>> ++    GtkWidget * vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) hbox, vbox2, 1, 1, 0);
>> + 
>> +     label = gtk_label_new (_("Available plugins:"));
>> +@@ -506,13 +510,13 @@ static void * make_config_widget ()
>> +     plugin_list = create_plugin_list ();
>> +     gtk_container_add ((GtkContainer *) scrolled, plugin_list);
>> + 
>> +-    GtkWidget * hbox2 = gtk_hbox_new (FALSE, 6);
>> ++    GtkWidget * hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) vbox2, hbox2, 0, 0, 0);
>> + 
>> +     GtkWidget * enable_button = gtk_button_new_with_label (_("Enable"));
>> +     gtk_box_pack_end ((GtkBox *) hbox2, enable_button, 0, 0, 0);
>> + 
>> +-    vbox2 = gtk_vbox_new (FALSE, 6);
>> ++    vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) hbox, vbox2, 1, 1, 0);
>> + 
>> +     label = gtk_label_new (_("Enabled plugins:"));
>> +@@ -525,7 +529,7 @@ static void * make_config_widget ()
>> +     loaded_list = create_loaded_list ();
>> +     gtk_container_add ((GtkContainer *) scrolled, loaded_list);
>> + 
>> +-    hbox2 = gtk_hbox_new (FALSE, 6);
>> ++    hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     gtk_box_pack_start ((GtkBox *) vbox2, hbox2, 0, 0, 0);
>> + 
>> +     GtkWidget * disable_button = gtk_button_new_with_label (_("Disable"));
>> +--- src/lyricwiki/lyricwiki.cc.old
>> ++++ src/lyricwiki/
>> lyricwiki.cc
>> 
>> +@@ -296,7 +296,7 @@ static GtkWidget *build_widget(void)
>> +     scrollview = gtk_scrolled_window_new(nullptr, nullptr);
>> +     gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollview), GTK_SHADOW_IN);
>> +     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollview), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
>> +-    vbox = gtk_vbox_new (FALSE, 10);
>> ++    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
>> + 
>> +     gtk_container_add(GTK_CONTAINER(scrollview), textview);
>> + 
>> +--- src/playlist-manager/playlist-manager.cc.old
>> ++++ src/playlist-manager/
>> playlist-manager.cc
>> 
>> +@@ -218,7 +218,7 @@ static void destroy_cb (GtkWidget * window)
>> + 
>> + void * PlaylistManager::get_gtk_widget ()
>> + {
>> +-    GtkWidget * playman_vbox = gtk_vbox_new (false, 6);
>> ++    GtkWidget * playman_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> + 
>> +     /* ListView */
>> +     GtkWidget * playman_pl_lv = audgui_list_new (& callbacks, nullptr, aud_playlist_count ());
>> +@@ -240,7 +240,7 @@ void * PlaylistManager::get_gtk_widget ()
>> +     gtk_box_pack_start ((GtkBox *) playman_vbox, playman_pl_lv_sw, true, true, 0);
>> + 
>> +     /* ButtonBox */
>> +-    GtkWidget * playman_button_hbox = gtk_hbox_new (false, 6);
>> ++    GtkWidget * playman_button_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     GtkWidget * new_button = audgui_button_new (_("_New"), "document-new", new_cb, nullptr);
>> +     GtkWidget * delete_button = audgui_button_new (_("_Remove"), "edit-delete", delete_cb, nullptr);
>> +     GtkWidget * rename_button = audgui_button_new (_("Ren_ame"), "insert-text", rename_cb, nullptr);
>> +--- src/scrobbler2/config_window.cc.old
>> ++++ src/scrobbler2/config_window.cc
>> +@@ -167,11 +167,11 @@ static void *config_status_checker () {
>> +     GtkWidget *details_box;
>> +     GtkWidget *additional_details_box;
>> + 
>> +-    config_box              = gtk_vbox_new (FALSE, 15);
>> +-    permission_box          = gtk_hbox_new (FALSE, 0);
>> +-    buttons_box             = gtk_vbutton_box_new ();
>> +-    details_box             = gtk_vbox_new (FALSE, 0);
>> +-    additional_details_box  = gtk_hbox_new (FALSE, 7);
>> ++    config_box              = gtk_box_new(GTK_ORIENTATION_VERTICAL,  15);
>> ++    permission_box          = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
>> ++    buttons_box             = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
>> ++    details_box             = gtk_box_new(GTK_ORIENTATION_VERTICAL,   0);
>> ++    additional_details_box  = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 7);
>> + 
>> +     button                  = gtk_button_new_with_mnemonic(_("C_heck Permission"));
>> +     revoke_button           = gtk_button_new_with_mnemonic(_("_Revoke Permission"));
>> +@@ -183,6 +183,9 @@ static void *config_status_checker () {
>> +     details_label_first  = gtk_label_new ("");
>> +     url_button           = gtk_link_button_new("");
>> +     details_label_second = gtk_label_new("");
>> ++    gtk_widget_set_halign(details_label_first,  GTK_ALIGN_CENTER);
>> ++    gtk_widget_set_halign(url_button,           GTK_ALIGN_CENTER);
>> ++    gtk_widget_set_halign(details_label_second, GTK_ALIGN_CENTER);
>> + 
>> +     gtk_widget_hide(url_button);
>> +     gtk_widget_set_no_show_all(url_button, TRUE);
>> +--- src/search-tool/search-tool.cc.old
>> ++++ src/search-tool/
>> search-tool.cc
>> 
>> +@@ -677,11 +677,11 @@ static void refresh_cb (GtkButton * button, GtkWidget * chooser)
>> + 
>> + void * SearchTool::get_gtk_widget ()
>> + {
>> +-    GtkWidget * vbox = gtk_vbox_new (FALSE, 6);
>> ++    GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
>> + 
>> +     entry = gtk_entry_new ();
>> +     gtk_entry_set_icon_from_icon_name ((GtkEntry *) entry, GTK_ENTRY_ICON_PRIMARY, "edit-find");
>> +-    (void) _("Search library");  // translated string is used in GTK3 branch
>> ++    gtk_entry_set_placeholder_text ((GtkEntry *) entry, _("Search library"));
>> +     g_signal_connect (entry, "destroy", (GCallback) gtk_widget_destroyed, & entry);
>> +     gtk_box_pack_start ((GtkBox *) vbox, entry, FALSE, FALSE, 0);
>> + 
>> +@@ -717,7 +717,7 @@ void * SearchTool::get_gtk_widget ()
>> +     gtk_widget_set_no_show_all (stats_label, TRUE);
>> +     gtk_box_pack_start ((GtkBox *) vbox, stats_label, FALSE, FALSE, 0);
>> + 
>> +-    GtkWidget * hbox = gtk_hbox_new (FALSE, 6);
>> ++    GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
>> +     gtk_box_pack_end ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
>> + 
>> +     GtkWidget * chooser = gtk_file_chooser_button_new (_("Choose Folder"),
>> +--- src/skins/draw-compat.h.old
>> ++++ src/skins/draw-compat.h
>> +@@ -27,22 +27,15 @@
>> + static void widget_realized (GtkWidget * w)
>> + {
>> +     GdkWindow * window = gtk_widget_get_window (w);
>> +-    gdk_window_set_back_pixmap (window, nullptr, FALSE);
>> ++    gdk_window_set_background_pattern (window, nullptr);
>> + }
>> + 
>> +-#define DRAW_SIGNAL "expose-event"
>> +-#define DRAW_FUNC_BEGIN(n) static int n (GtkWidget * wid, GdkEventExpose * ev) { \
>> +- cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (wid));
>> +-#define DRAW_FUNC_END cairo_destroy (cr); \
>> +- return TRUE; }
>> +-
>> +-/* We set None as the background pixmap in order to avoid flickering.  Setting
>> +- * a blank GtkStyle prevents GTK 2.x from overriding this. */
>> ++#define DRAW_SIGNAL "draw"
>> ++#define DRAW_FUNC_BEGIN(n) static gboolean n (GtkWidget * wid, cairo_t * cr) { \
>> ++ g_return_val_if_fail (wid && cr, FALSE);
>> ++#define DRAW_FUNC_END return FALSE; }
>> + 
>> + #define DRAW_CONNECT(w,f) do { \
>> +-    GtkStyle * style = gtk_style_new (); \
>> +-    gtk_widget_set_style (w, style); \
>> +-    g_object_unref (style); \
>> +     g_signal_connect (w, "realize", (GCallback) widget_realized, nullptr); \
>> +     g_signal_connect (w, DRAW_SIGNAL, (GCallback) f, nullptr); \
>> +  } while (0);
>> +--- src/skins/menus.cc.old
>> ++++ src/skins/
>> menus.cc
>> 
>> +@@ -290,7 +290,7 @@ static void position_menu (GtkMenu * menu, int * x, int * y, gboolean * push_in,
>> +     audgui_get_monitor_geometry (gtk_widget_get_screen ((GtkWidget *) menu), pos->x, pos->y, & geom);
>> + 
>> +     GtkRequisition request;
>> +-    gtk_widget_size_request ((GtkWidget *) menu, & request);
>> ++    gtk_widget_get_preferred_size ((GtkWidget *) menu, NULL, & request);
>> + 
>> +     if (pos->leftward)
>> +         * x = aud::max (pos->x - request.width, geom.x);
>> +--- src/skins/preset-list.cc.old
>> ++++ src/skins/
>> preset-list.cc
>> 
>> +@@ -259,7 +259,7 @@ static GtkWidget * equalizerwin_create_list_window
>> + 
>> +     audgui_destroy_on_escape (* window);
>> + 
>> +-    vbox = gtk_vbox_new (FALSE, 10);
>> ++    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
>> +     gtk_container_add(GTK_CONTAINER(*window), vbox);
>> + 
>> +     scrolled_window = gtk_scrolled_window_new(nullptr, nullptr);
>> +@@ -299,7 +299,7 @@ static GtkWidget * equalizerwin_create_list_window
>> +         gtk_box_pack_start(GTK_BOX(vbox), *entry, FALSE, FALSE, 0);
>> +     }
>> + 
>> +-    bbox = gtk_hbutton_box_new();
>> ++    bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
>> +     gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
>> +     gtk_box_set_spacing(GTK_BOX(bbox), 5);
>> +     gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
>> +--- src/skins/ui_playlist.cc.old
>> ++++ src/skins/ui_playlist.cc
>> +@@ -221,40 +221,45 @@ playlistwin_select_search(void)
>> +       _("Cancel") , GTK_RESPONSE_REJECT , _("Search") , GTK_RESPONSE_ACCEPT , nullptr );
>> + 
>> +     /* help text and logo */
>> +-    searchdlg_hbox = gtk_hbox_new (FALSE, 6);
>> ++    searchdlg_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 );
>> +     searchdlg_logo = gtk_image_new_from_icon_name( "edit-find" , GTK_ICON_SIZE_DIALOG );
>> +     searchdlg_helptext = gtk_label_new( _("Select entries in playlist by filling one or more "
>> +       "fields. Fields use regular expressions syntax, case-insensitive. If you don't know how "
>> +       "regular expressions work, simply insert a literal portion of what you're searching for.") );
>> ++    gtk_label_set_max_width_chars( GTK_LABEL(searchdlg_helptext), 70 );
>> +     gtk_label_set_line_wrap( GTK_LABEL(searchdlg_helptext) , TRUE );
>> +     gtk_box_pack_start( GTK_BOX(searchdlg_hbox) , searchdlg_logo , FALSE , FALSE , 0 );
>> +     gtk_box_pack_start( GTK_BOX(searchdlg_hbox) , searchdlg_helptext , FALSE , FALSE , 0 );
>> + 
>> +     /* title */
>> +     searchdlg_label_title = gtk_label_new( _("Title:") );
>> +-    gtk_misc_set_alignment ((GtkMisc *) searchdlg_label_title, 1, 0.5);
>> +     searchdlg_entry_title = gtk_entry_new();
>> ++    gtk_widget_set_hexpand( searchdlg_entry_title , TRUE );
>> ++    gtk_widget_set_halign( searchdlg_label_title , GTK_ALIGN_START );
>> +     g_signal_connect( searchdlg_entry_title , "key-press-event" ,
>> +       G_CALLBACK(playlistwin_select_search_kp_cb) , searchdlg_win );
>> + 
>> +     /* album */
>> +     searchdlg_label_album= gtk_label_new( _("Album:") );
>> +-    gtk_misc_set_alignment ((GtkMisc *) searchdlg_label_album, 1, 0.5);
>> +     searchdlg_entry_album= gtk_entry_new();
>> ++    gtk_widget_set_hexpand( searchdlg_entry_album , TRUE );
>> ++    gtk_widget_set_halign( searchdlg_label_album , GTK_ALIGN_START );
>> +     g_signal_connect( searchdlg_entry_album , "key-press-event" ,
>> +       G_CALLBACK(playlistwin_select_search_kp_cb) , searchdlg_win );
>> + 
>> +     /* artist */
>> +     searchdlg_label_performer = gtk_label_new( _("Artist:") );
>> +-    gtk_misc_set_alignment ((GtkMisc *) searchdlg_label_performer, 1, 0.5);
>> +     searchdlg_entry_performer = gtk_entry_new();
>> ++    gtk_widget_set_hexpand( searchdlg_entry_performer , TRUE );
>> ++    gtk_widget_set_halign( searchdlg_label_performer , GTK_ALIGN_START );
>> +     g_signal_connect( searchdlg_entry_performer , "key-press-event" ,
>> +       G_CALLBACK(playlistwin_select_search_kp_cb) , searchdlg_win );
>> + 
>> +     /* file name */
>> +     searchdlg_label_file_name = gtk_label_new( _("File Name:") );
>> +-    gtk_misc_set_alignment ((GtkMisc *) searchdlg_label_file_name, 1, 0.5);
>> +     searchdlg_entry_file_name = gtk_entry_new();
>> ++    gtk_widget_set_hexpand( searchdlg_entry_file_name , TRUE );
>> ++    gtk_widget_set_halign( searchdlg_label_file_name , GTK_ALIGN_START );
>> +     g_signal_connect( searchdlg_entry_file_name , "key-press-event" ,
>> +       G_CALLBACK(playlistwin_select_search_kp_cb) , searchdlg_win );
>> + 
>> +@@ -274,21 +279,22 @@ playlistwin_select_search(void)
>> +       G_CALLBACK(playlistwin_select_search_cbt_cb) , searchdlg_checkbt_autoenqueue );
>> + 
>> +     /* place fields in searchdlg_grid */
>> +-    searchdlg_grid = gtk_table_new (0, 0, FALSE);
>> +-    gtk_table_set_row_spacings (GTK_TABLE (searchdlg_grid), 6);
>> +-    gtk_table_set_col_spacings (GTK_TABLE (searchdlg_grid), 6);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_hbox, 0, 2, 0, 1);
>> +-    gtk_table_attach (GTK_TABLE (searchdlg_grid), searchdlg_label_title, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_entry_title, 1, 2, 1, 2);
>> +-    gtk_table_attach (GTK_TABLE (searchdlg_grid), searchdlg_label_album, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_entry_album, 1, 2, 2, 3);
>> +-    gtk_table_attach (GTK_TABLE (searchdlg_grid), searchdlg_label_performer, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_entry_performer, 1, 2, 3, 4);
>> +-    gtk_table_attach (GTK_TABLE (searchdlg_grid), searchdlg_label_file_name, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_entry_file_name, 1, 2, 4, 5);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_checkbt_clearprevsel, 0, 2, 5, 6);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_checkbt_autoenqueue, 0, 2, 6, 7);
>> +-    gtk_table_attach_defaults (GTK_TABLE (searchdlg_grid), searchdlg_checkbt_newplaylist, 0, 2, 7, 8);
>> ++    searchdlg_grid = gtk_grid_new();
>> ++    gtk_grid_set_row_spacing( GTK_GRID(searchdlg_grid) , 2 );
>> ++    gtk_widget_set_margin_bottom( searchdlg_hbox , 8 );
>> ++    gtk_widget_set_margin_top( searchdlg_checkbt_clearprevsel , 8 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_hbox , 0 , 0 , 2 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_label_title , 0 , 1 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_entry_title , 1 , 1 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_label_album , 0 , 2 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_entry_album , 1 , 2 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_label_performer , 0 , 3 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_entry_performer , 1 , 3 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_label_file_name , 0 , 4 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_entry_file_name , 1 , 4 , 1 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_checkbt_clearprevsel , 0 , 5 , 2 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_checkbt_autoenqueue , 0 , 6 , 2 , 1 );
>> ++    gtk_grid_attach( GTK_GRID(searchdlg_grid) , searchdlg_checkbt_newplaylist , 0 , 7 , 2 , 1 );
>> + 
>> +     gtk_container_set_border_width( GTK_CONTAINER(searchdlg_grid) , 5 );
>> +     gtk_container_add ( GTK_CONTAINER(gtk_dialog_get_content_area
>> +--- src/skins/ui_skin.cc.old
>> ++++ src/skins/ui_skin.cc
>> +@@ -517,7 +517,7 @@ skin_load_nolock(Skin * skin, const char * path, gboolean force)
>> +         return FALSE;
>> +     }
>> + 
>> +-    GdkRegion * masks[SKIN_MASK_COUNT];
>> ++    cairo_region_t * masks[SKIN_MASK_COUNT];
>> +     skin_load_masks (skin, skin_path, masks);
>> +     window_set_shapes (mainwin, masks[SKIN_MASK_MAIN], masks[SKIN_MASK_MAIN_SHADE]);
>> +     window_set_shapes (equalizerwin, masks[SKIN_MASK_EQ], masks[SKIN_MASK_EQ_SHADE]);
>> +--- src/skins/ui_skin.h.old
>> ++++ src/skins/ui_skin.h
>> +@@ -198,7 +198,7 @@ void skin_draw_mainwin_titlebar (cairo_t * cr, gboolean shaded, gboolean focus);
>> + /* ui_skin_load_ini.c */
>> + void skin_load_hints (Skin * skin, const char * path);
>> + void skin_load_pl_colors (Skin * skin, const char * path);
>> +-void skin_load_masks (Skin * skin, const char * path, GdkRegion * masks[SKIN_MASK_COUNT]);
>> ++void skin_load_masks (Skin * skin, const char * path, cairo_region_t * masks[SKIN_MASK_COUNT]);
>> + 
>> + static inline void set_cairo_color (cairo_t * cr, uint32_t c)
>> + {
>> +--- src/skins/ui_skin_load_ini.cc.old
>> ++++ src/skins/ui_skin_load_ini.cc
>> +@@ -248,7 +248,7 @@ private:
>> +     }
>> + };
>> + 
>> +-static GdkRegion * skin_create_mask (const GArray * num,
>> ++static cairo_region_t * skin_create_mask (const GArray * num,
>> +  const GArray * point, int width, int height)
>> + {
>> +     if (! num || ! point)
>> +@@ -257,7 +257,7 @@ static GdkRegion * skin_create_mask (const GArray * num,
>> +     width *= config.scale;
>> +     height *= config.scale;
>> + 
>> +-    GdkRegion * mask = nullptr;
>> ++    cairo_region_t * mask = nullptr;
>> + 
>> +     unsigned j = 0;
>> +     for (unsigned i = 0; i < num->len; i ++)
>> +@@ -281,12 +281,12 @@ static GdkRegion * skin_create_mask (const GArray * num,
>> + 
>> +         if (xmax > xmin && ymax > ymin)
>> +         {
>> +-            GdkRectangle rect = {xmin, ymin, xmax - xmin, ymax - ymin};
>> ++            cairo_rectangle_int_t rect = {xmin, ymin, xmax - xmin, ymax - ymin};
>> + 
>> +             if (mask)
>> +-                gdk_region_union_with_rect (mask, & rect);
>> ++                cairo_region_union_rectangle (mask, & rect);
>> +             else
>> +-                mask = gdk_region_rectangle (& rect);
>> ++                mask = cairo_region_create_rectangle (& rect);
>> +         }
>> + 
>> +         j += n_points * 2;
>> +@@ -295,7 +295,7 @@ static GdkRegion * skin_create_mask (const GArray * num,
>> +     return mask;
>> + }
>> + 
>> +-void skin_load_masks (Skin * skin, const char * path, GdkRegion * masks[SKIN_MASK_COUNT])
>> ++void skin_load_masks (Skin * skin, const char * path, cairo_region_t * masks[SKIN_MASK_COUNT])
>> + {
>> +     int sizes[SKIN_MASK_COUNT][2] = {
>> +         {skin->properties.mainwin_width, skin->properties.mainwin_height},
>> +--- src/skins/ui_skinned_window.cc.old
>> ++++ src/skins/ui_skinned_window.cc
>> +@@ -27,7 +27,7 @@
>> + typedef struct {
>> +     void (* draw) (GtkWidget * window, cairo_t * cr);
>> +     GtkWidget * normal, * shaded;
>> +-    GdkRegion * shape, * sshape;
>> ++    cairo_region_t * shape, * sshape;
>> +     gboolean is_shaded, is_moving;
>> + } WindowData;
>> + 
>> +@@ -43,7 +43,7 @@ static void window_apply_shape (GtkWidget * window)
>> + {
>> +     WindowData * data = (WindowData *) g_object_get_data ((GObject *) window, "windowdata");
>> +     g_return_if_fail (data);
>> +-    
>> ++
>> +     gdk_window_shape_combine_region (gtk_widget_get_window (window),
>> +      data->is_shaded ? data->sshape : data->shape, 0, 0);
>> + }
>> +@@ -106,9 +106,9 @@ static void window_destroy (GtkWidget * window)
>> +     g_object_unref (data->shaded);
>> + 
>> +     if (data->shape)
>> +-        gdk_region_destroy (data->shape);
>> ++        cairo_region_destroy (data->shape);
>> +     if (data->sshape)
>> +-        gdk_region_destroy (data->sshape);
>> ++        cairo_region_destroy (data->sshape);
>> + 
>> +     g_free (data);
>> + }
>> +@@ -168,19 +168,19 @@ void window_set_size (GtkWidget * window, int w, int h)
>> +     dock_set_size (window, w, h);
>> + }
>> + 
>> +-void window_set_shapes (GtkWidget * window, GdkRegion * shape, GdkRegion * sshape)
>> ++void window_set_shapes (GtkWidget * window, cairo_region_t * shape, cairo_region_t * sshape)
>> + {
>> +     WindowData * data = (WindowData *) g_object_get_data ((GObject *) window, "windowdata");
>> +     g_return_if_fail (data);
>> + 
>> +     if (data->shape)
>> +-        gdk_region_destroy (data->shape);
>> ++        cairo_region_destroy (data->shape);
>> +     if (data->sshape)
>> +-        gdk_region_destroy (data->sshape);
>> ++        cairo_region_destroy (data->sshape);
>> + 
>> +     data->shape = shape;
>> +     data->sshape = sshape;
>> +-    
>> ++
>> +     if (gtk_widget_get_realized (window))
>> +         window_apply_shape (window);
>> + }
>> +@@ -205,7 +205,7 @@ void window_set_shaded (GtkWidget * window, gboolean shaded)
>> +     }
>> + 
>> +     data->is_shaded = shaded;
>> +-    
>> ++
>> +     if (gtk_widget_get_realized (window))
>> +         window_apply_shape (window);
>> + }
>> +--- src/skins/ui_skinned_window.h.old
>> ++++ src/skins/ui_skinned_window.h
>> +@@ -27,7 +27,7 @@
>> + GtkWidget * window_new (int * x, int * y, int w, int h, gboolean main,
>> +  gboolean shaded, void (* draw) (GtkWidget * window, cairo_t * cr));
>> + void window_set_size (GtkWidget * window, int w, int h);
>> +-void window_set_shapes (GtkWidget * window, GdkRegion * shape, GdkRegion * sshape);
>> ++void window_set_shapes (GtkWidget * window, cairo_region_t * shape, cairo_region_t * sshape);
>> + void window_set_shaded (GtkWidget * window, gboolean shaded);
>> + void window_put_widget (GtkWidget * window, gboolean shaded, GtkWidget * widget,
>> +  int x, int y);
>> +--- src/skins/ui_skinselector.cc.old
>> ++++ src/skins/ui_skinselector.cc
>> +@@ -339,6 +339,10 @@ skin_view_on_cursor_changed(GtkTreeView * treeview,
>> + 
>> +     selection = gtk_tree_view_get_selection(treeview);
>> + 
>> ++    /* workaround for Gnome bug #679291 */
>> ++    if (! selection)
>> ++        return;
>> ++
>> +     if (!gtk_tree_selection_get_selected(selection, &model, &iter))
>> +         return;
>> + 
>> +@@ -366,7 +370,6 @@ skin_view_realize(GtkTreeView * treeview)
>> + 
>> +     gtk_widget_show_all(GTK_WIDGET(treeview));
>> + 
>> +-    gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
>> +     gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
>> + 
>> +     store = gtk_list_store_new(SKIN_VIEW_N_COLS, GDK_TYPE_PIXBUF,
>> +--- src/song_change/song_change.cc.old
>> ++++ src/song_change/song_change.cc
>> +@@ -334,7 +334,7 @@ static void * custom_warning (void)
>> +     GtkWidget *bbox_hbox;
>> +     char * temp;
>> + 
>> +-    bbox_hbox = gtk_hbox_new (FALSE, 6);
>> ++    bbox_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
>> + 
>> +     cmd_warn_img = gtk_image_new_from_icon_name("dialog-warning", GTK_ICON_SIZE_MENU);
>> +     gtk_box_pack_start(GTK_BOX(bbox_hbox), cmd_warn_img, FALSE, FALSE, 0);
>> 
>> _______________________________________________
>> macports-changes mailing list
>> macports-changes at lists.macosforge.org
>> https://lists.macosforge.org/mailman/listinfo/macports-changes
> 
> _______________________________________________
> macports-dev mailing list
> macports-dev at lists.macosforge.org
> https://lists.macosforge.org/mailman/listinfo/macports-dev

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4109 bytes
Desc: not available
URL: <https://lists.macosforge.org/pipermail/macports-dev/attachments/20150418/d67f6040/attachment-0001.p7s>


More information about the macports-dev mailing list