[easytag/wip/application-window: 2/2] Move main window to EtApplicationWindow object



commit 38f5a8e315446a9eb05c5a55de1cf9b4c8e9e390
Author: David King <amigadave amigadave com>
Date:   Sat Nov 2 21:33:18 2013 +0000

    Move main window to EtApplicationWindow object

 Makefile.am              |    2 +
 src/application.c        |   17 +-
 src/application.h        |    6 +-
 src/application_window.c | 2015 ++++++++++++++++++++++++++++++++++++++++++++++
 src/application_window.h |   57 ++
 src/bar.c                |    6 +-
 src/bar.h                |    2 +-
 src/browser.c            |    1 -
 src/easytag.c            | 1955 +-------------------------------------------
 src/easytag.h            |    2 -
 src/et_core.c            |    4 +-
 11 files changed, 2136 insertions(+), 1931 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index a184160..2f16a05 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -35,6 +35,7 @@ easytag_SOURCES = \
        src/about.c \
        src/ape_tag.c \
        src/application.c \
+       src/application_window.c \
        src/bar.c \
        src/browser.c \
        src/browser.h \
@@ -76,6 +77,7 @@ easytag_headers = \
        src/about.h \
        src/ape_tag.h \
        src/application.h \
+       src/application_window.h \
        src/bar.h \
        src/cddb.h \
        src/charset.h \
diff --git a/src/application.c b/src/application.c
index 8135363..d30b65c 100644
--- a/src/application.c
+++ b/src/application.c
@@ -28,7 +28,7 @@ G_DEFINE_TYPE (EtApplication, et_application, G_TYPE_APPLICATION)
 
 struct _EtApplicationPrivate
 {
-    GtkWindow *main_window;
+    EtApplicationWindow *window;
 };
 
 static const GOptionEntry entries[] =
@@ -156,7 +156,7 @@ et_application_init (EtApplication *application)
                                                      ET_TYPE_APPLICATION,
                                                      EtApplicationPrivate);
 
-    application->priv->main_window = NULL;
+    application->priv->window = NULL;
 }
 
 static void
@@ -192,12 +192,12 @@ et_application_new ()
  *
  * Returns: the current application window, or %NULL if no window is set
  */
-GtkWindow *
+EtApplicationWindow *
 et_application_get_window (EtApplication *application)
 {
     g_return_val_if_fail (ET_APPLICATION (application), NULL);
 
-    return application->priv->main_window;
+    return application->priv->window;
 }
 
 /*
@@ -208,10 +208,11 @@ et_application_get_window (EtApplication *application)
  * Set the application window, if none has been set already.
  */
 void
-et_application_set_window (EtApplication *application, GtkWindow *window)
+et_application_set_window (EtApplication *application,
+                           EtApplicationWindow *window)
 {
-    g_return_if_fail (ET_APPLICATION (application) || GTK_WINDOW (window)
-                      || application->priv->main_window != NULL);
+    g_return_if_fail (ET_APPLICATION (application) && GTK_WINDOW (window)
+                      && application->priv->window == NULL);
 
-    application->priv->main_window = window;
+    application->priv->window = window;
 }
diff --git a/src/application.h b/src/application.h
index c3a1858..ddf0aed 100644
--- a/src/application.h
+++ b/src/application.h
@@ -22,6 +22,8 @@
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 
+#include "application_window.h"
+
 G_BEGIN_DECLS
 
 #define ET_TYPE_APPLICATION (et_application_get_type ())
@@ -46,8 +48,8 @@ struct _EtApplicationClass
 
 GType et_application_get_type (void);
 EtApplication *et_application_new (void);
-GtkWindow *et_application_get_window (EtApplication *application);
-void et_application_set_window (EtApplication *application, GtkWindow *window);
+EtApplicationWindow *et_application_get_window (EtApplication *application);
+void et_application_set_window (EtApplication *application, EtApplicationWindow *window);
 
 G_END_DECLS
 
