aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui')
-rw-r--r--addressbook/gui/merging/Makefile.am3
-rw-r--r--addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade255
-rw-r--r--addressbook/gui/merging/e-card-merging.c78
-rw-r--r--addressbook/gui/merging/e-card-merging.h12
-rw-r--r--addressbook/gui/widgets/e-addressbook-table-adapter.c4
-rw-r--r--addressbook/gui/widgets/e-addressbook-util.c2
-rw-r--r--addressbook/gui/widgets/e-minicard.c9
7 files changed, 344 insertions, 19 deletions
diff --git a/addressbook/gui/merging/Makefile.am b/addressbook/gui/merging/Makefile.am
index 493edc0002..5a00726f26 100644
--- a/addressbook/gui/merging/Makefile.am
+++ b/addressbook/gui/merging/Makefile.am
@@ -16,7 +16,8 @@ libecardmerging_a_SOURCES = \
gladedir = $(datadir)/evolution/glade
-glade_DATA = e-card-duplicate-detected.glade
+glade_DATA = e-card-duplicate-detected.glade \
+ e-card-merging-book-commit-duplicate-detected.glade
EXTRA_DIST = \
$(glade_DATA)
diff --git a/addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade b/addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade
new file mode 100644
index 0000000000..0bc60ba13a
--- /dev/null
+++ b/addressbook/gui/merging/e-card-merging-book-commit-duplicate-detected.glade
@@ -0,0 +1,255 @@
+<?xml version="1.0"?>
+<GTK-Interface>
+
+<project>
+ <name>e-card-merging-book-commit-duplicate-detected</name>
+ <program_name>e-card-merging-book-commit-duplicate-detected</program_name>
+ <directory></directory>
+ <source_directory>src</source_directory>
+ <pixmaps_directory>pixmaps</pixmaps_directory>
+ <language>C</language>
+ <gnome_support>True</gnome_support>
+ <gettext_support>True</gettext_support>
+ <use_widget_names>True</use_widget_names>
+ <output_main_file>False</output_main_file>
+ <output_support_files>False</output_support_files>
+ <output_build_files>False</output_build_files>
+ <gnome_help_support>True</gnome_help_support>
+</project>
+
+<widget>
+ <class>GnomeDialog</class>
+ <name>dialog-duplicate-contact</name>
+ <title>Duplicate Contact Detected</title>
+ <type>GTK_WINDOW_POPUP</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>True</allow_grow>
+ <auto_shrink>False</auto_shrink>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox1</name>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area1</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button3</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <label>Change Anyway</label>
+ <stock_pixmap>GNOME_STOCK_PIXMAP_ADD</stock_pixmap>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>button4</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkTable</class>
+ <name>table1</name>
+ <rows>5</rows>
+ <columns>2</columns>
+ <homogeneous>False</homogeneous>
+ <row_spacing>6</row_spacing>
+ <column_spacing>6</column_spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>Custom</class>
+ <name>custom-old-card</name>
+ <creation_function>e_card_merging_create_old_card</creation_function>
+ <int1>0</int1>
+ <int2>0</int2>
+ <last_modification_time>Fri, 08 Jun 2001 01:33:22 GMT</last_modification_time>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>4</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label1</name>
+ <label>The changed email or name of this contact already
+exists in this folder. Would you like to add it anyway?</label>
+ <justify>GTK_JUSTIFY_LEFT</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>1</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label3</name>
+ <label>Conflicting Contact:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>3</top_attach>
+ <bottom_attach>4</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label4</name>
+ <label>Changed Contact:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>1</top_attach>
+ <bottom_attach>2</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>False</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>Custom</class>
+ <name>custom-new-card</name>
+ <creation_function>e_card_merging_create_old_card</creation_function>
+ <int1>0</int1>
+ <int2>0</int2>
+ <last_modification_time>Fri, 08 Jun 2001 01:33:22 GMT</last_modification_time>
+ <child>
+ <left_attach>1</left_attach>
+ <right_attach>2</right_attach>
+ <top_attach>2</top_attach>
+ <bottom_attach>3</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>True</xexpand>
+ <yexpand>True</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkAlignment</class>
+ <name>alignment1</name>
+ <xalign>0.5</xalign>
+ <yalign>0</yalign>
+ <xscale>1</xscale>
+ <yscale>0</yscale>
+ <child>
+ <left_attach>0</left_attach>
+ <right_attach>1</right_attach>
+ <top_attach>0</top_attach>
+ <bottom_attach>5</bottom_attach>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <xexpand>False</xexpand>
+ <yexpand>False</yexpand>
+ <xshrink>False</xshrink>
+ <yshrink>False</yshrink>
+ <xfill>True</xfill>
+ <yfill>True</yfill>
+ </child>
+
+ <widget>
+ <class>Custom</class>
+ <name>custom2</name>
+ <creation_function>e_create_image_widget</creation_function>
+ <string1>malehead.png</string1>
+ <int1>0</int1>
+ <int2>0</int2>
+ <last_modification_time>Fri, 08 Jun 2001 00:18:39 GMT</last_modification_time>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+</widget>
+
+</GTK-Interface>
diff --git a/addressbook/gui/merging/e-card-merging.c b/addressbook/gui/merging/e-card-merging.c
index c367a60271..dd8c317990 100644
--- a/addressbook/gui/merging/e-card-merging.c
+++ b/addressbook/gui/merging/e-card-merging.c
@@ -17,23 +17,50 @@
#include <gtk/gtksignal.h>
#include "addressbook/gui/widgets/e-minicard-widget.h"
+typedef enum {
+ E_CARD_MERGING_ADD,
+ E_CARD_MERGING_COMMIT
+} ECardMergingOpType;
+
typedef struct {
+ ECardMergingOpType op;
EBook *book;
ECard *card;
- EBookIdCallback cb;
+ EBookIdCallback id_cb;
+ EBookCallback cb;
gpointer closure;
} ECardMergingLookup;
static void
+doit (ECardMergingLookup *lookup)
+{
+ if (lookup->op == E_CARD_MERGING_ADD)
+ e_book_add_card (lookup->book, lookup->card, lookup->id_cb, lookup->closure);
+ else if (lookup->op == E_CARD_MERGING_COMMIT)
+ e_book_commit_card (lookup->book, lookup->card, lookup->cb, lookup->closure);
+}
+
+static void
+cancelit (ECardMergingLookup *lookup)
+{
+ if (lookup->op == E_CARD_MERGING_ADD) {
+ if (lookup->id_cb)
+ lookup->id_cb (lookup->book, E_BOOK_STATUS_CANCELLED, NULL, lookup->closure);
+ } else if (lookup->op == E_CARD_MERGING_COMMIT) {
+ if (lookup->cb)
+ lookup->cb (lookup->book, E_BOOK_STATUS_CANCELLED, lookup->closure);
+ }
+}
+
+static void
clicked (GnomeDialog *dialog, int button, ECardMergingLookup *lookup)
{
switch (button) {
case 0:
- e_book_add_card (lookup->book, lookup->card, lookup->cb, lookup->closure);
+ doit (lookup);
break;
case 1:
- if (lookup->cb)
- lookup->cb (lookup->book, E_BOOK_STATUS_CANCELLED, NULL, lookup->closure);
+ cancelit (lookup);
break;
}
g_free (lookup);
@@ -45,12 +72,23 @@ match_query_callback (ECard *card, ECard *match, ECardMatchType type, gpointer c
{
ECardMergingLookup *lookup = closure;
if (type == E_CARD_MATCH_NONE) {
- e_book_add_card (lookup->book, card, lookup->cb, lookup->closure);
+ doit (lookup);
g_free (lookup);
} else {
- GladeXML *ui = glade_xml_new (EVOLUTION_GLADEDIR "/e-card-duplicate-detected.glade", NULL);
+ GladeXML *ui;
+
GtkWidget *widget;
+ if (lookup->op == E_CARD_MERGING_ADD)
+ ui = glade_xml_new (EVOLUTION_GLADEDIR "/e-card-duplicate-detected.glade", NULL);
+ else if (lookup->op == E_CARD_MERGING_COMMIT)
+ ui = glade_xml_new (EVOLUTION_GLADEDIR "/e-card-merging-book-commit-duplicate-detected.glade", NULL);
+ else {
+ doit (lookup);
+ g_free (lookup);
+ return;
+ }
+
widget = glade_xml_get_widget (ui, "custom-old-card");
gtk_object_set (GTK_OBJECT (widget),
"card", match,
@@ -77,15 +115,41 @@ e_card_merging_book_add_card (EBook *book,
ECardMergingLookup *lookup;
lookup = g_new (ECardMergingLookup, 1);
+ lookup->op = E_CARD_MERGING_ADD;
lookup->book = book;
lookup->card = card;
- lookup->cb = cb;
+ lookup->id_cb = cb;
lookup->closure = closure;
e_card_locate_match_full (book, card, NULL, match_query_callback, lookup);
return TRUE;
}
+gboolean
+e_card_merging_book_commit_card (EBook *book,
+ ECard *card,
+ EBookCallback cb,
+ gpointer closure)
+{
+ ECardMergingLookup *lookup;
+ GList *avoid;
+ lookup = g_new (ECardMergingLookup, 1);
+
+ lookup->op = E_CARD_MERGING_COMMIT;
+ lookup->book = book;
+ lookup->card = card;
+ lookup->cb = cb;
+ lookup->closure = closure;
+
+ avoid = g_list_append (NULL, card);
+
+ e_card_locate_match_full (book, card, avoid, match_query_callback, lookup);
+
+ g_list_free (avoid);
+
+ return TRUE;
+}
+
GtkWidget *
e_card_merging_create_old_card(gchar *name,
gchar *string1, gchar *string2,
diff --git a/addressbook/gui/merging/e-card-merging.h b/addressbook/gui/merging/e-card-merging.h
index 022cad0099..c4d9483beb 100644
--- a/addressbook/gui/merging/e-card-merging.h
+++ b/addressbook/gui/merging/e-card-merging.h
@@ -17,10 +17,14 @@
BEGIN_GNOME_DECLS
-gboolean e_card_merging_book_add_card (EBook *book,
- ECard *card,
- EBookIdCallback cb,
- gpointer closure);
+gboolean e_card_merging_book_add_card (EBook *book,
+ ECard *card,
+ EBookIdCallback cb,
+ gpointer closure);
+gboolean e_card_merging_book_commit_card (EBook *book,
+ ECard *card,
+ EBookCallback cb,
+ gpointer closure);
END_GNOME_DECLS
diff --git a/addressbook/gui/widgets/e-addressbook-table-adapter.c b/addressbook/gui/widgets/e-addressbook-table-adapter.c
index 9557046afe..38596fd0f0 100644
--- a/addressbook/gui/widgets/e-addressbook-table-adapter.c
+++ b/addressbook/gui/widgets/e-addressbook-table-adapter.c
@@ -136,8 +136,8 @@ addressbook_set_value_at (ETableModel *etc, int col, int row, const void *val)
"card", &card,
NULL);
- e_book_commit_card(e_addressbook_model_get_ebook(priv->model),
- card, card_modified_cb, NULL);
+ e_card_merging_book_commit_card(e_addressbook_model_get_ebook(priv->model),
+ card, card_modified_cb, NULL);
/* XXX do we need this? shouldn't the commit_card generate a changed signal? */
e_table_model_cell_changed(etc, col, row);
diff --git a/addressbook/gui/widgets/e-addressbook-util.c b/addressbook/gui/widgets/e-addressbook-util.c
index 6db628c412..c8ef417116 100644
--- a/addressbook/gui/widgets/e-addressbook-util.c
+++ b/addressbook/gui/widgets/e-addressbook-util.c
@@ -95,7 +95,7 @@ commit_card_cb (EContactEditor *ce, ECard *card, gpointer data)
EBook *book;
book = E_BOOK (data);
- e_book_commit_card (book, card, card_modified_cb, NULL);
+ e_card_merging_book_commit_card (book, card, card_modified_cb, NULL);
}
/* Callback for the delete_card signal from the contact editor */
diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c
index 1627dd722a..d6cb8f0e1a 100644
--- a/addressbook/gui/widgets/e-minicard.c
+++ b/addressbook/gui/widgets/e-minicard.c
@@ -37,6 +37,7 @@
#include "e-minicard-label.h"
#include "e-minicard-view.h"
#include "e-contact-editor.h"
+#include "e-card-merging.h"
static void e_minicard_init (EMinicard *card);
static void e_minicard_class_init (EMinicardClass *klass);
@@ -479,10 +480,10 @@ e_minicard_event (GnomeCanvasItem *item, GdkEvent *event)
if (book) {
/* Add the card in the contact editor to our ebook */
- e_book_commit_card (book,
- e_minicard->card,
- card_modified_cb,
- NULL);
+ e_card_merging_book_commit_card (book,
+ e_minicard->card,
+ card_modified_cb,
+ NULL);
} else {
remodel(e_minicard);
e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_minicard));