=== modified file 'ChangeLog'
Index: Makefile.in
===================================================================
--- Makefile.in.orig
+++ Makefile.in
@@ -237,7 +237,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: aclocal.m4
===================================================================
--- aclocal.m4.orig
+++ aclocal.m4
@@ -238,31 +238,6 @@ fi
 # Substitute ALL_LINGUAS so we can use it in po/Makefile
 AC_SUBST(ALL_LINGUAS)
 
-# Set DATADIRNAME correctly if it is not set yet
-# (copied from glib-gettext.m4)
-if test -z "$DATADIRNAME"; then
-  AC_LINK_IFELSE(
-    [AC_LANG_PROGRAM([[]],
-                     [[extern int _nl_msg_cat_cntr;
-                       return _nl_msg_cat_cntr]])],
-    [DATADIRNAME=share],
-    [case $host in
-    *-*-solaris*)
-    dnl On Solaris, if bind_textdomain_codeset is in libc,
-    dnl GNU format message catalog is always supported,
-    dnl since both are added to the libc all together.
-    dnl Hence, we'd like to go with DATADIRNAME=share
-    dnl in this case.
-    AC_CHECK_FUNC(bind_textdomain_codeset,
-      [DATADIRNAME=share], [DATADIRNAME=lib])
-    ;;
-    *)
-    [DATADIRNAME=lib]
-    ;;
-    esac])
-fi
-AC_SUBST(DATADIRNAME)
-
 IT_PO_SUBDIR([po])
 
 ])
Index: configure
===================================================================
--- configure.orig
+++ configure
@@ -631,7 +631,6 @@ GSETTINGS_RULES
 GLIB_COMPILE_SCHEMAS
 gsettingsschemadir
 GSETTINGS_DISABLE_SCHEMAS_COMPILE
-DATADIRNAME
 ALL_LINGUAS
 INTLTOOL_PERL
 GMSGFMT
@@ -8056,44 +8055,6 @@ fi
 # Substitute ALL_LINGUAS so we can use it in po/Makefile
 
 
-# Set DATADIRNAME correctly if it is not set yet
-# (copied from glib-gettext.m4)
-if test -z "$DATADIRNAME"; then
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-extern int _nl_msg_cat_cntr;
-                       return _nl_msg_cat_cntr
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  DATADIRNAME=share
-else
-  case $host in
-    *-*-solaris*)
-                        ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset"
-if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then :
-  DATADIRNAME=share
-else
-  DATADIRNAME=lib
-fi
-
-    ;;
-    *)
-    DATADIRNAME=lib
-    ;;
-    esac
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-
-
 
 
 
Index: data/Makefile.in
===================================================================
--- data/Makefile.in.orig
+++ data/Makefile.in
@@ -157,7 +157,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: icons/Makefile.in
===================================================================
--- icons/Makefile.in.orig
+++ icons/Makefile.in
@@ -185,7 +185,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: icons/hicolor/Makefile.in
===================================================================
--- icons/hicolor/Makefile.in.orig
+++ icons/hicolor/Makefile.in
@@ -185,7 +185,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: icons/hicolor/scalable/Makefile.in
===================================================================
--- icons/hicolor/scalable/Makefile.in.orig
+++ icons/hicolor/scalable/Makefile.in
@@ -185,7 +185,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: icons/hicolor/scalable/apps/Makefile.in
===================================================================
--- icons/hicolor/scalable/apps/Makefile.in.orig
+++ icons/hicolor/scalable/apps/Makefile.in
@@ -155,7 +155,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: icons/hicolor/scalable/status/Makefile.in
===================================================================
--- icons/hicolor/scalable/status/Makefile.in.orig
+++ icons/hicolor/scalable/status/Makefile.in
@@ -155,7 +155,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: pixmaps/Makefile.in
===================================================================
--- pixmaps/Makefile.in.orig
+++ pixmaps/Makefile.in
@@ -157,7 +157,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
Index: po/POTFILES.in
===================================================================
--- po/POTFILES.in.orig
+++ po/POTFILES.in
@@ -24,8 +24,8 @@ src/gst-pipeline.c
 src/gst-pipeline.h
 src/gst-recorder.c
 src/gst-recorder.h
-src/gtklevelbar.c
-src/gtklevelbar.h
+src/levelbar.c
+src/levelbar.h
 src/help.c
 src/help.h
 src/log.c
Index: src/Makefile.am
===================================================================
--- src/Makefile.am.orig
+++ src/Makefile.am
@@ -43,7 +43,7 @@ audio_recorder_SOURCES = rec-window.h co
     utility.c utility.h \
     settings.c settings-pipe.c settings.h \
     about.c about.h \
-    gtklevelbar.c gtklevelbar.h \
+    levelbar.c levelbar.h \
     main.c
 
 
Index: src/Makefile.in
===================================================================
--- src/Makefile.in.orig
+++ src/Makefile.in
@@ -98,7 +98,7 @@ am_audio_recorder_OBJECTS = systray-icon
 	gst-devices.$(OBJEXT) rec-manager.$(OBJEXT) support.$(OBJEXT) \
 	timer.$(OBJEXT) timer-parser.$(OBJEXT) utility.$(OBJEXT) \
 	settings.$(OBJEXT) settings-pipe.$(OBJEXT) about.$(OBJEXT) \
-	gtklevelbar.$(OBJEXT) main.$(OBJEXT)
+	levelbar.$(OBJEXT) main.$(OBJEXT)
 audio_recorder_OBJECTS = $(am_audio_recorder_OBJECTS)
 audio_recorder_LDADD = $(LDADD)
 AM_V_P = $(am__v_P_@AM_V@)
@@ -175,7 +175,6 @@ CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
 DBUS_CFLAGS = @DBUS_CFLAGS@
 DBUS_LIBS = @DBUS_LIBS@
 DEFS = @DEFS@
@@ -329,7 +328,7 @@ audio_recorder_SOURCES = rec-window.h co
     utility.c utility.h \
     settings.c settings-pipe.c settings.h \
     about.c about.h \
-    gtklevelbar.c gtklevelbar.h \
+    levelbar.c levelbar.h \
     main.c
 
 all: all-am
