comparison src/gtkblist.c @ 9495:960e3fd1da94

[gaim-migrate @ 10321] I think this all works. Test it for me. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Fri, 09 Jul 2004 22:33:06 +0000
parents d27156c9c876
children 6f9bedacac3b
comparison
equal deleted inserted replaced
9494:42d6650bcdac 9495:960e3fd1da94
2002 } 2002 }
2003 2003
2004 result = parse_vcard(sd->data, group); 2004 result = parse_vcard(sd->data, group);
2005 2005
2006 gtk_drag_finish(dc, result, (dc->action == GDK_ACTION_MOVE), t); 2006 gtk_drag_finish(dc, result, (dc->action == GDK_ACTION_MOVE), t);
2007 } else if (sd->target == gdk_atom_intern("text/plain", FALSE) && sd->data) {
2008 GtkTreePath *path = NULL;
2009 GtkTreeViewDropPosition position;
2010
2011 if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget),
2012 x, y, &path, &position))
2013 {
2014 GtkTreeIter iter;
2015 GaimBlistNode *node;
2016 GValue val = {0};
2017
2018 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel),
2019 &iter, path);
2020 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel),
2021 &iter, NODE_COLUMN, &val);
2022 node = g_value_get_pointer(&val);
2023
2024 if (GAIM_BLIST_NODE_IS_BUDDY(node) || GAIM_BLIST_NODE_IS_CONTACT(node)) {
2025 GaimBuddy *b = GAIM_BLIST_NODE_IS_BUDDY(node) ? (GaimBuddy*)node : gaim_contact_get_priority_buddy((GaimContact*)node);
2026 if (!g_ascii_strncasecmp(sd->data, "file://", 7)) {
2027 GError *converr = NULL;
2028 gchar *file;
2029 if(!(file = g_filename_from_uri(sd->data, NULL, &converr))) {
2030 gaim_debug(GAIM_DEBUG_ERROR, "conv dnd", "%s\n",
2031 (converr ? converr->message :
2032 "g_filename_from_uri error"));
2033 return;
2034 }
2035 file = g_strchomp(file);
2036 /* XXX - Handle dragging more than one file. Make ft API support creating a transfer with more than one file */
2037 serv_send_file(gaim_account_get_connection(b->account), b->name, file);
2038 g_free(file);
2039 }
2040 }
2041 }
2007 } 2042 }
2008 } 2043 }
2009 2044
2010 static void gaim_gtk_blist_paint_tip(GtkWidget *widget, GdkEventExpose *event, GaimBlistNode *node) 2045 static void gaim_gtk_blist_paint_tip(GtkWidget *widget, GdkEventExpose *event, GaimBlistNode *node)
2011 { 2046 {
2964 gaim_prefs_get_bool("/gaim/gtk/blist/show_warning_level")); 2999 gaim_prefs_get_bool("/gaim/gtk/blist/show_warning_level"));
2965 gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, FALSE); 3000 gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, FALSE);
2966 } 3001 }
2967 } 3002 }
2968 3003
2969 enum {DRAG_BUDDY, DRAG_ROW, DRAG_VCARD}; 3004 enum {DRAG_BUDDY, DRAG_ROW, DRAG_VCARD, DRAG_TEXT, NUM_TARGETS};
2970 3005
2971 static char * 3006 static char *
2972 item_factory_translate_func (const char *path, gpointer func_data) 3007 item_factory_translate_func (const char *path, gpointer func_data)
2973 { 3008 {
2974 return _((char *)path); 3009 return _((char *)path);
3004 GtkSizeGroup *sg; 3039 GtkSizeGroup *sg;
3005 GtkAccelGroup *accel_group; 3040 GtkAccelGroup *accel_group;
3006 GtkTreeSelection *selection; 3041 GtkTreeSelection *selection;
3007 GtkTargetEntry gte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, 3042 GtkTargetEntry gte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW},
3008 {"application/x-im-contact", 0, DRAG_BUDDY}, 3043 {"application/x-im-contact", 0, DRAG_BUDDY},
3009 {"text/x-vcard", 0, DRAG_VCARD }}; 3044 {"text/x-vcard", 0, DRAG_VCARD },
3045 {"text/plain", 0, DRAG_TEXT}};
3010 3046
3011 if (gtkblist && gtkblist->window) { 3047 if (gtkblist && gtkblist->window) {
3012 gtk_widget_show(gtkblist->window); 3048 gtk_widget_show(gtkblist->window);
3013 return; 3049 return;
3014 } 3050 }
3074 g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(gaim_gtk_blist_selection_changed), NULL); 3110 g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(gaim_gtk_blist_selection_changed), NULL);
3075 3111
3076 3112
3077 /* Set up dnd */ 3113 /* Set up dnd */
3078 gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(gtkblist->treeview), 3114 gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(gtkblist->treeview),
3079 GDK_BUTTON1_MASK, gte, 3, 3115 GDK_BUTTON1_MASK, gte, NUM_TARGETS,
3080 GDK_ACTION_COPY); 3116 GDK_ACTION_COPY);
3081 gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(gtkblist->treeview), 3117 gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(gtkblist->treeview),
3082 gte, 3, 3118 gte, NUM_TARGETS,
3083 GDK_ACTION_COPY | GDK_ACTION_MOVE); 3119 GDK_ACTION_COPY | GDK_ACTION_MOVE);
3084 3120
3085 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-received", G_CALLBACK(gaim_gtk_blist_drag_data_rcv_cb), NULL); 3121 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-received", G_CALLBACK(gaim_gtk_blist_drag_data_rcv_cb), NULL);
3086 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-get", G_CALLBACK(gaim_gtk_blist_drag_data_get_cb), NULL); 3122 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-get", G_CALLBACK(gaim_gtk_blist_drag_data_get_cb), NULL);
3087 3123
3088 /* Tooltips */ 3124 /* Tooltips */