commit bb3b0d74763992a29d14e74ee673dba920c10f05
Author: Paul Richardson aka phantomjinx <p.g.richard...@phantomjinx.co.uk>
Date:   Thu Apr 15 23:05:33 2010 +0100

    Add update actions to the playlist, sorttab and track plugins
    
    * Each plugin contributes its own particular update track acion

 data/ui/gtkpod.ui                                  |    1 +
 plugins/playlist_display/playlist_display.ui       |    4 +-
 .../playlist_display/playlist_display_actions.c    |   10 +-
 .../playlist_display/playlist_display_actions.h    |    2 +
 .../playlist_display_context_menu.c                |  188 ++++++++++----------
 plugins/playlist_display/plugin.c                  |   15 ++-
 plugins/repository_editor/repository_editor.c      |    2 +-
 plugins/sorttab_display/plugin.c                   |    8 +
 plugins/sorttab_display/sorttab_display.ui         |    7 +
 plugins/sorttab_display/sorttab_display_actions.c  |   18 ++
 plugins/sorttab_display/sorttab_display_actions.h  |    2 +
 plugins/track_display/plugin.c                     |    8 +
 plugins/track_display/track_display.ui             |    7 +
 plugins/track_display/track_display_actions.c      |    9 +
 plugins/track_display/track_display_actions.h      |    1 +
 src/anjuta-actions.h                               |    8 +
 16 files changed, 184 insertions(+), 106 deletions(-)
---
diff --git a/data/ui/gtkpod.ui b/data/ui/gtkpod.ui
index 36a13e1..abb739f 100755
--- a/data/ui/gtkpod.ui
+++ b/data/ui/gtkpod.ui
@@ -3,6 +3,7 @@
        <menubar name="MenuMain">
                <menu name="MenuMusic" action="ActionMenuMusic">
                        <placeholder name="PlaceholderMusicMenus"/>
+                       <menu name="Update Tracks from File" 
action="ActionUpdateMenu"/>
                        <placeholder name="PlaceholderFileMenus"/>
                        <menuitem name="Quit" action="ActionExit" />
                </menu>
diff --git a/plugins/playlist_display/playlist_display.ui 
b/plugins/playlist_display/playlist_display.ui
index b87799b..0e5a1ea 100644
--- a/plugins/playlist_display/playlist_display.ui
+++ b/plugins/playlist_display/playlist_display.ui
@@ -11,10 +11,8 @@
                                <separator/>
                                <menu name="Update Tracks from File" 
action="ActionUpdateMenu">
                                        <menuitem name="Selected Playlist" 
action="ActionUpdatePlaylist" />
-                                       <menuitem name="Selected Tab Entry" 
action="ActionUpdateTabEntry" />
-                                       <menuitem name="Selected Tracks" 
action="ActionUpdateTracks" />
-                                       <separator name="separator3" />
                 </menu>
+                <separator/>
             </placeholder>
                </menu>
                <menu name="MenuEdit" action="ActionMenuEdit">
diff --git a/plugins/playlist_display/playlist_display_actions.c 
b/plugins/playlist_display/playlist_display_actions.c
index 01a8af1..d7560b4 100644
--- a/plugins/playlist_display/playlist_display_actions.c
+++ b/plugins/playlist_display/playlist_display_actions.c
@@ -231,8 +231,7 @@ static void fileselection_add_files(GSList* names, Playlist 
*playlist) {
     /* If we don't have a playlist to add to, don't add anything */
     g_return_if_fail (playlist);
 
-    g_warning("fileselection_add_files - block widgets commented out");
-    //    block_widgets();
+    block_widgets();
 
     gtkpod_statusbar_busy_push();
     /* Get the filenames and add them */
@@ -557,3 +556,10 @@ void 
on_delete_selected_playlist_including_tracks_from_device(GtkAction *action,
         on_delete_selected_playlist_including_tracks_from_harddisk(action, 
plugin);
     }
 }
