commit cda30e4f23e44eb6c7d2af6d699206d529d4098f
Author: phantomjinx <p.g.richard...@phantomjinx.co.uk>
Date:   Thu Feb 25 20:43:30 2010 +0000

    Remaining delete features
    
    - gtkpod_app_iface.c
      - Ensure that list of tracks in set_selected_tracks is copied rather than
        pointed at.
    
    - playlist display plugin
      - Add TRACK_REMOVED signal to remove appropriate tracks from current
        playlist.
    
    - sorttab display plugin
      - Include "Delete Entry" actions in Edit Menu
      - Add TRACK_REMOVED signal to remove appropriate tracks from current
        sorttabs.
    
    - misc_track.*
      - delete_track_ok and delete_track_cancel no longer static as both used
        by sorttab's delete_entry_head().

 libgtkpod/gtkpod_app_iface.c                      |    2 +-
 plugins/playlist_display/display_playlists.h      |    1 +
 plugins/playlist_display/playlist_display.ui      |    1 +
 plugins/playlist_display/plugin.c                 |    1 +
 plugins/sorttab_display/display_sorttabs.h        |    5 +
 plugins/sorttab_display/plugin.c                  |   25 ++++
 plugins/sorttab_display/sorttab_display.ui        |   10 ++
 plugins/sorttab_display/sorttab_display_actions.c |   50 +++++++-
 plugins/sorttab_display/sorttab_display_actions.h |   10 ++
 plugins/track_display/track_display.ui            |    1 +
 src/display_playlists.c                           |    7 +
 src/display_sorttabs.c                            |  157 ++++++++++++++++++++-
 src/misc_input.c                                  |   84 +-----------
 src/misc_track.c                                  |    6 +-
 src/misc_track.h                                  |    2 +
 15 files changed, 269 insertions(+), 93 deletions(-)
