[easytag/wip/application-window: 43/72] Use GAction for miscellaneous menu items



commit 6afc6977e52ddf5516f45aff5299285145721884
Author: David King <amigadave amigadave com>
Date:   Sun Jul 13 09:15:58 2014 +0100

    Use GAction for miscellaneous menu items
    
    Move action state update function to EtApplicationWindow.

 data/menus.ui            |    6 +
 src/application_window.c |  479 ++++++++++++++++++++++++++++++++++++++--------
 src/application_window.h |    4 +-
 src/bar.c                |   11 -
 src/bar.h                |    4 -
 src/browser.c            |    7 +-
 src/easytag.c            |  266 +-------------------------
 src/easytag.h            |    1 -
 src/et_core.c            |    4 +-
 src/scan_dialog.c        |    2 +-
 src/ui_manager.h         |   13 --
 11 files changed, 420 insertions(+), 377 deletions(-)
---
diff --git a/data/menus.ui b/data/menus.ui
index 4a5f3d4..8efef36 100644
--- a/data/menus.ui
+++ b/data/menus.ui
@@ -321,12 +321,18 @@
         <submenu>
             <attribute name="label" translatable="yes">_Miscellaneous</attribute>
             <item>
+                <attribute name="accel">&lt;Primary&gt;b</attribute>
+                <attribute name="action">win.show-cddb</attribute>
                 <attribute name="label" translatable="yes">CDD_B Search…</attribute>
             </item>
             <item>
+                <attribute name="accel">&lt;Primary&gt;t</attribute>
+                <attribute name="action">win.show-load-filenames</attribute>
                 <attribute name="label" translatable="yes">Load Filenames From a Text File…</attribute>
             </item>
             <item>
+                <attribute name="accel">&lt;Primary&gt;w</attribute>
+                <attribute name="action">win.show-playlist</attribute>
                 <attribute name="label" translatable="yes">Generate Playlist…</attribute>
             </item>
         </submenu>
diff --git a/src/application_window.c b/src/application_window.c
index 5d79a22..45ffcb9 100644
--- a/src/application_window.c
+++ b/src/application_window.c
@@ -901,7 +901,7 @@ Mini_Button_Clicked (GObject *object)
     g_free(string_to_set1);
 
     /* To update state of Undo button */
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (toplevel));
 }
 
 /*
@@ -913,6 +913,7 @@ void
 et_application_window_redo_selected_files (GtkAction *action,
                                            gpointer user_data)
 {
+    EtApplicationWindow *self;
     EtApplicationWindowPrivate *priv;
     GList *selfilelist = NULL;
     GList *l;
@@ -922,7 +923,9 @@ et_application_window_redo_selected_files (GtkAction *action,
 
     g_return_val_if_fail (ETCore->ETFileDisplayedList != NULL, FALSE);
 
-    priv = et_application_window_get_instance_private (ET_APPLICATION_WINDOW (user_data));
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
     /* Save the current displayed data */
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
@@ -943,7 +946,7 @@ et_application_window_redo_selected_files (GtkAction *action,
 
     /* Display the current file */
     ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
 }
 
 /*
@@ -1696,6 +1699,80 @@ create_tag_area (EtApplicationWindow *self)
 }
 
 static void
+et_application_window_show_cddb_dialog (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->cddb_dialog)
+    {
+        gtk_widget_show (priv->cddb_dialog);
+    }
+    else
+    {
+        priv->cddb_dialog = GTK_WIDGET (et_cddb_dialog_new ());
+        gtk_widget_show_all (priv->cddb_dialog);
+    }
+}
+
+static void
+on_show_cddb (GSimpleAction *action,
+              GVariant *variant,
+              gpointer user_data)
+{
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+
+    et_application_window_show_cddb_dialog (self);
+}
+
+static void
+on_show_load_filenames (GSimpleAction *action,
+                        GVariant *variant,
+                        gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->load_files_dialog)
+    {
+        gtk_widget_show (priv->load_files_dialog);
+    }
+    else
+    {
+        priv->load_files_dialog = GTK_WIDGET (et_load_files_dialog_new ());
+        gtk_widget_show_all (priv->load_files_dialog);
+    }
+}
+
+static void
+on_show_playlist (GSimpleAction *action,
+                  GVariant *variant,
+                  gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->playlist_dialog)
+    {
+        gtk_widget_show (priv->playlist_dialog);
+    }
+    else
+    {
+        priv->playlist_dialog = GTK_WIDGET (et_playlist_dialog_new ());
+        gtk_widget_show_all (priv->playlist_dialog);
+    }
+}
+
+static void
 on_go_home (GSimpleAction *action,
             GVariant *variant,
             gpointer user_data)
@@ -1795,6 +1872,11 @@ on_go_default (GSimpleAction *action,
 
 static const GActionEntry actions[] =
 {
+    /* Miscellaneous menu. */
+    { "show-cddb", on_show_cddb },
+    { "show-load-filenames", on_show_load_filenames },
+    { "show-playlist", on_show_playlist },
+    /* Go menu. */
     { "go-home", on_go_home },
     { "go-desktop", on_go_desktop },
     { "go-documents", on_go_documents },
@@ -1976,26 +2058,6 @@ et_application_window_get_log_area (EtApplicationWindow *self)
     return priv->log_area;
 }
 