+
+void on_update_selected_playlist (GtkAction *action, PlaylistDisplayPlugin* 
plugin) {
+    Playlist *pl = pm_get_selected_playlist();
+    if (pl) {
+        update_tracks(pm_get_selected_playlist()->members);
+    }
+}
diff --git a/plugins/playlist_display/playlist_display_actions.h 
b/plugins/playlist_display/playlist_display_actions.h
index e967f88..6be0362 100644
--- a/plugins/playlist_display/playlist_display_actions.h
+++ b/plugins/playlist_display/playlist_display_actions.h
@@ -66,4 +66,6 @@ void on_delete_selected_playlist_including_tracks_from_ipod 
(GtkAction *action,
 void on_delete_selected_playlist_including_tracks_from_database (GtkAction 
*action, PlaylistDisplayPlugin* plugin);
 void on_delete_selected_playlist_including_tracks_from_device(GtkAction 
*action, PlaylistDisplayPlugin* plugin);
 
+void on_update_selected_playlist (GtkAction *action, PlaylistDisplayPlugin* 
plugin);
+
 #endif
diff --git a/plugins/playlist_display/playlist_display_context_menu.c 
b/plugins/playlist_display/playlist_display_context_menu.c
index d6f74df..5075e53 100644
--- a/plugins/playlist_display/playlist_display_context_menu.c
+++ b/plugins/playlist_display/playlist_display_context_menu.c
@@ -40,108 +40,77 @@
 #include "libgtkpod/gp_spl.h"
 #include "libgtkpod/context_menus.h"
 #include "libgtkpod/misc_playlist.h"
+#include "libgtkpod/misc.h"
 
 static void context_menu_delete_playlist_head(GtkMenuItem *mi, gpointer data) {
     DeleteAction deleteaction = GPOINTER_TO_INT (data);
     delete_playlist_head(deleteaction);
 }
 
-static GtkWidget *add_delete_all_tracks_from_ipod (GtkWidget *menu)
-{
+static GtkWidget *add_delete_all_tracks_from_ipod(GtkWidget *menu) {
     GtkWidget *mi;
     GtkWidget *sub;
 
-    mi = hookup_menu_item(menu, _("Remove All Tracks from iPod"),
-            GTK_STOCK_DELETE,
-            NULL, NULL);
-    sub = gtk_menu_new ();
-    gtk_widget_show (sub);
-    gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), sub);
-    hookup_menu_item (sub, _("I'm sure"),
-           NULL,
-           G_CALLBACK (context_menu_delete_track_head),
-           GINT_TO_POINTER (DELETE_ACTION_IPOD));
+    mi = hookup_menu_item(menu, _("Remove All Tracks from iPod"), 
GTK_STOCK_DELETE, NULL, NULL);
+    sub = gtk_menu_new();
+    gtk_widget_show(sub);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM (mi), sub);
+    hookup_menu_item(sub, _("I'm sure"), NULL, G_CALLBACK 
(context_menu_delete_track_head), GINT_TO_POINTER (DELETE_ACTION_IPOD));
     return mi;
 }
 
-static GtkWidget *add_delete_all_tracks_from_database (GtkWidget *menu)
-{
+static GtkWidget *add_delete_all_tracks_from_database(GtkWidget *menu) {
     GtkWidget *mi;
     GtkWidget *sub;
 
-    mi = hookup_menu_item (menu, _("Remove All Tracks from Database"),
-            GTK_STOCK_DELETE,
-            NULL, NULL);
-    sub = gtk_menu_new ();
-    gtk_widget_show (sub);
-    gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), sub);
-    hookup_menu_item (sub, _("I'm sure"),
-           NULL,
-           G_CALLBACK (context_menu_delete_track_head),
-           GINT_TO_POINTER (DELETE_ACTION_DATABASE));
+    mi = hookup_menu_item(menu, _("Remove All Tracks from Database"), 
GTK_STOCK_DELETE, NULL, NULL);
+    sub = gtk_menu_new();
+    gtk_widget_show(sub);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM (mi), sub);
+    hookup_menu_item(sub, _("I'm sure"), NULL, G_CALLBACK 
(context_menu_delete_track_head), GINT_TO_POINTER (DELETE_ACTION_DATABASE));
     return mi;
 }
 
