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

Reply via email to