aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/widgets/e-addressbook-view.c
diff options
context:
space:
mode:
authorJon Trowbridge <trow@ximian.com>2001-10-11 16:31:29 +0800
committerJon Trowbridge <trow@src.gnome.org>2001-10-11 16:31:29 +0800
commit81c256ebc1597ccce365adca9861dd96822cf4cd (patch)
treeadfae342966cf08286f9453e97e789f190654dd0 /addressbook/gui/widgets/e-addressbook-view.c
parent4e40ea7c7fe9c469706b23414b1dbe0884e5f267 (diff)
downloadgsoc2013-evolution-81c256ebc1597ccce365adca9861dd96822cf4cd.tar
gsoc2013-evolution-81c256ebc1597ccce365adca9861dd96822cf4cd.tar.gz
gsoc2013-evolution-81c256ebc1597ccce365adca9861dd96822cf4cd.tar.bz2
gsoc2013-evolution-81c256ebc1597ccce365adca9861dd96822cf4cd.tar.lz
gsoc2013-evolution-81c256ebc1597ccce365adca9861dd96822cf4cd.tar.xz
gsoc2013-evolution-81c256ebc1597ccce365adca9861dd96822cf4cd.tar.zst
gsoc2013-evolution-81c256ebc1597ccce365adca9861dd96822cf4cd.zip
Check that view->view != NULL. (save_contact_cb): Check that view->view !=
2001-10-11 Jon Trowbridge <trow@ximian.com> * 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
Diffstat (limited to 'addressbook/gui/widgets/e-addressbook-view.c')
-rw-r--r--addressbook/gui/widgets/e-addressbook-view.c52
1 files changed, 33 insertions, 19 deletions
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;
}