aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/widgets/e-minicard.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui/widgets/e-minicard.c')
-rw-r--r--addressbook/gui/widgets/e-minicard.c149
1 files changed, 17 insertions, 132 deletions
diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c
index b5c11bd27f..0db903a790 100644
--- a/addressbook/gui/widgets/e-minicard.c
+++ b/addressbook/gui/widgets/e-minicard.c
@@ -31,15 +31,11 @@
#include <gal/util/e-util.h>
#include <gal/widgets/e-canvas-utils.h>
#include <gal/widgets/e-canvas.h>
-#include <gal/widgets/e-popup-menu.h>
#include "addressbook/backend/ebook/e-book.h"
-#include "addressbook/printing/e-contact-print.h"
-#include "addressbook/printing/e-contact-print-envelope.h"
#include "e-minicard.h"
#include "e-minicard-label.h"
#include "e-minicard-view.h"
#include "e-contact-editor.h"
-#include "e-contact-save-as.h"
static void e_minicard_init (EMinicard *card);
static void e_minicard_class_init (EMinicardClass *klass);
@@ -442,113 +438,6 @@ card_changed_cb (EBook* book, EBookStatus status, gpointer user_data)
g_print ("%s: %s(): a card was changed with status %d\n", __FILE__, __FUNCTION__, status);
}
-typedef struct {
- EMinicard *minicard;
- GnomeCanvasItem *parent;
- GtkWidget *canvas;
-} MinicardAndParent;
-
-static void
-e_minicard_and_parent_free (MinicardAndParent *mnp)
-{
- gtk_object_unref(GTK_OBJECT(mnp->minicard));
- gtk_object_unref(GTK_OBJECT(mnp->parent));
- gtk_object_unref(GTK_OBJECT(mnp->canvas));
- g_free(mnp);
-}
-
-static void
-save_as (GtkWidget *widget, MinicardAndParent *mnp)
-{
- EMinicard *minicard = mnp->minicard;
- if (!GTK_OBJECT_DESTROYED(minicard)) {
- e_card_simple_sync_card(minicard->simple);
- e_contact_save_as(_("Save as VCard"), minicard->card);
- }
- e_minicard_and_parent_free (mnp);
-}
-
-static void
-send_as (GtkWidget *widget, MinicardAndParent *mnp)
-{
- EMinicard *minicard = mnp->minicard;
- if (!GTK_OBJECT_DESTROYED(minicard)) {
- e_card_simple_sync_card(minicard->simple);
- e_card_send(minicard->card, E_CARD_DISPOSITION_AS_ATTACHMENT);
- }
- e_minicard_and_parent_free (mnp);
-}
-
-static void
-send_to (GtkWidget *widget, MinicardAndParent *mnp)
-{
- EMinicard *minicard = mnp->minicard;
- if (!GTK_OBJECT_DESTROYED(minicard)) {
- e_card_simple_sync_card(minicard->simple);
- e_card_send(minicard->card, E_CARD_DISPOSITION_AS_TO);
- }
- e_minicard_and_parent_free (mnp);
-}
-
-static void
-delete (GtkWidget *widget, MinicardAndParent *mnp)
-{
- EMinicard *minicard = mnp->minicard;
-
- if (!GTK_OBJECT_DESTROYED(minicard)) {
- EBook *book;
- ECard *card = minicard->card;
- ECardSimple *simple = minicard->simple;
-
- gtk_object_get(GTK_OBJECT(mnp->parent),
- "book", &book,
- NULL);
-
- gtk_object_ref(GTK_OBJECT(card));
- gtk_object_ref(GTK_OBJECT(simple));
-
- if (e_contact_editor_confirm_delete(GTK_WINDOW(gtk_widget_get_toplevel(mnp->canvas)))) {
- e_card_simple_sync_card(simple);
-
-
- /* Add the card in the contact editor to our ebook */
- e_book_remove_card (book,
- card,
- card_changed_cb,
- NULL);
- }
-
- gtk_object_unref(GTK_OBJECT(card));
- gtk_object_unref(GTK_OBJECT(simple));
- }
-
- e_minicard_and_parent_free (mnp);
-}
-
-static void
-print (GtkWidget *widget, MinicardAndParent *mnp)
-{
- EMinicard *minicard = mnp->minicard;
-
- if (!GTK_OBJECT_DESTROYED(minicard)) {
- e_card_simple_sync_card(minicard->simple);
- gtk_widget_show(e_contact_print_card_dialog_new(minicard->card));
- }
- e_minicard_and_parent_free (mnp);
-}
-
-static void
-print_envelope (GtkWidget *widget, MinicardAndParent *mnp)
-{
- EMinicard *minicard = mnp->minicard;
-
- if (!GTK_OBJECT_DESTROYED(minicard)) {
- e_card_simple_sync_card(minicard->simple);
- gtk_widget_show(e_contact_print_envelope_dialog_new(minicard->card));
- }
- e_minicard_and_parent_free (mnp);
-}
-
/* Callback for the add_card signal from the contact editor */
static void
add_card_cb (EContactEditor *ce, ECard *card, gpointer data)
@@ -664,21 +553,7 @@ e_minicard_event (GnomeCanvasItem *item, GdkEvent *event)
e_minicard->drag_button_down = TRUE;
return ret_val;
} else if (event->button.button == 3) {
- MinicardAndParent *mnp = g_new(MinicardAndParent, 1);
- EPopupMenu menu[] = { {N_("Save as VCard"), NULL, GTK_SIGNAL_FUNC(save_as), NULL, 0},
- {N_("Send contact to other"), NULL, GTK_SIGNAL_FUNC(send_as), NULL, 0},
- {N_("Send message to contact"), NULL, GTK_SIGNAL_FUNC(send_to), NULL, 0},
- {N_("Print"), NULL, GTK_SIGNAL_FUNC(print), NULL, 0},
- {N_("Print Envelope"), NULL, GTK_SIGNAL_FUNC(print_envelope), NULL, 0},
- {N_("Delete"), NULL, GTK_SIGNAL_FUNC(delete), NULL, 1},
- {NULL, NULL, NULL, 0}};
- mnp->minicard = e_minicard;
- mnp->parent = item->parent;
- mnp->canvas = GTK_WIDGET(item->canvas);
- gtk_object_ref(GTK_OBJECT(mnp->minicard));
- gtk_object_ref(GTK_OBJECT(mnp->parent));
- gtk_object_ref(GTK_OBJECT(mnp->canvas));
- e_popup_menu_run (menu, event, 0, E_IS_MINICARD_VIEW(mnp->parent) ? 0 : 1, mnp);
+ return e_minicard_selected(e_minicard, event);
}
break;
case GDK_BUTTON_RELEASE:
@@ -877,7 +752,7 @@ remodel( EMinicard *e_minicard )
NULL );
g_free(file_as);
}
-
+
list = e_minicard->fields;
e_minicard->fields = NULL;
@@ -889,7 +764,7 @@ remodel( EMinicard *e_minicard )
if (minicard_field && minicard_field->field == field) {
GList *this_list = list;
char *string;
-
+
string = e_card_simple_get(e_minicard->simple, field);
if (string && *string) {
e_minicard->fields = g_list_append(e_minicard->fields, minicard_field);
@@ -917,7 +792,7 @@ remodel( EMinicard *e_minicard )
g_free(string);
}
}
-
+
g_list_foreach(list, (GFunc) e_minicard_field_destroy, NULL);
g_list_free(list);
}
@@ -1017,9 +892,19 @@ int
e_minicard_selected (EMinicard *minicard, GdkEvent *event)
{
gint ret_val = 0;
- gtk_signal_emit(GTK_OBJECT(minicard),
- e_minicard_signals[SELECTED],
- event, &ret_val);
+ GnomeCanvasItem *item = GNOME_CANVAS_ITEM (minicard);
+ if (item->parent) {
+ guint signal_id = gtk_signal_lookup ("selection_event", GTK_OBJECT_TYPE (item->parent));
+ /* We should probably check the signature here, but I
+ * don't think it's worth the time required to code
+ * it.
+ */
+ if (signal_id != 0) {
+ gtk_signal_emit(GTK_OBJECT(item->parent),
+ signal_id,
+ item, event, &ret_val);
+ }
+ }
return ret_val;
}