diff options
Diffstat (limited to 'addressbook')
-rw-r--r-- | addressbook/ChangeLog | 12 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.c | 44 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-model.c | 2 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.c | 48 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-model.h | 1 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.c | 61 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.h | 3 |
7 files changed, 167 insertions, 4 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index d653db8589..a1d0828376 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,5 +1,17 @@ 2001-08-19 Christopher James Lahey <clahey@ximian.com> + * gui/component/addressbook.c (set_folder_bar_label), + gui/widgets/e-addressbook-model.c, + gui/widgets/e-addressbook-model.h (update_folder_bar_message), + gui/widgets/e-addressbook-view.c, gui/widgets/e-addressbook-view.h + (folder_bar_message): Set the folder bar message here. + + * gui/component/select-names/e-select-names-model.c (SEPLEN): Use + strlen(SEPARATOR) here so that if the separator changes the length + will work properly. + +2001-08-19 Christopher James Lahey <clahey@ximian.com> + * gui/contact-editor/fulladdr.glade: Added full country list. Fixes Ximian bug #5123. diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index a6f0dfc2a5..5e8b523a5a 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -18,6 +18,7 @@ #include <libgnomeui/gnome-uidefs.h> #include <bonobo/bonobo-generic-factory.h> #include <bonobo/bonobo-ui-util.h> +#include <bonobo/bonobo-exception.h> #include <gal/util/e-util.h> #include <gal/widgets/e-unicode.h> @@ -40,6 +41,8 @@ #include <widgets/misc/e-search-bar.h> #include <widgets/misc/e-filter-bar.h> +#define d(x) + #define PROPERTY_FOLDER_URI "folder_uri" #define PROPERTY_FOLDER_URI_IDX 1 @@ -791,6 +794,42 @@ set_status_message (EAddressbookView *eav, const char *message, AddressbookView CORBA_exception_free (&ev); } +static void +set_folder_bar_label (EAddressbookView *eav, const char *message, AddressbookView *view) +{ + CORBA_Environment ev; + GNOME_Evolution_ShellView shell_view_interface; + + CORBA_exception_init (&ev); + + shell_view_interface = retrieve_shell_view_interface_from_control (view->control); + if (!shell_view_interface) { + CORBA_exception_free (&ev); + return; + } + + d(g_message("Updating via ShellView")); + + if (message == NULL || message[0] == 0) { + GNOME_Evolution_ShellView_setFolderBarLabel (shell_view_interface, + "", + &ev); + } + else { + GNOME_Evolution_ShellView_setFolderBarLabel (shell_view_interface, + message, + &ev); + } + + if (BONOBO_EX (&ev)) + g_warning ("Exception in label update: %s", + bonobo_exception_get_text (&ev)); + + CORBA_exception_free (&ev); +} + + + BonoboControl * addressbook_factory_new_control (void) { @@ -873,6 +912,11 @@ addressbook_factory_new_control (void) view); gtk_signal_connect (GTK_OBJECT (view->view), + "folder_bar_message", + GTK_SIGNAL_FUNC(set_folder_bar_label), + view); + + gtk_signal_connect (GTK_OBJECT (view->view), "command_state_change", GTK_SIGNAL_FUNC(update_command_state), view); diff --git a/addressbook/gui/component/select-names/e-select-names-model.c b/addressbook/gui/component/select-names/e-select-names-model.c index 9dda927640..6e0482ade3 100644 --- a/addressbook/gui/component/select-names/e-select-names-model.c +++ b/addressbook/gui/component/select-names/e-select-names-model.c @@ -21,7 +21,7 @@ #include "addressbook/backend/ebook/e-card-simple.h" #define SEPARATOR ", " -#define SEPLEN 2 +#define SEPLEN (strlen(SEPARATOR)) enum { diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c index a44c066d4f..49086da70b 100644 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ b/addressbook/gui/widgets/e-addressbook-model.c @@ -35,6 +35,7 @@ enum { enum { WRITABLE_STATUS, STATUS_MESSAGE, + FOLDER_BAR_MESSAGE, CARD_ADDED, CARD_REMOVED, CARD_CHANGED, @@ -108,6 +109,33 @@ addressbook_destroy(GtkObject *object) } static void +update_folder_bar_message (EAddressbookModel *model) +{ + int count; + char *message; + + count = model->data_count; + + switch (count) { + case 0: + message = g_strdup (_("No cards")); + break; + case 1: + message = g_strdup (_("1 card")); + break; + default: + message = g_strdup_printf (_("%d cards"), count); + break; + } + + gtk_signal_emit (GTK_OBJECT (model), + e_addressbook_model_signals [FOLDER_BAR_MESSAGE], + message); + + g_free (message); +} + +static void create_card(EBookView *book_view, const GList *cards, EAddressbookModel *model) @@ -122,13 +150,23 @@ create_card(EBookView *book_view, } for ( ; cards; cards = cards->next) { + char *file_as; + model->data[model->data_count++] = cards->data; gtk_object_ref (cards->data); + gtk_object_get (GTK_OBJECT (cards->data), + "file_as", &file_as, + NULL); + g_print ("Received card: %s\n", file_as); } + g_print ("Finished\n"); + gtk_signal_emit (GTK_OBJECT (model), e_addressbook_model_signals [CARD_ADDED], old_count, model->data_count - old_count); + + update_folder_bar_message (model); } static void @@ -147,6 +185,7 @@ remove_card(EBookView *book_view, gtk_signal_emit (GTK_OBJECT (model), e_addressbook_model_signals [CARD_REMOVED], i); + update_folder_bar_message (model); break; } } @@ -238,6 +277,14 @@ e_addressbook_model_class_init (GtkObjectClass *object_class) gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + e_addressbook_model_signals [FOLDER_BAR_MESSAGE] = + gtk_signal_new ("folder_bar_message", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EAddressbookModelClass, folder_bar_message), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + e_addressbook_model_signals [CARD_ADDED] = gtk_signal_new ("card_added", GTK_RUN_LAST, @@ -376,7 +423,6 @@ e_addressbook_model_get_card(EAddressbookModel *model, if (model->data && row < model->data_count) { ECard *card; card = e_card_duplicate (model->data[row]); - gtk_object_ref (GTK_OBJECT (card)); return card; } return NULL; diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h index a0956d7003..3bd66ca46f 100644 --- a/addressbook/gui/widgets/e-addressbook-model.h +++ b/addressbook/gui/widgets/e-addressbook-model.h @@ -46,6 +46,7 @@ struct _EAddressbookModelClass { */ void (*writable_status) (EAddressbookModel *model, gboolean writable); void (*status_message) (EAddressbookModel *model, const gchar *message); + void (*folder_bar_message) (EAddressbookModel *model, const gchar *message); void (*card_added) (EAddressbookModel *model, gint index, gint count); void (*card_removed) (EAddressbookModel *model, gint index); void (*card_changed) (EAddressbookModel *model, gint index); diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index d285fa283a..beb399e38a 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -56,6 +56,7 @@ #include "e-card-merging.h" #include "e-contact-editor.h" +#include <gdk/gdkkeysyms.h> #include <ctype.h> static void e_addressbook_view_init (EAddressbookView *card); @@ -63,9 +64,12 @@ static void e_addressbook_view_class_init (EAddressbookViewClass *klass); static void e_addressbook_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); static void e_addressbook_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); static void e_addressbook_view_destroy (GtkObject *object); +static gint e_addressbook_view_key_press_event (GtkWidget *widget, + GdkEventKey *event); static void change_view_type (EAddressbookView *view, EAddressbookViewType view_type); -static void status_message (GtkObject *object, const gchar *status, EAddressbookView *eav); +static void status_message (GtkObject *object, const gchar *status, EAddressbookView *eav); +static void folder_bar_message (GtkObject *object, const gchar *status, EAddressbookView *eav); static void stop_state_changed (GtkObject *object, EAddressbookView *eav); static void writable_status (GtkObject *object, gboolean writable, EAddressbookView *eav); static void command_state_change (EAddressbookView *eav); @@ -90,6 +94,7 @@ enum { enum { STATUS_MESSAGE, + FOLDER_BAR_MESSAGE, COMMAND_STATE_CHANGE, LAST_SIGNAL }; @@ -135,8 +140,10 @@ static void e_addressbook_view_class_init (EAddressbookViewClass *klass) { GtkObjectClass *object_class; + GtkWidgetClass *widget_class; object_class = GTK_OBJECT_CLASS(klass); + widget_class = GTK_WIDGET_CLASS(klass); parent_class = gtk_type_class (gtk_table_get_type ()); @@ -144,6 +151,8 @@ e_addressbook_view_class_init (EAddressbookViewClass *klass) object_class->get_arg = e_addressbook_view_get_arg; object_class->destroy = e_addressbook_view_destroy; + widget_class->key_press_event = e_addressbook_view_key_press_event; + gtk_object_add_arg_type ("EAddressbookView::book", GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_BOOK); gtk_object_add_arg_type ("EAddressbookView::query", GTK_TYPE_STRING, @@ -159,6 +168,14 @@ e_addressbook_view_class_init (EAddressbookViewClass *klass) gtk_marshal_NONE__POINTER, GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + e_addressbook_view_signals [FOLDER_BAR_MESSAGE] = + gtk_signal_new ("folder_bar_message", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EAddressbookViewClass, folder_bar_message), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + e_addressbook_view_signals [COMMAND_STATE_CHANGE] = gtk_signal_new ("command_state_change", GTK_RUN_LAST, @@ -186,6 +203,11 @@ e_addressbook_view_init (EAddressbookView *eav) eav); gtk_signal_connect (GTK_OBJECT(eav->model), + "folder_bar_message", + GTK_SIGNAL_FUNC (folder_bar_message), + eav); + + gtk_signal_connect (GTK_OBJECT(eav->model), "stop_state_changed", GTK_SIGNAL_FUNC (stop_state_changed), eav); @@ -261,6 +283,29 @@ e_addressbook_view_destroy (GtkObject *object) GTK_OBJECT_CLASS(parent_class)->destroy(object); } +static gint +e_addressbook_view_key_press_event (GtkWidget *widget, + GdkEventKey *event) +{ + EAddressbookView *view = E_ADDRESSBOOK_VIEW (widget); + guint return_val = 0; + + if (GTK_WIDGET_CLASS (parent_class)->key_press_event) { + return_val = GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event); + if (return_val != 0) + return return_val; + } + + if ((event->keyval == GDK_Delete || + event->keyval == GDK_KP_Delete) && + event->state == 0) { + e_addressbook_view_delete_selection(view); + return_val = TRUE; + } + + return return_val; +} + GtkWidget* e_addressbook_view_new (void) { @@ -745,12 +790,26 @@ emit_status_message (EAddressbookView *eav, const gchar *status) } static void +emit_folder_bar_message (EAddressbookView *eav, const gchar *message) +{ + gtk_signal_emit (GTK_OBJECT (eav), + e_addressbook_view_signals [FOLDER_BAR_MESSAGE], + message); +} + +static void status_message (GtkObject *object, const gchar *status, EAddressbookView *eav) { emit_status_message (eav, status); } static void +folder_bar_message (GtkObject *object, const gchar *status, EAddressbookView *eav) +{ + emit_folder_bar_message (eav, status); +} + +static void stop_state_changed (GtkObject *object, EAddressbookView *eav) { command_state_change (eav); diff --git a/addressbook/gui/widgets/e-addressbook-view.h b/addressbook/gui/widgets/e-addressbook-view.h index 8fc807572a..621f26bb2a 100644 --- a/addressbook/gui/widgets/e-addressbook-view.h +++ b/addressbook/gui/widgets/e-addressbook-view.h @@ -90,7 +90,8 @@ struct _EAddressbookViewClass /* * Signals */ - void (*status_message) (EAddressbookView *view, const gchar *message); + void (*status_message) (EAddressbookView *view, const gchar *message); + void (*folder_bar_message) (EAddressbookView *view, const gchar *message); void (*command_state_change) (EAddressbookView *view); }; |