diff --git a/src/application_window.c b/src/application_window.c
new file mode 100644
index 0000000..9251f7f
--- /dev/null
+++ b/src/application_window.c
@@ -0,0 +1,2015 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2013  David King <amigadave amigadave com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "application_window.h"
+
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+
+#include "bar.h"
+#include "browser.h"
+#include "easytag.h"
+#include "gtk2_compat.h"
+#include "log.h"
+#include "misc.h"
+#include "picture.h"
+#include "scan.h"
+#include "setting.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtApplicationWindow, et_application_window, GTK_TYPE_WINDOW)
+
+#define et_application_window_get_instance_private(window) (window->priv)
+
+struct _EtApplicationWindowPrivate
+{
+    GtkWidget *file_area;
+    GtkWidget *tag_area;
+
+    /* Tag area labels. */
+    GtkWidget *title_label;
+    GtkWidget *artist_label;
+    GtkWidget *album_artist_label;
+    GtkWidget *album_label;
+    GtkWidget *disc_number_label;
+    GtkWidget *year_label;
+    GtkWidget *track_label;
+    GtkWidget *genre_label;
+    GtkWidget *comment_label;
+    GtkWidget *composer_label;
+    GtkWidget *orig_artist_label;
+    GtkWidget *copyright_label;
+    GtkWidget *url_label;
+    GtkWidget *encoded_by_label;
+
+    /* FIXME: Tag area entries. */
+
+    /* Notebook tabs. */
+    GtkWidget *images_tab;
+
+    /* Image treeview model. */
+    GtkListStore *images_model;
+
+    GtkWidget *hpaned;
+    GtkWidget *vpaned;
+
+    /* Mini buttons. */
+    GtkWidget *track_sequence_button;
+    GtkWidget *track_number_button;
+    GtkToolItem *apply_image_toolitem;
+};
+
+
+static void et_tag_field_connect_signals (GtkEntry *entry);
+static gboolean et_tag_field_on_key_press_event (GtkEntry *entry,
+                                                 GdkEventKey *event,
+                                                 gpointer user_data);
+
+static void Mini_Button_Clicked (GObject *object);
+
+static void
+Convert_P20_And_Underscore_Into_Spaces (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Convert_Underscore_Into_Space(string);
+    Scan_Convert_P20_Into_Space(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_Space_Into_Underscore (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Convert_Space_Into_Undescore(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_All_Uppercase (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Process_Fields_All_Uppercase(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_All_Lowercase (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Process_Fields_All_Downcase(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_Letter_Uppercase (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Process_Fields_Letter_Uppercase(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_First_Letters_Uppercase (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Process_Fields_First_Letters_Uppercase(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_Remove_Space (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Process_Fields_Remove_Space(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_Insert_Space (GtkWidget *entry)
+{
+    // FIX ME : we suppose that it will not grow more than 2 times its size...
+    guint string_length = 2 * strlen(gtk_entry_get_text(GTK_ENTRY(entry)));
+    gchar *string       = g_malloc(string_length+1);
+    strncpy(string,gtk_entry_get_text(GTK_ENTRY(entry)),string_length);
+    string[string_length]='\0';
+
+    Scan_Process_Fields_Insert_Space(&string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_Only_One_Space (GtkWidget *entry)
+{
+    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+    Scan_Process_Fields_Keep_One_Space(string);
+    gtk_entry_set_text(GTK_ENTRY(entry),string);
+    g_free(string);
+}
+
+static void
+Convert_Remove_All_Text (GtkWidget *entry)
+{
+    gtk_entry_set_text (GTK_ENTRY (entry), "");
+}
+
+/*
+ * Entry_Popup_Menu_Handler: show the popup menu when the third mouse button is pressed.
+ */
+static gboolean
+Entry_Popup_Menu_Handler (GtkMenu *menu, GdkEventButton *event)
+{
+    if (event && (event->type==GDK_BUTTON_PRESS) && (event->button==3))
+    {
+        /* FIX ME : this is not very clean, but if we use 'event->button' (contains value of
+         * the 3rd button) instead of '1', we need to click two times the left mouse button
+         * to activate an item of the opened popup menu (when menu is attached to an entry). */
+        //gtk_menu_popup(menu,NULL,NULL,NULL,NULL,event->button,event->time);
+        gtk_menu_popup(menu,NULL,NULL,NULL,NULL,1,event->time);
+        return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Popup menu attached to all entries of tag + filename + rename combobox.
+ * Displayed when pressing the right mouse button and contains functions to process ths strings.
+ */
+void Attach_Popup_Menu_To_Tag_Entries (GtkEntry *entry)
+{
+    GtkWidget *PopupMenu;
+    GtkWidget *Image;
+    GtkWidget *MenuItem;
+
+
+    PopupMenu = gtk_menu_new();
+    g_signal_connect_swapped(G_OBJECT(entry),"button_press_event",
+        G_CALLBACK(Entry_Popup_Menu_Handler),G_OBJECT(PopupMenu));
+
+    /* Menu items */
+    MenuItem = gtk_image_menu_item_new_with_label(_("Tag selected files with this field"));
+    Image = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO,GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped (G_OBJECT (MenuItem), "activate",
+                              G_CALLBACK (Mini_Button_Clicked),
+                              G_OBJECT (entry));
+
+    /* Separator */
+    MenuItem = gtk_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("Convert '_' and '%20' to spaces"));
+    Image = gtk_image_new_from_stock(GTK_STOCK_CONVERT,GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_P20_And_Underscore_Into_Spaces),G_OBJECT(entry));
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("Convert ' ' to '_'"));
+    Image = gtk_image_new_from_stock(GTK_STOCK_CONVERT,GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_Space_Into_Underscore),G_OBJECT(entry));
+
+    /* Separator */
+    MenuItem = gtk_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("All uppercase"));
+    Image = gtk_image_new_from_stock("easytag-all-uppercase",GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_All_Uppercase),G_OBJECT(entry));
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("All lowercase"));
+    Image = gtk_image_new_from_stock("easytag-all-downcase",GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_All_Lowercase),G_OBJECT(entry));
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("First letter uppercase"));
+    Image = gtk_image_new_from_stock("easytag-first-letter-uppercase",GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_Letter_Uppercase),G_OBJECT(entry));
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("First letter uppercase of each word"));
+    Image = gtk_image_new_from_stock("easytag-first-letter-uppercase-word",GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_First_Letters_Uppercase),G_OBJECT(entry));
+
+    /* Separator */
+    MenuItem = gtk_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("Remove spaces"));
+    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_Remove_Space),G_OBJECT(entry));
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("Insert space before uppercase letter"));
+    Image = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_Insert_Space),G_OBJECT(entry));
+
+    MenuItem = gtk_image_menu_item_new_with_label(_("Remove duplicate spaces or underscores"));
+    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
+    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
+        G_CALLBACK(Convert_Only_One_Space),G_OBJECT(entry));
+
+    MenuItem = gtk_image_menu_item_new_with_label (_("Remove all text"));
+    Image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM(MenuItem), Image);
+    gtk_menu_shell_append (GTK_MENU_SHELL(PopupMenu), MenuItem);
+    g_signal_connect_swapped (G_OBJECT (MenuItem), "activate",
+                              G_CALLBACK (Convert_Remove_All_Text),
+                              G_OBJECT (entry));
+
+    gtk_widget_show_all(PopupMenu);
+}
+
+
+
+
+/*
+ * Disable (FALSE) / Enable (TRUE) all user widgets in the tag area
+ */
+void
+et_application_window_tag_area_set_sensitive (EtApplicationWindow *self,
+                                              gboolean sensitive)
+{
+    g_return_if_fail (self->priv->tag_area != NULL);
+
+    /* TAG Area (entries + buttons). */
+    gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (self->priv->tag_area)),
+                              sensitive);
+}
+
+/*
+ * Disable (FALSE) / Enable (TRUE) all user widgets in the file area
+ */
+void
+et_application_window_file_area_set_sensitive (EtApplicationWindow *self,
+                                               gboolean sensitive)
+{
+    g_return_if_fail (self->priv->file_area != NULL);
+
+    /* File Area. */
+    gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (self->priv->file_area)),
+                              sensitive);
+}
+
+static void
+et_application_window_hide_images_tab (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    gtk_widget_hide (priv->images_tab);
+}
+
+static void
+et_application_window_show_images_tab (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    gtk_widget_show (priv->images_tab);
+}
+
+/*
+ * Display controls according the kind of tag... (Hide some controls if not available for a tag type)
+ */
+void
+et_application_window_tag_area_display_controls (EtApplicationWindow *self,
+                                                 ET_File *ETFile)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+    g_return_if_fail (ETFile != NULL && ETFile->ETFileDescription != NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    g_return_if_fail (priv->title_label != NULL);
+
+    /* Common controls for all tags. */
+    gtk_widget_show (GTK_WIDGET (priv->title_label));
+    gtk_widget_show(GTK_WIDGET(TitleEntry));
+    gtk_widget_show (GTK_WIDGET (priv->artist_label));
+    gtk_widget_show(GTK_WIDGET(ArtistEntry));
+    gtk_widget_show (GTK_WIDGET (priv->album_artist_label));
+    gtk_widget_show(GTK_WIDGET(AlbumArtistEntry));
+    gtk_widget_show (GTK_WIDGET (priv->album_label));
+    gtk_widget_show(GTK_WIDGET(AlbumEntry));
+    gtk_widget_show (GTK_WIDGET (priv->year_label));
+    gtk_widget_show(GTK_WIDGET(YearEntry));
+    gtk_widget_show (GTK_WIDGET (priv->track_label));
+    gtk_widget_show(GTK_WIDGET(TrackEntryCombo));
+    gtk_widget_show(GTK_WIDGET(TrackTotalEntry));
+    gtk_widget_show(GTK_WIDGET(priv->track_sequence_button));
+    gtk_widget_show(GTK_WIDGET(priv->track_number_button));
+    gtk_widget_show (GTK_WIDGET (priv->genre_label));
+    gtk_widget_show(GTK_WIDGET(GenreCombo));
+    gtk_widget_show (GTK_WIDGET (priv->comment_label));
+    gtk_widget_show(GTK_WIDGET(CommentEntry));
+
+    // Special controls to display or not!
+    switch (ETFile->ETFileDescription->TagType)
+    {
+        case ID3_TAG:
+            if (!FILE_WRITING_ID3V2_WRITE_TAG)
+            {
+                // ID3v1 : Hide specifics ID3v2 fields if not activated!
+                gtk_widget_hide (GTK_WIDGET (priv->disc_number_label));
+                gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
+                gtk_widget_hide (GTK_WIDGET (priv->composer_label));
+                gtk_widget_hide(GTK_WIDGET(ComposerEntry));
+                gtk_widget_hide (GTK_WIDGET (priv->orig_artist_label));
+                gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
+                gtk_widget_hide (GTK_WIDGET (priv->copyright_label));
+                gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
+                gtk_widget_hide (GTK_WIDGET (priv->url_label));
+                gtk_widget_hide(GTK_WIDGET(URLEntry));
+                gtk_widget_hide (GTK_WIDGET (priv->encoded_by_label));
+                gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
+                et_application_window_hide_images_tab (self);
+            }else
+            {
+                gtk_widget_show (GTK_WIDGET (priv->disc_number_label));
+                gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
+                gtk_widget_show (GTK_WIDGET (priv->composer_label));
+                gtk_widget_show(GTK_WIDGET(ComposerEntry));
+                gtk_widget_show (GTK_WIDGET (priv->orig_artist_label));
+                gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
+                gtk_widget_show (GTK_WIDGET (priv->copyright_label));
+                gtk_widget_show(GTK_WIDGET(CopyrightEntry));
+                gtk_widget_show (GTK_WIDGET (priv->url_label));
+                gtk_widget_show(GTK_WIDGET(URLEntry));
+                gtk_widget_show (GTK_WIDGET (priv->encoded_by_label));
+                gtk_widget_show(GTK_WIDGET(EncodedByEntry));
+                et_application_window_show_images_tab (self);
+            }
+            break;
+
+#ifdef ENABLE_OGG
+        case OGG_TAG:
+            gtk_widget_show (GTK_WIDGET (priv->disc_number_label));
+            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
+            gtk_widget_show (GTK_WIDGET (priv->composer_label));
+            gtk_widget_show(GTK_WIDGET(ComposerEntry));
+            gtk_widget_show (GTK_WIDGET (priv->orig_artist_label));
+            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
+            gtk_widget_show (GTK_WIDGET (priv->copyright_label));
+            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
+            gtk_widget_show (GTK_WIDGET (priv->url_label));
+            gtk_widget_show(GTK_WIDGET(URLEntry));
+            gtk_widget_show (GTK_WIDGET (priv->encoded_by_label));
+            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
+            et_application_window_show_images_tab (self);
+            break;
+#endif
+
+#ifdef ENABLE_FLAC
+        case FLAC_TAG:
+            gtk_widget_show (GTK_WIDGET (priv->disc_number_label));
+            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
+            gtk_widget_show (GTK_WIDGET (priv->composer_label));
+            gtk_widget_show(GTK_WIDGET(ComposerEntry));
+            gtk_widget_show (GTK_WIDGET (priv->orig_artist_label));
+            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
+            gtk_widget_show (GTK_WIDGET (priv->copyright_label));
+            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
+            gtk_widget_show (GTK_WIDGET (priv->url_label));
+            gtk_widget_show(GTK_WIDGET(URLEntry));
+            gtk_widget_show (GTK_WIDGET (priv->encoded_by_label));
+            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
+            et_application_window_show_images_tab (self);
+            break;
+#endif
+
+        case APE_TAG:
+            gtk_widget_show (GTK_WIDGET (priv->disc_number_label));
+            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
+            gtk_widget_show (GTK_WIDGET (priv->composer_label));
+            gtk_widget_show(GTK_WIDGET(ComposerEntry));
+            gtk_widget_show (GTK_WIDGET (priv->orig_artist_label));
+            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
+            gtk_widget_show (GTK_WIDGET (priv->copyright_label));
+            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
+            gtk_widget_show (GTK_WIDGET (priv->url_label));
+            gtk_widget_show(GTK_WIDGET(URLEntry));
+            gtk_widget_show (GTK_WIDGET (priv->encoded_by_label));
+            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
+            et_application_window_show_images_tab (self);
+            break;
+
+#ifdef ENABLE_MP4
+        case MP4_TAG:
+            gtk_widget_hide (GTK_WIDGET (priv->disc_number_label));
+            gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->composer_label));
+            gtk_widget_hide(GTK_WIDGET(ComposerEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->orig_artist_label));
+            gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->copyright_label));
+            gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->url_label));
+            gtk_widget_hide(GTK_WIDGET(URLEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->encoded_by_label));
+            gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
+            et_application_window_hide_images_tab (self);
+            break;
+#endif
+
+#ifdef ENABLE_WAVPACK
+        case WAVPACK_TAG:
+            gtk_widget_show (GTK_WIDGET (priv->disc_number_label));
+            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
+            gtk_widget_show (GTK_WIDGET (priv->composer_label));
+            gtk_widget_show(GTK_WIDGET(ComposerEntry));
+            gtk_widget_show (GTK_WIDGET (priv->orig_artist_label));
+            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
+            gtk_widget_show (GTK_WIDGET (priv->copyright_label));
+            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
+            gtk_widget_show (GTK_WIDGET (priv->url_label));
+            gtk_widget_show(GTK_WIDGET(URLEntry));
+            gtk_widget_show (GTK_WIDGET (priv->encoded_by_label));
+            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
+            et_application_window_hide_images_tab (self);
+            break;
+#endif /* ENABLE_WAVPACK */
+
+        case UNKNOWN_TAG:
+        default:
+            gtk_widget_hide (GTK_WIDGET (priv->disc_number_label));
+            gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->composer_label));
+            gtk_widget_hide(GTK_WIDGET(ComposerEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->orig_artist_label));
+            gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->copyright_label));
+            gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->url_label));
+            gtk_widget_hide(GTK_WIDGET(URLEntry));
+            gtk_widget_hide (GTK_WIDGET (priv->encoded_by_label));
+            gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
+            et_application_window_hide_images_tab (self);
+            break;
+    }
+}
+
+
+/*
+ * Clear the entries of tag area
+ */
+void Clear_Tag_Entry_Fields (void)
+{
+    /* GtkTextBuffer *textbuffer; */
+
+    g_return_if_fail (TitleEntry != NULL);
+
+    gtk_entry_set_text(GTK_ENTRY(TitleEntry),                       "");
+    gtk_entry_set_text(GTK_ENTRY(ArtistEntry),                      "");
+    gtk_entry_set_text(GTK_ENTRY(AlbumArtistEntry),                 "");
+    gtk_entry_set_text(GTK_ENTRY(AlbumEntry),                       "");
+    gtk_entry_set_text(GTK_ENTRY(DiscNumberEntry),                  "");
+    gtk_entry_set_text(GTK_ENTRY(YearEntry),                        "");
+    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo))),  "");
+    gtk_entry_set_text(GTK_ENTRY(TrackTotalEntry),                  "");
+    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))),       "");
+    gtk_entry_set_text(GTK_ENTRY(CommentEntry),                     "");
+    /* textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
+     * gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer),           "", -1); */
+    gtk_entry_set_text(GTK_ENTRY(ComposerEntry),                    "");
+    gtk_entry_set_text(GTK_ENTRY(OrigArtistEntry),                  "");
+    gtk_entry_set_text(GTK_ENTRY(CopyrightEntry),                   "");
+    gtk_entry_set_text(GTK_ENTRY(URLEntry),                         "");
+    gtk_entry_set_text(GTK_ENTRY(EncodedByEntry),                   "");
+    PictureEntry_Clear();
+}
+
+
+/*
+ * Clear the entry of file area
+ */
+void
+Clear_File_Entry_Field (void)
+{
+    g_return_if_fail (FileEntry != NULL);
+
+    gtk_entry_set_text (GTK_ENTRY (FileEntry),"");
+}
+
+
+/*
+ * Clear the header information
+ */
+void Clear_Header_Fields (void)
+{
+    g_return_if_fail (VersionValueLabel != NULL);
+
+    /* Default values are MPs data */
+    gtk_label_set_text(GTK_LABEL(VersionLabel),        _("Encoder:"));
+    gtk_label_set_text(GTK_LABEL(VersionValueLabel),   "");
+    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),   "");
+    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),"");
+    gtk_label_set_text(GTK_LABEL(ModeLabel),           _("Mode:"));
+    gtk_label_set_text(GTK_LABEL(ModeValueLabel),      "");
+    gtk_label_set_text(GTK_LABEL(SizeValueLabel),      "");
+    gtk_label_set_text(GTK_LABEL(DurationValueLabel),  "");
+}
+
+
+
+static void
+Mini_Button_Clicked (GObject *object)
+{
+    GtkWidget *toplevel;
+    EtApplicationWindowPrivate *priv;
+    GList *etfilelist = NULL;
+    GList *selection_filelist = NULL;
+    GList *l;
+    gchar *string_to_set = NULL;
+    gchar *string_to_set1 = NULL;
+    gchar *msg = NULL;
+    ET_File *etfile;
+    File_Tag *FileTag;
+    GtkTreeSelection *selection;
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
+                      BrowserList != NULL);
+
+    /* FIXME: hack! */
+    toplevel = gtk_widget_get_toplevel (GTK_WIDGET (object));
+
+    if (gtk_widget_is_toplevel (toplevel))
+    {
+        priv = et_application_window_get_instance_private (ET_APPLICATION_WINDOW (toplevel));
+    }
+    else
+    {
+        g_error ("Main window is not a toplevel!");
+    }
+
+    // Save the current displayed data
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    // Warning : 'selection_filelist' is not a list of 'ETFile' items!
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
+    selection_filelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    // Create an 'ETFile' list from 'selection_filelist'
+    for (l = selection_filelist; l != NULL; l = g_list_next (l))
+    {
+        etfile = Browser_List_Get_ETFile_From_Path (l->data);
+        etfilelist = g_list_prepend (etfilelist, etfile);
+    }
+
+    etfilelist = g_list_reverse (etfilelist);
+    g_list_free_full (selection_filelist, (GDestroyNotify)gtk_tree_path_free);
+
+
+    if (object == G_OBJECT (TitleEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(TitleEntry),0,-1); // The string to apply to all 
other files
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->title,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with title '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed title from selected files."));
+    }
+    else if (object == G_OBJECT (ArtistEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(ArtistEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->artist,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with artist '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed artist from selected files."));
+    }
+    else if (object == G_OBJECT (AlbumArtistEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(AlbumArtistEntry),0,-1);
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->album_artist,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with album artist '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed album artist from selected files."));
+    }
+    else if (object == G_OBJECT (AlbumEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(AlbumEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->album,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with album '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed album name from selected files."));
+    }
+    else if (object == G_OBJECT (DiscNumberEntry))
+    {
+        const gchar *entry_text;
+        gchar *separator;
+
+        entry_text = gtk_entry_get_text (GTK_ENTRY (DiscNumberEntry));
+        separator = g_utf8_strchr (entry_text, -1, '/');
+
+        if (separator)
+        {
+            string_to_set1 = g_strdup (separator + 1);
+            string_to_set = g_strndup (entry_text,
+                                       separator - entry_text);
+        }
+        else
+        {
+            string_to_set = g_strdup (entry_text);
+            string_to_set1 = NULL;
+        }
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item (&FileTag->disc_number, string_to_set);
+            ET_Set_Field_File_Tag_Item (&FileTag->disc_total, string_to_set1);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+
+        if (string_to_set != NULL && g_utf8_strlen (string_to_set, -1) > 0)
+        {
+            if (string_to_set1 != NULL
+                && g_utf8_strlen (string_to_set1, -1) > 0)
+            {
+                msg = g_strdup_printf (_("Selected files tagged with disc number '%s/%s'."),
+                                       string_to_set, string_to_set1);
+            }
+            else
+            {
+                msg = g_strdup_printf (_("Selected files tagged with disc number like 'xx'."));
+            }
+        }
+        else
+        {
+            msg = g_strdup (_("Removed disc number from selected files."));
+        }
+    }
+    else if (object == G_OBJECT (YearEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(YearEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->year,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with year '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed year from selected files."));
+    }
+    else if (object == G_OBJECT (TrackTotalEntry))
+    {
+        /* Used of Track and Total Track values */
+        string_to_set = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo)))));
+        string_to_set1 = gtk_editable_get_chars(GTK_EDITABLE(TrackTotalEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+
+            // We apply the TrackEntry field to all others files only if it is to delete
+            // the field (string=""). Else we don't overwrite the track number
+            if (!string_to_set || g_utf8_strlen(string_to_set, -1) == 0)
+                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
+            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set1);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+
+        if ( string_to_set && g_utf8_strlen(string_to_set, -1) > 0 ) //&& atoi(string_to_set)>0 )
+        {
+            if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 
)
+            {
+                msg = g_strdup_printf(_("Selected files tagged with track like 'xx/%s'."),string_to_set1);
+            }else
+            {
+                msg = g_strdup_printf(_("Selected files tagged with track like 'xx'."));
+            }
+        }else
+        {
+            msg = g_strdup(_("Removed track number from selected files."));
+        }
+    }
+    else if (object == G_OBJECT (priv->track_sequence_button))
+    {
+        /* This part doesn't set the same track number to all files, but sequence the tracks.
+         * So we must browse the whole 'etfilelistfull' to get position of each selected file.
+         * Note : 'etfilelistfull' and 'etfilelist' must be sorted in the same order */
+        GList *etfilelistfull = NULL;
+        gchar *path = NULL;
+        gchar *path1 = NULL;
+        gint i = 0;
+
+        /* FIX ME!: see to fill also the Total Track (it's a good idea?) */
+        etfilelistfull = g_list_first(ETCore->ETFileList);
+
+        // Sort 'etfilelistfull' and 'etfilelist' in the same order
+        etfilelist     = ET_Sort_File_List(etfilelist,SORTING_FILE_MODE);
+        etfilelistfull = ET_Sort_File_List(etfilelistfull,SORTING_FILE_MODE);
+
+        while (etfilelist && etfilelistfull)
+        {
+            // To get the path of the file
+            File_Name *FileNameCur = (File_Name *)((ET_File *)etfilelistfull->data)->FileNameCur->data;
+            // The ETFile in the selected file list
+            etfile = etfilelist->data;
+
+            // Restart counter when entering a new directory
+            g_free(path1);
+            path1 = g_path_get_dirname(FileNameCur->value);
+            if ( path && path1 && strcmp(path,path1)!=0 )
+                i = 0;
+
+            string_to_set = et_track_number_to_string (++i);
+
+            // The file is in the selection?
+            if ( (ET_File *)etfilelistfull->data == etfile )
+            {
+                FileTag = ET_File_Tag_Item_New();
+                ET_Copy_File_Tag_Item(etfile,FileTag);
+                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
+                ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+
+                if (!etfilelist->next) break;
+                etfilelist = g_list_next(etfilelist);
+            }
+
+            g_free(string_to_set);
+            g_free(path);
+            path = g_strdup(path1);
+
+            etfilelistfull = g_list_next(etfilelistfull);
+        }
+        g_free(path);
+        g_free(path1);
+        //msg = g_strdup_printf(_("All %d tracks numbered sequentially."), 
ETCore->ETFileSelectionList_Length);
+        msg = g_strdup_printf(_("Selected tracks numbered sequentially."));
+    }
+    else if (object==G_OBJECT(priv->track_number_button))
+    {
+        /* Used of Track and Total Track values */
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            gchar *path_utf8, *filename_utf8;
+
+            etfile        = (ET_File *)l->data;
+            filename_utf8 = ((File_Name *)etfile->FileNameNew->data)->value_utf8;
+            path_utf8     = g_path_get_dirname(filename_utf8);
+
+            string_to_set = et_track_number_to_string (ET_Get_Number_Of_Files_In_Directory (path_utf8));
+
+            g_free(path_utf8);
+            if (!string_to_set1)
+                string_to_set1 = g_strdup(string_to_set); // Just for the message below...
+
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+
+        if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 )
+        {
+            msg = g_strdup_printf(_("Selected files tagged with track like 'xx/%s'."),string_to_set1);
+        }else
+        {
+            msg = g_strdup(_("Removed track number from selected files."));
+        }
+    }
+    else if (object == G_OBJECT (gtk_bin_get_child (GTK_BIN (GenreCombo))))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(GenreCombo))),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->genre,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with genre '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed genre from selected files."));
+    }
+    else if (object == G_OBJECT (CommentEntry))
+    {
+        //GtkTextBuffer *textbuffer;
+        //GtkTextIter    start_iter;
+        //GtkTextIter    end_iter;
+        //textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
+        //gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter);
+        //string_to_set = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter,TRUE);
+
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(CommentEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->comment,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with comment '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed comment from selected files."));
+    }
+    else if (object == G_OBJECT (ComposerEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(ComposerEntry),0,-1);
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->composer,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with composer '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed composer from selected files."));
+    }
+    else if (object == G_OBJECT (OrigArtistEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(OrigArtistEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->orig_artist,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with original artist '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed original artist from selected files."));
+    }
+    else if (object == G_OBJECT (CopyrightEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(CopyrightEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->copyright,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with copyright '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed copyright from selected files."));
+    }
+    else if (object == G_OBJECT (URLEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(URLEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->url,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with URL '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed URL from selected files."));
+    }
+    else if (object == G_OBJECT (EncodedByEntry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(EncodedByEntry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->encoded_by,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+            msg = g_strdup_printf(_("Selected files tagged with encoder name '%s'."),string_to_set);
+        else
+            msg = g_strdup(_("Removed encoder name from selected files."));
+    }
+    else if (object == G_OBJECT (priv->apply_image_toolitem))
+    {
+        Picture *res = NULL, *pic, *prev_pic = NULL;
+        GtkTreeModel *model;
+        GtkTreeIter iter;
+
+        model = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
+        if (gtk_tree_model_get_iter_first(model, &iter))
+        {
+            do
+            {
+                gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic, -1);
+                pic = Picture_Copy_One(pic);
+                if (!res)
+                    res = pic;
+                else
+                    prev_pic->next = pic;
+                prev_pic = pic;
+            } while (gtk_tree_model_iter_next(model, &iter));
+        }
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Picture((Picture **)&FileTag->picture, res);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (res)
+            msg = g_strdup (_("Selected files tagged with images."));
+        else
+            msg = g_strdup (_("Removed images from selected files."));
+        Picture_Free(res);
+    }
+
+    g_list_free(etfilelist);
+
+    // Refresh the whole list (faster than file by file) to show changes
+    Browser_List_Refresh_Whole_List();
+
+    /* Display the current file (Needed when sequencing tracks) */
+    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+
+    if (msg)
+    {
+        Log_Print(LOG_OK,"%s",msg);
+        Statusbar_Message(msg,TRUE);
+        g_free(msg);
+    }
+    g_free(string_to_set);
+    g_free(string_to_set1);
+
+    /* To update state of Undo button */
+    Update_Command_Buttons_Sensivity();
+}
+
+
+/*
+ * et_tag_field_connect_signals:
+ * @entry: the entry for which to connect signals
+ *
+ * Connect the GtkWidget::key-press-event and GtkEntry::icon-release signals
+ * of @entry to appropriate handlers for tag entry fields.
+ */
+static void
+et_tag_field_connect_signals (GtkEntry *entry)
+{
+    g_signal_connect_after (entry, "key-press-event",
+                            G_CALLBACK (et_tag_field_on_key_press_event),
+                            NULL);
+    g_signal_connect (entry, "icon-release", G_CALLBACK (Mini_Button_Clicked),
+                      NULL);
+}
+
+/*
+ * et_tag_field_on_key_press_event:
+ * @entry: the tag entry field on which the event was generated
+ * @event: the generated event
+ * @user_data: user data set when the signal was connected
+ *
+ * Handle the Ctrl+Return combination being pressed in the tag field GtkEntrys
+ * and apply the tag to selected files.
+ *
+ * Returns: %TRUE if the event was handled, %FALSE if the event should
+ * propagate further
+ */
+static gboolean
+et_tag_field_on_key_press_event (GtkEntry *entry, GdkEventKey *event,
+                                 gpointer user_data)
+{
+    GdkModifierType modifiers = gtk_accelerator_get_default_mod_mask ();
+
+    switch (event->keyval)
+    {
+        case GDK_KEY_Return:
+        case GDK_KEY_KP_Enter:
+        case GDK_KEY_ISO_Enter:
+            if ((event->state & modifiers) == GDK_CONTROL_MASK)
+            {
+                Mini_Button_Clicked (G_OBJECT (entry));
+            }
+            return TRUE;
+        default:
+            return FALSE;
+    }
+}
+
+static GtkWidget *
+create_browser_area (void)
+{
+    GtkWidget *Frame;
+    GtkWidget *Tree;
+
+    Frame = gtk_frame_new(_("Browser"));
+    gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
+
+    Tree = Create_Browser_Items(MainWindow);
+    gtk_container_add(GTK_CONTAINER(Frame),Tree);
+
+    /* Don't load init dir here because Tag area hasn't been yet created!.
+     * It will be load at the end of the main function */
+    //Browser_Tree_Select_Dir(DEFAULT_PATH_TO_MP3);
+
+    return Frame;
+}
+
+
+static GtkWidget *
+create_file_area (void)
+{
+    GtkWidget *VBox, *HBox;
+    GtkWidget *Separator;
+
+
+    FileFrame = gtk_frame_new(_("File"));
+    gtk_container_set_border_width(GTK_CONTAINER(FileFrame),2);
+
+    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
+    gtk_container_add(GTK_CONTAINER(FileFrame),VBox);
+    gtk_container_set_border_width(GTK_CONTAINER(VBox),2);
+
+    /* HBox for FileEntry and IconBox */
+    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
+    gtk_box_pack_start(GTK_BOX(VBox),HBox,TRUE,TRUE,0);
+
+    /* File index (position in list + list length) */
+    FileIndex = gtk_label_new("0/0:");
+    gtk_box_pack_start(GTK_BOX(HBox),FileIndex,FALSE,FALSE,0);
+
+    /* Filename. */
+    FileEntry = gtk_entry_new();
+    gtk_editable_set_editable(GTK_EDITABLE(FileEntry), TRUE);
+    gtk_box_pack_start(GTK_BOX(HBox),FileEntry,TRUE,TRUE,2);
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(FileEntry));
+
+
+    /*
+     *  File Infos
+     */
+    HeaderInfosTable = et_grid_new(3,5);
+    gtk_container_add(GTK_CONTAINER(VBox),HeaderInfosTable);
+    gtk_container_set_border_width(GTK_CONTAINER(HeaderInfosTable),2);
+    gtk_grid_set_row_spacing (GTK_GRID (HeaderInfosTable), 1);
+    gtk_grid_set_column_spacing (GTK_GRID (HeaderInfosTable), 2);
+
+    VersionLabel = gtk_label_new(_("Encoder:"));
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), VersionLabel, 0, 0, 1, 1);
+    VersionValueLabel = gtk_label_new("");
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), VersionValueLabel, 1, 0, 1,
+                     1);
+    gtk_misc_set_alignment(GTK_MISC(VersionLabel),1,0.5);
+    gtk_misc_set_alignment(GTK_MISC(VersionValueLabel),0,0.5);
+
+    BitrateLabel = gtk_label_new(_("Bitrate:"));
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), BitrateLabel, 0, 1, 1, 1);
+    BitrateValueLabel = gtk_label_new("");
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), BitrateValueLabel, 1, 1, 1,
+                     1);
+    gtk_misc_set_alignment(GTK_MISC(BitrateLabel),1,0.5);
+    gtk_misc_set_alignment(GTK_MISC(BitrateValueLabel),0,0.5);
+
+    /* Translators: Please try to keep this string as short as possible as it
+     * is shown in a narrow column. */
+    SampleRateLabel = gtk_label_new (_("Frequency:"));
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SampleRateLabel, 0, 2, 1, 1);
+    SampleRateValueLabel = gtk_label_new("");
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SampleRateValueLabel, 1, 2,
+                     1, 1);
+    gtk_misc_set_alignment(GTK_MISC(SampleRateLabel),1,0.5);
+    gtk_misc_set_alignment(GTK_MISC(SampleRateValueLabel),0,0.5);
+
+    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), Separator, 2, 0, 1, 4);
+
+    ModeLabel = gtk_label_new(_("Mode:"));
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), ModeLabel, 3, 0, 1, 1);
+    ModeValueLabel = gtk_label_new("");
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), ModeValueLabel, 4, 0, 1, 1);
+    gtk_misc_set_alignment(GTK_MISC(ModeLabel),1,0.5);
+    gtk_misc_set_alignment(GTK_MISC(ModeValueLabel),0,0.5);
+
+    SizeLabel = gtk_label_new(_("Size:"));
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SizeLabel, 3, 1, 1, 1);
+    SizeValueLabel = gtk_label_new("");
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SizeValueLabel, 4, 1, 1, 1);
+    gtk_misc_set_alignment(GTK_MISC(SizeLabel),1,0.5);
+    gtk_misc_set_alignment(GTK_MISC(SizeValueLabel),0,0.5);
+
+    DurationLabel = gtk_label_new(_("Duration:"));
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), DurationLabel, 3, 2, 1, 1);
+    DurationValueLabel = gtk_label_new("");
+    gtk_grid_attach (GTK_GRID (HeaderInfosTable), DurationValueLabel, 4, 2, 1,
+                     1);
+    gtk_misc_set_alignment(GTK_MISC(DurationLabel),1,0.5);
+    gtk_misc_set_alignment(GTK_MISC(DurationValueLabel),0,0.5);
+
+    /* FIXME */
+    #if 0
+    if (SHOW_HEADER_INFO)
+        gtk_widget_show_all(HeaderInfosTable);
+    #endif
+    return FileFrame;
+}
+
+#include "data/pixmaps/sequence_track.xpm"
+static GtkWidget *
+Create_Tag_Area (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+    GtkWidget *Separator;
+    GtkWidget *Table;
+    GtkWidget *Label;
+    GtkWidget *Icon;
+    GtkWidget *PictureScrollWindow;
+    GtkWidget *toolbar;
+    GtkToolItem *toolitem;
+    GIcon *icon;
+    GtkWidget *image;
+    GtkWidget *VBox;
+    GList *focus_chain = NULL;
+    //GtkWidget *ScrollWindow;
+    //GtkTextBuffer *TextBuffer;
+    GtkEntryCompletion *completion;
+    gint MButtonSize = 13;
+    gint TablePadding = 2;
+
+    // For Picture
+    static const GtkTargetEntry drops[] = { { "text/uri-list", 0, TARGET_URI_LIST } };
+    GtkCellRenderer *renderer;
+    GtkTreeViewColumn *column;
+    GtkTreeSelection *selection;
+
+    priv = et_application_window_get_instance_private (self);
+
+    /* Main Frame */
+    TagFrame = gtk_frame_new(_("Tag"));
+    gtk_container_set_border_width(GTK_CONTAINER(TagFrame),2);
+
+    /* Box for the notebook (only for setting a border) */
+    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
+    gtk_container_add(GTK_CONTAINER(TagFrame),VBox);
+    gtk_container_set_border_width(GTK_CONTAINER(VBox),2);
+
+    /*
+     * Note book
+     */
+    TagNoteBook = gtk_notebook_new();
+    gtk_notebook_popup_enable(GTK_NOTEBOOK(TagNoteBook));
+    //gtk_container_add(GTK_CONTAINER(TagFrame),TagNoteBook);
+    gtk_box_pack_start(GTK_BOX(VBox),TagNoteBook,TRUE,TRUE,0);
+    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(TagNoteBook),GTK_POS_TOP);
+    gtk_notebook_set_show_border(GTK_NOTEBOOK(TagNoteBook),FALSE);
+    gtk_notebook_popup_enable(GTK_NOTEBOOK(TagNoteBook));
+
+    /*
+     * 1 - Page for common tag fields
+     */
+    Label = gtk_label_new(_("Common"));
+
+    Table = et_grid_new (11, 11);
+    gtk_notebook_append_page (GTK_NOTEBOOK (TagNoteBook), Table, Label);
+    gtk_container_set_border_width(GTK_CONTAINER(Table),2);
+
+    /* Title */
+    priv->title_label = gtk_label_new (_("Title:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->title_label, 0, 0, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->title_label), 1.0, 0.5);
+
+    TitleEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (TitleEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), TitleEntry, 1, 0, 9, 1, TRUE, TRUE,
+                         TablePadding, TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (TitleEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (TitleEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this title"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(TitleEntry));
+
+    /* Artist */
+    priv->artist_label = gtk_label_new(_("Artist:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->artist_label, 0, 1, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->artist_label), 1.0, 0.5);
+
+    ArtistEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (ArtistEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), ArtistEntry, 1, 1, 9, 1, TRUE, TRUE,
+                         TablePadding,TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (ArtistEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (ArtistEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this artist"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(ArtistEntry));
+
+    /* Album Artist */
+    priv->album_artist_label = gtk_label_new (_("Album artist:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->album_artist_label, 0, 2, 1,
+                         1, FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->album_artist_label), 1.0, 0.5);
+
+    AlbumArtistEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (AlbumArtistEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), AlbumArtistEntry, 1, 2, 9, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (AlbumArtistEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (AlbumArtistEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this album artist"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(AlbumArtistEntry));
+
+    /* Album */
+    priv->album_label = gtk_label_new (_("Album:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->album_label, 0, 3, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->album_label), 1.0, 0.5);
+
+    AlbumEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (AlbumEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), AlbumEntry, 1, 3, 6, 1, TRUE, TRUE,
+                         TablePadding,TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (AlbumEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (AlbumEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this album name"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(AlbumEntry));
+
+    /* Disc Number */
+    priv->disc_number_label = gtk_label_new (_("CD:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->disc_number_label, 8, 3, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->disc_number_label), 1.0, 0.5);
+
+    DiscNumberEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (DiscNumberEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), DiscNumberEntry, 9, 3, 1, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+    gtk_entry_set_width_chars (GTK_ENTRY (DiscNumberEntry), 3);
+    /* FIXME should allow to type only something like : 1/3. */
+    
/*g_signal_connect(G_OBJECT(GTK_ENTRY(DiscNumberEntry)),"insert_text",G_CALLBACK(Insert_Only_Digit),NULL); */
+
+    et_tag_field_connect_signals (GTK_ENTRY (DiscNumberEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (DiscNumberEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this disc number"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(DiscNumberEntry));
+
+    /* Year */
+    priv->year_label = gtk_label_new (_("Year:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->year_label, 0, 4, 1, 1, FALSE,
+                         FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->year_label), 1.0, 0.5);
+
+    YearEntry = gtk_entry_new();
+    gtk_entry_set_max_length(GTK_ENTRY(YearEntry), 4);
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (YearEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), YearEntry, 1, 4, 1, 1, TRUE, TRUE,
+                         TablePadding, TablePadding);
+    gtk_entry_set_width_chars (GTK_ENTRY (YearEntry), 5);
+    g_signal_connect (G_OBJECT (YearEntry), "insert-text",
+                      G_CALLBACK (Insert_Only_Digit), NULL);
+    g_signal_connect(G_OBJECT(YearEntry),"activate",G_CALLBACK(Parse_Date),NULL);
+    g_signal_connect(G_OBJECT(YearEntry),"focus-out-event",G_CALLBACK(Parse_Date),NULL);
+
+    et_tag_field_connect_signals (GTK_ENTRY (YearEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (YearEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this year"));
+
+    /* Small vertical separator */
+    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
+    et_grid_attach_full (GTK_GRID (Table), Separator, 3, 4, 1, 1, FALSE, FALSE,
+                         TablePadding,TablePadding);
+
+
+    /* Track and Track total */
+    priv->track_sequence_button = gtk_button_new();
+    gtk_widget_set_size_request(priv->track_sequence_button,MButtonSize,MButtonSize);
+    et_grid_attach_full (GTK_GRID (Table), priv->track_sequence_button, 4, 4, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    g_signal_connect(G_OBJECT(priv->track_sequence_button),"clicked",G_CALLBACK(Mini_Button_Clicked),NULL);
+    gtk_widget_set_tooltip_text (priv->track_sequence_button,
+                                 _("Number selected tracks sequentially. "
+                                   "Starts at 01 in each subdirectory."));
+    // Pixmap into priv->track_sequence_button button
+    //Icon = gtk_image_new_from_stock("easytag-sequence-track", GTK_ICON_SIZE_BUTTON); // FIX ME : it 
doesn't display the good size of the '#'
+    Icon = Create_Xpm_Image ((const char **)sequence_track_xpm);
+    gtk_container_add (GTK_CONTAINER (priv->track_sequence_button), Icon);
+    gtk_widget_set_can_default (priv->track_sequence_button, TRUE);
+    gtk_widget_set_can_focus (priv->track_sequence_button, FALSE);
+
+    priv->track_label = gtk_label_new (_("Track #:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->track_label, 5, 4, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->track_label), 1.0, 0.5);
+
+    if (TrackEntryComboModel != NULL)
+        gtk_list_store_clear(TrackEntryComboModel);
+    else
+        TrackEntryComboModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
+
+    TrackEntryCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(TrackEntryComboModel));
+    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(TrackEntryCombo),MISC_COMBO_TEXT);
+    et_grid_attach_full (GTK_GRID (Table), TrackEntryCombo, 6, 4, 1, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+    gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(TrackEntryCombo),3); // Three columns to display track 
numbers list
+
+    gtk_entry_set_width_chars (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (TrackEntryCombo))),
+                               2);
+    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo)))),"insert_text",
+        G_CALLBACK(Insert_Only_Digit),NULL);
+
+    Label = gtk_label_new("/");
+    et_grid_attach_full (GTK_GRID (Table), Label, 7, 4, 1, 1, FALSE, FALSE,
+                         TablePadding, TablePadding);
+    gtk_misc_set_alignment(GTK_MISC(Label),0.5,0.5);
+
+    priv->track_number_button = gtk_button_new();
+    gtk_widget_set_size_request(priv->track_number_button,MButtonSize,MButtonSize);
+    et_grid_attach_full (GTK_GRID (Table), priv->track_number_button, 8, 4, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    g_signal_connect(G_OBJECT(priv->track_number_button),"clicked",G_CALLBACK(Mini_Button_Clicked),NULL);
+    gtk_widget_set_tooltip_text(priv->track_number_button,_("Set the number of files, in the same directory 
of the displayed file, to the selected tracks."));
+    // Pixmap into priv->track_number_button button
+    //Icon = gtk_image_new_from_stock("easytag-sequence-track", GTK_ICON_SIZE_BUTTON);
+    Icon = Create_Xpm_Image ((const char **)sequence_track_xpm);
+    gtk_container_add (GTK_CONTAINER (priv->track_number_button), Icon);
+    gtk_widget_set_can_default (priv->track_number_button, TRUE);
+    gtk_widget_set_can_focus (priv->track_number_button, FALSE);
+
+    TrackTotalEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (TrackTotalEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), TrackTotalEntry, 9, 4, 1, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+    gtk_entry_set_width_chars (GTK_ENTRY (TrackTotalEntry), 3);
+    g_signal_connect (G_OBJECT (GTK_ENTRY (TrackTotalEntry)), "insert-text",
+                      G_CALLBACK (Insert_Only_Digit), NULL);
+
+    et_tag_field_connect_signals (GTK_ENTRY (TrackTotalEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (TrackTotalEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this number of tracks"));
+
+
+    /* Genre */
+    priv->genre_label = gtk_label_new (_("Genre:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->genre_label, 0, 5, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->genre_label), 1.0, 0.5);
+
+    if (GenreComboModel != NULL)
+        gtk_list_store_clear(GenreComboModel);
+    else
+        GenreComboModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
+    GenreCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(GenreComboModel));
+    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(GenreCombo),MISC_COMBO_TEXT);
+    completion = gtk_entry_completion_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    gtk_entry_set_completion(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))), completion);
+    g_object_unref(completion);
+    gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(GenreComboModel));
+    gtk_entry_completion_set_text_column(completion, 0);
+    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(GenreComboModel), MISC_COMBO_TEXT, 
Combo_Alphabetic_Sort, NULL, NULL);
+    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(GenreComboModel), MISC_COMBO_TEXT, 
GTK_SORT_ASCENDING);
+    et_grid_attach_full (GTK_GRID (Table), GenreCombo, 1, 5, 9, 1, TRUE, TRUE,
+                         TablePadding, TablePadding);
+    Load_Genres_List_To_UI();
+    gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(GenreCombo),2); // Two columns to display genres list
+
+    et_tag_field_connect_signals (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this genre"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))));
+
+    /* Comment */
+    priv->comment_label = gtk_label_new (_("Comment:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->comment_label, 0, 6, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->comment_label), 1.0, 0.5);
+
+    CommentEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (CommentEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), CommentEntry, 1, 6, 9, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+
+    // Use of a text view instead of an entry...
+    /******ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
+    et_grid_attach_full(GTK_GRID(Table),ScrollWindow,1,5,9,1,FALSE,FALSE,TablePadding,TablePadding);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow), 
GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(ScrollWindow), GTK_SHADOW_IN);
+    gtk_widget_set_size_request(ScrollWindow,-1,52); // Display ~3 lines...
+    TextBuffer = gtk_text_buffer_new(NULL);
+    CommentView = gtk_text_view_new_with_buffer(TextBuffer);
+    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(CommentView), GTK_WRAP_WORD); // To not display the horizontal 
scrollbar
+    gtk_container_add(GTK_CONTAINER(ScrollWindow),CommentView);
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
+    *******/
+
+    et_tag_field_connect_signals (GTK_ENTRY (CommentEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (CommentEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this comment"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentEntry));
+    //Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
+
+
+    /* Composer (name of the composers) */
+    priv->composer_label = gtk_label_new (_("Composer:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->composer_label, 0, 7, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->composer_label), 1.0, 0.5);
+
+    ComposerEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (ComposerEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), ComposerEntry, 1, 7, 9, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (ComposerEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (ComposerEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this composer"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(ComposerEntry));
+
+
+    /* Translators: Original Artist / Performer. Please try to keep this string
+     * as short as possible, as it must fit into a narrow column. */
+    priv->orig_artist_label = gtk_label_new (_("Orig. artist:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->orig_artist_label, 0, 8, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->orig_artist_label), 1.0, 0.5);
+
+    OrigArtistEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (OrigArtistEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), OrigArtistEntry, 1, 8, 9, 1, TRUE,
+                         TRUE,TablePadding,TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (OrigArtistEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (OrigArtistEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this original artist"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(OrigArtistEntry));
+
+
+    /* Copyright */
+    priv->copyright_label = gtk_label_new (_("Copyright:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->copyright_label, 0, 9, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->copyright_label), 1.0, 0.5);
+
+    CopyrightEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (CopyrightEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), CopyrightEntry, 1, 9, 9, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (CopyrightEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (CopyrightEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this copyright"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CopyrightEntry));
+
+
+    /* URL */
+    priv->url_label = gtk_label_new (_("URL:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->url_label, 0, 10, 1, 1, FALSE,
+                         FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->url_label), 1.0, 0.5);
+
+    URLEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (URLEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), URLEntry, 1, 10, 9, 1, TRUE, TRUE,
+                         TablePadding, TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (URLEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (URLEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this URL"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(URLEntry));
+
+
+    /* Encoded by */
+    priv->encoded_by_label = gtk_label_new (_("Encoded by:"));
+    et_grid_attach_full (GTK_GRID (Table), priv->encoded_by_label, 0, 11, 1, 1,
+                         FALSE, FALSE, TablePadding, TablePadding);
+    gtk_misc_set_alignment (GTK_MISC (priv->encoded_by_label), 1.0, 0.5);
+
+    EncodedByEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (EncodedByEntry),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    et_grid_attach_full (GTK_GRID (Table), EncodedByEntry, 1, 11, 9, 1, TRUE,
+                         TRUE, TablePadding, TablePadding);
+
+    et_tag_field_connect_signals (GTK_ENTRY (EncodedByEntry));
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (EncodedByEntry),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this encoder name"));
+
+    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(EncodedByEntry));
+
+    /* Set focus chain. */
+    focus_chain = g_list_prepend (focus_chain, TitleEntry);
+    focus_chain = g_list_prepend (focus_chain, ArtistEntry);
+    focus_chain = g_list_prepend (focus_chain, AlbumArtistEntry);
+    focus_chain = g_list_prepend (focus_chain, AlbumEntry);
+    focus_chain = g_list_prepend (focus_chain, DiscNumberEntry);
+    focus_chain = g_list_prepend (focus_chain, YearEntry);
+    focus_chain = g_list_prepend (focus_chain, TrackEntryCombo);
+    focus_chain = g_list_prepend (focus_chain, TrackTotalEntry);
+    focus_chain = g_list_prepend (focus_chain, GenreCombo);
+    focus_chain = g_list_prepend (focus_chain, CommentEntry);
+    focus_chain = g_list_prepend (focus_chain, ComposerEntry);
+    focus_chain = g_list_prepend (focus_chain, OrigArtistEntry);
+    focus_chain = g_list_prepend (focus_chain, CopyrightEntry);
+    focus_chain = g_list_prepend (focus_chain, URLEntry);
+    focus_chain = g_list_prepend (focus_chain, EncodedByEntry);
+    /* To loop to the beginning. */
+    focus_chain = g_list_prepend (focus_chain, TitleEntry);
+    /* More efficient than using g_list_append(), which must traverse the
+     * whole list. */
+    focus_chain = g_list_reverse (focus_chain);
+    gtk_container_set_focus_chain (GTK_CONTAINER (Table), focus_chain);
+
+
+    /*
+     * 2 - Page for extra tag fields
+     */
+    /* Also used in ET_Display_File_Tag_To_UI. */
+    Label = gtk_label_new (_("Images"));
+
+    priv->images_tab = Table = et_grid_new (1, 2);
+    gtk_notebook_append_page (GTK_NOTEBOOK (TagNoteBook), Table, Label);
+    gtk_container_set_border_width (GTK_CONTAINER (Table), 2);
+
+    // Scroll window for PictureEntryView
+    PictureScrollWindow = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (PictureScrollWindow),
+                                    GTK_POLICY_AUTOMATIC,
+                                    GTK_POLICY_AUTOMATIC);
+    et_grid_attach_full (GTK_GRID (Table), PictureScrollWindow, 0, 0, 1, 1,
+                         TRUE, TRUE, TablePadding, TablePadding);
+
+    priv->images_model = gtk_list_store_new (PICTURE_COLUMN_COUNT,
+                                             GDK_TYPE_PIXBUF, G_TYPE_STRING,
+                                             G_TYPE_POINTER);
+    PictureEntryView = gtk_tree_view_new_with_model (GTK_TREE_MODEL (priv->images_model));
+    g_object_unref (priv->images_model);
+    gtk_container_add (GTK_CONTAINER (PictureScrollWindow), PictureEntryView);
+    gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (PictureEntryView), FALSE);
+    gtk_widget_set_size_request (PictureEntryView, -1, 200);
+    gtk_widget_set_tooltip_text (PictureEntryView,
+                                 _("You can use drag and drop to add an image"));
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (PictureEntryView));
+    gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+
+    renderer = gtk_cell_renderer_pixbuf_new ();
+    column = gtk_tree_view_column_new ();
+    gtk_tree_view_column_pack_start (column, renderer, FALSE);
+    gtk_tree_view_column_set_attributes (column, renderer, "pixbuf",
+                                         PICTURE_COLUMN_PIC, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (PictureEntryView), column);
+    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+
+    renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new ();
+    gtk_tree_view_column_pack_start (column, renderer, FALSE);
+    gtk_tree_view_column_set_attributes (column, renderer, "text",
+                                         PICTURE_COLUMN_TEXT, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (PictureEntryView), column);
+    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+
+    /* Activate Drag'n'Drop for the PictureEntryView. */
+    gtk_drag_dest_set(GTK_WIDGET(PictureEntryView),
+                      GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+                      drops, sizeof(drops) / sizeof(GtkTargetEntry),
+                      GDK_ACTION_COPY);
+    g_signal_connect (PictureEntryView, "drag-data-received",
+                      G_CALLBACK (Tag_Area_Picture_Drag_Data), 0);
+    g_signal_connect (selection, "changed",
+                      G_CALLBACK (Picture_Selection_Changed_cb), NULL);
+    g_signal_connect (PictureEntryView, "button-press-event",
+                      G_CALLBACK(Picture_Entry_View_Button_Pressed),NULL);
+    g_signal_connect (PictureEntryView, "key-press-event",
+                      G_CALLBACK (Picture_Entry_View_Key_Pressed), NULL);
+
+    /* Picture action toolbar. */
+    toolbar = gtk_toolbar_new ();
+    gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
+    gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar), GTK_ICON_SIZE_MENU);
+    et_grid_attach_full (GTK_GRID (Table), toolbar, 0, 1, 1, 1, FALSE, FALSE,
+                        TablePadding, TablePadding);
+
+    /* TODO: Make the icons use the symbolic variants. */
+    icon = g_themed_icon_new_with_default_fallbacks ("list-add");
+    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
+    add_image_toolitem = gtk_tool_button_new (image, NULL);
+    g_object_unref (icon);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), add_image_toolitem, -1);
+    gtk_widget_set_tooltip_text (GTK_WIDGET (add_image_toolitem),
+                                 _("Add images to the tag"));
+    g_signal_connect (G_OBJECT (add_image_toolitem), "clicked",
+                      G_CALLBACK (Picture_Add_Button_Clicked), NULL);
+
+    /* Activate Drag'n'Drop for the add_image_toolitem. */
+    gtk_drag_dest_set (GTK_WIDGET (add_image_toolitem),
+                       GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+                       drops, sizeof(drops) / sizeof(GtkTargetEntry),
+                       GDK_ACTION_COPY);
+    g_signal_connect (G_OBJECT (add_image_toolitem), "drag-data-received",
+                      G_CALLBACK (Tag_Area_Picture_Drag_Data), 0);
+
+    icon = g_themed_icon_new_with_default_fallbacks ("list-remove");
+    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
+    remove_image_toolitem = gtk_tool_button_new (image, NULL);
+    g_object_unref (icon);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), remove_image_toolitem, -1);
+    gtk_widget_set_tooltip_text (GTK_WIDGET (remove_image_toolitem),
+                                 _("Remove selected images from the tag"));
+    gtk_widget_set_sensitive (GTK_WIDGET (remove_image_toolitem), FALSE);
+    g_signal_connect (G_OBJECT (remove_image_toolitem), "clicked",
+                      G_CALLBACK (Picture_Clear_Button_Clicked), NULL);
+
+    toolitem = gtk_separator_tool_item_new ();
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
+
+    icon = g_themed_icon_new_with_default_fallbacks ("document-save");
+    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
+    save_image_toolitem = gtk_tool_button_new (image, NULL);
+    g_object_unref (icon);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), save_image_toolitem, -1);
+    gtk_widget_set_tooltip_text (GTK_WIDGET (save_image_toolitem),
+                                 _("Save the selected images to files"));
+    gtk_widget_set_sensitive (GTK_WIDGET (save_image_toolitem), FALSE);
+    g_signal_connect (G_OBJECT (save_image_toolitem), "clicked",
+                      G_CALLBACK (Picture_Save_Button_Clicked), NULL);
+
+    icon = g_themed_icon_new_with_default_fallbacks ("document-properties");
+    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
+    image_properties_toolitem = gtk_tool_button_new (image, NULL);
+    g_object_unref (icon);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), image_properties_toolitem, -1);
+    gtk_widget_set_tooltip_text (GTK_WIDGET (image_properties_toolitem),
+                                 _("Edit image properties"));
+    gtk_widget_set_sensitive (GTK_WIDGET (image_properties_toolitem), FALSE);
+    g_signal_connect (G_OBJECT (image_properties_toolitem), "clicked",
+                      G_CALLBACK (Picture_Properties_Button_Clicked), NULL);
+
+    toolitem = gtk_separator_tool_item_new ();
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
+
+    icon = g_themed_icon_new_with_default_fallbacks ("insert-image");
+    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
+    priv->apply_image_toolitem = gtk_tool_button_new (image, NULL);
+    g_object_unref (icon);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->apply_image_toolitem, -1);
+    gtk_widget_set_tooltip_text (GTK_WIDGET (priv->apply_image_toolitem),
+                                 _("Tag selected files with these images"));
+    g_signal_connect (priv->apply_image_toolitem, "clicked",
+                      G_CALLBACK (Mini_Button_Clicked), NULL);
+
+    //Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(PictureEntryView));
+
+    gtk_widget_show_all(TagFrame);
+    return TagFrame;
+}
+
+
+static void
+et_application_window_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (et_application_window_parent_class)->finalize (object);
+}
+
+static void
+et_application_window_init (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+    GtkWindow *window;
+    GtkWidget *main_vbox;
+    GtkWidget *hbox, *vbox;
+    GtkWidget *widget;
+
+    priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                                     ET_TYPE_APPLICATION_WINDOW,
+                                                     EtApplicationWindowPrivate);
+
+    window = GTK_WINDOW (self);
+
+    gtk_window_set_icon_name (window, PACKAGE_TARNAME);
+    gtk_window_set_title (window, PACKAGE_NAME);
+
+    /* This part is needed to set correctly the position of handle panes. */
+    gtk_window_set_default_size (window, MAIN_WINDOW_WIDTH,
+                                 MAIN_WINDOW_HEIGHT);
+
+    g_signal_connect (self, "delete-event", G_CALLBACK(Quit_MainWindow), NULL);
+    g_signal_connect (self, "destroy", G_CALLBACK (Quit_MainWindow), NULL);
+
+    /* MainVBox for Menu bar + Tool bar + "Browser Area & FileArea & TagArea" + Log Area + "Status bar & 
Progress bar" */
+    main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+    gtk_container_add (GTK_CONTAINER (self), main_vbox);
+
+    /* Menu bar and tool bar. */
+    {
+        GtkWidget *menu_area;
+        GtkWidget *tool_area;
+
+        Create_UI (window, &menu_area, &tool_area);
+        gtk_box_pack_start (GTK_BOX (main_vbox), menu_area, FALSE, FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (main_vbox), tool_area, FALSE, FALSE, 0);
+    }
+
+    /* The two panes: BrowserArea on the left, FileArea+TagArea on the right */
+    priv->hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+    gtk_paned_set_position(GTK_PANED(priv->hpaned),PANE_HANDLE_POSITION1);
+    gtk_widget_show(priv->hpaned);
+
+    /* Browser (Tree + File list + Entry) */
+    widget = create_browser_area ();
+    gtk_paned_pack1 (GTK_PANED (priv->hpaned), widget, TRUE, TRUE);
+
+    /* Vertical box for FileArea + TagArea */
+    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+    gtk_paned_pack2 (GTK_PANED (priv->hpaned), vbox, FALSE, FALSE);
+
+    /* File */
+    priv->file_area = create_file_area ();
+    gtk_box_pack_start (GTK_BOX (vbox), priv->file_area, FALSE, FALSE, 0);
+
+    /* Tag */
+    priv->tag_area = Create_Tag_Area (self);
+    gtk_box_pack_start (GTK_BOX (vbox), priv->tag_area, FALSE, FALSE, 0);
+
+    /* Vertical pane for Browser Area + FileArea + TagArea */
+    priv->vpaned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
+    gtk_box_pack_start (GTK_BOX (main_vbox), priv->vpaned, TRUE, TRUE, 0);
+    gtk_paned_pack1 (GTK_PANED (priv->vpaned), priv->hpaned, TRUE,
+                     FALSE);
+    gtk_paned_set_position (GTK_PANED (priv->vpaned),
+                            PANE_HANDLE_POSITION4);
+    gtk_widget_show (priv->vpaned);
+
+
+    /* Log */
+    widget = Create_Log_Area ();
+    gtk_paned_pack2 (GTK_PANED (priv->vpaned), widget, FALSE, TRUE);
+
+    /* Horizontal box for Status bar + Progress bar */
+    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+    gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0);
+    gtk_widget_show (hbox);
+
+    /* Status bar */
+    widget = Create_Status_Bar ();
+    gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
+
+    /* Progress bar */
+    widget = Create_Progress_Bar ();
+    gtk_box_pack_end (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+
+    /* Must show the window before moving it. */
+    gtk_widget_show_all (GTK_WIDGET (self));
+
+    if (SET_MAIN_WINDOW_POSITION)
+    {
+        gtk_window_move (window, MAIN_WINDOW_X, MAIN_WINDOW_Y);
+    }
+}
+
+static void
+et_application_window_class_init (EtApplicationWindowClass *klass)
+{
+    G_OBJECT_CLASS (klass)->finalize = et_application_window_finalize;
+
+    g_type_class_add_private (klass, sizeof (EtApplicationWindowPrivate));
+}
+
+/*
+ * et_application_window_new:
+ *
+ * Create a new EtApplicationWindow instance.
+ *
+ * Returns: a new #EtApplicationWindow
+ */
+EtApplicationWindow *
+et_application_window_new (void)
+{
+    return g_object_new (ET_TYPE_APPLICATION_WINDOW, "type",
+                         GTK_WINDOW_TOPLEVEL, NULL);
+}
+
+/*
+ * et_application_window_apply_changes:
+ * @self: an #EtApplicationWindow
+ *
+ * Store the current window dimensions in the settings variables, so that they
+ * are saved the next time that the settings are saved.
+ */
+void
+et_application_window_apply_changes (EtApplicationWindow *self)
+{
+    GdkWindow *window;
+
+    window = gtk_widget_get_window (GTK_WIDGET (self));
+
+    if (window && gdk_window_is_visible (window)
+        && gdk_window_get_state (window) != GDK_WINDOW_STATE_MAXIMIZED)
+    {
+        EtApplicationWindowPrivate *priv;
+        gint x, y, width, height;
+
+        priv = et_application_window_get_instance_private (self);
+
+        /* Position and Origin of the window. */
+        gdk_window_get_root_origin (window, &x, &y);
+        MAIN_WINDOW_X = x;
+        MAIN_WINDOW_Y = y;
+        width = gdk_window_get_width (window);
+        height = gdk_window_get_height (window);
+        MAIN_WINDOW_WIDTH = width;
+        MAIN_WINDOW_HEIGHT = height;
+
+        /* Handle panes position. */
+        PANE_HANDLE_POSITION1 = gtk_paned_get_position (GTK_PANED (priv->hpaned));
+        PANE_HANDLE_POSITION2 = gtk_paned_get_position (GTK_PANED (BrowserHPaned));
+        PANE_HANDLE_POSITION3 = gtk_paned_get_position (GTK_PANED (ArtistAlbumVPaned));
+        PANE_HANDLE_POSITION4 = gtk_paned_get_position (GTK_PANED (priv->vpaned));
+    }
+}
diff --git a/src/application_window.h b/src/application_window.h
new file mode 100644
index 0000000..d4dfe25
--- /dev/null
+++ b/src/application_window.h
@@ -0,0 +1,57 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2013  David King <amigadave amigadave com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef ET_APPLICATION_WINDOW_H_
+#define ET_APPLICATION_WINDOW_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#include "et_core.h"
+
+#define ET_TYPE_APPLICATION_WINDOW (et_application_window_get_type ())
+#define ET_APPLICATION_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_APPLICATION_WINDOW, 
EtApplicationWindow))
+
+typedef struct _EtApplicationWindow EtApplicationWindow;
+typedef struct _EtApplicationWindowClass EtApplicationWindowClass;
+typedef struct _EtApplicationWindowPrivate EtApplicationWindowPrivate;
+
+struct _EtApplicationWindow
+{
+    /*< private >*/
+    GtkWindow parent_instance;
+    EtApplicationWindowPrivate *priv;
+};
+
+struct _EtApplicationWindowClass
+{
+    /*< private >*/
+    GtkWindowClass parent_class;
+};
+
+GType et_application_window_get_type (void);
+EtApplicationWindow *et_application_window_new (void);
+void et_application_window_apply_changes (EtApplicationWindow *self);
+void et_application_window_tag_area_set_sensitive (EtApplicationWindow *self, gboolean sensitive);
+void et_application_window_file_area_set_sensitive (EtApplicationWindow *self, gboolean sensitive);
+void et_application_window_tag_area_display_controls (EtApplicationWindow *self, ET_File *ETFile);
+
+G_END_DECLS
+
+#endif /* !ET_APPLICATION_WINDOW_H_ */
diff --git a/src/bar.c b/src/bar.c
index a377c89..949841f 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -131,7 +131,8 @@ Menu_Sort_Action (GtkAction *item, gpointer data)
     Browser_List_Refresh_Sort ();
 }
 
-void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
+void
+Create_UI (GtkWindow *window, GtkWidget **ppmenubar, GtkWidget **pptoolbar)
 {
     GtkWidget *menubar;
     GtkWidget *toolbar;
@@ -422,7 +423,8 @@ void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
         g_error_free(error);
     }
     gtk_ui_manager_insert_action_group(UIManager, ActionGroup, 0);
-    gtk_window_add_accel_group(GTK_WINDOW(MainWindow), gtk_ui_manager_get_accel_group(UIManager));
+    gtk_window_add_accel_group (window,
+                                gtk_ui_manager_get_accel_group (UIManager));
 
     menubar = gtk_ui_manager_get_widget(UIManager, "/MenuBar");
     Init_Menu_Bar();
diff --git a/src/bar.h b/src/bar.h
index d189a4e..3562ada 100644
--- a/src/bar.h
+++ b/src/bar.h
@@ -162,7 +162,7 @@ struct _Action_Pair {
  * Prototypes *
  **************/
 
-void       Create_UI           (GtkWidget **menubar, GtkWidget **toolbar);
+void Create_UI (GtkWindow *window, GtkWidget **menubar, GtkWidget **toolbar);
 GtkWidget *Create_Status_Bar   (void);
 void Statusbar_Message (const gchar *message, gboolean with_timer);
 GtkWidget *Create_Progress_Bar (void);
diff --git a/src/browser.c b/src/browser.c
index d6afba0..468b6fa 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -3591,7 +3591,6 @@ void Browser_Open_Rename_Directory_Window (void)
     gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(RenameDirectoryCombo), directory_name_utf8);
     gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(RenameDirectoryCombo), "");
     gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryCombo))),directory_name_utf8);
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryCombo))));
 
     /* Rename directory : check box + combo box + Status icon */
     HBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
diff --git a/src/easytag.c b/src/easytag.c
index bb68ddd..53df7b3 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -67,40 +67,6 @@
  ****************/
 static guint idle_handler_id;
 
-static GtkWidget *MenuArea;
-static GtkWidget *ToolArea;
-static GtkWidget *BrowseArea;
-static GtkWidget *FileArea;
-static GtkWidget *TagArea;
-static GtkWidget *StatusArea;
-static GtkWidget *ProgressArea;
-static GtkWidget *MainWindowHPaned;
-static GtkWidget *MainWindowVPaned;
-
-/* Labels. */
-static GtkWidget *TitleLabel;
-static GtkWidget *ArtistLabel;
-static GtkWidget *AlbumArtistLabel;
-static GtkWidget *AlbumLabel;
-static GtkWidget *DiscNumberLabel;
-static GtkWidget *YearLabel;
-static GtkWidget *TrackLabel;
-static GtkWidget *GenreLabel;
-static GtkWidget *CommentLabel;
-static GtkWidget *ComposerLabel;
-static GtkWidget *OrigArtistLabel;
-static GtkWidget *CopyrightLabel;
-static GtkWidget *URLLabel;
-static GtkWidget *EncodedByLabel;
-
-/* Mini buttons. */
-static GtkWidget *TrackMButtonSequence;
-static GtkWidget *TrackMButtonNbrFiles;
-
-static GtkListStore *PictureEntryModel;
-
-static GtkWidget *images_tab = NULL;
-static GtkToolItem *apply_image_toolitem = NULL;
 static GtkWidget *QuitRecursionWindow = NULL;
 
 /* Used to force to hide the msgbox when saving tag */
@@ -131,13 +97,7 @@ int easytag_main (struct HINSTANCE__ *hInstance, int argc, char *argv[]);
 static void Handle_Crash (gint signal_id);
 #endif /* !G_OS_WIN32 */
 
-static GtkWidget *Create_Browser_Area (void);
-static GtkWidget *Create_File_Area    (void);
-static GtkWidget *Create_Tag_Area     (void);
-
-static void Mini_Button_Clicked (GObject *object);
 static void Disable_Command_Buttons (void);
-
 static gboolean Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox);
 static gint Save_File (ET_File *ETFile, gboolean multiple_files,
                        gboolean force_saving_files);
@@ -159,13 +119,6 @@ static void Open_Quit_Recursion_Function_Window (void);
 static void Destroy_Quit_Recursion_Function_Window (void);
 static void et_on_quit_recursion_response (GtkDialog *dialog, gint response_id,
                                            gpointer user_data);
-static void File_Area_Set_Sensitive (gboolean activate);
-static void Tag_Area_Set_Sensitive  (gboolean activate);
-
-static void et_tag_field_connect_signals (GtkEntry *entry);
-static gboolean et_tag_field_on_key_press_event (GtkEntry *entry,
-                                                 GdkEventKey *event,
-                                                 gpointer user_data);
 
 #ifndef G_OS_WIN32
 static void
@@ -207,8 +160,7 @@ setup_sigchld (void)
 static void
 common_init (GApplication *application)
 {
-    GtkWidget *MainVBox;
-    GtkWidget *HBox, *VBox;
+    EtApplicationWindow *window;
 
     /* Starting messages */
     Log_Print(LOG_OK,_("Starting EasyTAG version %s (PID: %d)…"),PACKAGE_VERSION,getpid());
@@ -244,8 +196,6 @@ common_init (GApplication *application)
     Read_Config();
     /* Display_Config(); // <- for debugging */
 
-
-
     /* Initialization */
     ET_Core_Create();
     Main_Stop_Button_Pressed = FALSE;
@@ -259,88 +209,16 @@ common_init (GApplication *application)
     GenreComboModel      = NULL;
 
     /* The main window */
-    MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-    et_application_set_window (ET_APPLICATION (application),
-                               GTK_WINDOW (MainWindow));
-    gtk_window_set_title (GTK_WINDOW (MainWindow), PACKAGE_NAME);
-    // This part is needed to set correctly the position of handle panes
-    gtk_window_set_default_size(GTK_WINDOW(MainWindow),MAIN_WINDOW_WIDTH,MAIN_WINDOW_HEIGHT);
-
-    g_signal_connect(G_OBJECT(MainWindow),"delete_event",G_CALLBACK(Quit_MainWindow),NULL);
-    g_signal_connect(G_OBJECT(MainWindow),"destroy",G_CALLBACK(Quit_MainWindow),NULL);
+    window = et_application_window_new ();
+    MainWindow = GTK_WIDGET (window);
+    et_application_set_window (ET_APPLICATION (application), window);
 
     /* Minimised window icon */
     gtk_widget_realize(MainWindow);
 
-    gtk_window_set_icon_name (GTK_WINDOW (MainWindow), PACKAGE_TARNAME);
-
-    /* MainVBox for Menu bar + Tool bar + "Browser Area & FileArea & TagArea" + Log Area + "Status bar & 
Progress bar" */
-    MainVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_container_add (GTK_CONTAINER(MainWindow),MainVBox);
-    gtk_widget_show(MainVBox);
-
-    /* Menu bar and tool bar */
-    Create_UI(&MenuArea, &ToolArea);
-    gtk_box_pack_start(GTK_BOX(MainVBox),MenuArea,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(MainVBox),ToolArea,FALSE,FALSE,0);
-
-
-    /* The two panes: BrowserArea on the left, FileArea+TagArea on the right */
-    MainWindowHPaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-    //gtk_box_pack_start(GTK_BOX(MainVBox),MainWindowHPaned,TRUE,TRUE,0);
-    gtk_paned_set_position(GTK_PANED(MainWindowHPaned),PANE_HANDLE_POSITION1);
-    gtk_widget_show(MainWindowHPaned);
-
-    /* Browser (Tree + File list + Entry) */
-    BrowseArea = Create_Browser_Area();
-    gtk_paned_pack1(GTK_PANED(MainWindowHPaned),BrowseArea,TRUE,TRUE);
-
-    /* Vertical box for FileArea + TagArea */
-    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_paned_pack2(GTK_PANED(MainWindowHPaned),VBox,FALSE,FALSE);
-    gtk_widget_show(VBox);
-
-    /* File */
-    FileArea = Create_File_Area();
-    gtk_box_pack_start(GTK_BOX(VBox),FileArea,FALSE,FALSE,0);
-
-    /* Tag */
-    TagArea = Create_Tag_Area();
-    gtk_box_pack_start(GTK_BOX(VBox),TagArea,FALSE,FALSE,0);
-
-    /* Vertical pane for Browser Area + FileArea + TagArea */
-    MainWindowVPaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
-    gtk_box_pack_start(GTK_BOX(MainVBox),MainWindowVPaned,TRUE,TRUE,0);
-    gtk_paned_pack1(GTK_PANED(MainWindowVPaned),MainWindowHPaned,TRUE,FALSE);
-    gtk_paned_set_position(GTK_PANED(MainWindowVPaned),PANE_HANDLE_POSITION4);
-    gtk_widget_show(MainWindowVPaned);
-
-
-    /* Log */
-    LogArea = Create_Log_Area();
-    gtk_paned_pack2(GTK_PANED(MainWindowVPaned),LogArea,FALSE,TRUE);
-
-    /* Horizontal box for Status bar + Progress bar */
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-    gtk_box_pack_start(GTK_BOX(MainVBox),HBox,FALSE,FALSE,0);
-    gtk_widget_show(HBox);
-
-    /* Status bar */
-    StatusArea = Create_Status_Bar();
-    gtk_box_pack_start(GTK_BOX(HBox),StatusArea,TRUE,TRUE,0);
-
-    /* Progress bar */
-    ProgressArea = Create_Progress_Bar();
-    gtk_box_pack_end(GTK_BOX(HBox),ProgressArea,FALSE,FALSE,0);
-
-    gtk_widget_show(MainWindow);
-
-    if (SET_MAIN_WINDOW_POSITION)
-        gtk_window_move(GTK_WINDOW(MainWindow), MAIN_WINDOW_X, MAIN_WINDOW_Y);
-
     /* Load the default dir when the UI is created and displayed
      * to the screen and open also the scanner window */
-    idle_handler_id = g_idle_add((GSourceFunc)Init_Load_Default_Dir,NULL);
+    idle_handler_id = g_idle_add ((GSourceFunc)Init_Load_Default_Dir, NULL);
     g_source_set_name_by_id (idle_handler_id, "Init idle function");
 
     gtk_main ();
@@ -403,10 +281,7 @@ check_for_hidden_path_in_tree (GFile *arg)
     }
     while ((parent = g_file_get_parent (file)) != NULL);
 
-    if (file)
-    {
-        g_clear_object (&file);
-    }
+    g_clear_object (&file);
 }
 
 /*
@@ -426,7 +301,7 @@ static void
 on_application_open (GApplication *application, GFile **files, gint n_files,
                      gchar *hint, gpointer user_data)
 {
-    GtkWindow *main_window;
+    EtApplicationWindow *window;
     gboolean activated;
     GFile *arg;
     GFile *parent;
@@ -436,8 +311,8 @@ on_application_open (GApplication *application, GFile **files, gint n_files,
     gchar *path;
     gchar *path_utf8;
 
-    main_window = et_application_get_window (ET_APPLICATION (application));
-    activated = main_window ? TRUE : FALSE;
+    window = et_application_get_window (ET_APPLICATION (application));
+    activated = window ? TRUE : FALSE;
 
     /* Only take the first file; ignore the rest. */
     arg = files[0];
@@ -542,12 +417,13 @@ on_application_open (GApplication *application, GFile **files, gint n_files,
 static void
 on_application_activate (GApplication *application, gpointer user_data)
 {
-    GtkWindow *main_window;
+    EtApplicationWindow *window;
+
+    window = et_application_get_window (ET_APPLICATION (application));
 
-    main_window = et_application_get_window (ET_APPLICATION (application));
-    if (main_window != NULL)
+    if (window != NULL)
     {
-        gtk_window_present (main_window);
+        gtk_window_present (GTK_WINDOW (window));
     }
     else
     {
@@ -618,1186 +494,6 @@ int main (int argc, char *argv[])
 }
 
 
-static GtkWidget *
-Create_Browser_Area (void)
-{
-    GtkWidget *Frame;
-    GtkWidget *Tree;
-
-    Frame = gtk_frame_new(_("Browser"));
-    gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
-
-    Tree = Create_Browser_Items(MainWindow);
-    gtk_container_add(GTK_CONTAINER(Frame),Tree);
-
-    /* Don't load init dir here because Tag area hasn't been yet created!.
-     * It will be load at the end of the main function */
-    //Browser_Tree_Select_Dir(DEFAULT_PATH_TO_MP3);
-
-    gtk_widget_show(Frame);
-    return Frame;
-}
-
-
-static GtkWidget *
-Create_File_Area (void)
-{
-    GtkWidget *VBox, *HBox;
-    GtkWidget *Separator;
-
-
-    FileFrame = gtk_frame_new(_("File"));
-    gtk_container_set_border_width(GTK_CONTAINER(FileFrame),2);
-
-    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_container_add(GTK_CONTAINER(FileFrame),VBox);
-    gtk_container_set_border_width(GTK_CONTAINER(VBox),2);
-
-    /* HBox for FileEntry and IconBox */
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
-    gtk_box_pack_start(GTK_BOX(VBox),HBox,TRUE,TRUE,0);
-
-    /* File index (position in list + list length) */
-    FileIndex = gtk_label_new("0/0:");
-    gtk_box_pack_start(GTK_BOX(HBox),FileIndex,FALSE,FALSE,0);
-
-    /* Filename. */
-    FileEntry = gtk_entry_new();
-    gtk_editable_set_editable(GTK_EDITABLE(FileEntry), TRUE);
-    gtk_box_pack_start(GTK_BOX(HBox),FileEntry,TRUE,TRUE,2);
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(FileEntry));
-
-
-    /*
-     *  File Infos
-     */
-    HeaderInfosTable = et_grid_new(3,5);
-    gtk_container_add(GTK_CONTAINER(VBox),HeaderInfosTable);
-    gtk_container_set_border_width(GTK_CONTAINER(HeaderInfosTable),2);
-    gtk_grid_set_row_spacing (GTK_GRID (HeaderInfosTable), 1);
-    gtk_grid_set_column_spacing (GTK_GRID (HeaderInfosTable), 2);
-
-    VersionLabel = gtk_label_new(_("Encoder:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), VersionLabel, 0, 0, 1, 1);
-    VersionValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), VersionValueLabel, 1, 0, 1,
-                     1);
-    gtk_misc_set_alignment(GTK_MISC(VersionLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(VersionValueLabel),0,0.5);
-
-    BitrateLabel = gtk_label_new(_("Bitrate:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), BitrateLabel, 0, 1, 1, 1);
-    BitrateValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), BitrateValueLabel, 1, 1, 1,
-                     1);
-    gtk_misc_set_alignment(GTK_MISC(BitrateLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(BitrateValueLabel),0,0.5);
-
-    /* Translators: Please try to keep this string as short as possible as it
-     * is shown in a narrow column. */
-    SampleRateLabel = gtk_label_new (_("Frequency:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SampleRateLabel, 0, 2, 1, 1);
-    SampleRateValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SampleRateValueLabel, 1, 2,
-                     1, 1);
-    gtk_misc_set_alignment(GTK_MISC(SampleRateLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(SampleRateValueLabel),0,0.5);
-
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), Separator, 2, 0, 1, 4);
-
-    ModeLabel = gtk_label_new(_("Mode:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), ModeLabel, 3, 0, 1, 1);
-    ModeValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), ModeValueLabel, 4, 0, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(ModeLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(ModeValueLabel),0,0.5);
-
-    SizeLabel = gtk_label_new(_("Size:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SizeLabel, 3, 1, 1, 1);
-    SizeValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SizeValueLabel, 4, 1, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(SizeLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(SizeValueLabel),0,0.5);
-
-    DurationLabel = gtk_label_new(_("Duration:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), DurationLabel, 3, 2, 1, 1);
-    DurationValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), DurationValueLabel, 4, 2, 1,
-                     1);
-    gtk_misc_set_alignment(GTK_MISC(DurationLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(DurationValueLabel),0,0.5);
-
-    gtk_widget_show(FileFrame);
-    gtk_widget_show(VBox);
-    gtk_widget_show(HBox);
-    gtk_widget_show(FileIndex);
-    gtk_widget_show(FileEntry);
-    if (SHOW_HEADER_INFO)
-        gtk_widget_show_all(HeaderInfosTable);
-    return FileFrame;
-}
-
-#include "data/pixmaps/sequence_track.xpm"
-static GtkWidget *
-Create_Tag_Area (void)
-{
-    GtkWidget *Separator;
-    GtkWidget *Table;
-    GtkWidget *Label;
-    GtkWidget *Icon;
-    GtkWidget *PictureScrollWindow;
-    GtkWidget *toolbar;
-    GtkToolItem *toolitem;
-    GIcon *icon;
-    GtkWidget *image;
-    GtkWidget *VBox;
-    GList *focusable_widgets_list = NULL;
-    //GtkWidget *ScrollWindow;
-    //GtkTextBuffer *TextBuffer;
-    GtkEntryCompletion *completion;
-    gint MButtonSize = 13;
-    gint TablePadding = 2;
-
-    // For Picture
-    static const GtkTargetEntry drops[] = { { "text/uri-list", 0, TARGET_URI_LIST } };
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-    GtkTreeSelection *selection;
-
-
-    /* Main Frame */
-    TagFrame = gtk_frame_new(_("Tag"));
-    gtk_container_set_border_width(GTK_CONTAINER(TagFrame),2);
-
-    /* Box for the notebook (only for setting a border) */
-    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_container_add(GTK_CONTAINER(TagFrame),VBox);
-    gtk_container_set_border_width(GTK_CONTAINER(VBox),2);
-
-    /*
-     * Note book
-     */
-    TagNoteBook = gtk_notebook_new();
-    gtk_notebook_popup_enable(GTK_NOTEBOOK(TagNoteBook));
-    //gtk_container_add(GTK_CONTAINER(TagFrame),TagNoteBook);
-    gtk_box_pack_start(GTK_BOX(VBox),TagNoteBook,TRUE,TRUE,0);
-    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(TagNoteBook),GTK_POS_TOP);
-    gtk_notebook_set_show_border(GTK_NOTEBOOK(TagNoteBook),FALSE);
-    gtk_notebook_popup_enable(GTK_NOTEBOOK(TagNoteBook));
-
-    /*
-     * 1 - Page for common tag fields
-     */
-    Label = gtk_label_new(_("Common"));
-
-    Table = et_grid_new (11, 11);
-    gtk_notebook_append_page (GTK_NOTEBOOK (TagNoteBook), Table, Label);
-    gtk_container_set_border_width(GTK_CONTAINER(Table),2);
-
-    /* Title */
-    TitleLabel = gtk_label_new(_("Title:"));
-    et_grid_attach_full (GTK_GRID (Table), TitleLabel, 0, 0, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(TitleLabel),1,0.5);
-
-    TitleEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (TitleEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), TitleEntry, 1, 0, 9, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (TitleEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (TitleEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this title"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(TitleEntry));
-
-    /* Artist */
-    ArtistLabel = gtk_label_new(_("Artist:"));
-    et_grid_attach_full (GTK_GRID (Table), ArtistLabel, 0, 1, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(ArtistLabel),1,0.5);
-
-    ArtistEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (ArtistEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), ArtistEntry, 1, 1, 9, 1, TRUE, TRUE,
-                         TablePadding,TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (ArtistEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (ArtistEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this artist"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(ArtistEntry));
-
-    /* Album Artist */
-    AlbumArtistLabel = gtk_label_new(_("Album artist:"));
-    et_grid_attach_full (GTK_GRID (Table), AlbumArtistLabel, 0, 2, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(AlbumArtistLabel),1,0.5);
-
-    AlbumArtistEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (AlbumArtistEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), AlbumArtistEntry, 1, 2, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (AlbumArtistEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (AlbumArtistEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this album artist"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(AlbumArtistEntry));
-
-    /* Album */
-    AlbumLabel = gtk_label_new(_("Album:"));
-    et_grid_attach_full (GTK_GRID (Table), AlbumLabel, 0, 3, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(AlbumLabel),1,0.5);
-
-    AlbumEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (AlbumEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), AlbumEntry, 1, 3, 6, 1, TRUE, TRUE,
-                         TablePadding,TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (AlbumEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (AlbumEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this album name"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(AlbumEntry));
-
-    /* Disc Number */
-    DiscNumberLabel = gtk_label_new(_("CD:"));
-    et_grid_attach_full (GTK_GRID (Table), DiscNumberLabel, 8, 3, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(DiscNumberLabel),1,0.5);
-
-    DiscNumberEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (DiscNumberEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), DiscNumberEntry, 9, 3, 1, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-    gtk_entry_set_width_chars (GTK_ENTRY (DiscNumberEntry), 3);
-    /* FIXME should allow to type only something like : 1/3. */
-    
/*g_signal_connect(G_OBJECT(GTK_ENTRY(DiscNumberEntry)),"insert_text",G_CALLBACK(Insert_Only_Digit),NULL); */
-
-    et_tag_field_connect_signals (GTK_ENTRY (DiscNumberEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (DiscNumberEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this disc number"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(DiscNumberEntry));
-
-    /* Year */
-    YearLabel = gtk_label_new(_("Year:"));
-    et_grid_attach_full (GTK_GRID (Table), YearLabel, 0, 4, 1, 1, FALSE, FALSE,
-                         TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(YearLabel),1,0.5);
-
-    YearEntry = gtk_entry_new();
-    gtk_entry_set_max_length(GTK_ENTRY(YearEntry), 4);
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (YearEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), YearEntry, 1, 4, 1, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-    gtk_entry_set_width_chars (GTK_ENTRY (YearEntry), 5);
-    g_signal_connect (G_OBJECT (YearEntry), "insert-text",
-                      G_CALLBACK (Insert_Only_Digit), NULL);
-    g_signal_connect(G_OBJECT(YearEntry),"activate",G_CALLBACK(Parse_Date),NULL);
-    g_signal_connect(G_OBJECT(YearEntry),"focus-out-event",G_CALLBACK(Parse_Date),NULL);
-
-    et_tag_field_connect_signals (GTK_ENTRY (YearEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (YearEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this year"));
-
-    /* Small vertical separator */
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    et_grid_attach_full (GTK_GRID (Table), Separator, 3, 4, 1, 1, FALSE, FALSE,
-                         TablePadding,TablePadding);
-
-
-    /* Track and Track total */
-    TrackMButtonSequence = gtk_button_new();
-    gtk_widget_set_size_request(TrackMButtonSequence,MButtonSize,MButtonSize);
-    et_grid_attach_full (GTK_GRID (Table), TrackMButtonSequence, 4, 4, 1, 1,
-                         FALSE, FALSE, TablePadding, TablePadding);
-    g_signal_connect(G_OBJECT(TrackMButtonSequence),"clicked",G_CALLBACK(Mini_Button_Clicked),NULL);
-    gtk_widget_set_tooltip_text(TrackMButtonSequence,_("Number selected tracks sequentially. "
-                                                     "Starts at 01 in each subdirectory."));
-    // Pixmap into TrackMButtonSequence button
-    //Icon = gtk_image_new_from_stock("easytag-sequence-track", GTK_ICON_SIZE_BUTTON); // FIX ME : it 
doesn't display the good size of the '#'
-    Icon = Create_Xpm_Image((const char **)sequence_track_xpm);
-    gtk_container_add(GTK_CONTAINER(TrackMButtonSequence),Icon);
-    gtk_widget_set_can_default(TrackMButtonSequence,TRUE); // To have enough space to display the icon
-    gtk_widget_set_can_focus(TrackMButtonSequence,FALSE);   // To have enough space to display the icon
-
-    TrackLabel = gtk_label_new(_("Track #:"));
-    et_grid_attach_full (GTK_GRID (Table), TrackLabel, 5, 4, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(TrackLabel),1,0.5);
-
-    if (TrackEntryComboModel != NULL)
-        gtk_list_store_clear(TrackEntryComboModel);
-    else
-        TrackEntryComboModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-
-    TrackEntryCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(TrackEntryComboModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(TrackEntryCombo),MISC_COMBO_TEXT);
-    et_grid_attach_full (GTK_GRID (Table), TrackEntryCombo, 6, 4, 1, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-    gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(TrackEntryCombo),3); // Three columns to display track 
numbers list
-
-    gtk_entry_set_width_chars (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (TrackEntryCombo))),
-                               2);
-    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo)))),"insert_text",
-        G_CALLBACK(Insert_Only_Digit),NULL);
-
-    Label = gtk_label_new("/");
-    et_grid_attach_full (GTK_GRID (Table), Label, 7, 4, 1, 1, FALSE, FALSE,
-                         TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(Label),0.5,0.5);
-
-    TrackMButtonNbrFiles = gtk_button_new();
-    gtk_widget_set_size_request(TrackMButtonNbrFiles,MButtonSize,MButtonSize);
-    et_grid_attach_full (GTK_GRID (Table), TrackMButtonNbrFiles, 8, 4, 1, 1,
-                         FALSE, FALSE, TablePadding, TablePadding);
-    g_signal_connect(G_OBJECT(TrackMButtonNbrFiles),"clicked",G_CALLBACK(Mini_Button_Clicked),NULL);
-    gtk_widget_set_tooltip_text(TrackMButtonNbrFiles,_("Set the number of files, in the same directory of 
the displayed file, to the selected tracks."));
-    // Pixmap into TrackMButtonNbrFiles button
-    //Icon = gtk_image_new_from_stock("easytag-sequence-track", GTK_ICON_SIZE_BUTTON);
-    Icon = Create_Xpm_Image((const char **)sequence_track_xpm);
-    gtk_container_add(GTK_CONTAINER(TrackMButtonNbrFiles),Icon);
-    gtk_widget_set_can_default(TrackMButtonNbrFiles,TRUE); // To have enough space to display the icon
-    gtk_widget_set_can_focus(TrackMButtonNbrFiles,FALSE); // To have enough space to display the icon
-
-    TrackTotalEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (TrackTotalEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), TrackTotalEntry, 9, 4, 1, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-    gtk_entry_set_width_chars (GTK_ENTRY (TrackTotalEntry), 3);
-    g_signal_connect (G_OBJECT (GTK_ENTRY (TrackTotalEntry)), "insert-text",
-                      G_CALLBACK (Insert_Only_Digit), NULL);
-
-    et_tag_field_connect_signals (GTK_ENTRY (TrackTotalEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (TrackTotalEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this number of tracks"));
-
-
-    /* Genre */
-    GenreLabel = gtk_label_new(_("Genre:"));
-    et_grid_attach_full (GTK_GRID (Table), GenreLabel, 0, 5, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(GenreLabel),1,0.5);
-
-    if (GenreComboModel != NULL)
-        gtk_list_store_clear(GenreComboModel);
-    else
-        GenreComboModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    GenreCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(GenreComboModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(GenreCombo),MISC_COMBO_TEXT);
-    completion = gtk_entry_completion_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    gtk_entry_set_completion(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))), completion);
-    g_object_unref(completion);
-    gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(GenreComboModel));
-    gtk_entry_completion_set_text_column(completion, 0);
-    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(GenreComboModel), MISC_COMBO_TEXT, 
Combo_Alphabetic_Sort, NULL, NULL);
-    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(GenreComboModel), MISC_COMBO_TEXT, 
GTK_SORT_ASCENDING);
-    et_grid_attach_full (GTK_GRID (Table), GenreCombo, 1, 5, 9, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-    Load_Genres_List_To_UI();
-    gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(GenreCombo),2); // Two columns to display genres list
-
-    et_tag_field_connect_signals (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this genre"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))));
-
-    /* Comment */
-    CommentLabel = gtk_label_new(_("Comment:"));
-    et_grid_attach_full (GTK_GRID (Table), CommentLabel, 0, 6, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(CommentLabel),1,0.5);
-
-    CommentEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (CommentEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), CommentEntry, 1, 6, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    // Use of a text view instead of an entry...
-    /******ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
-    et_grid_attach_full(GTK_GRID(Table),ScrollWindow,1,5,9,1,FALSE,FALSE,TablePadding,TablePadding);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow), 
GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(ScrollWindow), GTK_SHADOW_IN);
-    gtk_widget_set_size_request(ScrollWindow,-1,52); // Display ~3 lines...
-    TextBuffer = gtk_text_buffer_new(NULL);
-    CommentView = gtk_text_view_new_with_buffer(TextBuffer);
-    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(CommentView), GTK_WRAP_WORD); // To not display the horizontal 
scrollbar
-    gtk_container_add(GTK_CONTAINER(ScrollWindow),CommentView);
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
-    *******/
-
-    et_tag_field_connect_signals (GTK_ENTRY (CommentEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (CommentEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this comment"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentEntry));
-    //Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
-
-
-    /* Composer (name of the composers) */
-    ComposerLabel = gtk_label_new(_("Composer:"));
-    et_grid_attach_full (GTK_GRID (Table), ComposerLabel, 0, 7, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(ComposerLabel),1,0.5);
-
-    ComposerEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (ComposerEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), ComposerEntry, 1, 7, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (ComposerEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (ComposerEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this composer"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(ComposerEntry));
-
-
-    /* Translators: Original Artist / Performer. Please try to keep this string
-     * as short as possible, as it must fit into a narrow column. */
-    OrigArtistLabel = gtk_label_new(_("Orig. artist:"));
-    et_grid_attach_full (GTK_GRID (Table), OrigArtistLabel, 0, 8, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(OrigArtistLabel),1,0.5);
-
-    OrigArtistEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (OrigArtistEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), OrigArtistEntry, 1, 8, 9, 1, TRUE,
-                         TRUE,TablePadding,TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (OrigArtistEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (OrigArtistEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this original artist"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(OrigArtistEntry));
-
-
-    /* Copyright */
-    CopyrightLabel = gtk_label_new(_("Copyright:"));
-    et_grid_attach_full (GTK_GRID (Table), CopyrightLabel, 0, 9, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(CopyrightLabel),1,0.5);
-
-    CopyrightEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (CopyrightEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), CopyrightEntry, 1, 9, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (CopyrightEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (CopyrightEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this copyright"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CopyrightEntry));
-
-
-    /* URL */
-    URLLabel = gtk_label_new(_("URL:"));
-    et_grid_attach_full (GTK_GRID (Table), URLLabel, 0, 10, 1, 1, FALSE, FALSE,
-                         TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(URLLabel),1,0.5);
-
-    URLEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (URLEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), URLEntry, 1, 10, 9, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (URLEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (URLEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this URL"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(URLEntry));
-
-
-    /* Encoded by */
-    EncodedByLabel = gtk_label_new(_("Encoded by:"));
-    et_grid_attach_full (GTK_GRID (Table), EncodedByLabel, 0, 11, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(EncodedByLabel),1,0.5);
-
-    EncodedByEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (EncodedByEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), EncodedByEntry, 1, 11, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (EncodedByEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (EncodedByEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this encoder name"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(EncodedByEntry));
-
-
-    // Set focus chain
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,TitleEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,ArtistEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,AlbumArtistEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,AlbumEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,DiscNumberEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,YearEntry);
-    //focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackMButtonSequence); // Doesn't work 
as focus disabled for this widget to have enought space to display icon
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackEntryCombo);
-    //focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackMButtonNbrFiles);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackTotalEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,GenreCombo);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,CommentEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,ComposerEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,OrigArtistEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,CopyrightEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,URLEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,EncodedByEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,TitleEntry); // To loop to the beginning
-    /* More efficient than using g_list_append(), which must traverse the
-     * whole list. */
-    focusable_widgets_list = g_list_reverse(focusable_widgets_list);
-    gtk_container_set_focus_chain(GTK_CONTAINER(Table),focusable_widgets_list);
-
-
-
-    /*
-     * 2 - Page for extra tag fields
-     */
-    Label = gtk_label_new (_("Images")); // As there is only the picture field... - also used in 
ET_Display_File_Tag_To_UI
-
-    images_tab = Table = et_grid_new (1, 2);
-    gtk_notebook_append_page (GTK_NOTEBOOK (TagNoteBook), Table, Label);
-    gtk_container_set_border_width(GTK_CONTAINER(Table),2);
-
-    // Scroll window for PictureEntryView
-    PictureScrollWindow = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(PictureScrollWindow),
-                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    et_grid_attach_full (GTK_GRID (Table), PictureScrollWindow, 0, 0, 1, 1,
-                         TRUE, TRUE, TablePadding, TablePadding);
-
-    PictureEntryModel = gtk_list_store_new(PICTURE_COLUMN_COUNT,
-                                           GDK_TYPE_PIXBUF,
-                                           G_TYPE_STRING,
-                                           G_TYPE_POINTER);
-    PictureEntryView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(PictureEntryModel));
-    g_object_unref (PictureEntryModel);
-    //gtk_tree_view_set_reorderable(GTK_TREE_VIEW(PictureEntryView),TRUE);
-    gtk_container_add(GTK_CONTAINER(PictureScrollWindow), PictureEntryView);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(PictureEntryView), FALSE);
-    gtk_widget_set_size_request(PictureEntryView, -1, 200);
-    gtk_widget_set_tooltip_text (PictureEntryView,
-                                 _("You can use drag and drop to add an image"));
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-    gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "pixbuf", PICTURE_COLUMN_PIC,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(PictureEntryView), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text", PICTURE_COLUMN_TEXT,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(PictureEntryView), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    /* Activate Drag'n'Drop for the PictureEntryView. */
-    gtk_drag_dest_set(GTK_WIDGET(PictureEntryView),
-                      GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
-                      drops, sizeof(drops) / sizeof(GtkTargetEntry),
-                      GDK_ACTION_COPY);
-    g_signal_connect(G_OBJECT(PictureEntryView),"drag_data_received", 
G_CALLBACK(Tag_Area_Picture_Drag_Data), 0);
-    g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(Picture_Selection_Changed_cb), NULL);
-    g_signal_connect(G_OBJECT(PictureEntryView), 
"button_press_event",G_CALLBACK(Picture_Entry_View_Button_Pressed),NULL);
-    g_signal_connect(G_OBJECT(PictureEntryView),"key_press_event", 
G_CALLBACK(Picture_Entry_View_Key_Pressed),NULL);
-
-    /* Picture action toolbar. */
-    toolbar = gtk_toolbar_new ();
-    gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
-    gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar), GTK_ICON_SIZE_MENU);
-    et_grid_attach_full (GTK_GRID (Table), toolbar, 0, 1, 1, 1, FALSE, FALSE,
-                        TablePadding, TablePadding);
-
-    /* TODO: Make the icons use the symbolic variants. */
-    icon = g_themed_icon_new_with_default_fallbacks ("list-add");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    add_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), add_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (add_image_toolitem),
-                                 _("Add images to the tag"));
-    g_signal_connect (G_OBJECT (add_image_toolitem), "clicked",
-                      G_CALLBACK (Picture_Add_Button_Clicked), NULL);
-
-    /* Activate Drag'n'Drop for the add_image_toolitem. */
-    gtk_drag_dest_set (GTK_WIDGET (add_image_toolitem),
-                       GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
-                       drops, sizeof(drops) / sizeof(GtkTargetEntry),
-                       GDK_ACTION_COPY);
-    g_signal_connect (G_OBJECT (add_image_toolitem), "drag-data-received",
-                      G_CALLBACK (Tag_Area_Picture_Drag_Data), 0);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("list-remove");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    remove_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), remove_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (remove_image_toolitem),
-                                 _("Remove selected images from the tag"));
-    gtk_widget_set_sensitive (GTK_WIDGET (remove_image_toolitem), FALSE);
-    g_signal_connect (G_OBJECT (remove_image_toolitem), "clicked",
-                      G_CALLBACK (Picture_Clear_Button_Clicked), NULL);
-
-    toolitem = gtk_separator_tool_item_new ();
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("document-save");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    save_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), save_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (save_image_toolitem),
-                                 _("Save the selected images to files"));
-    gtk_widget_set_sensitive (GTK_WIDGET (save_image_toolitem), FALSE);
-    g_signal_connect (G_OBJECT (save_image_toolitem), "clicked",
-                      G_CALLBACK (Picture_Save_Button_Clicked), NULL);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("document-properties");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    image_properties_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), image_properties_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (image_properties_toolitem),
-                                 _("Edit image properties"));
-    gtk_widget_set_sensitive (GTK_WIDGET (image_properties_toolitem), FALSE);
-    g_signal_connect (G_OBJECT (image_properties_toolitem), "clicked",
-                      G_CALLBACK (Picture_Properties_Button_Clicked), NULL);
-
-    toolitem = gtk_separator_tool_item_new ();
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("insert-image");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    apply_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), apply_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (apply_image_toolitem),
-                                 _("Tag selected files with these images"));
-    g_signal_connect (G_OBJECT (apply_image_toolitem), "clicked",
-                      G_CALLBACK (Mini_Button_Clicked), NULL);
-
-    //Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(PictureEntryView));
-
-    gtk_widget_show_all(TagFrame);
-    return TagFrame;
-}
-
-
-static void
-Mini_Button_Clicked (GObject *object)
-{
-    GList *etfilelist = NULL;
-    GList *selection_filelist = NULL;
-    GList *l;
-    gchar *string_to_set = NULL;
-    gchar *string_to_set1 = NULL;
-    gchar *msg = NULL;
-    ET_File *etfile;
-    File_Tag *FileTag;
-    GtkTreeSelection *selection;
-
-    g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
-                      BrowserList != NULL);
-
-    // Save the current displayed data
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    // Warning : 'selection_filelist' is not a list of 'ETFile' items!
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selection_filelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    // Create an 'ETFile' list from 'selection_filelist'
-    for (l = selection_filelist; l != NULL; l = g_list_next (l))
-    {
-        etfile = Browser_List_Get_ETFile_From_Path (l->data);
-        etfilelist = g_list_prepend (etfilelist, etfile);
-    }
-
-    etfilelist = g_list_reverse (etfilelist);
-    g_list_free_full (selection_filelist, (GDestroyNotify)gtk_tree_path_free);
-
-
-    if (object == G_OBJECT (TitleEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(TitleEntry),0,-1); // The string to apply to all 
other files
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->title,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with title '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed title from selected files."));
-    }
-    else if (object == G_OBJECT (ArtistEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(ArtistEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->artist,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with artist '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed artist from selected files."));
-    }
-    else if (object == G_OBJECT (AlbumArtistEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(AlbumArtistEntry),0,-1);
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->album_artist,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with album artist '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed album artist from selected files."));
-    }
-    else if (object == G_OBJECT (AlbumEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(AlbumEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->album,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with album '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed album name from selected files."));
-    }
-    else if (object == G_OBJECT (DiscNumberEntry))
-    {
-        const gchar *entry_text;
-        gchar *separator;
-
-        entry_text = gtk_entry_get_text (GTK_ENTRY (DiscNumberEntry));
-        separator = g_utf8_strchr (entry_text, -1, '/');
-
-        if (separator)
-        {
-            string_to_set1 = g_strdup (separator + 1);
-            string_to_set = g_strndup (entry_text,
-                                       separator - entry_text);
-        }
-        else
-        {
-            string_to_set = g_strdup (entry_text);
-            string_to_set1 = NULL;
-        }
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item (&FileTag->disc_number, string_to_set);
-            ET_Set_Field_File_Tag_Item (&FileTag->disc_total, string_to_set1);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-
-        if (string_to_set != NULL && g_utf8_strlen (string_to_set, -1) > 0)
-        {
-            if (string_to_set1 != NULL
-                && g_utf8_strlen (string_to_set1, -1) > 0)
-            {
-                msg = g_strdup_printf (_("Selected files tagged with disc number '%s/%s'."),
-                                       string_to_set, string_to_set1);
-            }
-            else
-            {
-                msg = g_strdup_printf (_("Selected files tagged with disc number like 'xx'."));
-            }
-        }
-        else
-        {
-            msg = g_strdup (_("Removed disc number from selected files."));
-        }
-    }
-    else if (object == G_OBJECT (YearEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(YearEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->year,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with year '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed year from selected files."));
-    }
-    else if (object == G_OBJECT (TrackTotalEntry))
-    {
-        /* Used of Track and Total Track values */
-        string_to_set = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo)))));
-        string_to_set1 = gtk_editable_get_chars(GTK_EDITABLE(TrackTotalEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-
-            // We apply the TrackEntry field to all others files only if it is to delete
-            // the field (string=""). Else we don't overwrite the track number
-            if (!string_to_set || g_utf8_strlen(string_to_set, -1) == 0)
-                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
-            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set1);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-
-        if ( string_to_set && g_utf8_strlen(string_to_set, -1) > 0 ) //&& atoi(string_to_set)>0 )
-        {
-            if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 
)
-            {
-                msg = g_strdup_printf(_("Selected files tagged with track like 'xx/%s'."),string_to_set1);
-            }else
-            {
-                msg = g_strdup_printf(_("Selected files tagged with track like 'xx'."));
-            }
-        }else
-        {
-            msg = g_strdup(_("Removed track number from selected files."));
-        }
-    }
-    else if (object==G_OBJECT(TrackMButtonSequence))
-    {
-        /* This part doesn't set the same track number to all files, but sequence the tracks.
-         * So we must browse the whole 'etfilelistfull' to get position of each selected file.
-         * Note : 'etfilelistfull' and 'etfilelist' must be sorted in the same order */
-        GList *etfilelistfull = NULL;
-        gchar *path = NULL;
-        gchar *path1 = NULL;
-        gint i = 0;
-
-        /* FIX ME!: see to fill also the Total Track (it's a good idea?) */
-        etfilelistfull = g_list_first(ETCore->ETFileList);
-
-        // Sort 'etfilelistfull' and 'etfilelist' in the same order
-        etfilelist     = ET_Sort_File_List(etfilelist,SORTING_FILE_MODE);
-        etfilelistfull = ET_Sort_File_List(etfilelistfull,SORTING_FILE_MODE);
-
-        while (etfilelist && etfilelistfull)
-        {
-            // To get the path of the file
-            File_Name *FileNameCur = (File_Name *)((ET_File *)etfilelistfull->data)->FileNameCur->data;
-            // The ETFile in the selected file list
-            etfile = etfilelist->data;
-
-            // Restart counter when entering a new directory
-            g_free(path1);
-            path1 = g_path_get_dirname(FileNameCur->value);
-            if ( path && path1 && strcmp(path,path1)!=0 )
-                i = 0;
-
-            string_to_set = et_track_number_to_string (++i);
-
-            // The file is in the selection?
-            if ( (ET_File *)etfilelistfull->data == etfile )
-            {
-                FileTag = ET_File_Tag_Item_New();
-                ET_Copy_File_Tag_Item(etfile,FileTag);
-                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
-                ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-
-                if (!etfilelist->next) break;
-                etfilelist = g_list_next(etfilelist);
-            }
-
-            g_free(string_to_set);
-            g_free(path);
-            path = g_strdup(path1);
-
-            etfilelistfull = g_list_next(etfilelistfull);
-        }
-        g_free(path);
-        g_free(path1);
-        //msg = g_strdup_printf(_("All %d tracks numbered sequentially."), 
ETCore->ETFileSelectionList_Length);
-        msg = g_strdup_printf(_("Selected tracks numbered sequentially."));
-    }
-    else if (object==G_OBJECT(TrackMButtonNbrFiles))
-    {
-        /* Used of Track and Total Track values */
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            gchar *path_utf8, *filename_utf8;
-
-            etfile        = (ET_File *)l->data;
-            filename_utf8 = ((File_Name *)etfile->FileNameNew->data)->value_utf8;
-            path_utf8     = g_path_get_dirname(filename_utf8);
-
-            string_to_set = et_track_number_to_string (ET_Get_Number_Of_Files_In_Directory (path_utf8));
-
-            g_free(path_utf8);
-            if (!string_to_set1)
-                string_to_set1 = g_strdup(string_to_set); // Just for the message below...
-
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-
-        if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 )
-        {
-            msg = g_strdup_printf(_("Selected files tagged with track like 'xx/%s'."),string_to_set1);
-        }else
-        {
-            msg = g_strdup(_("Removed track number from selected files."));
-        }
-    }
-    else if (object == G_OBJECT (gtk_bin_get_child (GTK_BIN (GenreCombo))))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(GenreCombo))),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->genre,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with genre '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed genre from selected files."));
-    }
-    else if (object == G_OBJECT (CommentEntry))
-    {
-        //GtkTextBuffer *textbuffer;
-        //GtkTextIter    start_iter;
-        //GtkTextIter    end_iter;
-        //textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
-        //gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter);
-        //string_to_set = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter,TRUE);
-
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(CommentEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->comment,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with comment '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed comment from selected files."));
-    }
-    else if (object == G_OBJECT (ComposerEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(ComposerEntry),0,-1);
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->composer,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with composer '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed composer from selected files."));
-    }
-    else if (object == G_OBJECT (OrigArtistEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(OrigArtistEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->orig_artist,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with original artist '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed original artist from selected files."));
-    }
-    else if (object == G_OBJECT (CopyrightEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(CopyrightEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->copyright,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with copyright '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed copyright from selected files."));
-    }
-    else if (object == G_OBJECT (URLEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(URLEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->url,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with URL '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed URL from selected files."));
-    }
-    else if (object == G_OBJECT (EncodedByEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(EncodedByEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->encoded_by,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with encoder name '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed encoder name from selected files."));
-    }
-    else if (object==G_OBJECT(apply_image_toolitem))
-    {
-        Picture *res = NULL, *pic, *prev_pic = NULL;
-        GtkTreeModel *model;
-        GtkTreeIter iter;
-
-        model = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
-        if (gtk_tree_model_get_iter_first(model, &iter))
-        {
-            do
-            {
-                gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic, -1);
-                pic = Picture_Copy_One(pic);
-                if (!res)
-                    res = pic;
-                else
-                    prev_pic->next = pic;
-                prev_pic = pic;
-            } while (gtk_tree_model_iter_next(model, &iter));
-        }
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Picture((Picture **)&FileTag->picture, res);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (res)
-            msg = g_strdup (_("Selected files tagged with images."));
-        else
-            msg = g_strdup (_("Removed images from selected files."));
-        Picture_Free(res);
-    }
-
-    g_list_free(etfilelist);
-
-    // Refresh the whole list (faster than file by file) to show changes
-    Browser_List_Refresh_Whole_List();
-
-    /* Display the current file (Needed when sequencing tracks) */
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-
-    if (msg)
-    {
-        Log_Print(LOG_OK,"%s",msg);
-        Statusbar_Message(msg,TRUE);
-        g_free(msg);
-    }
-    g_free(string_to_set);
-    g_free(string_to_set1);
-
-    /* To update state of Undo button */
-    Update_Command_Buttons_Sensivity();
-}
-
-
-
 
 /*
  * Action when selecting all files
@@ -2364,6 +1060,7 @@ Save_Selected_Files_With_Answer (gboolean force_saving_files)
 static gint
 Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
 {
+    EtApplicationWindow *window;
     gint       progress_bar_index;
     gint       saving_answer;
     gint       nb_files_to_save;
@@ -2382,6 +1079,8 @@ Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
 
     g_return_val_if_fail (ETCore != NULL, FALSE);
 
+    window = ET_APPLICATION_WINDOW (MainWindow);
+
     /* Save the current position in the list */
     etfile_save_position = ETCore->ETFileDisplayed;
 
@@ -2426,8 +1125,8 @@ Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
     /* Set to unsensitive all command buttons (except Quit button) */
     Disable_Command_Buttons();
     Browser_Area_Set_Sensitive(FALSE);
-    Tag_Area_Set_Sensitive(FALSE);
-    File_Area_Set_Sensitive(FALSE);
+    et_application_window_tag_area_set_sensitive (window, FALSE);
+    et_application_window_file_area_set_sensitive (window, FALSE);
 
     /* Show msgbox (if needed) to ask confirmation ('SF' for Save File) */
     SF_HideMsgbox_Write_Tag = FALSE;
@@ -2514,8 +1213,8 @@ Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
                 /* To update state of command buttons */
                 Update_Command_Buttons_Sensivity();
                 Browser_Area_Set_Sensitive(TRUE);
-                Tag_Area_Set_Sensitive(TRUE);
-                File_Area_Set_Sensitive(TRUE);
+                et_application_window_tag_area_set_sensitive (window, TRUE);
+                et_application_window_file_area_set_sensitive (window, TRUE);
 
                 if (currentPath)
                 {
@@ -2551,8 +1250,8 @@ Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
     /* To update state of command buttons */
     Update_Command_Buttons_Sensivity();
     Browser_Area_Set_Sensitive(TRUE);
-    Tag_Area_Set_Sensitive(TRUE);
-    File_Area_Set_Sensitive(TRUE);
+    et_application_window_tag_area_set_sensitive (window, TRUE);
+    et_application_window_file_area_set_sensitive (window, TRUE);
 
     /* Give again focus to the first entry, else the focus is passed to another */
     gtk_widget_grab_focus(GTK_WIDGET(widget_focused));
@@ -2579,6 +1278,7 @@ void Action_Delete_Selected_Files (void)
 static gint
 Delete_Selected_Files_With_Answer (void)
 {
+    EtApplicationWindow *window;
     GList *selfilelist;
     GList *rowreflist = NULL;
     GList *l;
@@ -2597,6 +1297,8 @@ Delete_Selected_Files_With_Answer (void)
     g_return_val_if_fail (ETCore->ETFileDisplayedList != NULL
                           && BrowserList != NULL, FALSE);
 
+    window = ET_APPLICATION_WINDOW (MainWindow);
+
     /* Save the current displayed data */
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
@@ -2612,8 +1314,8 @@ Delete_Selected_Files_With_Answer (void)
     /* Set to unsensitive all command buttons (except Quit button) */
     Disable_Command_Buttons();
     Browser_Area_Set_Sensitive(FALSE);
-    Tag_Area_Set_Sensitive(FALSE);
-    File_Area_Set_Sensitive(FALSE);
+    et_application_window_tag_area_set_sensitive (window, FALSE);
+    et_application_window_file_area_set_sensitive (window, FALSE);
 
     /* Show msgbox (if needed) to ask confirmation */
     SF_HideMsgbox_Delete_File = 0;
@@ -2673,8 +1375,8 @@ Delete_Selected_Files_With_Answer (void)
                 // To update state of command buttons
                 Update_Command_Buttons_Sensivity();
                 Browser_Area_Set_Sensitive(TRUE);
-                Tag_Area_Set_Sensitive(TRUE);
-                File_Area_Set_Sensitive(TRUE);
+                et_application_window_tag_area_set_sensitive (window, TRUE);
+                et_application_window_file_area_set_sensitive (window, TRUE);
 
                 return -1; // We stop all actions
         }
@@ -2701,8 +1403,8 @@ Delete_Selected_Files_With_Answer (void)
     /* To update state of command buttons */
     Update_Command_Buttons_Sensivity();
     Browser_Area_Set_Sensitive(TRUE);
-    Tag_Area_Set_Sensitive(TRUE);
-    File_Area_Set_Sensitive(TRUE);
+    et_application_window_tag_area_set_sensitive (window, TRUE);
+    et_application_window_file_area_set_sensitive (window, TRUE);
 
     gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
     gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0);
@@ -3686,15 +2388,18 @@ ui_widget_set_sensitive (const gchar *menu, const gchar *action, gboolean sensit
  */
 void Update_Command_Buttons_Sensivity (void)
 {
+    EtApplicationWindow *window;
     GtkAction *uiaction;
 
+    window = ET_APPLICATION_WINDOW (MainWindow);
+
     if (!ETCore->ETFileDisplayedList)
     {
         /* No file found */
 
         /* File and Tag frames */
-        File_Area_Set_Sensitive(FALSE);
-        Tag_Area_Set_Sensitive(FALSE);
+        et_application_window_file_area_set_sensitive (window, FALSE);
+        et_application_window_tag_area_set_sensitive (window, FALSE);
 
         /* Tool bar buttons (the others are covered by the menu) */
         uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
@@ -3772,8 +2477,8 @@ void Update_Command_Buttons_Sensivity (void)
         GtkTreeSelection *selection;
 
         /* File and Tag frames */
-        File_Area_Set_Sensitive(TRUE);
-        Tag_Area_Set_Sensitive(TRUE);
+        et_application_window_file_area_set_sensitive (window, TRUE);
+        et_application_window_tag_area_set_sensitive (window, TRUE);
 
         /* Tool bar buttons */
         uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
@@ -3944,280 +2649,6 @@ Disable_Command_Buttons (void)
 
 }
 
-/*
- * Disable (FALSE) / Enable (TRUE) all user widgets in the tag area
- */
-static void
-Tag_Area_Set_Sensitive (gboolean activate)
-{
-    g_return_if_fail (TagArea != NULL);
-
-    /* TAG Area (entries + buttons). */
-    gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(TagArea)),activate);
-}
-
-/*
- * Disable (FALSE) / Enable (TRUE) all user widgets in the file area
- */
-static void
-File_Area_Set_Sensitive (gboolean activate)
-{
-    g_return_if_fail (FileArea != NULL);
-
-    /* File Area. */
-    gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(FileArea)),activate);
-    /*gtk_widget_set_sensitive(GTK_WIDGET(FileEntry),activate);*/
-}
-
-static void
-et_tag_notebook_hide_images_tab (GtkWidget *tag_notebook)
-{
-    gtk_widget_hide (images_tab);
-}
-
-static void
-et_tag_notebook_show_images_tab (GtkWidget *tag_notebook)
-{
-    gtk_widget_show (images_tab);
-}
-
-/*
- * Display controls according the kind of tag... (Hide some controls if not available for a tag type)
- */
-void Tag_Area_Display_Controls (ET_File *ETFile)
-{
-    g_return_if_fail (ETFile != NULL && ETFile->ETFileDescription != NULL);
-    g_return_if_fail (TitleLabel != NULL);
-
-    /* Common controls for all tags. */
-    gtk_widget_show(GTK_WIDGET(TitleLabel));
-    gtk_widget_show(GTK_WIDGET(TitleEntry));
-    gtk_widget_show(GTK_WIDGET(ArtistLabel));
-    gtk_widget_show(GTK_WIDGET(ArtistEntry));
-    gtk_widget_show(GTK_WIDGET(AlbumArtistLabel));
-    gtk_widget_show(GTK_WIDGET(AlbumArtistEntry));
-    gtk_widget_show(GTK_WIDGET(AlbumLabel));
-    gtk_widget_show(GTK_WIDGET(AlbumEntry));
-    gtk_widget_show(GTK_WIDGET(YearLabel));
-    gtk_widget_show(GTK_WIDGET(YearEntry));
-    gtk_widget_show(GTK_WIDGET(TrackLabel));
-    gtk_widget_show(GTK_WIDGET(TrackEntryCombo));
-    gtk_widget_show(GTK_WIDGET(TrackTotalEntry));
-    gtk_widget_show(GTK_WIDGET(TrackMButtonSequence));
-    gtk_widget_show(GTK_WIDGET(TrackMButtonNbrFiles));
-    gtk_widget_show(GTK_WIDGET(GenreLabel));
-    gtk_widget_show(GTK_WIDGET(GenreCombo));
-    gtk_widget_show(GTK_WIDGET(CommentLabel));
-    gtk_widget_show(GTK_WIDGET(CommentEntry));
-
-    // Special controls to display or not!
-    switch (ETFile->ETFileDescription->TagType)
-    {
-        case ID3_TAG:
-            if (!FILE_WRITING_ID3V2_WRITE_TAG)
-            {
-                // ID3v1 : Hide specifics ID3v2 fields if not activated!
-                gtk_widget_hide(GTK_WIDGET(DiscNumberLabel));
-                gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
-                gtk_widget_hide(GTK_WIDGET(ComposerLabel));
-                gtk_widget_hide(GTK_WIDGET(ComposerEntry));
-                gtk_widget_hide(GTK_WIDGET(OrigArtistLabel));
-                gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
-                gtk_widget_hide(GTK_WIDGET(CopyrightLabel));
-                gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
-                gtk_widget_hide(GTK_WIDGET(URLLabel));
-                gtk_widget_hide(GTK_WIDGET(URLEntry));
-                gtk_widget_hide(GTK_WIDGET(EncodedByLabel));
-                gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
-                et_tag_notebook_hide_images_tab (TagNoteBook);
-            }else
-            {
-                gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-                gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-                gtk_widget_show(GTK_WIDGET(ComposerLabel));
-                gtk_widget_show(GTK_WIDGET(ComposerEntry));
-                gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-                gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-                gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-                gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-                gtk_widget_show(GTK_WIDGET(URLLabel));
-                gtk_widget_show(GTK_WIDGET(URLEntry));
-                gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-                gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-                et_tag_notebook_show_images_tab (TagNoteBook);
-            }
-            break;
-
-#ifdef ENABLE_OGG
-        case OGG_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-#endif
-
-#ifdef ENABLE_FLAC
-        case FLAC_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-#endif
-
-        case APE_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-
-#ifdef ENABLE_MP4
-        case MP4_TAG:
-            gtk_widget_hide(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_hide(GTK_WIDGET(ComposerLabel));
-            gtk_widget_hide(GTK_WIDGET(ComposerEntry));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_hide(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_hide(GTK_WIDGET(URLLabel));
-            gtk_widget_hide(GTK_WIDGET(URLEntry));
-            gtk_widget_hide(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_hide_images_tab (TagNoteBook);
-            break;
-#endif
-
-#ifdef ENABLE_WAVPACK
-        case WAVPACK_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_hide_images_tab (TagNoteBook);
-            break;
-#endif /* ENABLE_WAVPACK */
-
-        case UNKNOWN_TAG:
-        default:
-            gtk_widget_hide(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_hide(GTK_WIDGET(ComposerLabel));
-            gtk_widget_hide(GTK_WIDGET(ComposerEntry));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_hide(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_hide(GTK_WIDGET(URLLabel));
-            gtk_widget_hide(GTK_WIDGET(URLEntry));
-            gtk_widget_hide(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_hide_images_tab (TagNoteBook);
-            break;
-    }
-}
-
-
-/*
- * Clear the entries of tag area
- */
-void Clear_Tag_Entry_Fields (void)
-{
-    /* GtkTextBuffer *textbuffer; */
-
-    g_return_if_fail (TitleEntry != NULL);
-
-    gtk_entry_set_text(GTK_ENTRY(TitleEntry),                       "");
-    gtk_entry_set_text(GTK_ENTRY(ArtistEntry),                      "");
-    gtk_entry_set_text(GTK_ENTRY(AlbumArtistEntry),                 "");
-    gtk_entry_set_text(GTK_ENTRY(AlbumEntry),                       "");
-    gtk_entry_set_text(GTK_ENTRY(DiscNumberEntry),                  "");
-    gtk_entry_set_text(GTK_ENTRY(YearEntry),                        "");
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo))),  "");
-    gtk_entry_set_text(GTK_ENTRY(TrackTotalEntry),                  "");
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))),       "");
-    gtk_entry_set_text(GTK_ENTRY(CommentEntry),                     "");
-    /* textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
-     * gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer),           "", -1); */
-    gtk_entry_set_text(GTK_ENTRY(ComposerEntry),                    "");
-    gtk_entry_set_text(GTK_ENTRY(OrigArtistEntry),                  "");
-    gtk_entry_set_text(GTK_ENTRY(CopyrightEntry),                   "");
-    gtk_entry_set_text(GTK_ENTRY(URLEntry),                         "");
-    gtk_entry_set_text(GTK_ENTRY(EncodedByEntry),                   "");
-    PictureEntry_Clear();
-}
-
-
-/*
- * Clear the entry of file area
- */
-void
-Clear_File_Entry_Field (void)
-{
-    g_return_if_fail (FileEntry != NULL);
-
-    gtk_entry_set_text (GTK_ENTRY (FileEntry),"");
-}
-
-
-/*
- * Clear the header information
- */
-void Clear_Header_Fields (void)
-{
-    g_return_if_fail (VersionValueLabel != NULL);
-
-    /* Default values are MPs data */
-    gtk_label_set_text(GTK_LABEL(VersionLabel),        _("Encoder:"));
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),   "");
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),   "");
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),"");
-    gtk_label_set_text(GTK_LABEL(ModeLabel),           _("Mode:"));
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),      "");
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),      "");
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),  "");
-}
-
-
-
 
 /*
  * Load the default directory when the user interface is completely displayed
@@ -4252,237 +2683,6 @@ Init_Load_Default_Dir (void)
 
 
 
-static void
-Convert_P20_And_Underscore_Into_Spaces (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Convert_Underscore_Into_Space(string);
-    Scan_Convert_P20_Into_Space(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_Space_Into_Underscore (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Convert_Space_Into_Undescore(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_All_Uppercase (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Process_Fields_All_Uppercase(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_All_Lowercase (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Process_Fields_All_Downcase(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_Letter_Uppercase (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Process_Fields_Letter_Uppercase(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_First_Letters_Uppercase (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Process_Fields_First_Letters_Uppercase(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_Remove_Space (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Process_Fields_Remove_Space(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_Insert_Space (GtkWidget *entry)
-{
-    // FIX ME : we suppose that it will not grow more than 2 times its size...
-    guint string_length = 2 * strlen(gtk_entry_get_text(GTK_ENTRY(entry)));
-    gchar *string       = g_malloc(string_length+1);
-    strncpy(string,gtk_entry_get_text(GTK_ENTRY(entry)),string_length);
-    string[string_length]='\0';
-
-    Scan_Process_Fields_Insert_Space(&string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_Only_One_Space (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    Scan_Process_Fields_Keep_One_Space(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
-
-static void
-Convert_Remove_All_Text (GtkWidget *entry)
-{
-    gtk_entry_set_text (GTK_ENTRY (entry), "");
-}
-
-/*
- * Entry_Popup_Menu_Handler: show the popup menu when the third mouse button is pressed.
- */
-static gboolean
-Entry_Popup_Menu_Handler (GtkMenu *menu, GdkEventButton *event)
-{
-    if (event && (event->type==GDK_BUTTON_PRESS) && (event->button==3))
-    {
-        /* FIX ME : this is not very clean, but if we use 'event->button' (contains value of
-         * the 3rd button) instead of '1', we need to click two times the left mouse button
-         * to activate an item of the opened popup menu (when menu is attached to an entry). */
-        //gtk_menu_popup(menu,NULL,NULL,NULL,NULL,event->button,event->time);
-        gtk_menu_popup(menu,NULL,NULL,NULL,NULL,1,event->time);
-        return TRUE;
-    }
-    return FALSE;
-}
-
-/*
- * Popup menu attached to all entries of tag + filename + rename combobox.
- * Displayed when pressing the right mouse button and contains functions to process ths strings.
- */
-void Attach_Popup_Menu_To_Tag_Entries (GtkEntry *entry)
-{
-    GtkWidget *PopupMenu;
-    GtkWidget *Image;
-    GtkWidget *MenuItem;
-
-
-    PopupMenu = gtk_menu_new();
-    g_signal_connect_swapped(G_OBJECT(entry),"button_press_event",
-        G_CALLBACK(Entry_Popup_Menu_Handler),G_OBJECT(PopupMenu));
-
-    /* Menu items */
-    MenuItem = gtk_image_menu_item_new_with_label(_("Tag selected files with this field"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped (G_OBJECT (MenuItem), "activate",
-                              G_CALLBACK (Mini_Button_Clicked),
-                              G_OBJECT (entry));
-
-    /* Separator */
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Convert '_' and '%20' to spaces"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_CONVERT,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_P20_And_Underscore_Into_Spaces),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Convert ' ' to '_'"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_CONVERT,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Space_Into_Underscore),G_OBJECT(entry));
-
-    /* Separator */
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("All uppercase"));
-    Image = gtk_image_new_from_stock("easytag-all-uppercase",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_All_Uppercase),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("All lowercase"));
-    Image = gtk_image_new_from_stock("easytag-all-downcase",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_All_Lowercase),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("First letter uppercase"));
-    Image = gtk_image_new_from_stock("easytag-first-letter-uppercase",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Letter_Uppercase),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("First letter uppercase of each word"));
-    Image = gtk_image_new_from_stock("easytag-first-letter-uppercase-word",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_First_Letters_Uppercase),G_OBJECT(entry));
-
-    /* Separator */
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Remove spaces"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Remove_Space),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Insert space before uppercase letter"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Insert_Space),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Remove duplicate spaces or underscores"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Only_One_Space),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label (_("Remove all text"));
-    Image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM(MenuItem), Image);
-    gtk_menu_shell_append (GTK_MENU_SHELL(PopupMenu), MenuItem);
-    g_signal_connect_swapped (G_OBJECT (MenuItem), "activate",
-                              G_CALLBACK (Convert_Remove_All_Text),
-                              G_OBJECT (entry));
-
-    gtk_widget_show_all(PopupMenu);
-}
-
-
-
 /*
  * Function to manage the received signals (specially for segfaults)
  * Handle crashs
@@ -4631,80 +2831,7 @@ void Quit_MainWindow (void)
  */
 void MainWindow_Apply_Changes (void)
 {
-    GdkWindow *window;
-
-    g_return_if_fail(MainWindow !=NULL);
-
-    window = gtk_widget_get_window(MainWindow);
+    g_return_if_fail (MainWindow != NULL);
 
-    if ( window && gdk_window_is_visible(window) && gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED 
)
-    {
-        gint x, y, width, height;
-
-        // Position and Origin of the window
-        gdk_window_get_root_origin(window,&x,&y);
-        MAIN_WINDOW_X = x;
-        MAIN_WINDOW_Y = y;
-        width = gdk_window_get_width(window);
-        height = gdk_window_get_height(window);
-        MAIN_WINDOW_WIDTH  = width;
-        MAIN_WINDOW_HEIGHT = height;
-
-        // Handle panes position
-        PANE_HANDLE_POSITION1 = gtk_paned_get_position(GTK_PANED(MainWindowHPaned));
-        PANE_HANDLE_POSITION2 = gtk_paned_get_position(GTK_PANED(BrowserHPaned));
-        PANE_HANDLE_POSITION3 = gtk_paned_get_position(GTK_PANED(ArtistAlbumVPaned));
-        PANE_HANDLE_POSITION4 = gtk_paned_get_position(GTK_PANED(MainWindowVPaned));
-    }
-
-}
-
-/*
- * et_tag_field_connect_signals:
- * @entry: the entry for which to connect signals
- *
- * Connect the GtkWidget::key-press-event and GtkEntry::icon-release signals
- * of @entry to appropriate handlers for tag entry fields.
- */
-static void
-et_tag_field_connect_signals (GtkEntry *entry)
-{
-    g_signal_connect_after (entry, "key-press-event",
-                            G_CALLBACK (et_tag_field_on_key_press_event),
-                            NULL);
-    g_signal_connect (entry, "icon-release", G_CALLBACK (Mini_Button_Clicked),
-                      NULL);
-}
-
-/*
- * et_tag_field_on_key_press_event:
- * @entry: the tag entry field on which the event was generated
- * @event: the generated event
- * @user_data: user data set when the signal was connected
- *
- * Handle the Ctrl+Return combination being pressed in the tag field GtkEntrys
- * and apply the tag to selected files.
- *
- * Returns: %TRUE if the event was handled, %FALSE if the event should
- * propagate further
- */
-static gboolean
-et_tag_field_on_key_press_event (GtkEntry *entry, GdkEventKey *event,
-                                 gpointer user_data)
-{
-    GdkModifierType modifiers = gtk_accelerator_get_default_mod_mask ();
-
-    switch (event->keyval)
-    {
-        case GDK_KEY_Return:
-        case GDK_KEY_KP_Enter:
-        case GDK_KEY_ISO_Enter:
-            if ((event->state & modifiers) == GDK_CONTROL_MASK)
-            {
-                Mini_Button_Clicked (G_OBJECT (entry));
-            }
-            return TRUE;
-        default:
-            return FALSE;
-    }
+    et_application_window_apply_changes (ET_APPLICATION_WINDOW (MainWindow));
 }
