Mercurial > pidgin
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 */ |