diff options
author | Chris Toshok <toshok@ximian.com> | 2001-05-12 05:03:42 +0800 |
---|---|---|
committer | Chris Toshok <toshok@src.gnome.org> | 2001-05-12 05:03:42 +0800 |
commit | 95651fe8285b961687f8ade655e0c2b1b08aad78 (patch) | |
tree | a1d32c0e71523e80a63b8729150959557bf052c1 /addressbook/gui/widgets/e-minicard-view.c | |
parent | 714cf99b72b368750d167e8b4861dc8394878458 (diff) | |
download | gsoc2013-evolution-95651fe8285b961687f8ade655e0c2b1b08aad78.tar gsoc2013-evolution-95651fe8285b961687f8ade655e0c2b1b08aad78.tar.gz gsoc2013-evolution-95651fe8285b961687f8ade655e0c2b1b08aad78.tar.bz2 gsoc2013-evolution-95651fe8285b961687f8ade655e0c2b1b08aad78.tar.lz gsoc2013-evolution-95651fe8285b961687f8ade655e0c2b1b08aad78.tar.xz gsoc2013-evolution-95651fe8285b961687f8ade655e0c2b1b08aad78.tar.zst gsoc2013-evolution-95651fe8285b961687f8ade655e0c2b1b08aad78.zip |
use e_card_list_get_vcard to build up the data to send.
2001-05-11 Chris Toshok <toshok@ximian.com>
* gui/widgets/e-minicard-view.c (e_minicard_view_drag_data_get):
use e_card_list_get_vcard to build up the data to send.
(e_minicard_view_init): connect to the model's drag_begin signal.
(e_minicard_view_drag_begin): gather the list of cards being
dragged and call gtk_drag_begin.
(add_to_list): new function.
(get_card_list): same.
(disconnect_signals): disconnect the drag_data_get signal.
(e_minicard_view_init): connect to the drag_begin signal on our
model.
* gui/widgets/e-minicard-view.h (struct _EMinicardView): change
drag_card to drag_list.
* gui/widgets/e-minicard-view-model.c (minicard_drag_begin): new
function, emit our drag_begin signal.
(addressbook_incarnate): connect to the item's drag_begin signal.
(e_minicard_view_model_class_init): init our drag_begin signal.
* gui/widgets/e-minicard-view-model.h: add drag_begin signal.
* gui/component/addressbook-config.c (addressbook_source_dialog):
always loop through all source types here, making LDAP first so
it's forces as the first notebook item.
(addressbook_config_auth_label): remove SASL case.
(addressbook_source_edit_changed): same.
(addressbook_source_item_new): flag the area of code that needs to
go into the advanced dialog (if we add one before someone
graciously redesigns the entire addressbook gui :)
* gui/component/addressbook-storage.c (ldap_unparse_auth): remove
SASL case.
(ldap_parse_auth): same.
* gui/component/addressbook-storage.h: make LDAP come first in our
source type enumeration, and remove the SASL auth type.
svn path=/trunk/; revision=9774
Diffstat (limited to 'addressbook/gui/widgets/e-minicard-view.c')
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view.c | 74 |
1 files changed, 58 insertions, 16 deletions
diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c index 85a456cde1..3a89978756 100644 --- a/addressbook/gui/widgets/e-minicard-view.c +++ b/addressbook/gui/widgets/e-minicard-view.c @@ -32,7 +32,6 @@ #include <gal/widgets/e-unicode.h> #include <libgnome/gnome-i18n.h> -#if 0 static void canvas_destroy (GtkObject *object, EMinicardView *view); static void e_minicard_view_drag_data_get(GtkWidget *widget, GdkDragContext *context, @@ -40,7 +39,6 @@ static void e_minicard_view_drag_data_get(GtkWidget *widget, guint info, guint time, EMinicardView *view); -#endif static EReflowClass *parent_class = NULL; #define PARENT_TYPE (E_REFLOW_TYPE) @@ -58,20 +56,17 @@ enum { LAST_SIGNAL }; -#if 0 enum DndTargetType { - DND_TARGET_TYPE_VCARD, + DND_TARGET_TYPE_VCARD_LIST, }; -#define VCARD_TYPE "text/x-vcard" +#define VCARD_LIST_TYPE "text/x-vcard" static GtkTargetEntry drag_types[] = { - { VCARD_TYPE, 0, DND_TARGET_TYPE_VCARD } + { VCARD_LIST_TYPE, 0, DND_TARGET_TYPE_VCARD_LIST } }; static gint num_drag_types = sizeof(drag_types) / sizeof(drag_types[0]); -#endif static guint e_minicard_view_signals [LAST_SIGNAL] = {0, }; -#if 0 static void e_minicard_view_drag_data_get(GtkWidget *widget, GdkDragContext *context, @@ -80,16 +75,14 @@ e_minicard_view_drag_data_get(GtkWidget *widget, guint time, EMinicardView *view) { - printf ("e_minicard_view_drag_data_get (e_minicard = %p)\n", view->drag_card); - if (!E_IS_MINICARD_VIEW(view)) return; switch (info) { - case DND_TARGET_TYPE_VCARD: { + case DND_TARGET_TYPE_VCARD_LIST: { char *value; - - value = e_card_simple_get_vcard(view->drag_card->simple); + + value = e_card_list_get_vcard(view->drag_list); gtk_selection_data_set (selection_data, selection_data->target, @@ -98,27 +91,64 @@ e_minicard_view_drag_data_get(GtkWidget *widget, break; } } + + g_list_foreach (view->drag_list, (GFunc)gtk_object_unref, NULL); + g_list_free (view->drag_list); + view->drag_list = NULL; +} + +typedef struct { + GList *list; + EMinicardViewModel *model; +} ModelAndList; + +static void +add_to_list (int index, gpointer closure) +{ + ModelAndList *mal = closure; + mal->list = g_list_prepend (mal->list, e_minicard_view_model_get_card (mal->model, index)); +} + +static GList * +get_card_list (EMinicardViewModel *model, ESelectionModel *selection) +{ + ModelAndList mal; + + mal.model = model; + mal.list = NULL; + + e_selection_model_foreach (selection, add_to_list, &mal); + + mal.list = g_list_reverse (mal.list); + return mal.list; } static int -e_minicard_view_drag_begin (EMinicard *card, GdkEvent *event, EMinicardView *view) +e_minicard_view_drag_begin (EMinicardViewModel *model, GdkEvent *event, EMinicardView *view) { GdkDragContext *context; GtkTargetList *target_list; GdkDragAction actions = GDK_ACTION_MOVE; - view->drag_card = card; + view->drag_list = get_card_list (model, E_REFLOW (view)->selection); + + g_print ("dragging %d card(s)\n", g_list_length (view->drag_list)); target_list = gtk_target_list_new (drag_types, num_drag_types); context = gtk_drag_begin (GTK_WIDGET (GNOME_CANVAS_ITEM (view)->canvas), target_list, actions, 1/*XXX*/, event); + if (!view->canvas_drag_data_get_id) + view->canvas_drag_data_get_id = gtk_signal_connect (GTK_OBJECT (GNOME_CANVAS_ITEM (view)->canvas), + "drag_data_get", + GTK_SIGNAL_FUNC (e_minicard_view_drag_data_get), + view); + gtk_drag_set_icon_default (context); return TRUE; } -#endif #if 0 static void @@ -327,7 +357,12 @@ disconnect_signals(EMinicardView *view) gtk_signal_disconnect(GTK_OBJECT (view->model), view->status_message_id); + if (view->canvas_drag_data_get_id) + gtk_signal_disconnect(GTK_OBJECT (GNOME_CANVAS_ITEM (view)->canvas), + view->status_message_id); + view->status_message_id = 0; + view->canvas_drag_data_get_id = 0; } #if 0 @@ -466,12 +501,19 @@ e_minicard_view_init (EMinicardView *view) view->model = E_MINICARD_VIEW_MODEL(e_minicard_view_model_new()); + view->canvas_drag_data_get_id = 0; + view->status_message_id = 0; + empty_message = e_utf8_from_locale_string(_("\n\nThere are no items to show in this view\n\n" "Double-click here to create a new Contact.")); gtk_object_set (GTK_OBJECT(view), "empty_message", empty_message, "model", view->model, NULL); + + gtk_signal_connect (GTK_OBJECT (view->model), "drag_begin", + GTK_SIGNAL_FUNC (e_minicard_view_drag_begin), view); + g_free (empty_message); } |