aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog47
-rw-r--r--addressbook/gui/component/addressbook.c6
-rw-r--r--addressbook/gui/widgets/e-addressbook-model.c12
-rw-r--r--addressbook/gui/widgets/e-addressbook-model.h1
-rw-r--r--addressbook/gui/widgets/e-addressbook-reflow-adapter.c5
-rw-r--r--addressbook/gui/widgets/e-addressbook-table-adapter.c1
-rw-r--r--addressbook/gui/widgets/e-addressbook-view.c65
-rw-r--r--addressbook/gui/widgets/e-minicard-view-widget.c7
8 files changed, 131 insertions, 13 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index c4f3f94f3a..4cec0e3856 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,50 @@
+2001-06-03 Chris Toshok <toshok@ximian.com>
+
+ * gui/component/addressbook.c (set_status_message): remove spew,
+ and don't call the ShellView CORBA method if the interface doesn't
+ exist (for whatever reason.)
+
+ * gui/widgets/e-addressbook-view.c (e_addressbook_view_destroy):
+ unref the EAddressbookModel.
+ (create_minicard_view): unref the adapter.
+ (card_added_cb): call e_book_error_dialog if status != SUCCESS.
+ (card_modified_cb): same.
+ (card_removed_cb): new function, and same.
+ (delete_card_cb): pass card_removed_cb as the callback.
+ (emit_status_message): new function, just emit status_message.
+ (status_message): change to call emit_status_message.
+ (card_deleted_cb): emit_status_message ("Done."), and call
+ e_book_error_dialog if status != SUCCESS.
+ (do_remove): pass view in the closure arg.
+ (e_addressbook_view_delete_selection): emit status "Removing
+ cards..." before starting the removal.
+ (e_book_error_dialog): new function - pop up a (possibly) helpful
+ message about why an operation failed.
+
+ * gui/widgets/e-minicard-view-widget.c
+ (e_minicard_view_widget_new): ref the EAddressbookReflowAdapter.
+ (e_minicard_view_widget_destroy): unref the adapter.
+ (e_minicard_view_widget_get_selection_model): if there isn't a
+ minicard view return NULL.
+
+ * gui/widgets/e-addressbook-table-adapter.c
+ (e_addressbook_table_adapter_construct): ref the
+ EAddressbookModel.
+
+ * gui/widgets/e-addressbook-reflow-adapter.c
+ (addressbook_finalize): rename this from addressbook_destroy, to
+ reflect the method change.
+ (e_addressbook_reflow_adapter_class_init): same.
+ (e_addressbook_reflow_adapter_construct): ref the
+ EAddressbookModel.
+
+ * gui/widgets/e-addressbook-model.h: add editable_set flag.
+
+ * gui/widgets/e-addressbook-model.c (writable_status): only record
+ the writable state of the addressbook if the user hasn't set it.
+ (e_addressbook_model_init): init editable_set to FALSE.
+ (e_addressbook_model_set_arg): set editable_set to TRUE.
+
2001-06-03 Ettore Perazzoli <ettore@ximian.com>
* backend/ebook/Makefile.am (evolution_vcard_importer_LDADD): Move
diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c
index a3df7a300e..e75f83b663 100644
--- a/addressbook/gui/component/addressbook.c
+++ b/addressbook/gui/component/addressbook.c
@@ -707,13 +707,15 @@ set_status_message (EAddressbookView *eav, const char *message, AddressbookView
CORBA_exception_init (&ev);
shell_view_interface = retrieve_shell_view_interface_from_control (view->control);
+ if (!shell_view_interface) {
+ CORBA_exception_free (&ev);
+ return;
+ }
if (message == NULL || message[0] == 0) {
- printf ("clearing message\n");
GNOME_Evolution_ShellView_unsetMessage (shell_view_interface, &ev);
}
else {
- printf ("setting message %s\n", message);
GNOME_Evolution_ShellView_setMessage (shell_view_interface,
message,
e_addressbook_view_can_stop (view->view), &ev);
diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c
index 9183ee0831..0d84d70e45 100644
--- a/addressbook/gui/widgets/e-addressbook-model.c
+++ b/addressbook/gui/widgets/e-addressbook-model.c
@@ -197,11 +197,13 @@ writable_status (EBook *book,
gboolean writable,
EAddressbookModel *model)
{
- model->editable = writable;
+ if (!model->editable_set) {
+ model->editable = writable;
- gtk_signal_emit (GTK_OBJECT (model),
- e_addressbook_model_signals [WRITABLE_STATUS],
- writable);
+ gtk_signal_emit (GTK_OBJECT (model),
+ e_addressbook_model_signals [WRITABLE_STATUS],
+ writable);
+ }
}
static void
@@ -298,6 +300,7 @@ e_addressbook_model_init (GtkObject *object)
model->allocated_count = 0;
model->search_in_progress = FALSE;
model->editable = FALSE;
+ model->editable_set = FALSE;
model->first_get_view = TRUE;
}
@@ -416,6 +419,7 @@ e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
break;
case ARG_EDITABLE:
model->editable = GTK_VALUE_BOOL (*arg);
+ model->editable_set = TRUE;
break;
}
}
diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h
index d6d605efe5..a0956d7003 100644
--- a/addressbook/gui/widgets/e-addressbook-model.h
+++ b/addressbook/gui/widgets/e-addressbook-model.h
@@ -33,6 +33,7 @@ struct _EAddressbookModel {
guint search_in_progress : 1;
guint editable : 1;
+ guint editable_set : 1;
guint first_get_view : 1;
};
diff --git a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c b/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
index dc767c142d..04f17fd074 100644
--- a/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
+++ b/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
@@ -244,7 +244,7 @@ e_addressbook_reflow_adapter_right_click (EAddressbookReflowAdapter *adapter, Gd
}
static void
-addressbook_destroy(GtkObject *object)
+addressbook_finalize(GtkObject *object)
{
EAddressbookReflowAdapter *adapter = E_ADDRESSBOOK_REFLOW_ADAPTER(object);
@@ -495,7 +495,7 @@ e_addressbook_reflow_adapter_class_init (GtkObjectClass *object_class)
object_class->set_arg = addressbook_set_arg;
object_class->get_arg = addressbook_get_arg;
- object_class->destroy = addressbook_destroy;
+ object_class->finalize = addressbook_finalize;
gtk_object_add_arg_type ("EAddressbookReflowAdapter::book", GTK_TYPE_OBJECT,
GTK_ARG_READWRITE, ARG_BOOK);
@@ -567,6 +567,7 @@ e_addressbook_reflow_adapter_construct (EAddressbookReflowAdapter *adapter,
EAddressbookReflowAdapterPrivate *priv = adapter->priv;
priv->model = model;
+ gtk_object_ref (GTK_OBJECT (priv->model));
priv->create_card_id = gtk_signal_connect(GTK_OBJECT(priv->model),
"card_added",
diff --git a/addressbook/gui/widgets/e-addressbook-table-adapter.c b/addressbook/gui/widgets/e-addressbook-table-adapter.c
index 4881615811..47a664df59 100644
--- a/addressbook/gui/widgets/e-addressbook-table-adapter.c
+++ b/addressbook/gui/widgets/e-addressbook-table-adapter.c
@@ -319,6 +319,7 @@ e_addressbook_table_adapter_construct (EAddressbookTableAdapter *adapter,
EAddressbookTableAdapterPrivate *priv = adapter->priv;
priv->model = model;
+ gtk_object_ref (GTK_OBJECT (priv->model));
priv->create_card_id = gtk_signal_connect(GTK_OBJECT(priv->model),
"card_added",
diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c
index 6b12c95e73..6b73e0c92e 100644
--- a/addressbook/gui/widgets/e-addressbook-view.c
+++ b/addressbook/gui/widgets/e-addressbook-view.c
@@ -33,6 +33,7 @@
#include <gal/widgets/e-popup-menu.h>
#include <gal/menus/gal-view-factory-etable.h>
#include <gal/menus/gal-view-etable.h>
+#include <libgnomeui/gnome-dialog-util.h>
#include <libgnomeprint/gnome-print.h>
#include <libgnomeprint/gnome-print-dialog.h>
@@ -74,6 +75,8 @@ static void selection_get (GtkWidget *invisible, GtkSelectionData *selection_dat
guint info, guint time_stamp, EAddressbookView *view);
static void invisible_destroyed (GtkWidget *invisible, EAddressbookView *view);
+static void e_book_error_dialog (const gchar *msg, EBookStatus status);
+
static GtkTableClass *parent_class = NULL;
/* The arguments we take */
@@ -227,6 +230,9 @@ e_addressbook_view_destroy (GtkObject *object)
{
EAddressbookView *eav = E_ADDRESSBOOK_VIEW(object);
+ if (eav->model)
+ gtk_object_unref(GTK_OBJECT(eav->model));
+
if (eav->book)
gtk_object_unref(GTK_OBJECT(eav->book));
g_free(eav->query);
@@ -457,6 +463,8 @@ create_minicard_view (EAddressbookView *view)
gtk_widget_pop_colormap ();
e_reflow_model_changed (E_REFLOW_MODEL (adapter));
+
+ gtk_object_unref (GTK_OBJECT (adapter));
}
@@ -465,6 +473,8 @@ card_added_cb (EBook* book, EBookStatus status, const char *id,
gpointer user_data)
{
g_print ("%s: %s(): a card was added\n", __FILE__, __FUNCTION__);
+ if (status != E_BOOK_STATUS_SUCCESS)
+ e_book_error_dialog (_("Error adding card"), status);
}
static void
@@ -472,6 +482,17 @@ card_modified_cb (EBook* book, EBookStatus status,
gpointer user_data)
{
g_print ("%s: %s(): a card was modified\n", __FILE__, __FUNCTION__);
+ if (status != E_BOOK_STATUS_SUCCESS)
+ e_book_error_dialog (_("Error modifying card"), status);
+}
+
+static void
+card_removed_cb (EBook* book, EBookStatus status,
+ gpointer user_data)
+{
+ g_print ("%s: %s(): a card was removed\n", __FILE__, __FUNCTION__);
+ if (status != E_BOOK_STATUS_SUCCESS)
+ e_book_error_dialog (_("Error removing card"), status);
}
/* Callback for the add_card signal from the contact editor */
@@ -501,7 +522,7 @@ delete_card_cb (EContactEditor *ce, ECard *card, gpointer data)
EBook *book;
book = E_BOOK (data);
- e_book_remove_card (book, card, card_modified_cb, NULL);
+ e_book_remove_card (book, card, card_removed_cb, NULL);
}
/* Callback used when the contact editor is closed */
@@ -734,7 +755,7 @@ table_drag_data_get (ETable *table,
}
static void
-status_message (GtkObject *object, const gchar *status, EAddressbookView *eav)
+emit_status_message (EAddressbookView *eav, const gchar *status)
{
gtk_signal_emit (GTK_OBJECT (eav),
e_addressbook_view_signals [STATUS_MESSAGE],
@@ -742,6 +763,12 @@ status_message (GtkObject *object, const gchar *status, EAddressbookView *eav)
}
static void
+status_message (GtkObject *object, const gchar *status, EAddressbookView *eav)
+{
+ emit_status_message (eav, status);
+}
+
+static void
stop_state_changed (GtkObject *object, EAddressbookView *eav)
{
command_state_change (eav);
@@ -1142,7 +1169,13 @@ e_addressbook_view_print(EAddressbookView *view)
static void
card_deleted_cb (EBook* book, EBookStatus status, gpointer user_data)
{
- g_print ("%s: %s(): a card was deleted\n", __FILE__, __FUNCTION__);
+ EAddressbookView *view = user_data;
+
+ emit_status_message (view, _("Done."));
+
+ if (status != E_BOOK_STATUS_SUCCESS) {
+ e_book_error_dialog (_("Error removing card"), status);
+ }
}
static void
@@ -1158,7 +1191,7 @@ do_remove (int i, gpointer user_data)
card = e_addressbook_model_get_card (view->model, i);
- e_book_remove_card(book, card, card_deleted_cb, NULL);
+ e_book_remove_card(book, card, card_deleted_cb, view);
gtk_object_unref (GTK_OBJECT (card));
}
@@ -1170,6 +1203,8 @@ e_addressbook_view_delete_selection(EAddressbookView *view)
g_return_if_fail (model);
+ emit_status_message (view, _("Removing cards..."));
+
e_selection_model_foreach (model,
do_remove,
view);
@@ -1182,6 +1217,28 @@ invisible_destroyed (GtkWidget *invisible, EAddressbookView *view)
}
static void
+e_book_error_dialog (const gchar *msg, EBookStatus status)
+{
+ static char *status_to_string[] = {
+ N_("Success"),
+ N_("Unknown error"),
+ N_("Repository offline"),
+ N_("Permission denied"),
+ N_("Card not found"),
+ N_("Protocol not supported"),
+ N_("Canceled"),
+ N_("Other error")
+ };
+ char *error_msg;
+
+ error_msg = g_strdup_printf ("%s: %s", msg, status_to_string [status]);
+
+ gtk_widget_show (gnome_error_dialog (error_msg));
+
+ g_free (error_msg);
+}
+
+static void
selection_get (GtkWidget *invisible,
GtkSelectionData *selection_data,
guint info,
diff --git a/addressbook/gui/widgets/e-minicard-view-widget.c b/addressbook/gui/widgets/e-minicard-view-widget.c
index 8e9f3c2761..25dbf8d272 100644
--- a/addressbook/gui/widgets/e-minicard-view-widget.c
+++ b/addressbook/gui/widgets/e-minicard-view-widget.c
@@ -138,6 +138,7 @@ e_minicard_view_widget_new (EAddressbookReflowAdapter *adapter)
EMinicardViewWidget *widget = E_MINICARD_VIEW_WIDGET (gtk_type_new (e_minicard_view_widget_get_type ()));
widget->adapter = adapter;
+ gtk_object_ref (GTK_OBJECT (widget->adapter));
return GTK_WIDGET (widget);
}
@@ -212,7 +213,9 @@ e_minicard_view_widget_destroy (GtkObject *object)
if (view->book)
gtk_object_unref(GTK_OBJECT(view->book));
g_free(view->query);
-
+
+ gtk_object_unref (GTK_OBJECT (view->adapter));
+
GTK_OBJECT_CLASS(parent_class)->destroy (object);
}
@@ -335,4 +338,6 @@ e_minicard_view_widget_get_selection_model (EMinicardViewWidget *view)
{
if (view->emv)
return E_SELECTION_MODEL (E_REFLOW (view->emv)->selection);
+ else
+ return NULL;
}