@@ -431,8 +430,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst-pipeline.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst-recorder.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gst-vad.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtklevelbar.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/levelbar.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/media-profiles.Po@am__quote@
Index: src/audio-sources.c
===================================================================
--- src/audio-sources.c.orig
+++ src/audio-sources.c
@@ -687,7 +687,7 @@ void audio_source_fill_combo(GtkWidget *
         GdkPixbuf *pixbuf = NULL;
         if (item->type == MEDIA_PLAYER || item->type == COMM_PROGRAM) {
 
-            pixbuf = load_icon_pixbuf((gchar*)p);
+            pixbuf = load_icon_pixbuf((gchar*)p, 22);
 
             // Got icon??
             if (!GDK_IS_PIXBUF(pixbuf)) {
Index: src/dbus-mpris2.c
===================================================================
--- src/dbus-mpris2.c.orig
+++ src/dbus-mpris2.c
@@ -3,10 +3,7 @@
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License (GPL3), or any later version.
- *
- * This library is distributed in the hope that it will be useful,
+ * License as published by the Free Software Foundation; either"OK
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  * See the GNU Library General Public License 3 for more details.
@@ -573,6 +570,20 @@ GVariant *mpris2_get_player_value(gpoint
     return res;
 }
 
+#if 0
+void debug_variant(const gchar *tag, GVariant *v) {
+    if (!v) {
+        g_print("%s is NULL.\n", tag);
+        return;
+    }
+
+    gchar *sval = g_variant_print(v, TRUE);
+    const gchar *stype = g_variant_get_type_string(v);
+    g_print("%s has type:%s and value:%s\n", tag, stype, sval);
+    g_free(sval);
+}
+#endif
+
 void mpris2_get_metadata(gpointer player_rec) {
     // Get track information (=metadata) and state for the given media player.
     // Ref: http://www.mpris.org/2.1/spec/Player_Node.html#Property:Metadata
@@ -602,6 +613,8 @@ void mpris2_get_metadata(gpointer player
     //
     GVariant *result = mpris2_get_player_value(player, "PlaybackStatus");
 
+    // DEBUG: debug_variant("PlaybackStatus", result);
+
     if (!result) {
         // Cannot contact player (it has quit)?
         tr->status = PLAYER_STATUS_CLOSED;
@@ -657,9 +670,14 @@ void mpris2_get_metadata(gpointer player
     //
     GVariant *dict = mpris2_get_player_value(player, "Metadata");
 
+    // DEBUG: debug_variant("Metadata", dict);
+
     if (!dict) {
-        // Cannot contact player (it has quit)?
-        tr->status = PLAYER_STATUS_CLOSED;
+        // Cannot get Metadata (should we consider this as on error?)
+        // 03.april.2015, commented out by MOma:  Ambient Noise Player does not support "Metadata" yet.  
+
+        // tr->status = PLAYER_STATUS_CLOSED;
+
         return;
     }
 
Index: src/gtklevelbar.c
===================================================================
--- src/gtklevelbar.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Copyright (c) Linux community.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License (GPL3), or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Library General Public License 3 for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License 3 along with this program; if not, see /usr/share/common-licenses/GPL file
- * or write to Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
-*/
-#include "gtklevelbar.h"
-#include <math.h> // round()
-
-// A simple level bar widget.
-// By Osmo Antero.
-//
-// Sample call:
-// GtkWidget *lb = gtk_level_bar_new();
-// gtk_widget_show(lb);
-//
-// Set value [0.0, 1.0].
-// gtk_level_bar_set_fraction(GTK_LEVEL_BAR(lb), 0.8);
-//
-// Show %-value [0 - 100%] or plain value [0 - 1.0] on the level bar. See BAR_VALUE enum.
-// gtk_level_bar_set_value_type(GTK_LEVEL_BAR(lb), VALUE_PRECENT);
-//
-
-struct _GtkLevelBarPrivate {
-    gdouble fraction;
-    guint bar_height;
-    enum BAR_VALUE bar_value;
-    enum BAR_SHAPE bar_shape;
-};
-
-static void gtk_level_bar_get_preferred_width(GtkWidget *widget, gint *minimum, gint *natural);
-static void gtk_level_bar_get_preferred_height (GtkWidget *widget,gint *minimum, gint *natural);
-
-static void gtk_level_bar_real_update(GtkLevelBar *progress);
-static gboolean gtk_level_bar_draw(GtkWidget *widget, cairo_t *cr);
-
-static void gtk_level_bar_finalize(GObject *object);
-
-G_DEFINE_TYPE(GtkLevelBar, gtk_level_bar, GTK_TYPE_WIDGET);
-
-static void gtk_level_bar_class_init (GtkLevelBarClass *class) {
-    GObjectClass *gobject_class;
-    GtkWidgetClass *widget_class;
-
-    gobject_class = G_OBJECT_CLASS (class);
-    widget_class = (GtkWidgetClass *)class;
-
-    gobject_class->set_property = NULL;
-    gobject_class->get_property = NULL;
-    gobject_class->finalize = gtk_level_bar_finalize;
-
-    widget_class->draw = gtk_level_bar_draw;
-    widget_class->get_preferred_width = gtk_level_bar_get_preferred_width;
-    widget_class->get_preferred_height = gtk_level_bar_get_preferred_height;
-
-    g_type_class_add_private (class, sizeof (GtkLevelBarPrivate));
-}
-
-static void gtk_level_bar_init(GtkLevelBar *pbar) {
-    GtkLevelBarPrivate *priv;
-
-    pbar->priv = G_TYPE_INSTANCE_GET_PRIVATE(pbar, GTK_TYPE_LEVEL_BAR, GtkLevelBarPrivate);
-    priv = pbar->priv;
-
-    priv->fraction = 0.0;
-    priv->bar_height = 8;
-    priv->bar_value = VALUE_NONE;
-    priv->bar_shape = SHAPE_CIRCLE; // pulsing line with circle at end.
-
-    gtk_widget_set_has_window(GTK_WIDGET (pbar), FALSE);
-}
-
-GtkWidget *gtk_level_bar_new(void) {
-    GtkWidget *pbar;
-    pbar = g_object_new(GTK_TYPE_LEVEL_BAR, NULL);
-    return pbar;
-}
-
-static void gtk_level_bar_real_update (GtkLevelBar *pbar) {
-    GtkWidget *widget;
-
-    g_return_if_fail (GTK_IS_LEVEL_BAR (pbar));
-
-    GtkLevelBarPrivate __attribute__ ((unused)) *priv = pbar->priv;
-
-    widget = GTK_WIDGET(pbar);
-
-    gtk_widget_queue_draw(widget);
-}
-
-static void gtk_level_bar_finalize (GObject *object) {
-    G_OBJECT_CLASS(gtk_level_bar_parent_class)->finalize (object);
-}
-
-static void gtk_level_bar_get_preferred_width (GtkWidget *widget,gint *minimum, gint *natural) {
-    *minimum = 50;
-    *natural = 160;
-}
-
-static void gtk_level_bar_get_preferred_height (GtkWidget *widget, gint      *minimum, gint      *natural) {
-    *minimum = 6;
-    *natural = 8;
-}
-
-static gboolean gtk_level_bar_draw(GtkWidget *widget, cairo_t *cr) {
-    // Draw level bar and optional text
-    GtkLevelBar *pbar = GTK_LEVEL_BAR (widget);
-    GtkLevelBarPrivate *priv = pbar->priv;
-    GtkStyleContext *context;
-    int width, height;
-
-    context = gtk_widget_get_style_context(widget);
-
-    width = gtk_widget_get_allocated_width(widget);
-    height = gtk_widget_get_allocated_height(widget);
-
-    // Bar thickness
-    gdouble bar_height = MIN(height , priv->bar_height);
-
-    // Vertical pos
-    gdouble y = (height - bar_height)/2;
-
-    // Pulse width
-    gdouble w = priv->fraction/(1.00/width);
-
-    // Debug:
-    // LOG_DEBUG("width=%d height=%d bar_height=%2.1f y=%2.1f w=%2.1f  fraction=%2.1f\n", width, height, bar_height, y, w, priv->fraction);
-
-    gtk_style_context_save(context);
-    gtk_render_background(context, cr, 0, 0, width, height);
-    gtk_render_frame(context, cr, 0, 0, width, height);
-
-    // Render level bar with current theme and color.
-
-    // Progressbar style
-    gtk_style_context_add_class(context, GTK_STYLE_CLASS_PROGRESSBAR);
-
-    if (priv->fraction > 0.001) {
-
-        switch (priv->bar_shape) {
-
-        case SHAPE_LINE:
-            // Render a single line
-            if (priv->bar_value == VALUE_NONE) {
-                // No value (text) shown. Draw a line on the middle.
-                gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2));
-
-            } else {
-                // Draw a line under text.
-                gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height ));
-            }
-
-            break;
-
-        case SHAPE_LINE2:
-            // Render two horizontal lines + close the end.
-            gtk_render_line(context, cr, 0, y-1 , w, y-1);
-            gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height ));
-            gtk_render_line(context, cr, w, y - 1, w, y + (bar_height ));
-            break;
-
-        case SHAPE_CIRCLE:
-            // Draw a line on the middle + circle at the end.
-            gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2));
-            gtk_render_option(context, cr, w, y, bar_height+1, bar_height+1);
-            break;
-
-        default:
-            // case SHAPE_LEVELBAR:
-
-            // EDIT: gtk_render_activity() does not work in GTK 3.14+
-            // gtk_style_context_set_state(context, GTK_STATE_FLAG_ACTIVE);
-            // gtk_render_activity(context, cr, 0, y, w, bar_height);
-
-            // Render a filled frame (this is a typical levelbar).
-            gtk_render_frame(context, cr, 0, y, w, bar_height);
-            break;
-
-        }
-    }
-
-    gtk_style_context_restore(context);
-
-    cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-    cairo_set_font_size(cr, priv->bar_height);
-
-    GdkRGBA color;
-    gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color);
-    gdk_cairo_set_source_rgba(cr, &color);
-    color.alpha = 0.9;
-
-    // Calculate total width of scale
-    cairo_text_extents_t extents;
-    cairo_text_extents(cr, "0.0", &extents);
-    gint total_w = 9 * (extents.x_advance + extents.width);
-
-    // Debug:
-    // g_print("Bar width=%d  total_w=%d  bearing=%3.1f advance=%3.1f char.width=%3.1f\n", width, total_w,
-    //          extents.x_bearing, extents.x_advance, extents.width);
-
-    // Draw values
-    gboolean draw_all = (total_w - extents.width) < width;
-
-    // Show normalized value [0 - 1.0]?
-    if (priv->bar_value == VALUE_0_1) {
-        // Value: 0.1  0.2  0.3  0.4...0.9
-
-        gint i = 0;
-        for (i=0; i < 10; i++) {
-            gchar *s = NULL;
-
-            // Draw all or draw only each second value?
-            if (draw_all || (i % 2 == 0))
-                s = g_strdup_printf("%2.1f", (gdouble)i/10.0);
-
-            if (!s) continue;
-
-            cairo_text_extents_t extents;
-            cairo_text_extents(cr, s, &extents);
-
-            gdouble xx = (width/10) * i;
-            gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing) + 0.2;
-
-            cairo_move_to(cr, xx, yy);
-            cairo_show_text(cr, s);
-
-            g_free(s);
-        }
-
-        // Show percentage value?
-    } else if (priv->bar_value == VALUE_PERCENT) {
-        // Value: 10% . 20% . 30% . 40% . 50% ... 90%
-        gint i = 0;
-        for (i=0; i < 10; i++) {
-            gchar *s = NULL;
-            if (i % 2 == 0)
-                s = g_strdup_printf("%2.0f%%", (gdouble)i*10.0);
-            else
-                s = g_strdup_printf("%3s", ".");
-
-            cairo_text_extents_t extents;
-            cairo_text_extents(cr, s, &extents);
-
-            gdouble xx = (width/10) * i;
-            gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing);
-
-            cairo_move_to(cr, xx, yy);
-            cairo_show_text(cr, s);
-
-            g_free(s);
-        }
-    }
-
-#if 0
-    // Commented out by moma 30.sep.2012.
-
-    // Set text
-    if (priv->text) {
-        cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-
-        cairo_set_font_size(cr, 0.5*height);
-        cairo_text_extents_t extents;
-        cairo_text_extents(cr, priv->text, &extents);
-
-        // Ref: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-text-extents-t
-        gdouble xx = width-(extents.width + extents.x_bearing)-2;
-        gdouble yy = height/2-(extents.height/2 + extents.y_bearing);
-
-        GdkRGBA color;
-        gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color);
-        gdk_cairo_set_source_rgba(cr, &color);
-        color.alpha = 0.9;
-
-        cairo_move_to(cr, xx, yy);
-        cairo_show_text(cr, priv->text);
-    }
-#endif
-
-    return FALSE;
-}
-
-void gtk_level_bar_set_fraction(GtkLevelBar *pbar, gdouble fraction) {
-    // Set fraction [0.0, 1.0]
-    GtkLevelBarPrivate* priv;
-    g_return_if_fail (GTK_IS_LEVEL_BAR (pbar));
-    priv = pbar->priv;
-
-    priv->fraction = CLAMP(fraction, 0.0, 1.0);
-    gtk_level_bar_real_update (pbar);
-}
-
-gdouble gtk_level_bar_get_fraction(GtkLevelBar *pbar) {
-    // Get fraction
-    g_return_val_if_fail(GTK_IS_LEVEL_BAR (pbar), 0);
-    return pbar->priv->fraction;
-}
-
-void gtk_level_bar_set_bar_height(GtkLevelBar *pbar, guint height) {
-    // Set bar height (thickness). Normally 8 pixels.
-    g_return_if_fail(GTK_IS_LEVEL_BAR (pbar));
-    GtkLevelBarPrivate* priv = pbar->priv;
-    priv->bar_height = height;
-    // Redraw
-    gtk_level_bar_real_update(pbar);
-}
-
-guint gtk_level_bar_get_bar_height(GtkLevelBar *pbar) {
-    // Get bar thickness
-    g_return_val_if_fail(GTK_IS_LEVEL_BAR(pbar), 0);
-    return pbar->priv->bar_height;
-}
-
-void gtk_level_bar_set_value_type(GtkLevelBar *pbar, enum BAR_VALUE bar_value) {
-    // Set BAR_VALUE
-    g_return_if_fail(GTK_IS_LEVEL_BAR(pbar));
-    GtkLevelBarPrivate* priv = pbar->priv;
-    priv->bar_value = bar_value;
-    // Redraw
-    gtk_level_bar_real_update(pbar);
-}
-
-enum BAR_VALUE gtk_level_bar_get_scale(GtkLevelBar *pbar) {
-    // Get BAR_VALUE
-    g_return_val_if_fail(GTK_IS_LEVEL_BAR(pbar), VALUE_NONE);
-    GtkLevelBarPrivate* priv = pbar->priv;
-    return priv->bar_value;
-}
-
-void gtk_level_bar_set_shape(GtkLevelBar *pbar, enum BAR_SHAPE bar_shape) {
-    // Set BAR_SHAPE
-    g_return_if_fail(GTK_IS_LEVEL_BAR(pbar));
-    GtkLevelBarPrivate* priv = pbar->priv;
-    priv->bar_shape = bar_shape;
-    // Redraw
-    gtk_level_bar_real_update(pbar);
-}
-
-enum BAR_SHAPE gtk_level_bar_get_shape(GtkLevelBar *pbar) {
-    // Get BAR_SHAPE
-    g_return_val_if_fail(GTK_IS_LEVEL_BAR(pbar), SHAPE_LEVELBAR);
-    GtkLevelBarPrivate* priv = pbar->priv;
-    return priv->bar_shape;
-}
-
-
Index: src/gtklevelbar.h
===================================================================
--- src/gtklevelbar.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __GTK_LEVEL_BAR_H__
-#define __GTK_LEVEL_BAR_H__
-
-// A simple level bar widget.
-
-#include <gtk/gtk.h>
-
-typedef enum BAR_VALUE {VALUE_NONE, VALUE_0_1/*0 - 1.0*/, VALUE_PERCENT/*0 - 100%*/} BAR_VALUE;
-typedef enum BAR_SHAPE {SHAPE_LEVELBAR, SHAPE_LINE, SHAPE_LINE2, SHAPE_CIRCLE} BAR_SHAPE;
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_LEVEL_BAR            (gtk_level_bar_get_type ())
-#define GTK_LEVEL_BAR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_LEVEL_BAR, GtkLevelBar))
-#define GTK_LEVEL_BAR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_LEVEL_BAR, GtkLevelBarClass))
-#define GTK_IS_LEVEL_BAR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_LEVEL_BAR))
-#define GTK_IS_LEVEL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_LEVEL_BAR))
-#define GTK_LEVEL_BAR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_LEVEL_BAR, GtkLevelBarClass))
-
-typedef struct _GtkLevelBar              GtkLevelBar;
-typedef struct _GtkLevelBarPrivate       GtkLevelBarPrivate;
-typedef struct _GtkLevelBarClass         GtkLevelBarClass;
-
-struct _GtkLevelBar {
-    GtkWidget parent;
-
-    /*< private >*/
-    GtkLevelBarPrivate *priv;
-};
-
-struct _GtkLevelBarClass {
-    GtkWidgetClass parent_class;
-
-    /* Padding for future expansion */
-    void (*_gtk_reserved1) (void);
-    void (*_gtk_reserved2) (void);
-    void (*_gtk_reserved3) (void);
-    void (*_gtk_reserved4) (void);
-};
-
-GType gtk_level_bar_get_type(void) G_GNUC_CONST;
-GtkWidget* gtk_level_bar_new(void);
-
-void gtk_level_bar_set_bar_height(GtkLevelBar *pbar, guint height);
-void gtk_level_bar_set_fraction(GtkLevelBar *pbar, gdouble fraction);
-
-guint gtk_level_bar_get_bar_height(GtkLevelBar *pbar);
-gdouble gtk_level_bar_get_fraction(GtkLevelBar *pbar);
-
-void gtk_level_bar_set_value_type(GtkLevelBar *pbar, enum BAR_VALUE bar_value);
-enum BAR_VALUE gtk_level_bar_get_value_type(GtkLevelBar *pbar);
-
-void gtk_level_bar_set_shape(GtkLevelBar *pbar, enum BAR_SHAPE bar_shape);
-enum BAR_SHAPE gtk_level_bar_get_shape(GtkLevelBar *pbar);
-
-G_END_DECLS
-
-#endif
-
-
Index: src/levelbar.c
===================================================================
--- /dev/null
+++ src/levelbar.c
@@ -0,0 +1,357 @@
+/*
+ * Copyright (c) Linux community.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License (GPL3), or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Library General Public License 3 for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License 3 along with this program; if not, see /usr/share/common-licenses/GPL file
+ * or write to Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+*/
+#include "levelbar.h"
+#include <math.h> // round()
+
+// A simple level bar widget.
+// By Osmo Antero.
+//
+// Sample call:
+// GtkWidget *lb = level_bar_new();
+// gtk_widget_show(lb);
+//
+// Set value [0.0, 1.0].
+// level_bar_set_fraction(LEVEL_BAR(lb), 0.8);
+//
+// Show %-value [0 - 100%] or plain value [0 - 1.0] on the level bar. See BAR_VALUE enum.
+// level_bar_set_value_type(LEVEL_BAR(lb), VALUE_PRECENT);
+//
+
+struct _LevelBarPrivate {
+    gdouble fraction;
+    guint bar_height;
+    enum BAR_VALUE bar_value;
+    enum BAR_SHAPE bar_shape;
+};
+
+static void level_bar_get_preferred_width(GtkWidget *widget, gint *minimum, gint *natural);
+static void level_bar_get_preferred_height (GtkWidget *widget,gint *minimum, gint *natural);
+
+static void level_bar_real_update(LevelBar *progress);
+static gboolean level_bar_draw(GtkWidget *widget, cairo_t *cr);
+
+static void level_bar_finalize(GObject *object);
+
+G_DEFINE_TYPE(LevelBar, level_bar, GTK_TYPE_WIDGET);
+
+static void level_bar_class_init(LevelBarClass *class) {
+    GObjectClass *gobject_class;
+    GtkWidgetClass *widget_class;
+
+    gobject_class = G_OBJECT_CLASS (class);
+    widget_class = (GtkWidgetClass *)class;
+
+    gobject_class->set_property = NULL;
+    gobject_class->get_property = NULL;
+    gobject_class->finalize = level_bar_finalize;
+
+    widget_class->draw = level_bar_draw;
+    widget_class->get_preferred_width = level_bar_get_preferred_width;
+    widget_class->get_preferred_height = level_bar_get_preferred_height;
+
+    g_type_class_add_private(class, sizeof (LevelBarPrivate));
+}
+
+static void level_bar_init(LevelBar *pbar) {
+    LevelBarPrivate *priv;
+
+    pbar->priv = G_TYPE_INSTANCE_GET_PRIVATE(pbar, TYPE_LEVEL_BAR, LevelBarPrivate);
+    priv = pbar->priv;
+
+    priv->fraction = 0.0;
+    priv->bar_height = 8;
+    priv->bar_value = VALUE_NONE;
+    priv->bar_shape = SHAPE_CIRCLE; // pulsing line with circle at end.
+
+    gtk_widget_set_has_window(GTK_WIDGET (pbar), FALSE);
+}
+
+GtkWidget *level_bar_new(void) {
+    GtkWidget *pbar;
+    pbar = g_object_new(TYPE_LEVEL_BAR, NULL);
+    return pbar;
+}
+
+static void level_bar_real_update (LevelBar *pbar) {
+    GtkWidget *widget;
+
+    g_return_if_fail (IS_LEVEL_BAR (pbar));
+
+    LevelBarPrivate __attribute__ ((unused)) *priv = pbar->priv;
+
+    widget = GTK_WIDGET(pbar);
+
+    gtk_widget_queue_draw(widget);
+}
+
+static void level_bar_finalize (GObject *object) {
+    G_OBJECT_CLASS(level_bar_parent_class)->finalize (object);
+}
+
+static void level_bar_get_preferred_width (GtkWidget *widget,gint *minimum, gint *natural) {
+    *minimum = 50;
+    *natural = 160;
+}
+
+static void level_bar_get_preferred_height (GtkWidget *widget, gint      *minimum, gint      *natural) {
+    *minimum = 6;
+    *natural = 8;
+}
+
+static gboolean level_bar_draw(GtkWidget *widget, cairo_t *cr) {
+    // Draw level bar and optional text
+    LevelBar *pbar = LEVEL_BAR (widget);
+    LevelBarPrivate *priv = pbar->priv;
+    GtkStyleContext *context;
+    int width, height;
+
+    context = gtk_widget_get_style_context(widget);
+
+    width = gtk_widget_get_allocated_width(widget);
+    height = gtk_widget_get_allocated_height(widget);
+
+    // Bar thickness
+    gdouble bar_height = MIN(height , priv->bar_height);
+
+    // Vertical pos
+    gdouble y = (height - bar_height)/2;
+
+    // Pulse width
+    gdouble w = priv->fraction/(1.00/width);
+
+    // Debug:
+    // LOG_DEBUG("width=%d height=%d bar_height=%2.1f y=%2.1f w=%2.1f  fraction=%2.1f\n", width, height, bar_height, y, w, priv->fraction);
+
+    gtk_style_context_save(context);
+    gtk_render_background(context, cr, 0, 0, width, height);
+    gtk_render_frame(context, cr, 0, 0, width, height);
+
+    // Render level bar with current theme and color.
+
+    // Progressbar style
+    gtk_style_context_add_class(context, GTK_STYLE_CLASS_PROGRESSBAR);
+
+    if (priv->fraction > 0.001) {
+
+        switch (priv->bar_shape) {
+
+        case SHAPE_LINE:
+            // Render a single line
+            if (priv->bar_value == VALUE_NONE) {
+                // No value (text) shown. Draw a line on the middle.
+                gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2));
+
+            } else {
+                // Draw a line under text.
+                gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height ));
+            }
+
+            break;
+
+        case SHAPE_LINE2:
+            // Render two horizontal lines + close the end.
+            gtk_render_line(context, cr, 0, y-1 , w, y-1);
+            gtk_render_line(context, cr, 0, y + (bar_height ), w, y + (bar_height ));
+            gtk_render_line(context, cr, w, y - 1, w, y + (bar_height ));
+            break;
+
+        case SHAPE_CIRCLE:
+            // Draw a line on the middle + circle at the end.
+            gtk_render_line(context, cr, 0, y + (bar_height / 2), w, y + (bar_height / 2));
+            gtk_render_option(context, cr, w, y, bar_height+1, bar_height+1);
+            break;
+
+        default:
+            // case SHAPE_LEVELBAR:
+
+            // EDIT: gtk_render_activity() does not work in GTK 3.14+
+            // gtk_style_context_set_state(context, GTK_STATE_FLAG_ACTIVE);
+            // gtk_render_activity(context, cr, 0, y, w, bar_height);
+
+            // Render a filled frame (this is a typical levelbar).
+            gtk_render_frame(context, cr, 0, y, w, bar_height);
+            break;
+
+        }
+    }
+
+    gtk_style_context_restore(context);
+
+    cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
+    cairo_set_font_size(cr, priv->bar_height);
+
+    GdkRGBA color;
+    gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color);
+    gdk_cairo_set_source_rgba(cr, &color);
+    color.alpha = 0.9;
+
+    // Calculate total width of scale
+    cairo_text_extents_t extents;
+    cairo_text_extents(cr, "0.0", &extents);
+    gint total_w = 9 * (extents.x_advance + extents.width);
+
+    // Debug:
+    // g_print("Bar width=%d  total_w=%d  bearing=%3.1f advance=%3.1f char.width=%3.1f\n", width, total_w,
+    //          extents.x_bearing, extents.x_advance, extents.width);
+
+    // Draw values
+    gboolean draw_all = (total_w - extents.width) < width;
+
+    // Show normalized value [0 - 1.0]?
+    if (priv->bar_value == VALUE_0_1) {
+        // Value: 0.1  0.2  0.3  0.4...0.9
+
+        gint i = 0;
+        for (i=0; i < 10; i++) {
+            gchar *s = NULL;
+
+            // Draw all or draw only each second value?
+            if (draw_all || (i % 2 == 0))
+                s = g_strdup_printf("%2.1f", (gdouble)i/10.0);
+
+            if (!s) continue;
+
+            cairo_text_extents_t extents;
+            cairo_text_extents(cr, s, &extents);
+
+            gdouble xx = (width/10) * i;
+            gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing) + 0.2;
+
+            cairo_move_to(cr, xx, yy);
+            cairo_show_text(cr, s);
+
+            g_free(s);
+        }
+
+        // Show percentage value?
+    } else if (priv->bar_value == VALUE_PERCENT) {
+        // Value: 10% . 20% . 30% . 40% . 50% ... 90%
+        gint i = 0;
+        for (i=0; i < 10; i++) {
+            gchar *s = NULL;
+            if (i % 2 == 0)
+                s = g_strdup_printf("%2.0f%%", (gdouble)i*10.0);
+            else
+                s = g_strdup_printf("%3s", ".");
+
+            cairo_text_extents_t extents;
+            cairo_text_extents(cr, s, &extents);
+
+            gdouble xx = (width/10) * i;
+            gdouble yy = (height/2)-(extents.height/2 + extents.y_bearing);
+
+            cairo_move_to(cr, xx, yy);
+            cairo_show_text(cr, s);
+
+            g_free(s);
+        }
+    }
+
+#if 0
+    // Commented out by moma 30.sep.2012.
+
+    // Set text
+    if (priv->text) {
+        cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
+
+        cairo_set_font_size(cr, 0.5*height);
+        cairo_text_extents_t extents;
+        cairo_text_extents(cr, priv->text, &extents);
+
+        // Ref: http://cairographics.org/manual/cairo-cairo-scaled-font-t.html#cairo-text-extents-t
+        gdouble xx = width-(extents.width + extents.x_bearing)-2;
+        gdouble yy = height/2-(extents.height/2 + extents.y_bearing);
+
+        GdkRGBA color;
+        gtk_style_context_get_border_color(context, GTK_STATE_NORMAL, &color);
+        gdk_cairo_set_source_rgba(cr, &color);
+        color.alpha = 0.9;
+
+        cairo_move_to(cr, xx, yy);
+        cairo_show_text(cr, priv->text);
+    }
+#endif
+
+    return FALSE;
+}
+
+void level_bar_set_fraction(LevelBar *pbar, gdouble fraction) {
+    // Set fraction [0.0, 1.0]
+    LevelBarPrivate* priv;
+    g_return_if_fail (IS_LEVEL_BAR (pbar));
+    priv = pbar->priv;
+
+    priv->fraction = CLAMP(fraction, 0.0, 1.0);
+    level_bar_real_update (pbar);
+}
+
+gdouble level_bar_get_fraction(LevelBar *pbar) {
+    // Get fraction
+    g_return_val_if_fail(IS_LEVEL_BAR (pbar), 0);
+    return pbar->priv->fraction;
+}
+
+void level_bar_set_bar_height(LevelBar *pbar, guint height) {
+    // Set bar height (thickness). Normally 8 pixels.
+    g_return_if_fail(IS_LEVEL_BAR (pbar));
+    LevelBarPrivate* priv = pbar->priv;
+    priv->bar_height = height;
+    // Redraw
+    level_bar_real_update(pbar);
+}
+
+guint level_bar_get_bar_height(LevelBar *pbar) {
+    // Get bar thickness
+    g_return_val_if_fail(IS_LEVEL_BAR(pbar), 0);
+    return pbar->priv->bar_height;
+}
+
+void level_bar_set_value_type(LevelBar *pbar, enum BAR_VALUE bar_value) {
+    // Set BAR_VALUE
+    g_return_if_fail(IS_LEVEL_BAR(pbar));
+    LevelBarPrivate* priv = pbar->priv;
+    priv->bar_value = bar_value;
+    // Redraw
+    level_bar_real_update(pbar);
+}
+
+enum BAR_VALUE level_bar_get_scale(LevelBar *pbar) {
+    // Get BAR_VALUE
+    g_return_val_if_fail(IS_LEVEL_BAR(pbar), VALUE_NONE);
+    LevelBarPrivate* priv = pbar->priv;
+    return priv->bar_value;
+}
+
+void level_bar_set_shape(LevelBar *pbar, enum BAR_SHAPE bar_shape) {
+    // Set BAR_SHAPE
+    g_return_if_fail(IS_LEVEL_BAR(pbar));
+    LevelBarPrivate* priv = pbar->priv;
+    priv->bar_shape = bar_shape;
+    // Redraw
+    level_bar_real_update(pbar);
+}
+
+enum BAR_SHAPE level_bar_get_shape(LevelBar *pbar) {
+    // Get BAR_SHAPE
+    g_return_val_if_fail(IS_LEVEL_BAR(pbar), SHAPE_LEVELBAR);
+    LevelBarPrivate* priv = pbar->priv;
+    return priv->bar_shape;
+}
+
+
Index: src/levelbar.h
===================================================================
--- /dev/null
+++ src/levelbar.h
@@ -0,0 +1,60 @@
+#ifndef __LEVEL_BAR_H__
+#define __LEVEL_BAR_H__
+
+// A simple level bar widget.
+
+#include <gtk/gtk.h>
+
+typedef enum BAR_VALUE {VALUE_NONE, VALUE_0_1/*0 - 1.0*/, VALUE_PERCENT/*0 - 100%*/} BAR_VALUE;
+typedef enum BAR_SHAPE {SHAPE_LEVELBAR, SHAPE_LINE, SHAPE_LINE2, SHAPE_CIRCLE} BAR_SHAPE;
+
+G_BEGIN_DECLS
+
+#define TYPE_LEVEL_BAR            (level_bar_get_type ())
+#define LEVEL_BAR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_LEVEL_BAR, LevelBar))
+#define LEVEL_BAR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_LEVEL_BAR, LevelBarClass))
+#define IS_LEVEL_BAR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_LEVEL_BAR))
+#define IS_LEVEL_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_LEVEL_BAR))
+#define LEVEL_BAR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_LEVEL_BAR, LevelBarClass))
+
+typedef struct _LevelBar              LevelBar;
+typedef struct _LevelBarPrivate       LevelBarPrivate;
+typedef struct _LevelBarClass         LevelBarClass;
+
+struct _LevelBar {
+    GtkWidget parent;
+
+    /*< private >*/
+    LevelBarPrivate *priv;
+};
+
+struct _LevelBarClass {
+    GtkWidgetClass parent_class;
+
+    /* Padding for future expansion */
+    void (*_gtk_reserved1) (void);
+    void (*_gtk_reserved2) (void);
+    void (*_gtk_reserved3) (void);
+    void (*_gtk_reserved4) (void);
+};
+
+GType level_bar_get_type(void) G_GNUC_CONST;
+GtkWidget* level_bar_new(void);
+
+void level_bar_set_bar_height(LevelBar *pbar, guint height);
+void level_bar_set_fraction(LevelBar *pbar, gdouble fraction);
+
+guint level_bar_get_bar_height(LevelBar *pbar);
+gdouble level_bar_get_fraction(LevelBar *pbar);
+
+void level_bar_set_value_type(LevelBar *pbar, enum BAR_VALUE bar_value);
+enum BAR_VALUE level_bar_get_value_type(LevelBar *pbar);
+
+void level_bar_set_shape(LevelBar *pbar, enum BAR_SHAPE bar_shape);
+enum BAR_SHAPE level_bar_get_shape(LevelBar *pbar);
+
+G_END_DECLS
+
+#endif
+
+
Index: src/main.c
===================================================================
--- src/main.c.orig
+++ src/main.c
@@ -25,7 +25,7 @@
 
 #include <gst/pbutils/pbutils.h>
 
