* groundwork for dragging to the desktop
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Sat, 17 Mar 2007 12:37:27 +0000 (12:37 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Sat, 17 Mar 2007 12:37:27 +0000 (12:37 +0000)
pmo-trunk-r911

src/widgets/modest-dnd.h
src/widgets/modest-folder-view.c
src/widgets/modest-header-view.c

index 2d625d2..6c1723f 100644 (file)
@@ -35,8 +35,9 @@ G_BEGIN_DECLS
 #define ROW_REF_DATA_NAME "row-ref"
 
 enum {
-       FOLDER_ROW,
-       HEADER_ROW
+       MODEST_FOLDER_ROW,
+       MODEST_HEADER_ROW,
+       MODEST_MSG
 };
 
 G_END_DECLS
index af1d6b1..dd8d356 100644 (file)
@@ -1142,8 +1142,8 @@ on_drag_motion (GtkWidget      *widget,
 /* Folder view drag types */
 const GtkTargetEntry folder_view_drag_types[] =
 {
-       { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, FOLDER_ROW },
-       { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_APP, HEADER_ROW }
+       { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, MODEST_FOLDER_ROW },
+       { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_APP,    MODEST_HEADER_ROW }
 };
 
 /*
index 08faaae..6f07668 100644 (file)
@@ -971,12 +971,9 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2,
 
 /* Drag and drop stuff */
 static void
-drag_data_get_cb (GtkWidget *widget, 
-                 GdkDragContext *context, 
+drag_data_get_cb (GtkWidget *widget, GdkDragContext *context, 
                  GtkSelectionData *selection_data, 
-                 guint info, 
-                 guint time, 
-                 gpointer data)
+                 guint info,  guint time, gpointer data)
 {
        GtkTreeSelection *selection;
        GtkTreeModel *model;
@@ -987,17 +984,32 @@ drag_data_get_cb (GtkWidget *widget,
        gtk_tree_selection_get_selected (selection, &model, &iter);
        source_row = gtk_tree_model_get_path (model, &iter);
 
-       gtk_tree_set_row_drag_data (selection_data,
-                                   model,
-                                   source_row);
+       switch (info) {
+       case MODEST_HEADER_ROW:
+               gtk_tree_set_row_drag_data (selection_data, model, source_row);
+               break;
+       case MODEST_MSG: {
+               TnyHeader *hdr;
+               gtk_tree_model_get (model, &iter,
+                                   TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, &hdr,
+                                   -1);
+               if (hdr) {
+                       g_object_unref (G_OBJECT(hdr));
+               }
+               break;
+       }
+       default:
+               g_message ("default");
+       }
 
        gtk_tree_path_free (source_row);
 }
 
 /* Header view drag types */
-const GtkTargetEntry header_view_drag_types[] =
-{
-       { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_APP, HEADER_ROW }
+const GtkTargetEntry header_view_drag_types[] = {
+       { "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_APP, MODEST_HEADER_ROW },
+       { "text/uri-list",      0,                   MODEST_MSG },
 };
 
 static void
@@ -1009,8 +1021,6 @@ setup_drag_and_drop (GtkTreeView *self)
                             G_N_ELEMENTS (header_view_drag_types),
                             GDK_ACTION_MOVE | GDK_ACTION_COPY);
 
-       gtk_signal_connect(GTK_OBJECT (self),
-                          "drag_data_get",
-                          GTK_SIGNAL_FUNC(drag_data_get_cb),
-                          NULL);
+       g_signal_connect(G_OBJECT (self), "drag_data_get",
+                        G_CALLBACK(drag_data_get_cb), NULL);
 }