-void
-et_application_window_show_playlist_dialog (G_GNUC_UNUSED GtkAction *action,
-                                            gpointer user_data)
-{
-    EtApplicationWindowPrivate *priv;
-    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
-
-    priv = et_application_window_get_instance_private (self);
-
-    if (priv->playlist_dialog)
-    {
-        gtk_widget_show (priv->playlist_dialog);
-    }
-    else
-    {
-        priv->playlist_dialog = GTK_WIDGET (et_playlist_dialog_new ());
-        gtk_widget_show_all (priv->playlist_dialog);
-    }
-}
-
 GtkWidget *
 et_application_window_get_load_files_dialog (EtApplicationWindow *self)
 {
@@ -2008,26 +2070,6 @@ et_application_window_get_load_files_dialog (EtApplicationWindow *self)
     return priv->load_files_dialog;
 }
 
-void
-et_application_window_show_load_files_dialog (G_GNUC_UNUSED GtkAction *action,
-                                              gpointer user_data)
-{
-    EtApplicationWindowPrivate *priv;
-    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
-
-    priv = et_application_window_get_instance_private (self);
-
-    if (priv->load_files_dialog)
-    {
-        gtk_widget_show (priv->load_files_dialog);
-    }
-    else
-    {
-        priv->load_files_dialog = GTK_WIDGET (et_load_files_dialog_new ());
-        gtk_widget_show_all (priv->load_files_dialog);
-    }
-}
-
 GtkWidget *
 et_application_window_get_search_dialog (EtApplicationWindow *self)
 {
@@ -2122,26 +2164,6 @@ et_application_window_get_cddb_dialog (EtApplicationWindow *self)
 }
 
 void
