From 81c256ebc1597ccce365adca9861dd96822cf4cd Mon Sep 17 00:00:00 2001 From: Jon Trowbridge Date: Thu, 11 Oct 2001 08:31:29 +0000 Subject: Check that view->view != NULL. (save_contact_cb): Check that view->view != 2001-10-11 Jon Trowbridge * gui/component/addressbook.c (new_contact_cb): Check that view->view != NULL. (save_contact_cb): Check that view->view != NULL. (search_cb): Check that view->view != NULL. (delete_contact_cb): Check that view->view != NULL. (print_cb): Check that view->view != NULL. (print_preview_cb): Check that view->view != NULL. (stop_loading_cb): Check that view->view != NULL. (cut_contacts_cb): Check that view->view != NULL. (copy_contacts_cb): Check that view->view != NULL. (paste_contacts_cb): Check that view->view != NULL. (select_all_contacts_cb): Check that view->view != NULL. (send_contact_cb): Check that view->view != NULL. (send_contact_to_cb): Check that view->view != NULL. (update_command_state): Check that view->view != NULL. Hold a reference to the AddressbookView for the duration of the function, in case we exit during bonobo-reentrancy. (addressbook_view_ref): Added. (addressbook_view_unref): Added. Simple ref counting for AddressbookView objects. (addressbook_view_clear): Zero out an AddressbookView. This is now separated from the deallocation of the AddressbookView object, so that we don't leave a dangling pointer if we exit during bonobo-reentrancy in update_command_state. (Which often seems to happen if we exit while addressbook operations are going on.) (destroy_callback): Replace previous call to addressbook_view_free with addressbook_view_clear/addressbook_view_unref calls. (addressbook_factory_new_control): Initialize the reference count in the AddressbookView object. * gui/widgets/e-addressbook-view.c (e_addressbook_view_destroy): Carefully zero out our destroyed object. (command_state_change): Hold a reference to ourselves during the signal emission. (get_selected_cards): Ref cards as we add them to the list. (e_addressbook_view_stop): Check for view != NULL. (e_addressbook_view_can_create): Check for view != NULL. (e_addressbook_view_can_print): Check for view != NULL. (e_addressbook_view_can_save_as): Check for view != NULL. (e_addressbook_view_can_send): Check for view != NULL. (e_addressbook_view_can_send_to): Check for view != NULL. (e_addressbook_view_can_delete): Check for view != NULL. (e_addressbook_view_can_cut): Check for view != NULL. (e_addressbook_view_can_copy): Check for view != NULL. (e_addressbook_view_can_paste): Check for view != NULL. (e_addressbook_view_can_select_all): Check for view != NULL. (e_addressbook_view_can_stop): Check for view != NULL. * gui/widgets/e-addressbook-model.c (addressbook_destroy): Be careful about zeroing out our destroyed object. * backend/ebook/e-book-view.c (e_book_view_stop): Added. Stops event processing in the underlying listener. svn path=/trunk/; revision=13578 --- addressbook/gui/widgets/e-addressbook-view.c | 52 ++++++++++++++++++---------- 1 file changed, 33 insertions(+), 19 deletions(-) (limited to 'addressbook/gui/widgets/e-addressbook-view.c') diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index 8c0bed0939..c12e14dcbe 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -257,12 +257,18 @@ e_addressbook_view_destroy (GtkObject *object) { EAddressbookView *eav = E_ADDRESSBOOK_VIEW(object); - if (eav->model) + if (eav->model) { gtk_object_unref(GTK_OBJECT(eav->model)); + eav->model = NULL; + } - if (eav->book) + if (eav->book) { gtk_object_unref(GTK_OBJECT(eav->book)); + eav->book = NULL; + } + g_free(eav->query); + eav->query = NULL; if (eav->view_collection) { gtk_object_unref (GTK_OBJECT (eav->view_collection)); @@ -280,8 +286,10 @@ e_addressbook_view_destroy (GtkObject *object) eav->clipboard_cards = NULL; } - if (eav->invisible) + if (eav->invisible) { gtk_widget_destroy (eav->invisible); + eav->invisible = NULL; + } if (GTK_OBJECT_CLASS(parent_class)->destroy) GTK_OBJECT_CLASS(parent_class)->destroy(object); @@ -858,8 +866,9 @@ writable_status (GtkObject *object, gboolean writable, EAddressbookView *eav) static void command_state_change (EAddressbookView *eav) { - gtk_signal_emit (GTK_OBJECT (eav), - e_addressbook_view_signals [COMMAND_STATE_CHANGE]); + gtk_object_ref (GTK_OBJECT (eav)); /* who knows what might happen during this emission? */ + gtk_signal_emit (GTK_OBJECT (eav), e_addressbook_view_signals [COMMAND_STATE_CHANGE]); + gtk_object_unref (GTK_OBJECT (eav)); } #ifdef JUST_FOR_TRANSLATORS @@ -1409,6 +1418,8 @@ get_selected_cards (EAddressbookView *view) for (iterator = list; iterator; iterator = iterator->next) { iterator->data = e_addressbook_model_card_at (view->model, GPOINTER_TO_INT (iterator->data)); + if (iterator->data) + gtk_object_ref (iterator->data); } list = g_list_reverse (list); return list; @@ -1485,7 +1496,8 @@ e_addressbook_view_show_all(EAddressbookView *view) void e_addressbook_view_stop(EAddressbookView *view) { - e_addressbook_model_stop (view->model); + if (view) + e_addressbook_model_stop (view->model); } static gboolean @@ -1503,64 +1515,66 @@ e_addressbook_view_selection_nonempty (EAddressbookView *view) gboolean e_addressbook_view_can_create (EAddressbookView *view) { - return e_addressbook_model_editable (view->model); + return view ? e_addressbook_model_editable (view->model) : FALSE; } gboolean e_addressbook_view_can_print (EAddressbookView *view) { - return e_addressbook_view_selection_nonempty (view); + return view ? e_addressbook_view_selection_nonempty (view) : FALSE; } gboolean e_addressbook_view_can_save_as (EAddressbookView *view) { - return e_addressbook_view_selection_nonempty (view); + return view ? e_addressbook_view_selection_nonempty (view) : FALSE; } -gboolean e_addressbook_view_can_send (EAddressbookView *view) +gboolean +e_addressbook_view_can_send (EAddressbookView *view) { - return e_addressbook_view_selection_nonempty (view); + return view ? e_addressbook_view_selection_nonempty (view) : FALSE; } -gboolean e_addressbook_view_can_send_to (EAddressbookView *view) +gboolean +e_addressbook_view_can_send_to (EAddressbookView *view) { - return e_addressbook_view_selection_nonempty (view); + return view ? e_addressbook_view_selection_nonempty (view) : FALSE; } gboolean e_addressbook_view_can_delete (EAddressbookView *view) { - return e_addressbook_view_selection_nonempty (view) && e_addressbook_model_editable (view->model); + return view ? e_addressbook_view_selection_nonempty (view) && e_addressbook_model_editable (view->model) : FALSE; } gboolean e_addressbook_view_can_cut (EAddressbookView *view) { - return e_addressbook_view_selection_nonempty (view) && e_addressbook_model_editable (view->model); + return view ? e_addressbook_view_selection_nonempty (view) && e_addressbook_model_editable (view->model) : FALSE; } gboolean e_addressbook_view_can_copy (EAddressbookView *view) { - return e_addressbook_view_selection_nonempty (view); + return view ? e_addressbook_view_selection_nonempty (view) : FALSE; } gboolean e_addressbook_view_can_paste (EAddressbookView *view) { - return e_addressbook_model_editable (view->model); + return view ? e_addressbook_model_editable (view->model) : FALSE; } gboolean e_addressbook_view_can_select_all (EAddressbookView *view) { - return e_addressbook_model_card_count (view->model) != 0; + return view ? e_addressbook_model_card_count (view->model) != 0 : FALSE; } gboolean e_addressbook_view_can_stop (EAddressbookView *view) { - return e_addressbook_model_can_stop (view->model); + return view ? e_addressbook_model_can_stop (view->model) : FALSE; } -- cgit v1.2.3