-static GtkWidget *add_delete_all_podcasts_from_ipod (GtkWidget *menu)
-{
+static GtkWidget *add_delete_all_podcasts_from_ipod(GtkWidget *menu) {
     GtkWidget *mi;
     GtkWidget *sub;
 
-    mi = hookup_menu_item(menu, _("Remove All Podcasts from iPod"),
-            GTK_STOCK_DELETE,
-            NULL, NULL);
-    sub = gtk_menu_new ();
-    gtk_widget_show (sub);
-    gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), sub);
-    hookup_menu_item (sub, _("I'm sure"),
-           NULL,
-           G_CALLBACK (context_menu_delete_track_head),
-           GINT_TO_POINTER (DELETE_ACTION_IPOD));
+    mi = hookup_menu_item(menu, _("Remove All Podcasts from iPod"), 
GTK_STOCK_DELETE, NULL, NULL);
+    sub = gtk_menu_new();
+    gtk_widget_show(sub);
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM (mi), sub);
+    hookup_menu_item(sub, _("I'm sure"), NULL, G_CALLBACK 
(context_menu_delete_track_head), GINT_TO_POINTER (DELETE_ACTION_IPOD));
     return mi;
 }
 
-static GtkWidget *add_delete_playlist_including_tracks_ipod (GtkWidget *menu)
-{
-    return hookup_menu_item(menu,  _("Delete Including Tracks"),
-              GTK_STOCK_DELETE,
-              G_CALLBACK (context_menu_delete_playlist_head),
-              GINT_TO_POINTER (DELETE_ACTION_IPOD));
+static GtkWidget *add_delete_playlist_including_tracks_ipod(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Delete Including Tracks"), 
GTK_STOCK_DELETE, G_CALLBACK (context_menu_delete_playlist_head), 
GINT_TO_POINTER (DELETE_ACTION_IPOD));
 }
 