-et_application_window_show_cddb_dialog (G_GNUC_UNUSED GtkAction *action,
-                                        gpointer user_data)
-{
-    EtApplicationWindowPrivate *priv;
-    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
-
-    priv = et_application_window_get_instance_private (self);
-
-    if (priv->cddb_dialog)
-    {
-        gtk_widget_show (priv->cddb_dialog);
-    }
-    else
-    {
-        priv->cddb_dialog = GTK_WIDGET (et_cddb_dialog_new ());
-        gtk_widget_show_all (priv->cddb_dialog);
-    }
-}
-
-void
 et_application_window_search_cddb_for_selection (G_GNUC_UNUSED GtkAction *action,
                                                  gpointer user_data)
 {
@@ -2150,7 +2172,7 @@ et_application_window_search_cddb_for_selection (G_GNUC_UNUSED GtkAction *action
 
     priv = et_application_window_get_instance_private (self);
 
-    et_application_window_show_cddb_dialog (action, user_data);
+    et_application_window_show_cddb_dialog (self);
     et_cddb_dialog_search_from_selection (ET_CDDB_DIALOG (priv->cddb_dialog));
 }
 
@@ -2469,7 +2491,7 @@ et_on_action_select_browser_mode (G_GNUC_UNUSED GtkRadioAction *action,
 
     et_application_window_browser_toggle_display_mode (ET_APPLICATION_WINDOW (user_data));
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (user_data));
 }
 
 /*
@@ -2513,6 +2535,295 @@ et_application_window_file_area_set_sensitive (EtApplicationWindow *self,
 }
 
 static void
+ui_widget_set_sensitive (const gchar *menu,
+                         const gchar *action,
+                         gboolean sensitive)
+{
+    GtkAction *uiaction;
+    gchar *path;
+
+    path = g_strconcat ("/MenuBar/", menu,"/", action, NULL);
+
+    uiaction = gtk_ui_manager_get_action (UIManager, path);
+
+    if (uiaction)
+    {
+        gtk_action_set_sensitive (uiaction, sensitive);
+    }
+    else
+    {
+        g_warning ("Action not found for path '%s'", path);
+    }
+
+    g_free (path);
+}
+
+static void
+set_action_state (EtApplicationWindow *self,
+                  const gchar *action_name,
+                  gboolean enabled)
+{
+    GSimpleAction *action;
+
+    action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (self),
+                                                          action_name));
+
+    if (action == NULL)
+    {
+        g_error ("Unable to find action '%s' in application window",
+                 action_name);
+    }
+
+    g_simple_action_set_enabled (action, enabled);
+}
+
+/* et_application_window_update_actions:
+ * Set to sensitive/unsensitive the state of each button into
+ * the commands area and menu items in function of state of the "main list".
+ */
+void
+et_application_window_update_actions (EtApplicationWindow *self)
+{
+    GtkDialog *dialog;
+    GtkAction *uiaction;
+
+    dialog = GTK_DIALOG (et_application_window_get_scan_dialog (self));
+
+    if (!ETCore->ETFileDisplayedList)
+    {
+        /* No file found */
+
+        /* File and Tag frames */
+        et_application_window_file_area_set_sensitive (self, FALSE);
+        et_application_window_tag_area_set_sensitive (self, FALSE);
+
+        /* Tool bar buttons (the others are covered by the menu) */
+        uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
+        g_object_set(uiaction, "sensitive", FALSE, NULL);
+
+        /* Scanner Window */
+        if (dialog)
+        {
+            gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
+                                               FALSE);
+        }
+
+        /* Menu commands */
+        ui_widget_set_sensitive(MENU_FILE, AM_OPEN_FILE_WITH, FALSE);
+        ui_widget_set_sensitive(MENU_FILE, AM_INVERT_SELECTION, FALSE);
+        ui_widget_set_sensitive(MENU_FILE, AM_DELETE_FILE, FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILENAME, FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILENAME,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_CREATION_DATE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_CREATION_DATE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_TRACK_NUMBER,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_TRACK_NUMBER,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_TITLE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_TITLE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_ARTIST,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_ARTIST,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_ALBUM,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_ALBUM,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_YEAR,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_YEAR,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_GENRE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_GENRE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_COMMENT,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_COMMENT,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_TYPE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_TYPE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_SIZE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_SIZE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_DURATION,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_DURATION,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_BITRATE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_BITRATE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_SAMPLERATE,FALSE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_SAMPLERATE,FALSE);
+        ui_widget_set_sensitive (MENU_GO, AM_PREV, FALSE);
+        ui_widget_set_sensitive (MENU_GO, AM_NEXT, FALSE);
+        ui_widget_set_sensitive (MENU_GO, AM_FIRST, FALSE);
+        ui_widget_set_sensitive (MENU_GO, AM_LAST, FALSE);
+        ui_widget_set_sensitive (MENU_EDIT, AM_REMOVE, FALSE);
+        ui_widget_set_sensitive(MENU_FILE, AM_UNDO, FALSE);
+        ui_widget_set_sensitive(MENU_FILE, AM_REDO, FALSE);
+        ui_widget_set_sensitive(MENU_FILE, AM_SAVE, FALSE);
+        ui_widget_set_sensitive(MENU_FILE, AM_SAVE_FORCED, FALSE);
+        ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, FALSE);
+        ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, FALSE);
+        ui_widget_set_sensitive (MENU_EDIT, AM_SEARCH_FILE, FALSE);
+        set_action_state (self, "show-load-filenames", FALSE);
+        set_action_state (self, "show-playlist", FALSE);
+        ui_widget_set_sensitive (MENU_FILE, AM_RUN_AUDIO_PLAYER, FALSE);
+        ui_widget_set_sensitive (MENU_SCANNER_PATH,
+                                 AM_SCANNER_FILL_TAG, FALSE);
+        ui_widget_set_sensitive (MENU_SCANNER_PATH,
+                                 AM_SCANNER_RENAME_FILE, FALSE);
+        ui_widget_set_sensitive (MENU_SCANNER_PATH,
+                                 AM_SCANNER_PROCESS_FIELDS, FALSE);
+        ui_widget_set_sensitive (MENU_VIEW, AM_ARTIST_VIEW_MODE, FALSE);
+
+        return;
+    }else
+    {
+        GtkWidget *artist_radio = NULL;
+        GList *selfilelist = NULL;
+        ET_File *etfile;
+        gboolean has_undo = FALSE;
+        gboolean has_redo = FALSE;
+        //gboolean has_to_save = FALSE;
+        GtkTreeSelection *selection;
+
+        /* File and Tag frames */
+        et_application_window_file_area_set_sensitive (self, TRUE);
+        et_application_window_tag_area_set_sensitive (self, TRUE);
+
+        /* Tool bar buttons */
+        uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
+        g_object_set(uiaction, "sensitive", FALSE, NULL);
+
+        /* Scanner Window */
+        if (dialog)
+        {
+            gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
+                                               TRUE);
+        }
+
+        /* Commands into menu */
+        ui_widget_set_sensitive(MENU_FILE, AM_OPEN_FILE_WITH,TRUE);
+        ui_widget_set_sensitive(MENU_FILE, AM_INVERT_SELECTION,TRUE);
+        ui_widget_set_sensitive(MENU_FILE, AM_DELETE_FILE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILENAME,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILENAME,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_CREATION_DATE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_CREATION_DATE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_TRACK_NUMBER,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_TRACK_NUMBER,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_TITLE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_TITLE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_ARTIST,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_ARTIST,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_ALBUM,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_ALBUM,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_YEAR,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_YEAR,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_GENRE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_GENRE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_COMMENT,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_COMMENT,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_TYPE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_TYPE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_SIZE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_SIZE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_DURATION,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_DURATION,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_BITRATE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_BITRATE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_SAMPLERATE,TRUE);
+        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_SAMPLERATE,TRUE);
+        ui_widget_set_sensitive (MENU_EDIT, AM_REMOVE, TRUE);
+        ui_widget_set_sensitive (MENU_EDIT, AM_SEARCH_FILE, TRUE);
+        set_action_state (self, "show-load-filenames", TRUE);
+        set_action_state (self, "show-playlist", TRUE);
+        ui_widget_set_sensitive (MENU_FILE, AM_RUN_AUDIO_PLAYER, TRUE);
+        ui_widget_set_sensitive (MENU_SCANNER_PATH,
+                                 AM_SCANNER_FILL_TAG,TRUE);
+        ui_widget_set_sensitive (MENU_SCANNER_PATH,
+                                 AM_SCANNER_RENAME_FILE, TRUE);
+        ui_widget_set_sensitive (MENU_SCANNER_PATH,
+                                 AM_SCANNER_PROCESS_FIELDS, TRUE);
+        ui_widget_set_sensitive (MENU_VIEW, AM_ARTIST_VIEW_MODE, TRUE);
+
+        /* Check if one of the selected files has undo or redo data */
+        {
+            GList *l;
+
+            selection = et_application_window_browser_get_selection (self);
+            selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+            for (l = selfilelist; l != NULL; l = g_list_next (l))
+            {
+                etfile = et_application_window_browser_get_et_file_from_path (self,
+                                                                              l->data);
+                has_undo    |= ET_File_Data_Has_Undo_Data(etfile);
+                has_redo    |= ET_File_Data_Has_Redo_Data(etfile);
+                //has_to_save |= ET_Check_If_File_Is_Saved(etfile);
+                if ((has_undo && has_redo /*&& has_to_save*/) || !l->next) // Useless to check the other 
files
+                    break;
+            }
+
+            g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+        }
+
+        /* Enable undo commands if there are undo data */
+        if (has_undo)
+            ui_widget_set_sensitive(MENU_FILE, AM_UNDO, TRUE);
+        else
+            ui_widget_set_sensitive(MENU_FILE, AM_UNDO, FALSE);
+
+        /* Enable redo commands if there are redo data */
+        if (has_redo)
+            ui_widget_set_sensitive(MENU_FILE, AM_REDO, TRUE);
+        else
+            ui_widget_set_sensitive(MENU_FILE, AM_REDO, FALSE);
+
+        /* Enable save file command if file has been changed */
+        // Desactivated because problem with only one file in the list, as we can't change the selected file 
=> can't mark file as changed
+        /*if (has_to_save)
+            ui_widget_set_sensitive(MENU_FILE, AM_SAVE, FALSE);
+        else*/
+            ui_widget_set_sensitive(MENU_FILE, AM_SAVE, TRUE);
+        
+        ui_widget_set_sensitive(MENU_FILE, AM_SAVE_FORCED, TRUE);
+
+        /* Enable undo command if there are data into main undo list (history list) */
+        if (ET_History_File_List_Has_Undo_Data())
+            ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, TRUE);
+        else
+            ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, FALSE);
+
+        /* Enable redo commands if there are data into main redo list (history list) */
+        if (ET_History_File_List_Has_Redo_Data())
+            ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, TRUE);
+        else
+            ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, FALSE);
+
+        artist_radio = gtk_ui_manager_get_widget (UIManager,
+                                                  "/ToolBar/ArtistViewMode");
+
+        if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (artist_radio)))
+        {
+            ui_widget_set_sensitive (MENU_VIEW, AM_COLLAPSE_TREE, FALSE);
+            ui_widget_set_sensitive (MENU_VIEW, AM_INITIALIZE_TREE, FALSE);
+        }
+        else
+        {
+            ui_widget_set_sensitive (MENU_VIEW, AM_COLLAPSE_TREE, TRUE);
+            ui_widget_set_sensitive (MENU_VIEW, AM_INITIALIZE_TREE, TRUE);
+        }
+    }
+
+    if (!ETCore->ETFileDisplayedList->prev)    /* Is it the 1st item ? */
+    {
+        ui_widget_set_sensitive (MENU_GO, AM_PREV, FALSE);
+        ui_widget_set_sensitive (MENU_GO, AM_FIRST, FALSE);
+    }else
+    {
+        ui_widget_set_sensitive (MENU_GO, AM_PREV, TRUE);
+        ui_widget_set_sensitive (MENU_GO, AM_FIRST, TRUE);
+    }
+    if (!ETCore->ETFileDisplayedList->next)    /* Is it the last item ? */
+    {
+        ui_widget_set_sensitive (MENU_GO, AM_NEXT, FALSE);
+        ui_widget_set_sensitive (MENU_GO, AM_LAST, FALSE);
+    }else
+    {
+        ui_widget_set_sensitive (MENU_GO, AM_NEXT, TRUE);
+        ui_widget_set_sensitive (MENU_GO, AM_LAST, TRUE);
+    }
+}
+
+static void
 et_application_window_hide_images_tab (EtApplicationWindow *self)
 {
     EtApplicationWindowPrivate *priv;
@@ -2764,7 +3075,7 @@ et_application_window_select_all (GtkAction *action, gpointer user_data)
         ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
 
         et_browser_select_all (ET_BROWSER (priv->browser));
-        Update_Command_Buttons_Sensivity ();
+        et_application_window_update_actions (self);
     }
 }
 
