diff options
Diffstat (limited to 'addressbook/gui')
-rw-r--r-- | addressbook/gui/component/addressbook.c | 39 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.c | 63 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.h | 2 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.c | 23 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.h | 2 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view-widget.c | 6 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view-widget.h | 1 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view.c | 27 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard-view.h | 3 |
9 files changed, 128 insertions, 38 deletions
diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index 10a092cea1..a632c61ead 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -308,6 +308,20 @@ make_quick_search_widget (GtkSignalFunc start_search_func, return search_vbox; } +static void +show_all_contacts_cb (BonoboUIHandler *uih, void *user_data, const char *path) +{ + AddressbookView *view = (AddressbookView *) user_data; + e_addressbook_view_show_all(view->view); +} + +static void +stop_loading_cb (BonoboUIHandler *uih, void *user_data, const char *path) +{ + AddressbookView *view = (AddressbookView *) user_data; + e_addressbook_view_stop(view->view); +} + BonoboUIVerb verbs [] = { BONOBO_UI_VERB ("ContactsPrint", print_cb), BONOBO_UI_VERB ("ViewAsTable", toggle_view_as_cb), @@ -317,6 +331,11 @@ BonoboUIVerb verbs [] = { BONOBO_UI_VERB ("ContactNew", new_contact_cb), /* BONOBO_UI_VERB ("ContactFind", find_contact_cb),*/ BONOBO_UI_VERB ("ContactDelete", delete_contact_cb), + BONOBO_UI_VERB ("ContactViewAll", show_all_contacts_cb), + BONOBO_UI_VERB ("ContactStop", stop_loading_cb), +#ifdef HAVE_LDAP + BONOBO_UI_VERB ("ContactNewServer", new_server_cb), +#endif BONOBO_UI_VERB_END }; @@ -337,19 +356,6 @@ control_activate (BonoboControl *control, BonoboUIHandler *uih, bonobo_ui_handler_set_container (uih, remote_uih); bonobo_object_release_unref (remote_uih, NULL); - -#warning FIXME; this needs to be sorted. -#if 0 -#ifdef HAVE_LDAP - bonobo_ui_handler_menu_new_item (uih, "/Actions/New Directory Server", - N_("N_ew Directory Server"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, new_server_cb, - (gpointer)view); -#endif -#endif - component = bonobo_ui_compat_get_component (uih); bonobo_ui_component_add_verb_list_with_data ( @@ -360,12 +366,17 @@ control_activate (BonoboControl *control, BonoboUIHandler *uih, bonobo_ui_container_freeze (container, NULL); +#ifdef HAVE_LDAP + fname = bonobo_ui_util_get_ui_fname ( + EVOLUTION_DATADIR, "evolution-addressbook-ldap.xml"); +#else fname = bonobo_ui_util_get_ui_fname ( EVOLUTION_DATADIR, "evolution-addressbook.xml"); +#endif g_warning ("Attempting ui load from '%s'", fname); ui = bonobo_ui_util_new_ui (component, fname, "evolution-addressbook"); - + bonobo_ui_component_set_tree (component, container, "/", ui, NULL); g_free (fname); diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c index 9df7ab7225..830b70879c 100644 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ b/addressbook/gui/widgets/e-addressbook-model.c @@ -33,13 +33,8 @@ enum { }; static void -addressbook_destroy(GtkObject *object) +remove_book_view(EAddressbookModel *model) { - EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object); - int i; - - if (model->get_view_idle) - g_source_remove(model->get_view_idle); if (model->book_view && model->create_card_id) gtk_signal_disconnect(GTK_OBJECT (model->book_view), model->create_card_id); @@ -49,11 +44,31 @@ addressbook_destroy(GtkObject *object) if (model->book_view && model->modify_card_id) gtk_signal_disconnect(GTK_OBJECT (model->book_view), model->modify_card_id); - if (model->book) - gtk_object_unref(GTK_OBJECT(model->book)); + + model->create_card_id = 0; + model->remove_card_id = 0; + model->modify_card_id = 0; + if (model->book_view) gtk_object_unref(GTK_OBJECT(model->book_view)); + model->book_view = NULL; +} + +static void +addressbook_destroy(GtkObject *object) +{ + EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object); + int i; + + if (model->get_view_idle) + g_source_remove(model->get_view_idle); + + remove_book_view(model); + + if (model->book) + gtk_object_unref(GTK_OBJECT(model->book)); + for ( i = 0; i < model->data_count; i++ ) { gtk_object_unref(GTK_OBJECT(model->data[i])); } @@ -265,6 +280,7 @@ e_addressbook_model_init (GtkObject *object) model->data = NULL; model->data_count = 0; model->editable = TRUE; + model->first_get_view = TRUE; } static void @@ -272,17 +288,7 @@ book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointe { EAddressbookModel *model = closure; int i; - if (model->book_view && model->create_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->create_card_id); - if (model->book_view && model->remove_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->remove_card_id); - if (model->book_view && model->modify_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->modify_card_id); - if (model->book_view) - gtk_object_unref(GTK_OBJECT(model->book_view)); + remove_book_view(model); model->book_view = book_view; if (model->book_view) gtk_object_ref(GTK_OBJECT(model->book_view)); @@ -313,8 +319,18 @@ book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointe static gboolean get_view(EAddressbookModel *model) { - if (model->book && model->query) - e_book_get_book_view(model->book, model->query, book_view_loaded, model); + if (model->book && model->query) { + if (model->first_get_view) { + char *capabilities; + capabilities = e_book_get_static_capabilities(model->book); + if (strstr(capabilities, "local")) { + e_book_get_book_view(model->book, model->query, book_view_loaded, model); + } + model->first_get_view = FALSE; + } + else + e_book_get_book_view(model->book, model->query, book_view_loaded, model); + } model->get_view_idle = 0; return FALSE; @@ -421,3 +437,8 @@ e_addressbook_model_new (void) return E_TABLE_MODEL(et); } + +void e_addressbook_model_stop (EAddressbookModel *model) +{ + remove_book_view(model); +} diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h index 0bde425a25..860fb641ac 100644 --- a/addressbook/gui/widgets/e-addressbook-model.h +++ b/addressbook/gui/widgets/e-addressbook-model.h @@ -36,6 +36,7 @@ typedef struct { int create_card_id, remove_card_id, modify_card_id; guint editable : 1; + guint first_get_view : 1; } EAddressbookModel; @@ -50,5 +51,6 @@ ETableModel *e_addressbook_model_new (void); /* Returns object with ref count of 1. */ ECard *e_addressbook_model_get_card(EAddressbookModel *model, int row); +void e_addressbook_model_stop (EAddressbookModel *model); #endif /* _E_ADDRESSBOOK_MODEL_H_ */ diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index 1700cfdc89..bd229fad25 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -709,3 +709,26 @@ e_addressbook_view_delete_selection(EAddressbookView *view) if (view->view_type == E_ADDRESSBOOK_VIEW_MINICARD) e_minicard_view_widget_remove_selection (E_MINICARD_VIEW_WIDGET(view->object), card_deleted_cb, NULL); } + +void +e_addressbook_view_show_all(EAddressbookView *view) +{ + gtk_object_set(GTK_OBJECT(view), + "query", NULL, + NULL); +} + +void +e_addressbook_view_stop(EAddressbookView *view) +{ + switch(view->view_type) { + case E_ADDRESSBOOK_VIEW_MINICARD: + e_minicard_view_widget_stop(E_MINICARD_VIEW_WIDGET (view->object)); + break; + case E_ADDRESSBOOK_VIEW_TABLE: + e_addressbook_model_stop(E_ADDRESSBOOK_MODEL (view->object)); + break; + case E_ADDRESSBOOK_VIEW_NONE: + break; + } +} diff --git a/addressbook/gui/widgets/e-addressbook-view.h b/addressbook/gui/widgets/e-addressbook-view.h index 0509e897e6..60da283a75 100644 --- a/addressbook/gui/widgets/e-addressbook-view.h +++ b/addressbook/gui/widgets/e-addressbook-view.h @@ -79,6 +79,8 @@ GtkType e_addressbook_view_get_type (void); void e_addressbook_view_print (EAddressbookView *view); void e_addressbook_view_delete_selection (EAddressbookView *view); +void e_addressbook_view_show_all (EAddressbookView *view); +void e_addressbook_view_stop (EAddressbookView *view); #ifdef __cplusplus } diff --git a/addressbook/gui/widgets/e-minicard-view-widget.c b/addressbook/gui/widgets/e-minicard-view-widget.c index f23d3e4476..c6809bf1d0 100644 --- a/addressbook/gui/widgets/e-minicard-view-widget.c +++ b/addressbook/gui/widgets/e-minicard-view-widget.c @@ -268,3 +268,9 @@ void e_minicard_view_widget_jump_to_letter (EMinicardViewWidget *view, if (view->emv) e_minicard_view_jump_to_letter(E_MINICARD_VIEW(view->emv), letter); } + +void +e_minicard_view_widget_stop(EMinicardViewWidget *view) +{ + e_minicard_view_stop(E_MINICARD_VIEW(view->emv)); +} diff --git a/addressbook/gui/widgets/e-minicard-view-widget.h b/addressbook/gui/widgets/e-minicard-view-widget.h index 952e60ee65..cf20c9a4df 100644 --- a/addressbook/gui/widgets/e-minicard-view-widget.h +++ b/addressbook/gui/widgets/e-minicard-view-widget.h @@ -63,6 +63,7 @@ void e_minicard_view_widget_remove_selection (EMinicardViewWidget *view, gpointer closure); void e_minicard_view_widget_jump_to_letter (EMinicardViewWidget *view, char letter); +void e_minicard_view_widget_stop (EMinicardViewWidget *view); GtkWidget *e_minicard_view_widget_new (void); diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c index 249c987802..7169e41542 100644 --- a/addressbook/gui/widgets/e-minicard-view.c +++ b/addressbook/gui/widgets/e-minicard-view.c @@ -105,6 +105,7 @@ e_minicard_view_init (EMinicardView *view) view->remove_card_id = 0; view->modify_card_id = 0; view->canvas_destroy_id = 0; + view->first_get_view = TRUE; gtk_object_set(GTK_OBJECT(view), "empty_message", _("\n\nThere are no items to show in this view\n\n" @@ -191,8 +192,18 @@ book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointe static gboolean get_view(EMinicardView *view) { - if (view->book && view->query) - e_book_get_book_view(view->book, view->query, book_view_loaded, view); + if (view->book && view->query) { + if (view->first_get_view) { + char *capabilities; + capabilities = e_book_get_static_capabilities(view->book); + if (strstr(capabilities, "local")) { + e_book_get_book_view(view->book, view->query, book_view_loaded, view); + } + view->first_get_view = FALSE; + } + else + e_book_get_book_view(view->book, view->query, book_view_loaded, view); + } view->get_view_idle = 0; return FALSE; @@ -423,10 +434,20 @@ compare_to_letter(EMinicard *card, char *letter) } } -void e_minicard_view_jump_to_letter (EMinicardView *view, +void +e_minicard_view_jump_to_letter (EMinicardView *view, char letter) { e_reflow_sorted_jump(E_REFLOW_SORTED(view), (GCompareFunc) compare_to_letter, &letter); } + +void +e_minicard_view_stop (EMinicardView *view) +{ + disconnect_signals(view); + if (view->book_view) + gtk_object_unref(GTK_OBJECT(view->book_view)); + view->book_view = NULL; +} diff --git a/addressbook/gui/widgets/e-minicard-view.h b/addressbook/gui/widgets/e-minicard-view.h index f12f0d43cf..e4c1be870a 100644 --- a/addressbook/gui/widgets/e-minicard-view.h +++ b/addressbook/gui/widgets/e-minicard-view.h @@ -73,6 +73,8 @@ struct _EMinicardView int canvas_destroy_id; int create_card_id, remove_card_id, modify_card_id; + + guint first_get_view : 1; }; struct _EMinicardViewClass @@ -86,6 +88,7 @@ void e_minicard_view_remove_selection (EMinicardView *view, gpointer closure); void e_minicard_view_jump_to_letter (EMinicardView *view, char letter); +void e_minicard_view_stop (EMinicardView *view); #ifdef __cplusplus } |