---
diff --git a/libgtkpod/gtkpod_app_iface.c b/libgtkpod/gtkpod_app_iface.c
index 26863f1..12a941b 100644
--- a/libgtkpod/gtkpod_app_iface.c
+++ b/libgtkpod/gtkpod_app_iface.c
@@ -261,7 +261,7 @@ GList *gtkpod_get_selected_tracks() {
 
 void gtkpod_set_selected_tracks(GList *tracks) {
     g_return_if_fail (GTKPOD_IS_APP(gtkpod_app));
-    GTKPOD_APP_GET_INTERFACE (gtkpod_app)->selected_tracks = tracks;
+    GTKPOD_APP_GET_INTERFACE (gtkpod_app)->selected_tracks = 
g_list_copy(tracks);
 
     g_signal_emit(gtkpod_app, gtkpod_app_signals[TRACKS_SELECTED], 0, tracks);
 }
diff --git a/plugins/playlist_display/display_playlists.h 
b/plugins/playlist_display/display_playlists.h
index a64c2c5..0ab5eb5 100644
--- a/plugins/playlist_display/display_playlists.h
+++ b/plugins/playlist_display/display_playlists.h
@@ -58,5 +58,6 @@ void playlist_display_update_itdb_cb (GtkPodApp *app, 
gpointer olditdb, gpointer
 void playlist_display_select_playlist_cb (GtkPodApp *app, gpointer pl, 
gpointer data);
 void playlist_display_playlist_added_cb(GtkPodApp *app, gpointer pl, gint32 
pos, gpointer data);
 void playlist_display_playlist_removed_cb(GtkPodApp *app, gpointer pl, gint32 
pos, gpointer data);
+void playlist_display_track_removed_cb(GtkPodApp *app, gpointer tk, gint32 
pos, gpointer data);
 
 #endif /* __DISPLAY_PLAYLIST_H__ */
diff --git a/plugins/playlist_display/playlist_display.ui 
b/plugins/playlist_display/playlist_display.ui
index 86b28b2..b87799b 100644
--- a/plugins/playlist_display/playlist_display.ui
+++ b/plugins/playlist_display/playlist_display.ui
@@ -13,6 +13,7 @@
                                        <menuitem name="Selected Playlist" 
action="ActionUpdatePlaylist" />
                                        <menuitem name="Selected Tab Entry" 
action="ActionUpdateTabEntry" />
                                        <menuitem name="Selected Tracks" 
action="ActionUpdateTracks" />
+                                       <separator name="separator3" />
                 </menu>
             </placeholder>
                </menu>
diff --git a/plugins/playlist_display/plugin.c 
b/plugins/playlist_display/plugin.c
index a65f0d0..d1deaaf 100644
--- a/plugins/playlist_display/plugin.c
+++ b/plugins/playlist_display/plugin.c
@@ -292,6 +292,7 @@ static gboolean activate_plugin(AnjutaPlugin *plugin) {
     g_signal_connect (gtkpod_app, SIGNAL_ITDB_UPDATED, G_CALLBACK 
(playlist_display_update_itdb_cb), NULL);
     g_signal_connect (gtkpod_app, SIGNAL_PLAYLIST_ADDED, G_CALLBACK 
(playlist_display_playlist_added_cb), NULL);
     g_signal_connect (gtkpod_app, SIGNAL_PLAYLIST_REMOVED, G_CALLBACK 
(playlist_display_playlist_removed_cb), NULL);
+    g_signal_connect (gtkpod_app, SIGNAL_TRACK_REMOVED, G_CALLBACK 
(playlist_display_track_removed_cb), NULL);
 
     gtk_container_add(GTK_CONTAINER (playlist_display_plugin->pl_window), 
GTK_WIDGET (playlist_display_plugin->playlist_view));
     gtk_widget_show_all(playlist_display_plugin->pl_window);
diff --git a/plugins/sorttab_display/display_sorttabs.h 
b/plugins/sorttab_display/display_sorttabs.h
index a109540..4469ba0 100644
--- a/plugins/sorttab_display/display_sorttabs.h
+++ b/plugins/sorttab_display/display_sorttabs.h
@@ -38,6 +38,7 @@
 #include "date_parser.h"
 #include "sorttab_conversion.h"
 #include "libgtkpod/gtkpod_app_iface.h"
+#include "libgtkpod/gp_itdb.h"
 
 /* Number of search tabs to be supported. */
 #define SORT_TAB_MAX (ST_CAT_NUM-1)
@@ -131,9 +132,13 @@ void st_redisplay(guint32 inst);
 GList *st_get_selected_members(guint32 inst);
 void st_update_paned_position();
 void st_show_visible(void);
+TabEntry *st_get_selected_entry(gint inst);
+gint st_get_sort_tab_number(gchar *text);
+void st_delete_entry_head(gint inst, DeleteAction deleteaction);
 
 void cal_open_calendar(gint inst, T_item item);
 
 void sorttab_display_select_playlist_cb(GtkPodApp *app, gpointer pl, gpointer 
data);
+void sorttab_display_track_removed_cb(GtkPodApp *app, gpointer tk, gint32 pos, 
gpointer data);
 
 #endif /* __DISPLAY_SORTTAB_H__ */
diff --git a/plugins/sorttab_display/plugin.c b/plugins/sorttab_display/plugin.c
index f7d3ab6..01252b1 100644
--- a/plugins/sorttab_display/plugin.c
+++ b/plugins/sorttab_display/plugin.c
@@ -58,6 +58,30 @@ static GtkActionEntry sorttab_actions[] =
             NULL, /* Tooltip */
             G_CALLBACK (on_fewer_sort_tabs_activate) /* callback */
         },
+        {
+            "ActionDeleteSelectedEntry",
+            GTK_STOCK_DELETE,
+            N_("Selected Filter Tab Entry from Playlist"),
+            NULL,
+            NULL,
+            G_CALLBACK (on_delete_selected_entry_from_playlist)
+        },
+        {
+            "ActionDeleteSelectedEntryFromDb",
+            GTK_STOCK_DELETE,
+            N_("Selected Filter Tab Entry from Database"),
+            NULL,
+            NULL,
+            G_CALLBACK (on_delete_selected_entry_from_database)
+        },
+        {
+            "ActionDeleteSelectedEntryFromDev",
+            GTK_STOCK_DELETE,
+            N_("Selected Filter Tab Entry from Device"),
+            NULL,
+            NULL,
+            G_CALLBACK (on_delete_selected_entry_from_device)
+        }
     };
 
 static gboolean activate_sorttab_display_plugin(AnjutaPlugin *plugin) {
@@ -84,6 +108,7 @@ static gboolean activate_sorttab_display_plugin(AnjutaPlugin 
*plugin) {
     gtk_widget_show(sorttab_display_plugin->st_paned);
 
     g_signal_connect (gtkpod_app, SIGNAL_PLAYLIST_SELECTED, G_CALLBACK 
(sorttab_display_select_playlist_cb), NULL);
+    g_signal_connect (gtkpod_app, SIGNAL_TRACK_REMOVED, G_CALLBACK 
(sorttab_display_track_removed_cb), NULL);
 
     anjuta_shell_add_widget(plugin->shell, sorttab_display_plugin->st_paned, 
"SorttabDisplayPlugin", "Track Filter", NULL, ANJUTA_SHELL_PLACEMENT_CENTER, 
NULL);
     return TRUE; /* FALSE if activation failed */
diff --git a/plugins/sorttab_display/sorttab_display.ui 
b/plugins/sorttab_display/sorttab_display.ui
index ecc33d2..a91811c 100644
--- a/plugins/sorttab_display/sorttab_display.ui
+++ b/plugins/sorttab_display/sorttab_display.ui
@@ -1,6 +1,16 @@
 <!--*- xml -*-->
 <ui>
        <menubar name="MenuMain">
+               <menu name="MenuEdit" action="ActionMenuEdit">
+                       <placeholder name="PlaceholderEditMenus">
+                               <menu name="Delete" 
action="ActionEditDeleteMenu">
+                                       <menuitem name="Selected Entry from 
Playlist" action="ActionDeleteSelectedEntry" />
+                                       <menuitem name="Selected Entry from 
Database" action="ActionDeleteSelectedEntryFromDb" />
+                                       <menuitem name="Selected Entry from 
Device" action="ActionDeleteSelectedEntryFromDev" />
+                                       <separator name="separator1" />
+                               </menu>
+            </placeholder>
+               </menu>
                <menu name="MenuView" action="ActionMenuView">
                        <placeholder 
name="PlaceholderSorttabDisplayActionMenuView">
                                <menuitem name="More Filter Tabs" 
action="ActionViewMoreFilterTabs"/>
diff --git a/plugins/sorttab_display/sorttab_display_actions.c 
b/plugins/sorttab_display/sorttab_display_actions.c
index 76bb06e..8ab3159 100644
--- a/plugins/sorttab_display/sorttab_display_actions.c
+++ b/plugins/sorttab_display/sorttab_display_actions.c
@@ -34,13 +34,59 @@
 #include "libgtkpod/prefs.h"
 #include "sorttab_display_actions.h"
 #include "display_sorttabs.h"
+#include "libgtkpod/gp_itdb.h"
 
-void on_more_sort_tabs_activate (GtkAction *action, SorttabDisplayPlugin* 
plugin) {
+void on_more_sort_tabs_activate(GtkAction *action, SorttabDisplayPlugin* 
plugin) {
     prefs_set_int("sort_tab_num", prefs_get_int("sort_tab_num") + 1);
     st_show_visible();
 }
 
-void on_fewer_sort_tabs_activate (GtkAction *action, SorttabDisplayPlugin* 
plugin) {
+void on_fewer_sort_tabs_activate(GtkAction *action, SorttabDisplayPlugin* 
plugin) {
     prefs_set_int("sort_tab_num", prefs_get_int("sort_tab_num") - 1);
     st_show_visible();
 }
+
+static void delete_selected_entry(DeleteAction deleteaction, gchar *text) {
+    TabEntry *entry;
+    gint inst;
+
+    inst = st_get_sort_tab_number(text);
+    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;
+    }
+    st_delete_entry_head(inst, deleteaction);
+}
+
+void on_delete_selected_entry_from_database(GtkAction *action, 
SorttabDisplayPlugin* plugin) {
+    delete_selected_entry(DELETE_ACTION_DATABASE, _("Remove entry of which 
sort tab from database?"));
+}
+
+void on_delete_selected_entry_from_ipod(GtkAction *action, 
SorttabDisplayPlugin* plugin) {
+    delete_selected_entry(DELETE_ACTION_IPOD, _("Remove tracks in selected 
entry of which filter tab from the iPod?"));
+}
+
+void on_delete_selected_entry_from_harddisk(GtkAction *action, 
SorttabDisplayPlugin* plugin) {
+    delete_selected_entry(DELETE_ACTION_LOCAL, _("Remove tracks in selected 
entry of which filter tab from the harddisk?"));
+}
+
+void on_delete_selected_entry_from_playlist(GtkAction *action, 
SorttabDisplayPlugin* plugin) {
+    delete_selected_entry(DELETE_ACTION_PLAYLIST, _("Remove tracks in selected 
entry of which filter tab from playlist?"));
+}
+
+void on_delete_selected_entry_from_device(GtkAction *action, 
SorttabDisplayPlugin* plugin) {
+    iTunesDB *itdb = gtkpod_get_current_itdb();
+    if (!itdb)
+        return;
+
+    if (itdb->usertype & GP_ITDB_TYPE_IPOD) {
+        on_delete_selected_entry_from_ipod(action, plugin);
+    }
+    else if (itdb->usertype & GP_ITDB_TYPE_LOCAL) {
+        on_delete_selected_entry_from_harddisk(action, plugin);
+    }
+}
diff --git a/plugins/sorttab_display/sorttab_display_actions.h 
b/plugins/sorttab_display/sorttab_display_actions.h
index 515249a..0c60f4e 100644
--- a/plugins/sorttab_display/sorttab_display_actions.h
+++ b/plugins/sorttab_display/sorttab_display_actions.h
@@ -40,4 +40,14 @@ void on_more_sort_tabs_activate (GtkAction *action, 
SorttabDisplayPlugin* plugin
 
 void on_fewer_sort_tabs_activate (GtkAction *action, SorttabDisplayPlugin* 
plugin);
 
+void on_delete_selected_entry_from_database(GtkAction *action, 
SorttabDisplayPlugin* plugin);
+
+void on_delete_selected_entry_from_ipod(GtkAction *action, 
SorttabDisplayPlugin* plugin);
+
+void on_delete_selected_entry_from_harddisk(GtkAction *action, 
SorttabDisplayPlugin* plugin);
+
+void on_delete_selected_entry_from_playlist(GtkAction *action, 
SorttabDisplayPlugin* plugin);
+
+void on_delete_selected_entry_from_device(GtkAction *action, 
SorttabDisplayPlugin* plugin);
+
 #endif
diff --git a/plugins/track_display/track_display.ui 
b/plugins/track_display/track_display.ui
index a44fcce..21d15e6 100644
--- a/plugins/track_display/track_display.ui
+++ b/plugins/track_display/track_display.ui
@@ -7,6 +7,7 @@
                                        <menuitem name="Selected Tracks from 
Playlist" action="ActionDeleteSelectedTracksFromPlaylist" />
                                        <menuitem name="Selected Tracks from 
Database" action="ActionDeleteSelectedTracksFromDatabase" />
                                        <menuitem name="Selected Tracks from 
Device" action="ActionDeleteSelectedTracksFromDevice" />
+                                       <separator name="separator2" />
                                </menu>
             </placeholder>
                </menu>
diff --git a/src/display_playlists.c b/src/display_playlists.c
index 973eec3..5a493a1 100644
--- a/src/display_playlists.c
+++ b/src/display_playlists.c
@@ -2205,3 +2205,10 @@ void playlist_display_playlist_removed_cb(GtkPodApp 
*app, gpointer pl, gint32 po
     pm_remove_playlist(old_playlist, TRUE);
 }
 
+void playlist_display_track_removed_cb(GtkPodApp *app, gpointer tk, gint32 
pos, gpointer data) {
+    Track *old_track = tk;
+    Playlist *current_playlist = gtkpod_get_current_playlist();
+
+    pm_remove_track(current_playlist, old_track);
+}
+
diff --git a/src/display_sorttabs.c b/src/display_sorttabs.c
index 303aca4..28b2ca9 100644
--- a/src/display_sorttabs.c
+++ b/src/display_sorttabs.c
@@ -1583,11 +1583,7 @@ static void st_remove_track_normal(Track *track, guint32 
inst) {
 /* 02. Feb 2003: bugfix: track is always passed on to the next sort
  * tab: it might have been recategorized, but still be displayed. JCS */
 void st_remove_track(Track *track, guint32 inst) {
-    if (inst == prefs_get_int("sort_tab_num")) {
-        g_warning("st_remove_track: signal a track should be removed");
-        //        tm_remove_track(track);
-    }
-    else if (inst < prefs_get_int("sort_tab_num")) {
+    if (inst < prefs_get_int("sort_tab_num")) {
         switch (sorttab[inst]->current_category) {
         case ST_CAT_ARTIST:
         case ST_CAT_ALBUM:
@@ -3339,6 +3335,150 @@ void cal_open_calendar(gint inst, T_item item) {
     gtk_widget_show(cal);
 }
 
+/* Let the user select a sort tab number */
+/* @text: text to be displayed */
+/* return value: -1: user selected cancel
+ 0...prefs_get_sort_tab_number()-1: selected tab */
+gint st_get_sort_tab_number(gchar *text) {
+    static gint last_nr = 1;
+    GtkWidget *mdialog;
+    GtkDialog *dialog;
+    GtkWidget *combo;
+    gint result;
+    gint i, nr, stn;
+    GList *list = NULL, *lnk;
+    gchar buf[20], *bufp;
+
+    mdialog
+            = gtk_message_dialog_new(GTK_WINDOW (gtkpod_app), 
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, 
"%s", text);
+
+    dialog = GTK_DIALOG (mdialog);
+
+    combo = gtk_combo_new();
+    gtk_widget_show(combo);
+    gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), combo);
+
+    stn = prefs_get_int("sort_tab_num");
+    /* Create list */
+    for (i = 1; i <= stn; ++i) {
+        bufp = g_strdup_printf("%d", i);
+        list = g_list_append(list, bufp);
+    }
+
+    /* set pull down items */
+    gtk_combo_set_popdown_strings(GTK_COMBO (combo), list);
+    /* set standard entry */
+    if (last_nr > stn)
+        last_nr = 1; /* maybe the stn has become
+         smaller... */
+    snprintf(buf, 20, "%d", last_nr);
+    gtk_entry_set_text(GTK_ENTRY (GTK_COMBO (combo)->entry), buf);
+
+    result = gtk_dialog_run(GTK_DIALOG (mdialog));
+
+    /* free the list */
+    for (lnk = list; lnk; lnk = lnk->next) {
+        C_FREE (lnk->data);
+    }
+    g_list_free(list);
+    list = NULL;
+
+    if (result == GTK_RESPONSE_CANCEL) {
+        nr = -1; /* no selection */
+    }
+    else {
+        bufp = gtk_editable_get_chars(GTK_EDITABLE (GTK_COMBO (combo)->entry), 
0, -1);
+        nr = atoi(bufp) - 1;
+        last_nr = nr + 1;
+        C_FREE (bufp);
+    }
+
+    gtk_widget_destroy(mdialog);
+
+    return nr;
+}
+
+void st_delete_entry_head(gint inst, DeleteAction deleteaction) {
+    struct DeleteData *dd;
+    Playlist *pl;
+    GList *selected_tracks = NULL;
+    GString *str;
+    gchar *label = NULL, *title = NULL;
+    gboolean confirm_again;
+    gchar *confirm_again_key;
+    TabEntry *entry;
+    GtkResponseType response;
+    iTunesDB *itdb;
+
+    g_return_if_fail (inst >= 0);
+    g_return_if_fail (inst <= prefs_get_int("sort_tab_num"));
+
+    pl = gtkpod_get_current_playlist();
+    if (pl == NULL) { /* no playlist??? Cannot happen, but... */
+        message_sb_no_playlist_selected();
+        return;
+    }
+    itdb = pl->itdb;
+    g_return_if_fail (itdb);
+
+    entry = st_get_selected_entry(inst);
+    if (entry == NULL) { /* no entry selected */
+        gtkpod_statusbar_message(_("No entry selected."));
+        return;
+    }
+
+    if (entry->members == NULL) { /* no tracks in entry -> just remove entry */
+        if (!entry->master)
+            st_remove_entry(entry, inst);
+        else
+            gtkpod_statusbar_message(_("Cannot remove entry 'All'"));
+        return;
+    }
+
+    selected_tracks = g_list_copy(entry->members);
+
+    dd = g_malloc0(sizeof(struct DeleteData));
+    dd->deleteaction = deleteaction;
+    dd->tracks = selected_tracks;
+    dd->pl = pl;
+    dd->itdb = itdb;
+
+    delete_populate_settings(dd, &label, &title, &confirm_again, 
&confirm_again_key, &str);
+
+    /* open window */
+    response = gtkpod_confirmation(-1, /* gint id, */
+    TRUE, /* gboolean modal, */
+    title, /* title */
+    label, /* label */
+    str->str, /* scrolled text */
+    NULL, 0, NULL, /* option 1 */
+    NULL, 0, NULL, /* option 2 */
+    confirm_again, /* gboolean confirm_again, */
+    confirm_again_key,/* ConfHandlerOpt confirm_again_key,*/
+    CONF_NULL_HANDLER, /* ConfHandler ok_handler,*/
+    NULL, /* don't show "Apply" button */
+    CONF_NULL_HANDLER, /* cancel_handler,*/
+    NULL, /* gpointer user_data1,*/
+    NULL); /* gpointer user_data2,*/
+
+    switch (response) {
+    case GTK_RESPONSE_OK:
+        /* Delete the tracks */
+        delete_track_ok(dd);
+        /* Delete the entry */
+        st_remove_entry(entry, inst);
+        break;
+    default:
+        delete_track_cancel(dd);
+        break;
+    }
+
+    g_free(label);
+    g_free(title);
+    g_free(confirm_again_key);
+    g_string_free(str, TRUE);
+}
+
 void sorttab_display_select_playlist_cb(GtkPodApp *app, gpointer pl, gpointer 
data) {
     Playlist *new_playlist = pl;
 
@@ -3357,9 +3497,12 @@ void sorttab_display_select_playlist_cb(GtkPodApp *app, 
gpointer pl, gpointer da
             st_add_track(track, FALSE, TRUE, 0);
         }
 
-//        gtkpod_set_current_tracks(new_playlist->members);
-
         st_enable_disable_view_sort(0, TRUE);
         st_add_track(NULL, TRUE, TRUE, 0);
     }
 }
+
+void sorttab_display_track_removed_cb(GtkPodApp *app, gpointer tk, gint32 pos, 
gpointer data) {
+    Track *old_track = tk;
+    st_remove_track(old_track, 0);
+}
diff --git a/src/misc_input.c b/src/misc_input.c
index 4ab3d39..44e8724 100644
--- a/src/misc_input.c
+++ b/src/misc_input.c
@@ -2,7 +2,7 @@
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
-| 
+|
 |  URL: http://www.gtkpod.org/
 |  URL: http://gtkpod.sourceforge.net/
 |
@@ -95,7 +95,7 @@ gchar *get_user_string (gchar *title, gchar *message, gchar 
*dflt,
     temp = g_markup_printf_escaped ("<span weight='bold' 
size='larger'>%s</span>\n\n%s", title, message);
        gtk_label_set_markup (GTK_LABEL (label), temp);
        g_free (temp);
-       
+
     if (dflt)
     {
                gtk_entry_set_text (GTK_ENTRY (entry), dflt);
@@ -119,7 +119,7 @@ gchar *get_user_string (gchar *title, gchar *message, gchar 
*dflt,
     if (response == GTK_RESPONSE_OK)
     {
                result = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
-               
+
                /* get state of checkbox only if opt_msg was non NULL */
                if (opt_msg && checkb)
                {
@@ -133,82 +133,6 @@ gchar *get_user_string (gchar *title, gchar *message, 
gchar *dflt,
 }
 
 
-
-/* Let the user select a sort tab number */
-/* @text: text to be displayed */
-/* return value: -1: user selected cancel
-   0...prefs_get_sort_tab_number()-1: selected tab */
-gint get_sort_tab_number (gchar *text)
-{
-    static gint last_nr = 1;
-    GtkWidget *mdialog;
-    GtkDialog *dialog;
-    GtkWidget *combo;
-    gint result;
-    gint i, nr, stn;
-    GList *list=NULL, *lnk;
-    gchar buf[20], *bufp;
-
-    mdialog = gtk_message_dialog_new (
-       GTK_WINDOW (gtkpod_app),
-       GTK_DIALOG_DESTROY_WITH_PARENT,
-       GTK_MESSAGE_QUESTION,
-       GTK_BUTTONS_OK_CANCEL,
-       "%s", text);
-
-    dialog = GTK_DIALOG (mdialog);
-
-    combo = gtk_combo_new ();
-    gtk_widget_show (combo);
-    gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), combo);
-
-    stn = prefs_get_int("sort_tab_num");
-    /* Create list */
-    for (i=1; i<=stn; ++i)
-    {
-       bufp = g_strdup_printf ("%d", i);
-       list = g_list_append (list, bufp);
-    }
-
-    /* set pull down items */
-    gtk_combo_set_popdown_strings (GTK_COMBO (combo), list);
-    /* set standard entry */
-    if (last_nr > stn) last_nr = 1;  /* maybe the stn has become
-                                       smaller... */
-    snprintf (buf, 20, "%d", last_nr);
-    gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo)->entry), buf);
-
-    result = gtk_dialog_run (GTK_DIALOG (mdialog));
-
-    /* free the list */
-    for (lnk = list; lnk; lnk = lnk->next)
-    {
-       C_FREE (lnk->data);
-    }
-    g_list_free (list);
-    list = NULL;
-
-    if (result == GTK_RESPONSE_CANCEL)
-    {
-       nr = -1;  /* no selection */
-    }
-    else
-    {
-       bufp = gtk_editable_get_chars (GTK_EDITABLE (GTK_COMBO (combo)->entry),
-                                     0, -1);
-       nr = atoi (bufp)-1;
-       last_nr = nr+1;
-       C_FREE (bufp);
-    }
-
-    gtk_widget_destroy (mdialog);
-
-    return nr;
-}
-
-
-
-
 /*------------------------------------------------------------------*\
  *                                                                  *
  *             Functions for blocking widgets (block input)         *
@@ -303,7 +227,7 @@ static void block_release_widgets (gint action, GtkWidget 
*w, gboolean sens)
                                bw = (struct blocked_widget *)l->data;
                                gtk_widget_set_sensitive (bw->widget, 
bw->sensitive);
                        }
-                       
+
                        sort_window_release ();
                        widgets_blocked = FALSE;
            }
diff --git a/src/misc_track.c b/src/misc_track.c
index a95ab47..ffab141 100644
--- a/src/misc_track.c
+++ b/src/misc_track.c
@@ -1935,7 +1935,7 @@ gchar *get_track_info(Track *track, gboolean 
prefer_filename) {
 
 /* cancel handler for delete track */
 /* @user_data1 the selected playlist, @user_data2 are the selected tracks */
-static void delete_track_cancel(struct DeleteData *dd) {
+void delete_track_cancel(struct DeleteData *dd) {
     g_return_if_fail (dd);
 
     g_list_free(dd->tracks);
@@ -1944,7 +1944,7 @@ static void delete_track_cancel(struct DeleteData *dd) {
 
 /* ok handler for delete track */
 /* @user_data1 the selected playlist, @user_data2 are the selected tracks */
-static void delete_track_ok(struct DeleteData *dd) {
+void delete_track_ok(struct DeleteData *dd) {
     gint n;
     GList *l;
 
@@ -2040,7 +2040,7 @@ void delete_track_head(DeleteAction deleteaction) {
     itdb = pl->itdb;
     g_return_if_fail (itdb);
 
-    selected_tracks = gtkpod_get_displayed_tracks();
+    selected_tracks = gtkpod_get_selected_tracks();
     if (selected_tracks == NULL) { /* no tracks selected */
         message_sb_no_tracks_selected();
         return;
diff --git a/src/misc_track.h b/src/misc_track.h
index 274dcc2..0317ff0 100644
--- a/src/misc_track.h
+++ b/src/misc_track.h
@@ -74,5 +74,7 @@ gchar *track_get_text(Track *track, T_item item);
 gboolean track_set_text(Track *track, const gchar *new_text, T_item item);
 
 void delete_track_head (DeleteAction deleteaction);
+void delete_track_ok(struct DeleteData *dd);
+void delete_track_cancel(struct DeleteData *dd);
 
 #endif

------------------------------------------------------------------------------
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