@@ -2996,7 +3307,7 @@ et_application_window_invert_selection (GtkAction *action, gpointer user_data)
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
     et_browser_invert_selection (ET_BROWSER (priv->browser));
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
 }
 
 /*
@@ -3032,7 +3343,7 @@ et_application_window_select_first_file (GtkAction *action, gpointer user_data)
         ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
     }
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
     et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog (self)));
 
     if (g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
@@ -3077,7 +3388,7 @@ et_application_window_select_prev_file (GtkAction *action, gpointer user_data)
 //    if (!ETFileList->prev)
 //        gdk_beep(); // Warm the user
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
     et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog (self)));
 
     if (g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
@@ -3122,7 +3433,7 @@ et_application_window_select_next_file (GtkAction *acton, gpointer user_data)
 //    if (!ETFileList->next)
 //        gdk_beep(); // Warm the user
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
     et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog (self)));
 
     if (g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
@@ -3164,7 +3475,7 @@ et_application_window_select_last_file (GtkAction *action, gpointer user_data)
         ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
     }
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
     et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog (self)));
 
     if (g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
@@ -3180,6 +3491,7 @@ void
 et_application_window_remove_selected_tags (GtkAction *action,
                                             gpointer user_data)
 {
+    EtApplicationWindow *self;
     EtApplicationWindowPrivate *priv;
     GList *selfilelist = NULL;
     GList *l;
@@ -3192,14 +3504,15 @@ et_application_window_remove_selected_tags (GtkAction *action,
 
     g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
 
-    priv = et_application_window_get_instance_private (ET_APPLICATION_WINDOW (user_data));
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
 
     /* Save the current displayed data */
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
     /* Initialize status bar */
     gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
