Revision: 1589
http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1589&view=rev
Author: jcsjcs
Date: 2007-06-25 07:23:59 -0700 (Mon, 25 Jun 2007)
Log Message:
-----------
* src/display_playlists.c (pm_drag_motion): don't allow drops
into non-loaded repositories. (pm_create_treeview): don't
use GTK_DEFAULT_MOTION as this gives optical feedback that
drops into the column header is allowed, even though it is
not.
* src/display_sorttabs.c (st_create_listview): renamed to
st_create_treeview(), simplified and merged with parts of
st_create_page which did part of creating the treeview. This
is the point when I realize that DND into the sort tabs is
not supported and I don't have to do anything. Code is
easier to read and understand now.
* src/display_tracks.c (tm_drag_motion): don't allow drops
into non-loaded repositories.
Modified Paths:
--------------
gtkpod/trunk/ChangeLog_detailed
gtkpod/trunk/TODOandBUGS.txt
gtkpod/trunk/src/display_playlists.c
gtkpod/trunk/src/display_sorttabs.c
gtkpod/trunk/src/display_tracks.c
Modified: gtkpod/trunk/ChangeLog_detailed
===================================================================
--- gtkpod/trunk/ChangeLog_detailed 2007-06-24 16:02:51 UTC (rev 1588)
+++ gtkpod/trunk/ChangeLog_detailed 2007-06-25 14:23:59 UTC (rev 1589)
@@ -1,3 +1,21 @@
+2007-06-25 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
+ * src/display_playlists.c (pm_drag_motion): don't allow drops
+ into non-loaded repositories. (pm_create_treeview): don't
+ use GTK_DEFAULT_MOTION as this gives optical feedback that
+ drops into the column header is allowed, even though it is
+ not.
+
+ * src/display_sorttabs.c (st_create_listview): renamed to
+ st_create_treeview(), simplified and merged with parts of
+ st_create_page which did part of creating the treeview. This
+ is the point when I realize that DND into the sort tabs is
+ not supported and I don't have to do anything. Code is
+ easier to read and understand now.
+
+ * src/display_tracks.c (tm_drag_motion): don't allow drops
+ into non-loaded repositories.
+
2007-06-24 Jorg Schuler <jcsjcs at users.sourceforge.net>
* src/misc_input.c: removed calls to dirbrowser_block() and
Modified: gtkpod/trunk/TODOandBUGS.txt
===================================================================
--- gtkpod/trunk/TODOandBUGS.txt 2007-06-24 16:02:51 UTC (rev 1588)
+++ gtkpod/trunk/TODOandBUGS.txt 2007-06-25 14:23:59 UTC (rev 1589)
@@ -4,9 +4,6 @@
- move part of free-space-update to file_convert.c
-- make it impossible to add tracks to an iPod that's not loaded (TODO:
- drag and drop!)
-
- when creating new repository: make sure backup repository filename isn't
already used.
Modified: gtkpod/trunk/src/display_playlists.c
===================================================================
--- gtkpod/trunk/src/display_playlists.c 2007-06-24 16:02:51 UTC (rev
1588)
+++ gtkpod/trunk/src/display_playlists.c 2007-06-25 14:23:59 UTC (rev
1589)
@@ -23,7 +23,7 @@
|
| This product is not supported/written/published by Apple!
|
-| $Id: display_playlists.c,v 1.105 2007/05/13 17:08:21 phantom_sf Exp $
+| $Id$
*/
#ifdef HAVE_CONFIG_H
@@ -186,6 +186,8 @@
GdkAtom target;
guint info;
Playlist *pl_d;
+ iTunesDB *itdb;
+ ExtraiTunesDBData *eitdb;
g_return_val_if_fail (widget, FALSE);
g_return_val_if_fail (GTK_IS_TREE_VIEW (widget), FALSE);
@@ -213,14 +215,26 @@
gtk_tree_model_get (model, &iter_d, PM_COLUMN_PLAYLIST, &pl_d, -1);
}
g_return_val_if_fail (pl_d, FALSE);
+ itdb = pl_d->itdb;
+ g_return_val_if_fail (itdb, FALSE);
+ eitdb = itdb->userdata;
+ g_return_val_if_fail (eitdb, FALSE);
target = gtk_drag_dest_find_target (widget, dc, NULL);
+ /* no drop possible if repository is not loaded */
+ if (!eitdb->itdb_imported)
+ {
+ gtk_tree_path_free (path);
+ gdk_drag_status (dc, 0, time);
+ return FALSE;
+ }
+
/* no drop possible if no valid target can be found */
if (target == GDK_NONE)
{
+ gtk_tree_path_free (path);
gdk_drag_status (dc, 0, time);
- gtk_tree_path_free (path);
return FALSE;
}
@@ -229,8 +243,8 @@
{ /* MPL */
if (pos == GTK_TREE_VIEW_DROP_BEFORE)
{
+ gtk_tree_path_free (path);
gdk_drag_status (dc, 0, time);
- gtk_tree_path_free (path);
return FALSE;
}
}
@@ -239,8 +253,8 @@
if (!gtk_target_list_find (
gtk_drag_dest_get_target_list (widget), target, &info))
{
+ gtk_tree_path_free (path);
gdk_drag_status (dc, 0, time);
- gtk_tree_path_free (path);
return FALSE;
}
@@ -259,8 +273,8 @@
if ((pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE) ||
(pos == GTK_TREE_VIEW_DROP_INTO_OR_AFTER))
{
+ gtk_tree_path_free (path);
gdk_drag_status (dc, 0, time);
- gtk_tree_path_free (path);
return FALSE;
}
}
@@ -2254,7 +2268,7 @@
pm_drag_types, TGNR (pm_drag_types),
GDK_ACTION_COPY|GDK_ACTION_MOVE);
gtk_drag_dest_set (GTK_WIDGET (playlist_treeview),
- GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT,
+ GTK_DEST_DEFAULT_HIGHLIGHT,
pm_drop_types, TGNR (pm_drop_types),
GDK_ACTION_COPY|GDK_ACTION_MOVE);
Modified: gtkpod/trunk/src/display_sorttabs.c
===================================================================
--- gtkpod/trunk/src/display_sorttabs.c 2007-06-24 16:02:51 UTC (rev 1588)
+++ gtkpod/trunk/src/display_sorttabs.c 2007-06-25 14:23:59 UTC (rev 1589)
@@ -1982,19 +1982,19 @@
gboolean st_set_selection (Itdb_Track *track)
{
- GtkTreeSelection *selection;
- GtkTreeView *treeview;
- GtkTreeModel *model;
- GtkTreeIter iter;
- TabEntry *entry = NULL;
- gboolean status;
+ GtkTreeSelection *selection;
+ GtkTreeView *treeview;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ TabEntry *entry = NULL;
+ gboolean status;
- gtk_notebook_set_current_page (sorttab[0]->notebook, ST_CAT_ARTIST);
- st_page_selected (sorttab[0]->notebook, ST_CAT_ARTIST);
+ gtk_notebook_set_current_page (sorttab[0]->notebook, ST_CAT_ARTIST);
+ st_page_selected (sorttab[0]->notebook, ST_CAT_ARTIST);
- while (gtk_events_pending ()) gtk_main_iteration ();
+ while (gtk_events_pending ()) gtk_main_iteration ();
- /* ######## Select the artist from the first sorttab ######## */
+ /* ######## Select the artist from the first sorttab ######## */
treeview = sorttab[0]->treeview[ST_CAT_ARTIST];
model = gtk_tree_view_get_model (treeview);
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
@@ -2682,63 +2682,73 @@
}
/* Create tracks listview */
-static void st_create_listview (gint inst)
+static void st_create_treeview (gint inst, ST_CAT_item st_cat)
{
- GtkTreeModel *model;
- GtkListStore *liststore;
- gint i;
SortTab *st = sorttab[inst];
+ GtkTreeSelection *selection;
+ GtkTreeView *treeview;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
- /* create model */
- if (st->model)
- {
- g_object_unref (G_OBJECT (st->model));
- st->model = NULL;
- }
- liststore = gtk_list_store_new (ST_NUM_COLUMNS, G_TYPE_POINTER);
- model = GTK_TREE_MODEL (liststore);
- st->model = model;
- /* set tree views */
- for (i=0; i<ST_CAT_NUM; ++i)
- {
- if (i != ST_CAT_SPECIAL)
- {
- GtkTreeSelection *selection;
- GtkTreeView *treeview;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
+ /* create treeview */
+ treeview = GTK_TREE_VIEW (gtk_tree_view_new ());
+ gtk_widget_show (GTK_WIDGET (treeview));
+ st->treeview[st_cat] = treeview;
+ gtk_container_add (GTK_CONTAINER (st->window[st_cat]),
+ GTK_WIDGET (treeview));
+ gtk_tree_view_set_model (treeview, st->model);
+ g_signal_connect_after ((gpointer) treeview, "key_release_event",
+ G_CALLBACK (on_st_treeview_key_release_event),
+ NULL);
+ gtk_drag_source_set (GTK_WIDGET (treeview), GDK_BUTTON1_MASK,
+ st_drag_types, TGNR (st_drag_types),
+ GDK_ACTION_COPY|GDK_ACTION_MOVE);
+ g_signal_connect (G_OBJECT (treeview), "button-press-event",
+ G_CALLBACK (st_button_press_event), GINT_TO_POINTER(inst));
+ g_signal_connect ((gpointer) treeview, "drag_data_get",
+ G_CALLBACK (st_drag_data_get),
+ NULL);
+ g_signal_connect ((gpointer) treeview, "drag-end",
+ G_CALLBACK (st_drag_end),
+ NULL);
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
+ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), TRUE);
+ gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview), 0);
+ gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (treeview),
+ st_search_equal_func,
+ NULL,
+ NULL);
- treeview = st->treeview[i];
- gtk_tree_view_set_model (treeview, model);
- selection = gtk_tree_view_get_selection (treeview);
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (st_selection_changed),
- GINT_TO_POINTER(inst));
- /* Add column */
- renderer = gtk_cell_renderer_text_new ();
- g_signal_connect (G_OBJECT (renderer), "edited",
- G_CALLBACK (st_cell_edited),
- GINT_TO_POINTER(inst));
- g_object_set_data (G_OBJECT (renderer), "column",
- (gint *)ST_COLUMN_ENTRY);
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_pack_start (column, renderer, TRUE);
- column = gtk_tree_view_column_new_with_attributes ("", renderer,
NULL);
- gtk_tree_view_column_set_cell_data_func (column, renderer,
- st_cell_data_func, NULL,
NULL);
- gtk_tree_view_column_set_sort_column_id (column, ST_COLUMN_ENTRY);
- gtk_tree_view_column_set_resizable (column, TRUE);
- gtk_tree_view_column_set_sort_order (column, GTK_SORT_ASCENDING);
- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (liststore),
- ST_COLUMN_ENTRY,
- st_data_compare_func,
GINT_TO_POINTER(inst), NULL);
- gtk_tree_view_append_column (treeview, column);
- }
- }
+ selection = gtk_tree_view_get_selection (treeview);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ g_signal_connect (G_OBJECT (selection), "changed",
+ G_CALLBACK (st_selection_changed),
+ GINT_TO_POINTER(inst));
+ /* Add column */
+ renderer = gtk_cell_renderer_text_new ();
+ g_signal_connect (G_OBJECT (renderer), "edited",
+ G_CALLBACK (st_cell_edited),
+ GINT_TO_POINTER(inst));
+ g_object_set_data (G_OBJECT (renderer), "column",
+ (gint *)ST_COLUMN_ENTRY);
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ column = gtk_tree_view_column_new_with_attributes ("", renderer, NULL);
+ gtk_tree_view_column_set_cell_data_func (column, renderer,
+ st_cell_data_func, NULL, NULL);
+ gtk_tree_view_column_set_sort_column_id (column, ST_COLUMN_ENTRY);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_sort_order (column, GTK_SORT_ASCENDING);
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (st->model),
+ ST_COLUMN_ENTRY,
+ st_data_compare_func,
+ GINT_TO_POINTER(inst), NULL);
+ gtk_tree_view_append_column (treeview, column);
}
+
/* Create the "special" page in the notebook and connect all the
signals */
static void st_create_special (gint inst, GtkWidget *window)
@@ -2975,48 +2985,36 @@
gtk_notebook_set_tab_label (GTK_NOTEBOOK (st0_notebook),
gtk_notebook_get_nth_page (GTK_NOTEBOOK (st0_notebook), st_cat), st0_label0);
gtk_label_set_justify (GTK_LABEL (st0_label0), GTK_JUSTIFY_LEFT);
- if (st_cat == ST_CAT_SPECIAL)
+ if (st_cat != ST_CAT_SPECIAL)
{
- /* create special window */
- st_create_special (inst, st0_window0);
+ st_create_treeview (inst, st_cat);
}
else
{
- GtkWidget *treeview;
- /* create treeview */
- treeview = gtk_tree_view_new ();
- st->treeview[st_cat] = GTK_TREE_VIEW (treeview);
- gtk_widget_show (treeview);
- gtk_container_add (GTK_CONTAINER (st0_window0), treeview);
- g_signal_connect_after ((gpointer) treeview, "key_release_event",
- G_CALLBACK (on_st_treeview_key_release_event),
- NULL);
- gtk_drag_source_set (GTK_WIDGET (treeview), GDK_BUTTON1_MASK,
- st_drag_types, TGNR (st_drag_types),
- GDK_ACTION_COPY|GDK_ACTION_MOVE);
- g_signal_connect (G_OBJECT (treeview), "button-press-event",
- G_CALLBACK (st_button_press_event),
GINT_TO_POINTER(inst));
- g_signal_connect ((gpointer) treeview, "drag_data_get",
- G_CALLBACK (st_drag_data_get),
- NULL);
- g_signal_connect ((gpointer) treeview, "drag-end",
- G_CALLBACK (st_drag_end),
- NULL);
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
- gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), TRUE);
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview), 0);
- gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (treeview),
- st_search_equal_func,
- NULL,
- NULL);
+ st_create_special (inst, st0_window0);
}
}
+
/* create all ST_CAT_NUM treeviews and the special page in sort tab of
* instance @inst, then set the model */
static void st_create_pages (gint inst)
{
+ GtkTreeModel *model;
+ GtkListStore *liststore;
+ SortTab *st = sorttab[inst];
+
+ /* remove old model */
+ if (st->model)
+ {
+ g_object_unref (G_OBJECT (st->model));
+ st->model = NULL;
+ }
+ /* create model */
+ liststore = gtk_list_store_new (ST_NUM_COLUMNS, G_TYPE_POINTER);
+ model = GTK_TREE_MODEL (liststore);
+ st->model = model;
+
st_create_page (inst, ST_CAT_ARTIST);
st_create_page (inst, ST_CAT_ALBUM);
st_create_page (inst, ST_CAT_GENRE);
@@ -3024,7 +3022,6 @@
st_create_page (inst, ST_CAT_TITLE);
st_create_page (inst, ST_CAT_YEAR);
st_create_page (inst, ST_CAT_SPECIAL);
- st_create_listview (inst);
}
Modified: gtkpod/trunk/src/display_tracks.c
===================================================================
--- gtkpod/trunk/src/display_tracks.c 2007-06-24 16:02:51 UTC (rev 1588)
+++ gtkpod/trunk/src/display_tracks.c 2007-06-25 14:23:59 UTC (rev 1589)
@@ -345,6 +345,8 @@
GdkAtom target;
GtkTreePath *path = NULL;
GtkTreeViewDropPosition pos;
+ iTunesDB *itdb;
+ ExtraiTunesDBData *eitdb;
/* printf ("drag_motion suggested: %d actions: %d\n", */
/* dc->suggested_action, dc->actions); */
@@ -357,6 +359,22 @@
display_install_autoscroll_row_timeout (widget);
+ itdb = gp_get_selected_itdb ();
+ /* no drop is possible if no playlist/repository is selected */
+ if (itdb == NULL)
+ {
+ gdk_drag_status (dc, 0, time);
+ return FALSE;
+ }
+ eitdb = itdb->userdata;
+ g_return_val_if_fail (eitdb, FALSE);
+ /* no drop is possible if no repository is loaded */
+ if (!eitdb->itdb_imported)
+ {
+ gdk_drag_status (dc, 0, time);
+ return FALSE;
+ }
+
/* optically set destination row if available */
if (gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),
x, y, &path, &pos))
@@ -389,14 +407,6 @@
path = NULL;
}
-
-
- if (pm_get_selected_playlist () == NULL)
- { /* no drop possible if no playlist is selected */
- gdk_drag_status (dc, 0, time);
- return FALSE;
- }
-
target = gtk_drag_dest_find_target (widget, dc, NULL);
/* no drop possible if no valid target can be found */
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2