diff options
-rw-r--r-- | addressbook/ChangeLog | 18 | ||||
-rw-r--r-- | addressbook/gui/component/addressbook.c | 62 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.c | 23 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-addressbook-view.h | 5 |
4 files changed, 106 insertions, 2 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 4d42549a5e..eab8b1c833 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,5 +1,23 @@ 2001-01-09 Chris Toshok <toshok@helixcode.com> + * gui/component/addressbook.c (addressbook_factory_new_control): + connect with the EAddressbookView's status_message signal. + (set_status_message): set the status message on the ShellView + Interface associated with our control. + (retrieve_shell_view_interface_from_control): new function. get + the shell view inteface associated with a control. + + * gui/widgets/e-addressbook-view.c + (e_addressbook_view_class_init): register status_message signal. + (status_message): new function, emit our status_message signal. + (change_view_type): connect with the view->object's + "status_message" signal. + + * gui/widgets/e-addressbook-view.h (struct + _EAddressbookViewClass): add status_message signal. + +2001-01-09 Chris Toshok <toshok@helixcode.com> + * gui/widgets/e-minicard-view-widget.c (e_minicard_view_widget_class_init): register our status_message signal. diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c index e9d4f45527..531106b2c4 100644 --- a/addressbook/gui/component/addressbook.c +++ b/addressbook/gui/component/addressbook.c @@ -603,6 +603,63 @@ addressbook_query_changed (ESearchBar *esb, AddressbookView *view) g_free (search_word); } +static GNOME_Evolution_ShellView +retrieve_shell_view_interface_from_control (BonoboControl *control) +{ + Bonobo_ControlFrame control_frame; + GNOME_Evolution_ShellView shell_view_interface; + CORBA_Environment ev; + + shell_view_interface = gtk_object_get_data (GTK_OBJECT (control), + "shell_view_interface"); + + if (shell_view_interface) + return shell_view_interface; + + control_frame = bonobo_control_get_control_frame (control); + + if (control_frame == NULL) + return CORBA_OBJECT_NIL; + + CORBA_exception_init (&ev); + shell_view_interface = Bonobo_Unknown_queryInterface (control_frame, + "IDL:GNOME/Evolution/ShellView:1.0", + &ev); + CORBA_exception_free (&ev); + + if (shell_view_interface != CORBA_OBJECT_NIL) + gtk_object_set_data (GTK_OBJECT (control), + "shell_view_interface", + shell_view_interface); + else + g_warning ("Control frame doesn't have Evolution/ShellView."); + + return shell_view_interface; +} + +static void +set_status_message (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 (message == NULL || message[0] == 0) { + printf ("clearing message\n"); + GNOME_Evolution_ShellView_unsetMessage (shell_view_interface, &ev); + } + else { + printf ("setting message %s\n", message); + GNOME_Evolution_ShellView_setMessage (shell_view_interface, + message, 0 /* XXX */, &ev); + } + + CORBA_exception_free (&ev); +} + BonoboControl * addressbook_factory_new_control (void) { @@ -650,6 +707,11 @@ addressbook_factory_new_control (void) bonobo_control_set_properties (view->control, view->properties); + gtk_signal_connect (GTK_OBJECT (view->view), + "status_message", + GTK_SIGNAL_FUNC(set_status_message), + view); + view->uri = NULL; gtk_signal_connect (GTK_OBJECT (view->control), "activate", diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c index 416b1e71e6..0c977a2a35 100644 --- a/addressbook/gui/widgets/e-addressbook-view.c +++ b/addressbook/gui/widgets/e-addressbook-view.c @@ -68,6 +68,13 @@ enum { ARG_TYPE, }; +enum { + STATUS_MESSAGE, + LAST_SIGNAL +}; + +static guint e_addressbook_view_signals [LAST_SIGNAL] = {0, }; + GtkType e_addressbook_view_get_type (void) { @@ -111,6 +118,16 @@ e_addressbook_view_class_init (EAddressbookViewClass *klass) GTK_ARG_READWRITE, ARG_QUERY); gtk_object_add_arg_type ("EAddressbookView::type", GTK_TYPE_ENUM, GTK_ARG_READWRITE, ARG_TYPE); + + e_addressbook_view_signals [STATUS_MESSAGE] = + gtk_signal_new ("status_message", + GTK_RUN_LAST, + object_class->type, + GTK_SIGNAL_OFFSET (EAddressbookViewClass, status_message), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + + gtk_object_class_add_signals (object_class, e_addressbook_view_signals, LAST_SIGNAL); } static void @@ -536,9 +553,11 @@ table_right_click(ETableScrolled *table, gint row, gint col, GdkEvent *event, EA } static void -status_message (GtkObject *object, const gchar *message, EAddressbookView *eav) +status_message (GtkObject *object, const gchar *status, EAddressbookView *eav) { - printf ("status = %s\n", message); + gtk_signal_emit (GTK_OBJECT (eav), + e_addressbook_view_signals [STATUS_MESSAGE], + status); } #define SPEC "<?xml version=\"1.0\"?> \ diff --git a/addressbook/gui/widgets/e-addressbook-view.h b/addressbook/gui/widgets/e-addressbook-view.h index 28c70798fc..ca6cedf0b8 100644 --- a/addressbook/gui/widgets/e-addressbook-view.h +++ b/addressbook/gui/widgets/e-addressbook-view.h @@ -73,6 +73,11 @@ struct _EAddressbookView struct _EAddressbookViewClass { GtkTableClass parent_class; + + /* + * Signals + */ + void (*status_message) (EAddressbookView *view, const gchar *message); }; GtkWidget *e_addressbook_view_new (void); |