-    selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (user_data));
+    selection = et_application_window_browser_get_selection (self);
     selectcount = gtk_tree_selection_count_selected_rows (selection);
     progress_bar_index = 0;
 
@@ -3222,11 +3535,11 @@ et_application_window_remove_selected_tags (GtkAction *action,
     g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
 
     /* Refresh the whole list (faster than file by file) to show changes. */
-    et_application_window_browser_refresh_list (ET_APPLICATION_WINDOW (user_data));
+    et_application_window_browser_refresh_list (self);
 
     /* Display the current file */
     ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
 
     gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
     Statusbar_Message(_("All tags have been removed"),TRUE);
@@ -3243,6 +3556,7 @@ void
 et_application_window_undo_selected_files (GtkAction *action,
                                            gpointer user_data)
 {
+    EtApplicationWindow *self;
     EtApplicationWindowPrivate *priv;
     GList *selfilelist = NULL;
     GList *l;
@@ -3252,12 +3566,13 @@ et_application_window_undo_selected_files (GtkAction *action,
 
     g_return_val_if_fail (ETCore->ETFileDisplayedList != NULL, FALSE);
 
-    priv = et_application_window_get_instance_private (ET_APPLICATION_WINDOW (user_data));
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
 
     /* Save the current displayed data */
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
-    selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (user_data));
+    selection = et_application_window_browser_get_selection (self);
     selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
 
     for (l = selfilelist; l != NULL; l = g_list_next (l))
@@ -3270,11 +3585,11 @@ et_application_window_undo_selected_files (GtkAction *action,
     g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
 
     /* Refresh the whole list (faster than file by file) to show changes. */
-    et_application_window_browser_refresh_list (ET_APPLICATION_WINDOW (user_data));
+    et_application_window_browser_refresh_list (self);
 
     /* Display the current file */
     ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
 
     //ET_Debug_Print_File_List(ETCore->ETFileList,__FILE__,__LINE__,__FUNCTION__);
 }
@@ -3494,8 +3809,8 @@ et_application_window_delete_selected_files (GtkAction *action,
             case -1:
                 // Stop deleting files + reinit progress bar
                 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar),0.0);
-                // To update state of command buttons
-                Update_Command_Buttons_Sensivity();
+                /* To update state of command buttons. */
+                et_application_window_update_actions (self);
                 et_application_window_browser_set_sensitive (self, TRUE);
                 et_application_window_tag_area_set_sensitive (self, TRUE);
                 et_application_window_file_area_set_sensitive (self, TRUE);
@@ -3524,7 +3839,7 @@ et_application_window_delete_selected_files (GtkAction *action,
     et_browser_toggle_display_mode (ET_BROWSER (priv->browser));
 
     /* To update state of command buttons */
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (self);
     et_application_window_browser_set_sensitive (self, TRUE);
     et_application_window_tag_area_set_sensitive (self, TRUE);
     et_application_window_file_area_set_sensitive (self, TRUE);
diff --git a/src/application_window.h b/src/application_window.h
index c484bc1..4d45337 100644
--- a/src/application_window.h
+++ b/src/application_window.h
@@ -49,18 +49,16 @@ GType et_application_window_get_type (void);
 EtApplicationWindow *et_application_window_new (GtkApplication *application);
 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_update_actions (EtApplicationWindow *self);
 void et_application_window_tag_area_display_controls (EtApplicationWindow *self, ET_File *ETFile);
 GtkWidget * et_application_window_get_log_area (EtApplicationWindow *self);
-void et_application_window_show_playlist_dialog (GtkAction *action, gpointer user_data);
 GtkWidget * et_application_window_get_load_files_dialog (EtApplicationWindow *self);
-void et_application_window_show_load_files_dialog (GtkAction *action, gpointer user_data);
 GtkWidget * et_application_window_get_search_dialog (EtApplicationWindow *self);
 void et_application_window_show_search_dialog (GtkAction *action, gpointer user_data);
 GtkWidget * et_application_window_get_preferences_dialog (EtApplicationWindow *self);
 void et_application_window_show_preferences_dialog (GtkAction *action, gpointer user_data);
 void et_application_window_show_preferences_dialog_scanner (GtkAction *action, gpointer user_data);
 GtkWidget * et_application_window_get_cddb_dialog (EtApplicationWindow *self);
-void et_application_window_show_cddb_dialog (GtkAction *action, gpointer user_data);
 void et_application_window_search_cddb_for_selection (GtkAction *action, gpointer user_data);
 void et_application_window_browser_collapse (GtkAction *action, gpointer user_data);
 void et_application_window_browser_reload (GtkAction *action, gpointer user_data);
diff --git a/src/bar.c b/src/bar.c
index dd7d82d..f832082 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -283,20 +283,9 @@ Create_UI (GtkWindow *window, GtkWidget **ppmenubar, GtkWidget **pptoolbar)
 
         { MENU_SCANNER, NULL, _("S_canner Mode"), NULL, NULL, NULL },
 
-        { MENU_MISC,                NULL,                   _("_Miscellaneous"),                             
NULL,         NULL,                                 NULL },
         { AM_SEARCH_FILE, GTK_STOCK_FIND, _("_Find…"), "<Primary>F",
           _("Search filenames and tags"),
           G_CALLBACK (et_application_window_show_search_dialog) },
-        { AM_CDDB_SEARCH, GTK_STOCK_CDROM, _("CDD_B Search…"), "<Primary>B",
-          _("CDDB search"),
-          G_CALLBACK (et_application_window_show_cddb_dialog) },
-        { AM_FILENAME_FROM_TXT, GTK_STOCK_OPEN,
-          _("Load Filenames From a Text File…"), "<Primary>T",
-          _("Load filenames from a text file"),
-          G_CALLBACK (et_application_window_show_load_files_dialog) },
-        { AM_WRITE_PLAYLIST, GTK_STOCK_SAVE_AS, _("Generate Playlist…"),
-          "<Primary>W", _("Generate a playlist"),
-          G_CALLBACK (et_application_window_show_playlist_dialog) },
         { AM_RUN_AUDIO_PLAYER, GTK_STOCK_MEDIA_PLAY, _("Run Audio Player"),
           "<Primary>M", _("Run audio player"),
           G_CALLBACK (et_application_window_run_player_for_selection) },
diff --git a/src/bar.h b/src/bar.h
index d99ca61..4f79ef2 100644
--- a/src/bar.h
+++ b/src/bar.h
@@ -39,7 +39,6 @@ GtkWidget *CheckMenuItemBrowseHiddenDirMainMenu;
 #define MENU_GO "GoMenu"
 #define MENU_BROWSER    "BrowserMenu"
 #define MENU_SCANNER    "ScannerMenu"
-#define MENU_MISC       "MiscMenu"
 
 #define MENU_FILE_SORT_TAG      "SortTagMenu"
 #define MENU_FILE_SORT_PROP     "SortPropMenu"
@@ -87,9 +86,6 @@ GtkWidget *CheckMenuItemBrowseHiddenDirMainMenu;
 #define AM_SCANNER_SHOW "ShowScanner"
 #define AM_SEARCH_FILE              "SearchFile"
 #define AM_CDDB_SEARCH_FILE         "CDDBSearchFile"
-#define AM_CDDB_SEARCH              "CDDBSearch"
-#define AM_FILENAME_FROM_TXT        "LoadFilenames"
-#define AM_WRITE_PLAYLIST           "WritePlaylist"
 #define AM_RUN_AUDIO_PLAYER         "RunAudio"
 #define AM_QUIT                     "Quit"
 
diff --git a/src/browser.c b/src/browser.c
index 2045956..f40d1b5 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -876,7 +876,8 @@ Browser_Tree_Node_Selected (EtBrowser *self, GtkTreeSelection *selection)
 
     /* Save the current displayed data */
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity(); // Not clean to put this here...
+    /* FIXME: Not clean to put this here. */
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 
     /* Check if all files have been saved before changing the directory */
     if (g_settings_get_boolean (MainSettings, "confirm-when-unsaved-files")
@@ -971,7 +972,7 @@ Browser_Tree_Node_Selected (EtBrowser *self, GtkTreeSelection *selection)
     }else
     {
         /* As we don't use the function 'Read_Directory' we must add this function here */
-        Update_Command_Buttons_Sensivity();
+        et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
     }
     counter++;
 
@@ -2991,7 +2992,7 @@ et_browser_reload (EtBrowser *self)
     }
     g_free(current_path);
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 }
 
 /*
diff --git a/src/easytag.c b/src/easytag.c
index 6932caf..d0ab180 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -443,7 +443,7 @@ void Action_Select_Nth_File_By_Etfile (ET_File *ETFile)
     ET_Displayed_File_List_By_Etfile(ETFile); // Just to update 'ETFileDisplayedList'
     ET_Display_File_Data_To_UI(ETFile);
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
     et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog 
(ET_APPLICATION_WINDOW (MainWindow))));
 }
 
@@ -466,7 +466,7 @@ void Action_Undo_From_History_List (void)
                                                             ETFile);
     }
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 }
 
 
@@ -490,7 +490,7 @@ void Action_Redo_From_History_List (void)
                                                             ETFile);
     }
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 }
 
 
@@ -733,7 +733,7 @@ Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
                 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
                 Statusbar_Message (_("Saving files was stopped"), TRUE);
                 /* To update state of command buttons */
