[anjal] Moblin Bugzilla FIX #3745 - Support DnD of threads.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: svn-commits-list gnome org
- Subject: [anjal] Moblin Bugzilla FIX #3745 - Support DnD of threads.
- Date: Wed, 24 Jun 2009 05:15:47 +0000 (UTC)
commit 9c800a75287ab06a6d359e24859eec41a16efd3c
Author: Srinivasa Ragavan <sragavan novell com>
Date: Wed Jun 24 10:45:44 2009 +0530
Moblin Bugzilla FIX #3745 - Support DnD of threads.
src/mail-folder-view.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 54 insertions(+), 0 deletions(-)
---
diff --git a/src/mail-folder-view.c b/src/mail-folder-view.c
index b23ed91..e7afac2 100644
--- a/src/mail-folder-view.c
+++ b/src/mail-folder-view.c
@@ -30,6 +30,7 @@
#include "mail/em-popup.h"
#include "mail/mail-mt.h"
#include "mail/mail-ops.h"
+#include "mail/em-utils.h"
#ifdef EVOLUTION_2_26
#include "mail/em-marshal.h"
#else
@@ -1122,6 +1123,7 @@ mfv_tree_resize (GtkWidget *w, GtkAllocation *req, GtkTreeViewColumn *col)
if ((req->width - (gtk_tree_view_column_get_fixed_width(col)+66) > 10) && GTK_WIDGET_VISIBLE(shell->priv->folder_pane)) {
gtk_tree_view_column_set_fixed_width (col, req->width - 66);
}
+ g_signal_handlers_disconnect_by_func (w, mfv_tree_resize, col);
}
@@ -1249,6 +1251,48 @@ mfv_key_pressed (GtkWidget *w, GdkEventKey *event, MailFolderView *mfv)
return TRUE;
}
+enum {
+ DND_X_UID_LIST, /* x-uid-list */
+ DND_MESSAGE_RFC822, /* message/rfc822 */
+ DND_TEXT_URI_LIST /* text/uri-list */
+};
+
+static GtkTargetEntry ml_drag_types[] = {
+ { (gchar *) "x-uid-list", 0, DND_X_UID_LIST },
+ { (gchar *) "text/uri-list", 0, DND_TEXT_URI_LIST },
+};
+
+static void
+mfv_drag_data_get (GtkWidget *widget, GdkDragContext *drag_context, GtkSelectionData *data, guint info, guint time, gpointer user_data)
+{
+ MailFolderView *mfv = (MailFolderView *)user_data;
+ GPtrArray *uids;
+ GtkTreeIter iter;
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (mfv->tree);
+
+ gtk_tree_selection_get_selected (sel, NULL, &iter);
+ uids = em_tree_store_get_child_sorted_tree ((EMTreeStore *)mfv->model, &iter);
+
+ if (uids->len > 0) {
+ switch (info) {
+ case DND_X_UID_LIST:
+ em_utils_selection_set_uidlist(data, mfv->uri, uids);
+ break;
+ case DND_TEXT_URI_LIST:
+ em_utils_selection_set_urilist(data, mfv->priv->folder, uids);
+ break;
+ }
+ }
+
+ /* FIXME: Free uids*/
+}
+
+static void
+mfv_drag_data_delete (GtkWidget *w, GdkDragContext *drag_context, gpointer data)
+{
+ g_signal_stop_emission_by_name (w, "drag-data-delete");
+}
+
void
mail_folder_view_construct (MailFolderView *shell)
{
@@ -1300,6 +1344,16 @@ mail_folder_view_construct (MailFolderView *shell)
g_signal_connect (shell->tree, "button-press-event", G_CALLBACK(mfv_button_clicked), shell);
g_signal_connect (shell->tree, "key-press-event", G_CALLBACK(mfv_key_pressed), shell);
+ /* Setup DND */
+ gtk_drag_source_set(shell->tree, GDK_BUTTON1_MASK,
+ ml_drag_types, sizeof(ml_drag_types)/sizeof(ml_drag_types[0]),
+ GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_ASK);
+
+ g_signal_connect(shell->tree, "drag-data-get",
+ G_CALLBACK(mfv_drag_data_get), shell);
+ g_signal_connect(shell->tree, "drag-data-delete",
+ G_CALLBACK(mfv_drag_data_delete), shell);
+
/* Create the single column for flags */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_fixed_width (column, 24);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]