aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/contact-editor
diff options
context:
space:
mode:
authorHans Petter Jansson <hpj@ximian.com>2004-01-17 08:52:06 +0800
committerHans Petter <hansp@src.gnome.org>2004-01-17 08:52:06 +0800
commitfa20d6a1f4c0c792ceefa031922da750eb60c32e (patch)
tree16859d85dc3efa973fc9f233dd65ef43e0dd798a /addressbook/gui/contact-editor
parent661c8fe4978af68a06b3c67076606edc8de7a068 (diff)
downloadgsoc2013-evolution-fa20d6a1f4c0c792ceefa031922da750eb60c32e.tar
gsoc2013-evolution-fa20d6a1f4c0c792ceefa031922da750eb60c32e.tar.gz
gsoc2013-evolution-fa20d6a1f4c0c792ceefa031922da750eb60c32e.tar.bz2
gsoc2013-evolution-fa20d6a1f4c0c792ceefa031922da750eb60c32e.tar.lz
gsoc2013-evolution-fa20d6a1f4c0c792ceefa031922da750eb60c32e.tar.xz
gsoc2013-evolution-fa20d6a1f4c0c792ceefa031922da750eb60c32e.tar.zst
gsoc2013-evolution-fa20d6a1f4c0c792ceefa031922da750eb60c32e.zip
Don't run callback if the action was cancelled. (load_source_cb): Ditto.
2004-01-16 Hans Petter Jansson <hpj@ximian.com> * gui/component/addressbook.c (load_source_auth_cb): Don't run callback if the action was cancelled. (load_source_cb): Ditto. (addressbook_load_source): Return an ID for the load attempt. (addressbook_load_source_cancel): Implement, allows cancelling a load attempt. * gui/contact-editor/e-contact-editor.c (new_target_cb): Clear the values for in-progress load operation. Only unref new_book if it's non-NULL. (cancel_load): Implement. Cancels the load operation if one is in progress. (source_selected): Cancel any running load operation before starting a new one. Set up in-progress values. (e_contact_editor_init): Clear the in-progress values. (e_contact_editor_dispose): Cancel load operation. (e_contact_editor_set_property): If a new target book is set, cancel any conflicting load operation in progress. * gui/widgets/e-addressbook-view.c (set_paned_position): Remove debug output. (get_paned_position): Ditto. svn path=/trunk/; revision=24287
Diffstat (limited to 'addressbook/gui/contact-editor')
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor.c34
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor.h4
2 files changed, 34 insertions, 4 deletions
diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c
index a3ea73d957..65106bc9ad 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.c
+++ b/addressbook/gui/contact-editor/e-contact-editor.c
@@ -964,6 +964,9 @@ address_mailing_changed (GtkWidget *widget, EContactEditor *editor)
static void
new_target_cb (EBook *new_book, EBookStatus status, EContactEditor *editor)
{
+ editor->load_source_id = 0;
+ editor->load_book = NULL;
+
if (status != E_BOOK_ERROR_OK || new_book == NULL) {
GtkWidget *source_option_menu;
@@ -972,7 +975,9 @@ new_target_cb (EBook *new_book, EBookStatus status, EContactEditor *editor)
source_option_menu = glade_xml_get_widget (editor->gui, "source-option-menu-source");
e_source_option_menu_select (E_SOURCE_OPTION_MENU (source_option_menu),
e_book_get_source (editor->target_book));
- g_object_unref (new_book);
+
+ if (new_book)
+ g_object_unref (new_book);
return;
}
@@ -981,9 +986,21 @@ new_target_cb (EBook *new_book, EBookStatus status, EContactEditor *editor)
}
static void
+cancel_load (EContactEditor *editor)
+{
+ if (editor->load_source_id) {
+ addressbook_load_source_cancel (editor->load_source_id);
+ editor->load_source_id = 0;
+
+ g_object_unref (editor->load_book);
+ editor->load_book = NULL;
+ }
+}
+
+static void
source_selected (GtkWidget *source_option_menu, ESource *source, EContactEditor *editor)
{
- EBook *new_book;
+ cancel_load (editor);
if (e_source_equal (e_book_get_source (editor->target_book), source))
return;
@@ -993,8 +1010,9 @@ source_selected (GtkWidget *source_option_menu, ESource *source, EContactEditor
return;
}
- new_book = e_book_new ();
- addressbook_load_source (new_book, source, (EBookCallback) new_target_cb, editor);
+ editor->load_book = e_book_new ();
+ editor->load_source_id = addressbook_load_source (editor->load_book, source,
+ (EBookCallback) new_target_cb, editor);
}
/* This function tells you whether name_to_style will make sense. */
@@ -1928,6 +1946,9 @@ e_contact_editor_init (EContactEditor *e_contact_editor)
e_contact_editor->source_editable = TRUE;
e_contact_editor->target_editable = TRUE;
+ e_contact_editor->load_source_id = 0;
+ e_contact_editor->load_book = NULL;
+
gui = glade_xml_new (EVOLUTION_GLADEDIR "/contact-editor.glade", NULL, NULL);
e_contact_editor->gui = gui;
@@ -2113,6 +2134,8 @@ e_contact_editor_dispose (GObject *object) {
g_object_unref(e_contact_editor->gui);
e_contact_editor->gui = NULL;
}
+
+ cancel_load (e_contact_editor);
}
static void
@@ -2264,6 +2287,9 @@ e_contact_editor_set_property (GObject *object, guint prop_id, const GValue *val
if (changed)
command_state_changed (editor);
+ /* If we're trying to load a new target book, cancel that here. */
+ cancel_load (editor);
+
/* XXX more here about editable/etc. */
break;
}
diff --git a/addressbook/gui/contact-editor/e-contact-editor.h b/addressbook/gui/contact-editor/e-contact-editor.h
index ddb4ad3a5f..069cc7d0cc 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.h
+++ b/addressbook/gui/contact-editor/e-contact-editor.h
@@ -108,6 +108,10 @@ struct _EContactEditor
guint in_async_call : 1;
EList *writable_fields;
+
+ /* ID for async load_source call */
+ guint load_source_id;
+ EBook *load_book;
};
struct _EContactEditorClass