-                Update_Command_Buttons_Sensivity();
+                et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
                 et_application_window_browser_set_sensitive (window, TRUE);
                 et_application_window_tag_area_set_sensitive (window, TRUE);
                 et_application_window_file_area_set_sensitive (window, TRUE);
@@ -772,7 +772,7 @@ Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
         et_application_window_browser_toggle_display_mode (window);
 
     /* To update state of command buttons */
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
     et_application_window_browser_set_sensitive (window, TRUE);
     et_application_window_tag_area_set_sensitive (window, TRUE);
     et_application_window_file_area_set_sensitive (window, TRUE);
@@ -1263,7 +1263,7 @@ gboolean Read_Directory (gchar *path_real)
     /* Initialize file list */
     ET_Core_Free();
     ET_Core_Initialize();
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 
     window = ET_APPLICATION_WINDOW (MainWindow);
 
@@ -1436,7 +1436,7 @@ gboolean Read_Directory (gchar *path_real)
     }
 
     /* Update sensitivity of buttons and menus */
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 
     et_application_window_browser_set_sensitive (window, TRUE);
 
@@ -1631,254 +1631,6 @@ ui_widget_set_sensitive (const gchar *menu, const gchar *action, gboolean sensit
 }
 
 /*
- * Update_Command_Buttons_Sensivity: Set to sensitive/unsensitive the state of each button into
- * the commands area and menu items in function of state of the "main list".
- */
-void
-Update_Command_Buttons_Sensivity (void)
-{
-    EtApplicationWindow *window;
-    GtkDialog *dialog;
-    GtkAction *uiaction;
-
-    window = ET_APPLICATION_WINDOW (MainWindow);
-    dialog = GTK_DIALOG (et_application_window_get_scan_dialog (window));
-
-    if (!ETCore->ETFileDisplayedList)
-    {
-        /* No file found */
-
-        /* File and Tag frames */
-        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");
-        g_object_set(uiaction, "sensitive", FALSE, NULL);
-
-        /* Scanner Window */
-        if (dialog)
-        {
-            gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
-                                               FALSE);
-        }
-
-        /* Menu commands */
-        ui_widget_set_sensitive(MENU_FILE, AM_OPEN_FILE_WITH, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_INVERT_SELECTION, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_DELETE_FILE, FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILENAME, FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILENAME,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_CREATION_DATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_CREATION_DATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_TRACK_NUMBER,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_TRACK_NUMBER,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_TITLE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_TITLE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_ARTIST,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_ARTIST,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_ALBUM,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_ALBUM,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_YEAR,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_YEAR,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_GENRE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_GENRE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_COMMENT,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_COMMENT,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_TYPE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_TYPE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_SIZE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_SIZE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_DURATION,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_DURATION,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_BITRATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_BITRATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_SAMPLERATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_SAMPLERATE,FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_PREV, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_NEXT, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_FIRST, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_LAST, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_REMOVE, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_UNDO, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_REDO, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_SAVE, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_SAVE_FORCED, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_SEARCH_FILE, FALSE);
-        ui_widget_set_sensitive(MENU_MISC, AM_FILENAME_FROM_TXT, FALSE);
-        ui_widget_set_sensitive(MENU_MISC, AM_WRITE_PLAYLIST, FALSE);
-        ui_widget_set_sensitive (MENU_FILE, AM_RUN_AUDIO_PLAYER, FALSE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_FILL_TAG, FALSE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_RENAME_FILE, FALSE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_PROCESS_FIELDS, FALSE);
-        ui_widget_set_sensitive (MENU_VIEW, AM_ARTIST_VIEW_MODE, FALSE);
-
-        return;
-    }else
-    {
-        GtkWidget *artist_radio = NULL;
-        GList *selfilelist = NULL;
-        ET_File *etfile;
-        gboolean has_undo = FALSE;
-        gboolean has_redo = FALSE;
-        //gboolean has_to_save = FALSE;
-        GtkTreeSelection *selection;
-
-        /* File and Tag frames */
-        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");
-        g_object_set(uiaction, "sensitive", FALSE, NULL);
-
-        /* Scanner Window */
-        if (dialog)
-        {
-            gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
-                                               TRUE);
-        }
-
-        /* Commands into menu */
-        ui_widget_set_sensitive(MENU_FILE, AM_OPEN_FILE_WITH,TRUE);
-        ui_widget_set_sensitive(MENU_FILE, AM_INVERT_SELECTION,TRUE);
-        ui_widget_set_sensitive(MENU_FILE, AM_DELETE_FILE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILENAME,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILENAME,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_CREATION_DATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_CREATION_DATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_TRACK_NUMBER,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_TRACK_NUMBER,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_TITLE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_TITLE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_ARTIST,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_ARTIST,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_ALBUM,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_ALBUM,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_YEAR,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_YEAR,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_GENRE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_GENRE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_COMMENT,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_COMMENT,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_TYPE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_TYPE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_SIZE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_SIZE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_DURATION,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_DURATION,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_BITRATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_BITRATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_SAMPLERATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_SAMPLERATE,TRUE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_REMOVE, TRUE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_SEARCH_FILE, TRUE);
-        ui_widget_set_sensitive(MENU_MISC,AM_FILENAME_FROM_TXT,TRUE);
-        ui_widget_set_sensitive(MENU_MISC,AM_WRITE_PLAYLIST,TRUE);
-        ui_widget_set_sensitive (MENU_FILE, AM_RUN_AUDIO_PLAYER, TRUE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_FILL_TAG,TRUE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_RENAME_FILE, TRUE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_PROCESS_FIELDS, TRUE);
-        ui_widget_set_sensitive (MENU_VIEW, AM_ARTIST_VIEW_MODE, TRUE);
-
-        /* Check if one of the selected files has undo or redo data */
-        {
-            GList *l;
-
-            selection = et_application_window_browser_get_selection (window);
-            selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-            for (l = selfilelist; l != NULL; l = g_list_next (l))
-            {
-                etfile = et_application_window_browser_get_et_file_from_path (ET_APPLICATION_WINDOW 
(MainWindow),
-                                                                              l->data);
-                has_undo    |= ET_File_Data_Has_Undo_Data(etfile);
-                has_redo    |= ET_File_Data_Has_Redo_Data(etfile);
-                //has_to_save |= ET_Check_If_File_Is_Saved(etfile);
-                if ((has_undo && has_redo /*&& has_to_save*/) || !l->next) // Useless to check the other 
files
-                    break;
-            }
-
-            g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-        }
-
-        /* Enable undo commands if there are undo data */
-        if (has_undo)
-            ui_widget_set_sensitive(MENU_FILE, AM_UNDO, TRUE);
-        else
-            ui_widget_set_sensitive(MENU_FILE, AM_UNDO, FALSE);
-
-        /* Enable redo commands if there are redo data */
-        if (has_redo)
-            ui_widget_set_sensitive(MENU_FILE, AM_REDO, TRUE);
-        else
-            ui_widget_set_sensitive(MENU_FILE, AM_REDO, FALSE);
-
-        /* Enable save file command if file has been changed */
-        // Desactivated because problem with only one file in the list, as we can't change the selected file 
=> can't mark file as changed
-        /*if (has_to_save)
-            ui_widget_set_sensitive(MENU_FILE, AM_SAVE, FALSE);
-        else*/
-            ui_widget_set_sensitive(MENU_FILE, AM_SAVE, TRUE);
-        
-        ui_widget_set_sensitive(MENU_FILE, AM_SAVE_FORCED, TRUE);
-
-        /* Enable undo command if there are data into main undo list (history list) */
-        if (ET_History_File_List_Has_Undo_Data())
-            ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, TRUE);
-        else
-            ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, FALSE);
-
-        /* Enable redo commands if there are data into main redo list (history list) */
-        if (ET_History_File_List_Has_Redo_Data())
-            ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, TRUE);
-        else
-            ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, FALSE);
-
-        artist_radio = gtk_ui_manager_get_widget (UIManager,
-                                                  "/ToolBar/ArtistViewMode");
-
-        if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (artist_radio)))
-        {
-            ui_widget_set_sensitive (MENU_VIEW, AM_COLLAPSE_TREE, FALSE);
-            ui_widget_set_sensitive (MENU_VIEW, AM_INITIALIZE_TREE, FALSE);
-        }
-        else
-        {
-            ui_widget_set_sensitive (MENU_VIEW, AM_COLLAPSE_TREE, TRUE);
-            ui_widget_set_sensitive (MENU_VIEW, AM_INITIALIZE_TREE, TRUE);
-        }
-    }
-
-    if (!ETCore->ETFileDisplayedList->prev)    /* Is it the 1st item ? */
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_PREV, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_FIRST, FALSE);
-    }else
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_PREV, TRUE);
-        ui_widget_set_sensitive (MENU_GO, AM_FIRST, TRUE);
-    }
-    if (!ETCore->ETFileDisplayedList->next)    /* Is it the last item ? */
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_NEXT, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_LAST, FALSE);
-    }else
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_NEXT, TRUE);
-        ui_widget_set_sensitive (MENU_GO, AM_LAST, TRUE);
-    }
-}
-
-/*
  * Just to disable buttons when we are saving files (do not disable Quit button)
  */
 void
