aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog11
-rw-r--r--addressbook/addressbook.error.xml6
-rw-r--r--addressbook/gui/contact-editor/e-contact-quick-add.c61
3 files changed, 71 insertions, 7 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 3fe5f989ad..7179531ad1 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,14 @@
+2008-01-10 Milan Crha <mcrha@redhat.com>
+
+ ** Fix for bug #448441
+
+ * addressbook.error.xml: New message "error-read-only" added.
+ * gui/contact-editor/e-contact-quick-add.c: (struct _QuickAdd),
+ (merge_cb), (sanitize_widgets), (source_changed),
+ (build_quick_add_dialog):
+ Disable "OK" and "Edit Full" buttons if no source is selected.
+ Also set always book from combo, do not use the new created.
+
2008-01-07 Milan Crha <mcrha@redhat.com>
** Fix for bug #339813
diff --git a/addressbook/addressbook.error.xml b/addressbook/addressbook.error.xml
index fd357cf2b3..a9da7ac38d 100644
--- a/addressbook/addressbook.error.xml
+++ b/addressbook/addressbook.error.xml
@@ -118,4 +118,10 @@
<_secondary>Permission Denied.</_secondary>
</error>
+ <error id="error-read-only" type="error" default="GTK_RESPONSE_YES">
+ <_primary>Cannot add new contact</_primary>
+ <_secondary>The address book {0} is read only, thus you cannot add contacts there. Select other address book, please.</_secondary>
+ <button stock ="gtk-ok" response="GTK_RESPONSE_YES"/>
+ </error>
+
</error-list>
diff --git a/addressbook/gui/contact-editor/e-contact-quick-add.c b/addressbook/gui/contact-editor/e-contact-quick-add.c
index 5a89dea03d..e2c06256bc 100644
--- a/addressbook/gui/contact-editor/e-contact-quick-add.c
+++ b/addressbook/gui/contact-editor/e-contact-quick-add.c
@@ -43,6 +43,7 @@
#include "e-contact-editor.h"
#include "e-contact-quick-add.h"
#include "eab-contact-merging.h"
+#include "e-util/e-error.h"
typedef struct _QuickAdd QuickAdd;
struct _QuickAdd {
@@ -54,6 +55,7 @@ struct _QuickAdd {
EContactQuickAddCallback cb;
gpointer closure;
+ GtkWidget *dialog;
GtkWidget *name_entry;
GtkWidget *email_entry;
GtkWidget *option_menu;
@@ -122,7 +124,11 @@ merge_cb (EBook *book, EBookStatus status, gpointer closure)
QuickAdd *qa = (QuickAdd *) closure;
if (status == E_BOOK_ERROR_OK) {
- eab_merging_book_add_contact (book, qa->contact, NULL, NULL);
+ if (e_book_is_writable (book))
+ eab_merging_book_add_contact (book, qa->contact, NULL, NULL);
+ else
+ e_error_run (NULL, "addressbook:error-read-only", e_source_peek_name (e_book_get_source (book)), NULL);
+
if (qa->cb)
qa->cb (qa->contact, qa->closure);
g_object_unref (book);
@@ -269,17 +275,35 @@ clicked_cb (GtkWidget *w, gint button, gpointer closure)
}
static void
+sanitize_widgets (QuickAdd *qa)
+{
+ gboolean enabled = TRUE;
+
+ g_return_if_fail (qa != NULL);
+ g_return_if_fail (qa->dialog != NULL);
+
+ /* do not call here e_book_is_writable (qa->book), because it requires opened book, which takes time for remote books */
+ enabled = qa->book != NULL && e_source_combo_box_get_active_uid (E_SOURCE_COMBO_BOX (qa->option_menu));
+
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (qa->dialog), QUICK_ADD_RESPONSE_EDIT_FULL, enabled);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (qa->dialog), GTK_RESPONSE_OK, enabled);
+}
+
+static void
source_changed (ESourceComboBox *source_combo_box, QuickAdd *qa)
{
ESource *source;
source = e_source_combo_box_get_active (source_combo_box);
-
- if (qa->book) {
- g_object_unref (qa->book);
- qa->book = NULL;
+ if (source != NULL) {
+ if (qa->book) {
+ g_object_unref (qa->book);
+ qa->book = NULL;
+ }
+ qa->book = e_book_new (source, NULL);
}
- qa->book = e_book_new (source, NULL);
+
+ sanitize_widgets (qa);
}
static GtkWidget *
@@ -311,6 +335,8 @@ build_quick_add_dialog (QuickAdd *qa)
g_signal_connect (dialog, "response", G_CALLBACK (clicked_cb), qa);
+ qa->dialog = dialog;
+
qa->name_entry = gtk_entry_new ();
if (qa->name)
gtk_entry_set_text (GTK_ENTRY (qa->name_entry), qa->name);
@@ -328,11 +354,32 @@ build_quick_add_dialog (QuickAdd *qa)
e_source_combo_box_set_active (
E_SOURCE_COMBO_BOX (qa->option_menu),
e_book_get_source (book));
+
+ if (!e_source_combo_box_get_active_uid (E_SOURCE_COMBO_BOX (qa->option_menu))) {
+ /* this means the e_book_new_default_addressbook didn't find any "default" nor "system" source,
+ and created new one for us. That is wrong, choose one from combo instead. */
+
+ if (book) {
+ g_object_unref (book);
+ book = NULL;
+ }
+
+ book = e_book_new (e_source_list_peek_source_any (source_list), NULL);
+ e_source_combo_box_set_active (E_SOURCE_COMBO_BOX (qa->option_menu), e_book_get_source (book));
+
+ if (!e_source_combo_box_get_active_uid (E_SOURCE_COMBO_BOX (qa->option_menu))) {
+ /* Does it failed again? What is going on? */
+ if (book)
+ g_object_unref (book);
+ book = NULL;
+ }
+ }
+
if (qa->book) {
g_object_unref (qa->book);
qa->book = NULL;
}
- qa->book = book ;
+ qa->book = book;
source_changed (E_SOURCE_COMBO_BOX (qa->option_menu), qa);
g_signal_connect (
qa->option_menu, "changed",