diff --git a/src/easytag.h b/src/easytag.h
index 977b717..198ccb9 100644
--- a/src/easytag.h
+++ b/src/easytag.h
@@ -131,8 +131,6 @@ void et_on_action_select_scan_mode (GtkRadioAction *action,
                                     GtkRadioAction *current,
                                     gpointer user_data);
 
-void Tag_Area_Display_Controls (ET_File *ETFile);
-
 gboolean Read_Directory               (gchar *path);
 void Quit_MainWindow                  (void);
 void MainWindow_Apply_Changes         (void);
diff --git a/src/et_core.c b/src/et_core.c
index 8e6f676..cc1de22 100644
--- a/src/et_core.c
+++ b/src/et_core.c
@@ -32,6 +32,7 @@
 #include <locale.h>
 #include "errno.h"
 
+#include "application_window.h"
 #include "easytag.h"
 #include "et_core.h"
 #include "mpeg_header.h"
@@ -2669,7 +2670,8 @@ void ET_Display_File_Data_To_UI (ET_File *ETFile)
     }
 
     /* Display controls in tag area */
-    Tag_Area_Display_Controls(ETFile);
+    et_application_window_tag_area_display_controls (ET_APPLICATION_WINDOW (MainWindow),
+                                                     ETFile);
 
     /* Display file data, header data and file type */
     switch (ETFileDescription->FileType)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]