@@ -1952,8 +1704,8 @@ Init_Load_Default_Dir (void)
                                                ET_APPLICATION_WINDOW (MainWindow));
     }
 
-    // To set sensivity of buttons in the case if the default directory is invalid
-    Update_Command_Buttons_Sensivity();
+    /* Set sensitivity of buttons if the default directory is invalid. */
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 
     g_source_remove(idle_handler_id);
 }
diff --git a/src/easytag.h b/src/easytag.h
index 0eabd80..2e379dd 100644
--- a/src/easytag.h
+++ b/src/easytag.h
@@ -124,7 +124,6 @@ void et_on_action_select_scan_mode (GtkRadioAction *action,
 
 gboolean Read_Directory               (gchar *path);
 void Quit_MainWindow                  (void);
-void Update_Command_Buttons_Sensivity (void);
 
 void Clear_File_Entry_Field (void);
 void Clear_Tag_Entry_Fields (void);
diff --git a/src/et_core.c b/src/et_core.c
index 998975a..4397cfb 100644
--- a/src/et_core.c
+++ b/src/et_core.c
@@ -906,7 +906,7 @@ gboolean ET_Remove_File_From_File_List (ET_File *ETFile)
         Clear_Header_Fields();
         Clear_Tag_Entry_Fields();
         gtk_label_set_text(GTK_LABEL(FileIndex),"0/0:");
-        Update_Command_Buttons_Sensivity();
+        et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
     }
 
     return TRUE;