-#include "gtklevelbar.h" // Level bar widget
+#include "levelbar.h" // Level bar widget
 #include "support.h"
 #include "audio-sources.h"
 #include "rec-window.h"
@@ -274,13 +274,13 @@ void win_set_filename(gchar *filename) {
 }
 
 void win_update_level_bar(gdouble norm_rms, gdouble norm_peak) {
-    // Set pulse on gtklevelbar
+    // Set pulse on the levelbar
 
-    if (!GTK_IS_LEVEL_BAR(g_win.level_bar)) return;
+    if (!IS_LEVEL_BAR(g_win.level_bar)) return;
 
     // Show either RMS or peak-value on the levelbar.
     // Notice: This value has no GUI-setting. User must change it in the dconf-editor.
-    gtk_level_bar_set_fraction(GTK_LEVEL_BAR(g_win.level_bar),
+    level_bar_set_fraction(LEVEL_BAR(g_win.level_bar),
                                (g_win.pulse_type == PULSE_RMS ? norm_rms : norm_peak));
 }
 
@@ -810,7 +810,7 @@ void win_show_settings_dialog() {
 
 void win_level_bar_clicked(GtkWidget *widget, GdkEvent *event, gpointer data) {
     // User clicked on the level bar.
-    // Set BAR_VALUE or BAR_SHAPE. See gtklevelbar.h.value
+    // Set BAR_VALUE or BAR_SHAPE. See levelbar.h.
     GdkEventButton *ev = (GdkEventButton*)event;
 
     if (ev->button == 1) {
@@ -827,7 +827,7 @@ void win_level_bar_clicked(GtkWidget *wi
         }
 
         // Update GUI
-        gtk_level_bar_set_value_type(GTK_LEVEL_BAR(g_win.level_bar), bar_value);
+        level_bar_set_value_type(LEVEL_BAR(g_win.level_bar), bar_value);
 
         // Save in DConf
         conf_save_int_value("level-bar-value", bar_value);
@@ -846,7 +846,7 @@ void win_level_bar_clicked(GtkWidget *wi
         }
 
         // Update GUI
-        gtk_level_bar_set_shape(GTK_LEVEL_BAR(g_win.level_bar), bar_shape);
+        level_bar_set_shape(LEVEL_BAR(g_win.level_bar), bar_shape);
 
         // Save in DConf
         conf_save_int_value("level-bar-shape", bar_shape);
@@ -981,7 +981,7 @@ void win_create_window() {
         }
     }
 
-    // Gtklevelbar/pulsebar: Indicator for sound amplitude (a GtkLevelBar widget).
+    // Levelbar/pulsebar: Indicator for sound amplitude.
     // Put it in a GtkEventBox so we can catch click events.
 
     GtkWidget *event_box = gtk_event_box_new();
@@ -992,24 +992,24 @@ void win_create_window() {
     gtk_widget_set_events(event_box, GDK_BUTTON_PRESS_MASK);
     g_signal_connect(event_box, "button_press_event", G_CALLBACK(win_level_bar_clicked), NULL);
 
-    // Create GtkLevelBar widget and put it in the GtkEventBox
-    g_win.level_bar = gtk_level_bar_new();
+    // Create a LevelBar widget and put it in the GtkEventBox
+    g_win.level_bar = level_bar_new();
     gtk_widget_show(g_win.level_bar);
     gtk_container_add(GTK_CONTAINER(event_box), g_win.level_bar);
-    gtk_level_bar_set_fraction(GTK_LEVEL_BAR(g_win.level_bar), 0.0);
+    level_bar_set_fraction(LEVEL_BAR(g_win.level_bar), 0.0);
 
     // How to draw the level bar?
     // Get from DConf
     gint bar_shape = SHAPE_CIRCLE;
     conf_get_int_value("level-bar-shape", &bar_shape);
-    gtk_level_bar_set_shape(GTK_LEVEL_BAR(g_win.level_bar), bar_shape);
+    level_bar_set_shape(LEVEL_BAR(g_win.level_bar), bar_shape);
     // Notice: User can change this by RIGHT-clicking on the level-bar
 
     // Type of value on the level bar?
     // Get from DConf
     gint bar_value = VALUE_NONE;
     conf_get_int_value("level-bar-value", &bar_value);
-    gtk_level_bar_set_value_type(GTK_LEVEL_BAR(g_win.level_bar), bar_value);
+    level_bar_set_value_type(LEVEL_BAR(g_win.level_bar), bar_value);
     // Notice: User can change this by LEFT-clicking on the level-bar
 
     // Should we show RMS or peak-value on the levelbar?
Index: src/rec-window.h
===================================================================
--- src/rec-window.h.orig
+++ src/rec-window.h
@@ -5,12 +5,12 @@
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 
-#include "gtklevelbar.h"
+#include "levelbar.h"
 
 // Width of the settings window
 #define PREF_WINDOW_WIDTH 300
 
-// PULSE_TYPE: Type of pulse on the gtklevelbar.
+// PULSE_TYPE: Type of pulse on the levelbar.
 // Notice: This cannot be changed from the GUI.
 // Use Gsettings/dconf-editor and find "level-bar-pulse-type" in apps -> audio-recorder.
 typedef enum PULSE_TYPE {PULSE_PEAK, PULSE_RMS} PULSE_TYPE;
Index: src/settings.c
===================================================================
--- src/settings.c.orig
+++ src/settings.c
@@ -354,7 +354,7 @@ static void player_view_fill() {
         case COMM_PROGRAM:
             descr = g_strdup(item->description);
 
-            pixbuf = load_icon_pixbuf(item->icon_name);
+            pixbuf = load_icon_pixbuf(item->icon_name, 22);
 
             // Translators: This is a label/help text in the [Additional settings] dialog
             help_text = g_strdup(_("Select both output device (speakers) and webcam/microphone."));
Index: src/systray-icon.c
===================================================================
--- src/systray-icon.c.orig
+++ src/systray-icon.c
@@ -101,7 +101,7 @@ void systray_set_menu_items2(gboolean sh
 static void systray_popup_menu_cb(GtkWidget * widget, gpointer data) {
     gchar *cmd = (gchar*)data;
 
-    LOG_SYSTRAY("%s: systray_popup_menu_cb: %s\n", INSTALLED_INDICATOR_TYPE, cmd);
+    LOG_SYSTRAY("systray_popup_menu_cb: %s\n", cmd);
 
     if (!g_strcmp0(cmd, "start")) {
         rec_manager_flip_recording();
Index: src/utility.c
===================================================================
--- src/utility.c.orig
+++ src/utility.c
@@ -923,7 +923,7 @@ LBL_1:
     return value;
 }
 
-GdkPixbuf *load_icon_pixbuf(gchar *icon_name) {
+GdkPixbuf *load_icon_pixbuf(gchar *icon_name, guint _size) {
     // Load icon pixbuf from current icon theme.
     GdkPixbuf *pixbuf = NULL;
 
@@ -935,11 +935,11 @@ GdkPixbuf *load_icon_pixbuf(gchar *icon_
     GtkIconTheme *theme = gtk_icon_theme_get_default();
 
     // Load icon from its theme
-    pixbuf = gtk_icon_theme_load_icon(theme, icon_name, 22, 0, NULL);
+    pixbuf = gtk_icon_theme_load_icon(theme, icon_name, _size, 0, NULL);
 
     // Got it?
     if (GDK_IS_PIXBUF(pixbuf)) {
-        return pixbuf;
+        goto LBL_1;
     }
 
     // Executable name != icon_name.
@@ -969,13 +969,22 @@ GdkPixbuf *load_icon_pixbuf(gchar *icon_
 
     if (icon_n) {
         // Load icon
-        pixbuf = gtk_icon_theme_load_icon(theme, icon_n, 22, 0, NULL);
+        pixbuf = gtk_icon_theme_load_icon(theme, icon_n, _size, 0, NULL);
     }
 
     g_free(icon_n);
     g_free(desktop_file);
     g_object_unref(app_info);
 
+LBL_1:
+
+    // Some icons are large. Force to _size.
+    if (GDK_IS_PIXBUF(pixbuf)) {
+        GdkPixbuf *img = gdk_pixbuf_scale_simple(pixbuf, _size, _size, GDK_INTERP_HYPER);
+        g_object_unref(pixbuf);
+        pixbuf = img;
+    }
+
     // Caller should g_object_unref() this value
     return pixbuf;
 }
Index: src/utility.h
===================================================================
--- src/utility.h.orig
+++ src/utility.h
@@ -74,7 +74,7 @@ void str_list_print(gchar *prefix, GList
 gboolean str_lists_equal(GList *l1, GList *l2);
 
 gchar *read_value_from_keyfile(gchar *key_file, gchar *group_name, gchar *key_name);
-GdkPixbuf *load_icon_pixbuf(gchar *icon_name);
+GdkPixbuf *load_icon_pixbuf(gchar *icon_name, guint _size);
 
 void kill_frozen_instances(gchar *program_path, GPid preserve_pid);
 void kill_program_by_name(gchar *app_name, GPid preserve_pid);