-static GtkWidget *add_delete_playlist_including_tracks_database (GtkWidget 
*menu)
-{
-    return hookup_menu_item (menu,  _("Delete Including Tracks (Database)"),
-              GTK_STOCK_DELETE,
-              G_CALLBACK (context_menu_delete_playlist_head),
-              GINT_TO_POINTER (DELETE_ACTION_DATABASE));
+static GtkWidget *add_delete_playlist_including_tracks_database(GtkWidget 
*menu) {
+    return hookup_menu_item(menu, _("Delete Including Tracks (Database)"), 
GTK_STOCK_DELETE, G_CALLBACK (context_menu_delete_playlist_head), 
GINT_TO_POINTER (DELETE_ACTION_DATABASE));
 }
 
-static GtkWidget *add_delete_playlist_including_tracks_harddisk (GtkWidget 
*menu)
-{
-    return hookup_menu_item (menu,  _("Delete Including Tracks (Harddisk)"),
-              GTK_STOCK_DELETE,
-              G_CALLBACK (context_menu_delete_playlist_head),
-              GINT_TO_POINTER (DELETE_ACTION_LOCAL));
+static GtkWidget *add_delete_playlist_including_tracks_harddisk(GtkWidget 
*menu) {
+    return hookup_menu_item(menu, _("Delete Including Tracks (Harddisk)"), 
GTK_STOCK_DELETE, G_CALLBACK (context_menu_delete_playlist_head), 
GINT_TO_POINTER (DELETE_ACTION_LOCAL));
 }
 
 static GtkWidget *add_delete_playlist_but_keep_tracks(GtkWidget *menu) {
     return hookup_menu_item(menu, _("Delete But Keep Tracks"), 
GTK_STOCK_DELETE, G_CALLBACK (context_menu_delete_playlist_head), 
GINT_TO_POINTER (DELETE_ACTION_PLAYLIST));
 }
 
-static void copy_selected_playlist_to_target_itdb (GtkMenuItem *mi, gpointer 
*userdata)
-{
+static void copy_selected_playlist_to_target_itdb(GtkMenuItem *mi, gpointer 
*userdata) {
     iTunesDB *t_itdb = *userdata;
     g_return_if_fail (t_itdb);
     if (gtkpod_get_current_playlist())
-        copy_playlist_to_target_itdb (gtkpod_get_current_playlist(), t_itdb);
+        copy_playlist_to_target_itdb(gtkpod_get_current_playlist(), t_itdb);
 }
 
-static void copy_selected_playlist_to_target_playlist (GtkMenuItem *mi, 
gpointer *userdata)
-{
+static void copy_selected_playlist_to_target_playlist(GtkMenuItem *mi, 
gpointer *userdata) {
     Playlist *t_pl = *userdata;
     g_return_if_fail (t_pl);
     if (gtkpod_get_current_playlist())
-        copy_playlist_to_target_playlist (gtkpod_get_current_playlist(), t_pl);
+        copy_playlist_to_target_playlist(gtkpod_get_current_playlist(), t_pl);
 }
 
 static GtkWidget *add_copy_selected_playlist_to_target_itdb(GtkWidget *menu, 
const gchar *title) {
@@ -198,57 +167,83 @@ static GtkWidget 
*add_copy_selected_playlist_to_target_itdb(GtkWidget *menu, con
 }
 
 /* Edit selected smart playlist */
-static void edit_spl (GtkMenuItem *mi, gpointer data)
-{
+static void edit_spl(GtkMenuItem *mi, gpointer data) {
     Playlist *pl = gtkpod_get_current_playlist();
 
     if (pl)
-        spl_edit (pl);
+        spl_edit(pl);
 }
 
-static GtkWidget *add_edit_smart_playlist (GtkWidget *menu)
-{
-    return hookup_menu_item (menu, _("Edit Smart Playlist"),
-              GTK_STOCK_PROPERTIES,
-              G_CALLBACK (edit_spl), NULL);
+static GtkWidget *add_edit_smart_playlist(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Edit Smart Playlist"), 
GTK_STOCK_PROPERTIES, G_CALLBACK (edit_spl), NULL);
 }
 
 /* Display repository options */
-static void edit_properties (GtkMenuItem *mi, gpointer data)
-{
+static void edit_properties(GtkMenuItem *mi, gpointer data) {
+    g_return_if_fail (gtkpod_get_current_playlist());
+
+    gtkpod_edit_repository(gtkpod_get_current_playlist()->itdb, 
gtkpod_get_current_playlist());
+}
+
+/* Save Changes */
+static void save_changes(GtkMenuItem *mi, gpointer data) {
+    g_return_if_fail (gtkpod_get_current_playlist());
+    gp_save_itdb(gtkpod_get_current_playlist()->itdb);
+}
+
+/* Load an itdb */
+static void load_ipod(GtkMenuItem *mi, gpointer data) {
+    g_return_if_fail (gtkpod_get_current_playlist());
+    gp_load_ipod(gtkpod_get_current_playlist()->itdb);
+}
+
+static void eject_ipod(GtkMenuItem *mi, gpointer data) {
+    iTunesDB *itdb;
+    ExtraiTunesDBData *eitdb;
+
+    /* all of the checks below indicate a programming error -> give a
+     warning through the g_..._fail macros */
     g_return_if_fail (gtkpod_get_current_playlist());
+    itdb = gtkpod_get_current_playlist()->itdb;
+    g_return_if_fail (itdb);
+    g_return_if_fail (itdb->usertype & GP_ITDB_TYPE_IPOD);
+    eitdb = itdb->userdata;
+    g_return_if_fail (eitdb);
+    g_return_if_fail (eitdb->itdb_imported == TRUE);
 
-    gtkpod_edit_repository (gtkpod_get_current_playlist()->itdb, 
gtkpod_get_current_playlist());
+    gp_eject_ipod(itdb);
 }
 
-static GtkWidget *add_edit_ipod_properties (GtkWidget *menu)
-{
-    return hookup_menu_item (menu,  _("Edit iPod Properties"),
-              GTK_STOCK_PREFERENCES,
-              G_CALLBACK (edit_properties), NULL);
+static GtkWidget *add_edit_ipod_properties(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Edit iPod Properties"), 
GTK_STOCK_PREFERENCES, G_CALLBACK (edit_properties), NULL);
 }
 
-static GtkWidget *add_edit_repository_properties (GtkWidget *menu)
-{
-    return hookup_menu_item (menu,  _("Edit Repository Properties"),
-              GTK_STOCK_PREFERENCES,
-              G_CALLBACK (edit_properties), NULL);
+static GtkWidget *add_edit_repository_properties(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Edit Repository Properties"), 
GTK_STOCK_PREFERENCES, G_CALLBACK (edit_properties), NULL);
 }
 
-static GtkWidget *add_edit_playlist_properties (GtkWidget *menu)
-{
-    return hookup_menu_item (menu,  _("Edit Playlist Properties"),
-              GTK_STOCK_PREFERENCES,
-              G_CALLBACK (edit_properties), NULL);
+static GtkWidget *add_edit_playlist_properties(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Edit Playlist Properties"), 
GTK_STOCK_PREFERENCES, G_CALLBACK (edit_properties), NULL);
+}
+
+static GtkWidget *add_load_ipod(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Load iPod"), GTK_STOCK_CONNECT, 
G_CALLBACK (load_ipod), NULL);
+}
+
+static GtkWidget *add_save_changes(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Save Changes"), GTK_STOCK_SAVE, 
G_CALLBACK (save_changes), NULL);
+}
+
+static GtkWidget *add_eject_ipod(GtkWidget *menu) {
+    return hookup_menu_item(menu, _("Eject iPod"), GTK_STOCK_DISCONNECT, 
G_CALLBACK (eject_ipod), NULL);
 }
 
 void pm_context_menu_init(void) {
     GtkWidget *menu = NULL;
     Playlist *pl;
 
-    g_warning("TODO widgets blocked on pm_context_menu_init");
-//    if (widgets_blocked)
-//        return;
+    if (widgets_blocked)
+        return;
 
     pm_stop_editing(TRUE);
 
@@ -296,7 +291,7 @@ void pm_context_menu_init(void) {
             }
             add_copy_selected_playlist_to_target_itdb(menu, _("Copy selected 
playlist to..."));
             add_separator(menu);
-//            add_edit_track_details(menu);
+            //            add_edit_track_details(menu);
             if (pl->is_spl) {
                 add_edit_smart_playlist(menu);
             }
@@ -306,14 +301,12 @@ void pm_context_menu_init(void) {
             else {
                 add_edit_playlist_properties(menu);
             }
-//            add_check_ipod_files(menu);
-//            add_eject_ipod(menu);
+            add_eject_ipod(menu);
         }
         else { /* not imported */
             add_edit_ipod_properties(menu);
-//            add_check_ipod_files(menu);
             add_separator(menu);
-//            add_load_ipod(menu);
+            add_load_ipod(menu);
         }
     }
     if (itdb->usertype & GP_ITDB_TYPE_LOCAL) {
@@ -334,7 +327,7 @@ void pm_context_menu_init(void) {
         }
         add_copy_selected_playlist_to_target_itdb(menu, _("Copy selected 
playlist to..."));
         add_separator(menu);
-//        add_edit_track_details(menu);
+        //        add_edit_track_details(menu);
         if (pl->is_spl) {
             add_edit_smart_playlist(menu);
         }
@@ -344,7 +337,10 @@ void pm_context_menu_init(void) {
         else {
             add_edit_playlist_properties(menu);
         }
-//        add_save_changes(menu);
+    }
+
+    if (eitdb->data_changed) {
+        add_save_changes(menu);
     }
 
     /*
diff --git a/plugins/playlist_display/plugin.c 
b/plugins/playlist_display/plugin.c
index 5aab57d..61d1dae 100644
--- a/plugins/playlist_display/plugin.c
+++ b/plugins/playlist_display/plugin.c
@@ -248,6 +248,14 @@ static GtkActionEntry playlist_actions[] =
             NULL,
             NULL,
             G_CALLBACK 
(on_delete_selected_playlist_including_tracks_from_device)
+        },
+        {
+            "ActionUpdatePlaylist",
+            GTK_STOCK_REFRESH,
+            N_("Selected Playlist"),
+            NULL,
+            NULL,
+            G_CALLBACK (on_update_selected_playlist)
         }
     };
 
@@ -345,8 +353,7 @@ static void playlist_display_plugin_class_init(GObjectClass 
*klass) {
     plugin_class->deactivate = deactivate_plugin;
 }
 
-ANJUTA_PLUGIN_BEGIN (PlaylistDisplayPlugin, 
playlist_display_plugin);ANJUTA_PLUGIN_END
-;
+ANJUTA_PLUGIN_BEGIN (PlaylistDisplayPlugin, playlist_display_plugin);
+ANJUTA_PLUGIN_END;
 
-ANJUTA_SIMPLE_PLUGIN (PlaylistDisplayPlugin, playlist_display_plugin)
-;
+ANJUTA_SIMPLE_PLUGIN (PlaylistDisplayPlugin, playlist_display_plugin);
diff --git a/plugins/repository_editor/repository_editor.c 
b/plugins/repository_editor/repository_editor.c
index 6133822..e2f278e 100644
--- a/plugins/repository_editor/repository_editor.c
+++ b/plugins/repository_editor/repository_editor.c
@@ -703,7 +703,7 @@ static void edit_apply_clicked(GtkButton *button) {
             g_free(key);
             if (str) { /* have to set mountpoint */
                 itdb_set_mountpoint(itdb, str);
-                g_warning("TODO: edit_apply_clicked - space_set_ipod_itdb");
+                g_message("TODO: edit_apply_clicked - space_set_ipod_itdb");
                 //                space_set_ipod_itdb(itdb);
                 g_free(str);
             }
diff --git a/plugins/sorttab_display/plugin.c b/plugins/sorttab_display/plugin.c
index 01252b1..9a82d01 100644
--- a/plugins/sorttab_display/plugin.c
+++ b/plugins/sorttab_display/plugin.c
@@ -81,6 +81,14 @@ static GtkActionEntry sorttab_actions[] =
             NULL,
             NULL,
             G_CALLBACK (on_delete_selected_entry_from_device)
+        },
+        {
+            "ActionUpdateTabEntry",
+            GTK_STOCK_REFRESH,
+            N_("Selected Tab Entry"),
+            NULL,
+            NULL,
+            G_CALLBACK (on_update_selected_tab_entry)
         }
     };
 
diff --git a/plugins/sorttab_display/sorttab_display.ui 
b/plugins/sorttab_display/sorttab_display.ui
index a91811c..532845c 100644
--- a/plugins/sorttab_display/sorttab_display.ui
+++ b/plugins/sorttab_display/sorttab_display.ui
@@ -1,6 +1,13 @@
 <!--*- xml -*-->
 <ui>
        <menubar name="MenuMain">
+               <menu name="MenuMusic" action="ActionMenuMusic">
+                       <placeholder name="PlaceholderMusicMenus">
+                               <menu name="Update Tracks from File" 
action="ActionUpdateMenu">
+                                       <menuitem name="Selected Tab Entry" 
action="ActionUpdateTabEntry"/>
+                </menu>
+            </placeholder>
+               </menu>
                <menu name="MenuEdit" action="ActionMenuEdit">
                        <placeholder name="PlaceholderEditMenus">
                                <menu name="Delete" 
action="ActionEditDeleteMenu">
diff --git a/plugins/sorttab_display/sorttab_display_actions.c 
b/plugins/sorttab_display/sorttab_display_actions.c
index 8ab3159..381b9a4 100644
--- a/plugins/sorttab_display/sorttab_display_actions.c
+++ b/plugins/sorttab_display/sorttab_display_actions.c
@@ -35,6 +35,7 @@
 #include "sorttab_display_actions.h"
 #include "display_sorttabs.h"
 #include "libgtkpod/gp_itdb.h"
+#include "libgtkpod/file.h"
 
 void on_more_sort_tabs_activate(GtkAction *action, SorttabDisplayPlugin* 
plugin) {
     prefs_set_int("sort_tab_num", prefs_get_int("sort_tab_num") + 1);
@@ -90,3 +91,20 @@ void on_delete_selected_entry_from_device(GtkAction *action, 
SorttabDisplayPlugi
         on_delete_selected_entry_from_harddisk(action, plugin);
     }
 }
+
+void on_update_selected_tab_entry (GtkAction *action, SorttabDisplayPlugin* 
plugin) {
+    TabEntry *entry;
+    gint inst;
+
+    inst = st_get_sort_tab_number(_("Update selected entry of which sort 
tab?"));
+    if (inst == -1)
+        return;
+
+    entry = st_get_selected_entry(inst);
+    if (!entry) {
+        gtkpod_statusbar_message(_("No entry selected in Sort Tab %d"), inst + 
1);
+        return;
+    }
+
+    update_tracks(entry->members);
+}
diff --git a/plugins/sorttab_display/sorttab_display_actions.h 
b/plugins/sorttab_display/sorttab_display_actions.h
index 0c60f4e..b111c27 100644
--- a/plugins/sorttab_display/sorttab_display_actions.h
+++ b/plugins/sorttab_display/sorttab_display_actions.h
@@ -50,4 +50,6 @@ void on_delete_selected_entry_from_playlist(GtkAction 
*action, SorttabDisplayPlu
 
 void on_delete_selected_entry_from_device(GtkAction *action, 
SorttabDisplayPlugin* plugin);
 
+void on_update_selected_tab_entry (GtkAction *action, SorttabDisplayPlugin* 
plugin);
+
 #endif
diff --git a/plugins/track_display/plugin.c b/plugins/track_display/plugin.c
index 8268e43..6354db4 100644
--- a/plugins/track_display/plugin.c
+++ b/plugins/track_display/plugin.c
@@ -64,6 +64,14 @@ static GtkActionEntry track_actions[] =
             NULL,
             NULL,
             G_CALLBACK (on_delete_selected_tracks_from_device)
+        },
+        {
+            "ActionUpdateTracks",
+            GTK_STOCK_REFRESH,
+            N_("Selected Tracks"),
+            NULL,
+            NULL,
+            G_CALLBACK (on_update_selected_tracks)
         }
     };
 
diff --git a/plugins/track_display/track_display.ui 
b/plugins/track_display/track_display.ui
index 21d15e6..683e1cf 100644
--- a/plugins/track_display/track_display.ui
+++ b/plugins/track_display/track_display.ui
@@ -1,6 +1,13 @@
 <!--*- xml -*-->
 <ui>
        <menubar name="MenuMain">
+               <menu name="MenuMusic" action="menuMusic">
+                       <placeholder name="PlaceholderMusicMenus">
+                               <menu name="Update Tracks from File" 
action="ActionUpdateMenu">
+                                       <menuitem name="Selected Tracks" 
action="ActionUpdateTracks" />
+                </menu>
+            </placeholder>
+        </menu>
                <menu name="MenuEdit" action="ActionMenuEdit">
                        <placeholder name="PlaceholderEditMenus">
                                <menu name="Delete" 
action="ActionEditDeleteMenu">
diff --git a/plugins/track_display/track_display_actions.c 
b/plugins/track_display/track_display_actions.c
index 52f9fa3..c736255 100644
--- a/plugins/track_display/track_display_actions.c
+++ b/plugins/track_display/track_display_actions.c
@@ -35,6 +35,7 @@
 #include "display_tracks.h"
 #include "libgtkpod/misc.h"
 #include "libgtkpod/misc_track.h"
+#include "libgtkpod/file.h"
 
 static void delete_selected_tracks(DeleteAction deleteaction) {
     GList *tracks = gtkpod_get_selected_tracks();
@@ -77,3 +78,11 @@ void on_delete_selected_tracks_from_device(GtkAction 
*action, TrackDisplayPlugin
     }
 }
 
+void on_update_selected_tracks (GtkAction *action, TrackDisplayPlugin* plugin) 
{
+    GList *tracks = gtkpod_get_selected_tracks();
+
+    if (tracks) {
+      update_tracks(tracks);
+    }
+}
+
diff --git a/plugins/track_display/track_display_actions.h 
b/plugins/track_display/track_display_actions.h
index bd8fb1c..41ae64f 100644
--- a/plugins/track_display/track_display_actions.h
+++ b/plugins/track_display/track_display_actions.h
@@ -41,5 +41,6 @@ void on_delete_selected_tracks_from_database(GtkAction 
*action, TrackDisplayPlug
 void on_delete_selected_tracks_from_harddisk(GtkAction *action, 
TrackDisplayPlugin* plugin);
 void on_delete_selected_tracks_from_ipod(GtkAction *action, 
TrackDisplayPlugin* plugin);
 void on_delete_selected_tracks_from_device(GtkAction *action, 
TrackDisplayPlugin* plugin);
+void on_update_selected_tracks (GtkAction *action, TrackDisplayPlugin* plugin);
 
 #endif
diff --git a/src/anjuta-actions.h b/src/anjuta-actions.h
index b6cefc3..64735c5 100644
--- a/src/anjuta-actions.h
+++ b/src/anjuta-actions.h
@@ -26,6 +26,14 @@ static GtkActionEntry menu_entries_music[] = {
       N_("_Music")
   },
   {
+      "ActionUpdateMenu",
+      GTK_STOCK_REFRESH,
+      N_("_Update Tracks from File"),
+      NULL,
+      NULL,
+      NULL
+  },
+  {
       "ActionExit",
       GTK_STOCK_QUIT,
       N_("_Quit"),

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to