@@ -1181,7 +1181,7 @@ ET_Sort_Displayed_File_List_And_Update_UI (EtSortMode Sorting_Type)
     ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
 
     et_application_window_browser_refresh_sort (ET_APPLICATION_WINDOW (MainWindow));
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 }
 
 
diff --git a/src/scan_dialog.c b/src/scan_dialog.c
index 3583863..7ba6821 100644
--- a/src/scan_dialog.c
+++ b/src/scan_dialog.c
@@ -3474,7 +3474,7 @@ et_scan_dialog_scan_selected_files (EtScanDialog *self)
     ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
 
     /* To update state of command buttons */
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 
     gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
     gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0);
diff --git a/src/ui_manager.h b/src/ui_manager.h
index 77c023b..d6b3c6b 100644
--- a/src/ui_manager.h
+++ b/src/ui_manager.h
@@ -152,14 +152,6 @@ static const gchar *ui_xml =
 "      <menuitem action='BrowseSubdir' />"
 "    </menu>"
 
-"    <menu action='MiscMenu'>"
-"      <menuitem action='CDDBSearch' />"
-"      <separator />"
-
-"      <menuitem action='LoadFilenames' />"
-"      <menuitem action='WritePlaylist' />"
-"    </menu>"
-
 "    <menu action='GoMenu'>"
 "      <menuitem action='FirstFile' />"
 "      <menuitem action='PreviousFile' />"
@@ -194,11 +186,6 @@ static const gchar *ui_xml =
 "    <toolitem action='SelInv'/>"
 "    <separator />"
 
-"    <toolitem action='SearchFile' />"
-"    <toolitem action='CDDBSearch' />"
-"    <toolitem action='WritePlaylist' />"
-"    <separator />"
-
 "    <toolitem action='Stop'/>"
 "  </toolbar>"
 


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