diff options
-rw-r--r-- | shell/e-folder-list.c | 692 | ||||
-rw-r--r-- | shell/e-folder-list.h | 115 | ||||
-rw-r--r-- | shell/e-folder-tree.c | 460 | ||||
-rw-r--r-- | shell/e-folder-tree.h | 60 | ||||
-rw-r--r-- | shell/e-folder.c | 551 | ||||
-rw-r--r-- | shell/e-folder.h | 108 | ||||
-rw-r--r-- | shell/evolution-activity-client.h | 91 | ||||
-rw-r--r-- | shell/evolution-folder-selector-button.h | 81 | ||||
-rw-r--r-- | shell/evolution-shell-client.h | 97 | ||||
-rw-r--r-- | shell/evolution-shell-component.c | 1230 | ||||
-rw-r--r-- | shell/evolution-shell-component.h | 217 | ||||
-rw-r--r-- | shell/evolution-storage.h | 185 |
12 files changed, 0 insertions, 3887 deletions
diff --git a/shell/e-folder-list.c b/shell/e-folder-list.c deleted file mode 100644 index fb199be2a9..0000000000 --- a/shell/e-folder-list.c +++ /dev/null @@ -1,692 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-folder-list.c - * Copyright 2000, 2001, Ximian, Inc. - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License, version 2, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#include <config.h> - -#include <string.h> - -#include <gtk/gtkframe.h> - -#include <libgnome/gnome-i18n.h> - -#include <libxml/parser.h> -#include <libxml/xmlmemory.h> - -#include <glade/glade.h> - -#include <gal/e-table/e-table-memory-store.h> -#include <gal/util/e-xml-utils.h> -#include <gal/widgets/e-gui-utils.h> -#include <gal/widgets/e-option-menu.h> - -#include "e-folder-list.h" -#include "e-shell-marshal.h" - -#include "Evolution.h" - -static GtkVBoxClass *parent_class = NULL; -#define PARENT_TYPE (gtk_vbox_get_type ()) - -enum { - CHANGED, - OPTION_MENU_CHANGED, - LAST_SIGNAL -}; - -static guint signals [LAST_SIGNAL] = { 0, }; - -/* The arguments we take */ -enum { - PROP_0, - PROP_TITLE, - PROP_POSSIBLE_TYPES, -}; - -struct _EFolderListPrivate { - GladeXML *gui; - - ETableScrolled *scrolled_table; - char *title; - GtkFrame *frame; - ETableMemoryStore *model; - EvolutionShellClient *client; - GNOME_Evolution_StorageRegistry corba_storage_registry; - EOptionMenu *option_menu; - - char **possible_types; -}; - - -static GNOME_Evolution_Folder * -get_folder_for_uri (EFolderList *efl, - const char *uri) -{ - EFolderListPrivate *priv = efl->priv; - CORBA_Environment ev; - GNOME_Evolution_Folder *folder; - - CORBA_exception_init (&ev); - folder = GNOME_Evolution_StorageRegistry_getFolderByUri ( - priv->corba_storage_registry, uri, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - folder = CORBA_OBJECT_NIL; - CORBA_exception_free (&ev); - - return folder; -} - -static char * -create_display_string (EFolderList *efl, char *folder_uri, char *folder_name) -{ - char *storage_lname, *p; - char *label_text; - - storage_lname = NULL; - p = strchr (folder_uri, '/'); - if (p) { - p = strchr (p + 1, '/'); - if (p) { - GNOME_Evolution_Folder *storage_folder; - char *storage_uri; - - storage_uri = g_strndup (folder_uri, - p - folder_uri); - storage_folder = get_folder_for_uri (efl, storage_uri); - storage_lname = g_strdup (storage_folder->displayName); - CORBA_free (storage_folder); - g_free (storage_uri); - } - } - - if (storage_lname) { - label_text = g_strdup_printf (_("\"%s\" in \"%s\""), folder_name, - storage_lname); - g_free (storage_lname); - } else - label_text = g_strdup_printf ("\"%s\"", folder_name); - - return label_text; -} - - - -static void -e_folder_list_changed (EFolderList *efl) -{ - g_signal_emit (efl, signals[CHANGED], 0); -} - -static void -e_folder_list_dispose (GObject *object) -{ - EFolderList *efl = E_FOLDER_LIST (object); - - if (efl->priv != NULL) { - g_object_unref (efl->priv->gui); - g_object_unref (efl->priv->client); - g_free (efl->priv); - efl->priv = NULL; - } - - if (G_OBJECT_CLASS (parent_class)->dispose) - (* G_OBJECT_CLASS (parent_class)->dispose) (object); -} - -static void -set_frame_label (EFolderList *efl) -{ - GtkFrame *frame = efl->priv->frame; - char *title = efl->priv->title; - if (frame) { - if (title) { - gtk_frame_set_label (frame, title); - gtk_frame_set_shadow_type (frame, GTK_SHADOW_ETCHED_IN); - } else { - gtk_frame_set_label (frame, ""); - gtk_frame_set_shadow_type (frame, GTK_SHADOW_NONE); - } - } -} - -static void -e_folder_list_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - EFolderList *efl = E_FOLDER_LIST(object); - - switch (property_id) { - case PROP_TITLE: - g_free (efl->priv->title); - efl->priv->title = g_strdup (g_value_get_string (value)); - set_frame_label (efl); - break; - case PROP_POSSIBLE_TYPES: - g_strfreev (efl->priv->possible_types); - efl->priv->possible_types = e_strdupv (g_value_get_pointer (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; - } -} - -static void -e_folder_list_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - EFolderList *efl = E_FOLDER_LIST(object); - - switch (property_id) { - case PROP_TITLE: - g_value_set_string (value, efl->priv->title); - break; - case PROP_POSSIBLE_TYPES: - g_value_set_pointer (value, e_strdupv ((const gchar **) efl->priv->possible_types)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; - } -} - -static void -e_folder_list_class_init (EFolderListClass *klass) -{ - GObjectClass *object_class; - GtkVBoxClass *vbox_class; - - object_class = (GObjectClass*) klass; - vbox_class = (GtkVBoxClass *) klass; - parent_class = g_type_class_ref (PARENT_TYPE); - - glade_init(); - - object_class->set_property = e_folder_list_set_property; - object_class->get_property = e_folder_list_get_property; - object_class->dispose = e_folder_list_dispose; - - klass->changed = NULL; - klass->option_menu_changed = NULL; - - signals [OPTION_MENU_CHANGED] = - g_signal_new ("option_menu_changed", - E_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EFolderListClass, option_menu_changed), - NULL, NULL, - e_shell_marshal_NONE__INT, - G_TYPE_NONE, 1, - G_TYPE_INT); - - signals [CHANGED] = - g_signal_new ("changed", - E_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EFolderListClass, changed), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - E_OBJECT_CLASS_ADD_SIGNALS (object_class, signals, LAST_SIGNAL); - - g_object_class_install_property (object_class, PROP_TITLE, - g_param_spec_string ("title", - NULL, - NULL, - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, PROP_POSSIBLE_TYPES, - g_param_spec_pointer ("possible_types", - NULL, - NULL, - G_PARAM_READWRITE)); -} - -#define SPEC "<ETableSpecification cursor-mode=\"line\"" \ - " selection-mode=\"browse\"" \ - " no-headers=\"true\"" \ - ">" \ - " <ETableColumn model_col=\"0\"" \ - " expansion=\"0.0\"" \ - " cell=\"pixbuf\"" \ - " minimum_width=\"18\"" \ - " resizable=\"false\"" \ - " _title=\"icon\"" \ - " compare=\"string\"" \ - " search=\"string\"/>" \ - " <ETableColumn model_col=\"1\"" \ - " expansion=\"1.0\"" \ - " cell=\"string\"" \ - " minimum_width=\"32\"" \ - " resizable=\"true\"" \ - " _title=\"blah\"" \ - " compare=\"string\"" \ - " search=\"string\"/>" \ - " <ETableState>" \ - " <column source=\"0\"/>" \ - " <column source=\"1\"/>" \ - " <grouping>" \ - " </grouping>" \ - " </ETableState>" \ - "</ETableSpecification>" - - -static ETableMemoryStoreColumnInfo columns[] = { - E_TABLE_MEMORY_STORE_PIXBUF, - E_TABLE_MEMORY_STORE_STRING, - E_TABLE_MEMORY_STORE_STRING, - E_TABLE_MEMORY_STORE_STRING, - E_TABLE_MEMORY_STORE_STRING, - E_TABLE_MEMORY_STORE_TERMINATOR -}; - -GtkWidget * -create_custom_optionmenu (char *name, char *string1, char *string2, int int1, int int2); - -GtkWidget * -create_custom_optionmenu (char *name, char *string1, char *string2, int int1, int int2) -{ - return e_option_menu_new (NULL); -} - -GtkWidget * -create_custom_folder_list (char *name, char *string1, char *string2, int int1, int int2); - -GtkWidget * -create_custom_folder_list (char *name, char *string1, char *string2, int int1, int int2) -{ - ETableModel *model; - GtkWidget *scrolled; - - model = e_table_memory_store_new (columns); - scrolled = e_table_scrolled_new (model, NULL, SPEC, NULL); - g_object_set_data (G_OBJECT (scrolled), "table-model", model); - return scrolled; -} - -static void -add_clicked (GtkButton *button, EFolderList *efl) -{ - GNOME_Evolution_Folder *folder; - - evolution_shell_client_user_select_folder (efl->priv->client, - GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (efl))), - _("Add a Folder"), - "", - (const gchar **) efl->priv->possible_types, - &folder); - - if (folder != NULL) { - GdkPixbuf *pixbuf; - char *display_string = create_display_string (efl, folder->evolutionUri, folder->displayName); - - pixbuf = evolution_shell_client_get_pixbuf_for_type (efl->priv->client, folder->type, TRUE); - e_table_memory_store_insert (efl->priv->model, -1, NULL, pixbuf, display_string, - folder->displayName, folder->evolutionUri, folder->physicalUri); - e_folder_list_changed (efl); - g_object_unref (pixbuf); - g_free (display_string); - } -} - -static void -make_list (int model_row, gpointer closure) -{ - GList **list = closure; - *list = g_list_prepend (*list, GINT_TO_POINTER (model_row)); -} - -static void -remove_row (gpointer data, gpointer user_data) -{ - ETableMemoryStore *etms = user_data; - int row = GPOINTER_TO_INT (data); - - e_table_memory_store_remove (etms, row); -} - -static void -remove_clicked (GtkButton *button, EFolderList *efl) -{ - GList *list = NULL; - ETable *table; - - table = e_table_scrolled_get_table (efl->priv->scrolled_table); - - e_table_selected_row_foreach (table, make_list, &list); - - g_list_foreach (list, remove_row, efl->priv->model); - - g_list_free (list); - - e_folder_list_changed (efl); -} - -static void -optionmenu_changed (EOptionMenu *option_menu, int value, EFolderList *efl) -{ - g_signal_emit (efl, signals[OPTION_MENU_CHANGED], 0, value); -} - -static void -update_buttons (EFolderList *efl) -{ - int cursor_row; - int selection_count; - ETable *table; - - table = e_table_scrolled_get_table (efl->priv->scrolled_table); - cursor_row = e_table_get_cursor_row (table); - selection_count = e_table_selected_count (table); - - e_glade_xml_set_sensitive (efl->priv->gui, "button-remove", selection_count >= 1); -} - -static void -cursor_changed (ESelectionModel *selection_model, int row, int col, EFolderList *efl) -{ - update_buttons (efl); -} - -static void -selection_changed (ESelectionModel *selection_model, EFolderList *efl) -{ - update_buttons (efl); -} - -static void -e_folder_list_init (EFolderList *efl) -{ - GladeXML *gui; - ESelectionModel *selection_model; - - efl->priv = g_new (EFolderListPrivate, 1); - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/e-folder-list.glade", NULL, NULL); - efl->priv->gui = gui; - - efl->priv->title = NULL; - efl->priv->frame = GTK_FRAME (glade_xml_get_widget(gui, "frame-toplevel")); - if (efl->priv->frame == NULL) - return; - - gtk_widget_reparent(GTK_WIDGET (efl->priv->frame), - GTK_WIDGET (efl)); - - efl->priv->option_menu = E_OPTION_MENU(glade_xml_get_widget (gui, "custom-optionmenu")); - e_folder_list_set_option_menu_strings (efl, NULL); - efl->priv->scrolled_table = E_TABLE_SCROLLED(glade_xml_get_widget(gui, "custom-folder-list")); - efl->priv->model = E_TABLE_MEMORY_STORE (g_object_get_data (G_OBJECT (efl->priv->scrolled_table), "table-model")); - - e_glade_xml_connect_widget (gui, "button-add", "clicked", - G_CALLBACK (add_clicked), efl); - e_glade_xml_connect_widget (gui, "button-remove", "clicked", - G_CALLBACK (remove_clicked), efl); - e_glade_xml_connect_widget (gui, "custom-optionmenu", "changed", - G_CALLBACK (optionmenu_changed), efl); - - selection_model = e_table_get_selection_model (e_table_scrolled_get_table (efl->priv->scrolled_table)); - - g_signal_connect (selection_model, "selection_changed", - G_CALLBACK (selection_changed), efl); - g_signal_connect (selection_model, "cursor_changed", - G_CALLBACK (cursor_changed), efl); - - /* XXX libglade2 seems to not show custom widgets even when - they're flagged Visible.*/ - gtk_widget_show_all (GTK_WIDGET (efl->priv->scrolled_table)); - - efl->priv->possible_types = NULL; - set_frame_label (efl); -} - -EFolderListItem * -e_folder_list_parse_xml (const char *xml) -{ - xmlDoc *doc = NULL; - xmlNode *root; - xmlNode *node; - int i; - EFolderListItem *items; - - if (xml && *xml) { - doc = xmlParseMemory (xml, strlen (xml)); - if (!doc) - g_warning ("malformed EFolderList xml"); - } - - if (!doc) { - items = g_new (EFolderListItem, 1); - items[0].uri = NULL; - items[0].physical_uri = NULL; - items[0].display_name = NULL; - return items; - } - - root = xmlDocGetRootElement (doc); - - for (node = root->xmlChildrenNode, i = 0; node; node = node->next, i++) - /* Intentionally empty */; - - items = g_new (EFolderListItem, i + 1); - - for (node = root->xmlChildrenNode, i = 0; node; node = node->next) { - if (node->name && !strcmp (node->name, "folder")) { - items[i].uri = e_xml_get_string_prop_by_name_with_default (node, "uri", ""); - items[i].physical_uri = e_xml_get_string_prop_by_name_with_default (node, "physical-uri", ""); - items[i].display_name = e_xml_get_string_prop_by_name_with_default (node, "display-name", ""); - i++; - } - } - items[i].uri = NULL; - items[i].physical_uri = NULL; - items[i].display_name = NULL; - - xmlFreeDoc (doc); - - return items; -} - -char * -e_folder_list_create_xml (EFolderListItem *items) -{ - xmlDoc *doc; - xmlNode *root; - char *xml; - xmlChar *temp; - int length; - int i; - - doc = xmlNewDoc ("1.0"); - - root = xmlNewDocNode (doc, NULL, "EvolutionFolderList", NULL); - - xmlDocSetRootElement (doc, root); - - for (i = 0; items[i].uri; i++) { - xmlNode *node = xmlNewChild (root, NULL, "folder", NULL); - e_xml_set_string_prop_by_name (node, "uri", items[i].uri); - e_xml_set_string_prop_by_name (node, "physical-uri", items[i].physical_uri); - e_xml_set_string_prop_by_name (node, "display-name", items[i].display_name); - } - - xmlDocDumpMemory (doc, &temp, &length); - - xml = g_strdup (temp); - - xmlFree (temp); - xmlFreeDoc (doc); - - return xml; -} - -void -e_folder_list_free_items (EFolderListItem *items) -{ - int i; - for (i = 0; items[i].uri; i++) { - g_free (items[i].uri); - g_free (items[i].physical_uri); - g_free (items[i].display_name); - } - g_free (items); -} - -GtkWidget* -e_folder_list_new (EvolutionShellClient *client, const char *xml) -{ - GtkWidget *widget = GTK_WIDGET (g_object_new (e_folder_list_get_type (), NULL)); - - e_folder_list_construct (E_FOLDER_LIST (widget), client, xml); - return widget; -} - -GtkWidget* -e_folder_list_construct (EFolderList *efl, EvolutionShellClient *client, const char *xml) -{ - g_object_ref (client); - efl->priv->client = client; - - efl->priv->corba_storage_registry = evolution_shell_client_get_storage_registry_interface (client); - e_folder_list_set_xml (efl, xml); - return GTK_WIDGET (efl); -} - -void -e_folder_list_set_items (EFolderList *efl, EFolderListItem *items) -{ - int i; - e_table_memory_store_clear (efl->priv->model); - for (i = 0; items[i].uri; i++) { - GNOME_Evolution_Folder *folder; - GdkPixbuf *pixbuf; - char *display_string; - - folder = get_folder_for_uri (efl, items[i].uri); - if (!folder) - continue; - display_string = create_display_string (efl, items[i].uri, items[i].display_name); - - pixbuf = evolution_shell_client_get_pixbuf_for_type (efl->priv->client, folder->type, TRUE); - - e_table_memory_store_insert (efl->priv->model, -1, NULL, - pixbuf, display_string, - items[i].display_name, items[i].uri, items[i].physical_uri); - CORBA_free (folder); - g_object_unref (pixbuf); - g_free (display_string); - } -} - -EFolderListItem * -e_folder_list_get_items (EFolderList *efl) -{ - EFolderListItem *items; - int count; - int i; - - count = e_table_model_row_count (E_TABLE_MODEL (efl->priv->model)); - - items = g_new (EFolderListItem, count + 1); - - for (i = 0; i < count; i++) { - items[i].display_name = g_strdup (e_table_model_value_at (E_TABLE_MODEL (efl->priv->model), 2, i)); - items[i].uri = g_strdup (e_table_model_value_at (E_TABLE_MODEL (efl->priv->model), 3, i)); - items[i].physical_uri = g_strdup (e_table_model_value_at (E_TABLE_MODEL (efl->priv->model), 4, i)); - } - items[i].uri = NULL; - items[i].physical_uri = NULL; - - return items; -} - -void -e_folder_list_set_xml (EFolderList *efl, const char *xml) -{ - EFolderListItem *items; - - items = e_folder_list_parse_xml (xml); - e_folder_list_set_items (efl, items); - e_folder_list_free_items (items); -} - -char * -e_folder_list_get_xml (EFolderList *efl) -{ - EFolderListItem *items; - char *xml; - - items = e_folder_list_get_items (efl); - xml = e_folder_list_create_xml (items); - e_folder_list_free_items (items); - - return xml; -} - -void -e_folder_list_set_option_menu_strings_from_array (EFolderList *efl, const char **strings) -{ - e_option_menu_set_strings_from_array (efl->priv->option_menu, strings); - if (strings && *strings) - gtk_widget_show (GTK_WIDGET (efl->priv->option_menu)); - else - gtk_widget_hide (GTK_WIDGET (efl->priv->option_menu)); -} - -void -e_folder_list_set_option_menu_strings (EFolderList *efl, const char *first_label, ...) -{ - GPtrArray *labels; - va_list args; - char *s; - - labels = g_ptr_array_new (); - - va_start (args, first_label); - for (s = (char *)first_label; s; s = va_arg (args, char *)) - g_ptr_array_add (labels, s); - va_end (args); - - e_folder_list_set_option_menu_strings_from_array (efl, (const char **)labels->pdata); - - g_ptr_array_free (labels, TRUE); -} - -int -e_folder_list_get_option_menu_value (EFolderList *efl) -{ - return e_option_menu_get_value (efl->priv->option_menu); -} - -void -e_folder_list_set_option_menu_value (EFolderList *efl, int value) -{ - gtk_option_menu_set_history (GTK_OPTION_MENU (efl->priv->option_menu), value); -} - - -E_MAKE_TYPE (e_folder_list, "EFolderList", EFolderList, e_folder_list_class_init, e_folder_list_init, PARENT_TYPE) diff --git a/shell/e-folder-list.h b/shell/e-folder-list.h deleted file mode 100644 index 5e7ce3493d..0000000000 --- a/shell/e-folder-list.h +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-folder-list.h - * Copyright 2000, 2001, Ximian, Inc. - * - * Authors: - * Chris Lahey <clahey@ximian.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License, version 2, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifndef __E_FOLDER_LIST_H__ -#define __E_FOLDER_LIST_H__ - -#include <gal/e-table/e-table-scrolled.h> - -#include <gtk/gtkvbox.h> - -#include "evolution-shell-client.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EFolderList - A dialog displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - */ - -#define E_FOLDER_LIST_TYPE (e_folder_list_get_type ()) -#define E_FOLDER_LIST(obj) (GTK_CHECK_CAST ((obj), E_FOLDER_LIST_TYPE, EFolderList)) -#define E_FOLDER_LIST_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_FOLDER_LIST_TYPE, EFolderListClass)) -#define E_IS_FOLDER_LIST(obj) (GTK_CHECK_TYPE ((obj), E_FOLDER_LIST_TYPE)) -#define E_IS_FOLDER_LIST_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_FOLDER_LIST_TYPE)) - - -typedef struct _EFolderListPrivate EFolderListPrivate; -typedef struct _EFolderList EFolderList; -typedef struct _EFolderListClass EFolderListClass; - -struct _EFolderList -{ - GtkVBox parent; - - /* item specific fields */ - EFolderListPrivate *priv; -}; - -struct _EFolderListClass -{ - GtkVBoxClass parent_class; - - void (*changed) (EFolderList *efl); - void (*option_menu_changed) (EFolderList *efl, int value); -}; - -typedef struct { - char *uri; - char *physical_uri; - char *display_name; -} EFolderListItem; - - -EFolderListItem *e_folder_list_parse_xml (const char *xml); -char *e_folder_list_create_xml (EFolderListItem *items); -void e_folder_list_free_items (EFolderListItem *items); - -/* Standard functions */ -GtkType e_folder_list_get_type (void); -GtkWidget *e_folder_list_new (EvolutionShellClient *client, - const char *xml); -GtkWidget *e_folder_list_construct (EFolderList *efl, - EvolutionShellClient *client, - const char *xml); - -/* data access functions */ -void e_folder_list_set_items (EFolderList *efl, - EFolderListItem *items); -EFolderListItem *e_folder_list_get_items (EFolderList *efl); -void e_folder_list_set_xml (EFolderList *efl, - const char *xml); -char *e_folder_list_get_xml (EFolderList *efl); - -/* Option Menu functions */ -void e_folder_list_set_option_menu_strings_from_array (EFolderList *efl, - const char **strings); -void e_folder_list_set_option_menu_strings (EFolderList *efl, - const char *first_label, - ...); -int e_folder_list_get_option_menu_value (EFolderList *efl); -void e_folder_list_set_option_menu_value (EFolderList *efl, - int value); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_FOLDER_LIST_H__ */ diff --git a/shell/e-folder-tree.c b/shell/e-folder-tree.c deleted file mode 100644 index c10f1aa241..0000000000 --- a/shell/e-folder-tree.c +++ /dev/null @@ -1,460 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder-set.c - * - * Copyright (C) 2000, 2001 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "e-folder-tree.h" - -#include "e-shell-constants.h" - -#include <string.h> -#include <glib.h> - - -struct _Folder { - struct _Folder *parent; - char *path; - void *data; - GList *subfolders; -}; -typedef struct _Folder Folder; - -struct _EFolderTree { - GHashTable *path_to_folder; - GHashTable *data_to_path; - - EFolderDestroyNotify folder_destroy_notify; - void *folder_destroy_notify_closure; -}; - - -/* Utility functions. */ - -static char * -get_parent_path (const char *path) -{ - const char *last_separator; - - g_assert (g_path_is_absolute (path)); - - last_separator = strrchr (path, E_PATH_SEPARATOR); - - if (last_separator == path) - return g_strdup (E_PATH_SEPARATOR_S); - - return g_strndup (path, last_separator - path); -} - -static void -traverse_subtree (EFolderTree *tree, - Folder *root_folder, - EFolderTreeForeachFunc foreach_func, - void *data) -{ - GList *p; - - g_assert (foreach_func != NULL); - - (* foreach_func) (tree, root_folder->path, root_folder->data, data); - - for (p = root_folder->subfolders; p != NULL; p = p->next) { - Folder *folder; - - folder = (Folder *) p->data; - traverse_subtree (tree, folder, foreach_func, data); - } -} - - -/* Folder handling. */ - -static Folder * -folder_new (const char *path, - void *data) -{ - Folder *folder; - - folder = g_new (Folder, 1); - folder->parent = NULL; - folder->path = g_strdup (path); - folder->data = data; - folder->subfolders = NULL; - - return folder; -} - -static void -folder_remove_subfolder (Folder *folder, - Folder *subfolder) -{ - folder->subfolders = g_list_remove (folder->subfolders, subfolder); - subfolder->parent = NULL; -} - -static void -folder_add_subfolder (Folder *folder, - Folder *subfolder) -{ - folder->subfolders = g_list_prepend (folder->subfolders, subfolder); - subfolder->parent = folder; -} - -static void -folder_destroy (Folder *folder) -{ - g_assert (folder->subfolders == NULL); - - if (folder->parent != NULL) - folder_remove_subfolder (folder->parent, folder); - - g_free (folder->path); - - g_free (folder); -} - -static void -remove_folder (EFolderTree *folder_tree, - Folder *folder) -{ - if (folder->subfolders != NULL) { - GList *p; - - for (p = folder->subfolders; p != NULL; p = p->next) { - Folder *subfolder; - - subfolder = (Folder *) p->data; - subfolder->parent = NULL; - remove_folder (folder_tree, subfolder); - } - - g_list_free (folder->subfolders); - folder->subfolders = NULL; - } - - g_hash_table_remove (folder_tree->path_to_folder, folder->path); - g_hash_table_remove (folder_tree->data_to_path, folder->data); - - if (folder_tree->folder_destroy_notify != NULL) - (* folder_tree->folder_destroy_notify) (folder_tree, - folder->path, - folder->data, - folder_tree->folder_destroy_notify_closure); - - folder_destroy (folder); -} - - -/** - * e_folder_tree_new: - * @folder_destroy_notify: Function to be called when a folder gets removed from the tree - * @closure: Additional data to pass to @folder_destroy_notify - * - * Create a new EFolderTree. - * - * Return value: A pointer to the newly created EFolderTree. - **/ -EFolderTree * -e_folder_tree_new (EFolderDestroyNotify folder_destroy_notify, - void *closure) -{ - EFolderTree *new; - - new = g_new (EFolderTree, 1); - - new->folder_destroy_notify = folder_destroy_notify; - new->folder_destroy_notify_closure = closure; - - new->path_to_folder = g_hash_table_new (g_str_hash, g_str_equal); - new->data_to_path = g_hash_table_new (g_direct_hash, g_direct_equal); - - e_folder_tree_add (new, E_PATH_SEPARATOR_S, NULL); - - return new; -} - -/** - * e_folder_tree_destroy: - * @folder_tree: A pointer to an EFolderTree - * - * Destroy @folder_tree. - **/ -void -e_folder_tree_destroy (EFolderTree *folder_tree) -{ - Folder *root_folder; - - g_return_if_fail (folder_tree != NULL); - - root_folder = g_hash_table_lookup (folder_tree->path_to_folder, E_PATH_SEPARATOR_S); - remove_folder (folder_tree, root_folder); - - g_hash_table_destroy (folder_tree->path_to_folder); - g_hash_table_destroy (folder_tree->data_to_path); - - g_free (folder_tree); -} - -/** - * e_folder_tree_add: - * @folder_tree: A pointer to an EFolderTree - * @path: Path at which the new folder must be added - * @data: Data associated with the new folder - * - * Insert a new folder at @path, with the specified @data. - * - * Return value: %TRUE if successful, %FALSE if failed. - **/ -gboolean -e_folder_tree_add (EFolderTree *folder_tree, - const char *path, - void *data) -{ - Folder *parent_folder; - Folder *folder; - const char *existing_path; - char *parent_path; - - g_return_val_if_fail (folder_tree != NULL, FALSE); - g_return_val_if_fail (path != NULL, FALSE); - g_return_val_if_fail (g_path_is_absolute (path), FALSE); - - /* Can only "add" a new root folder if the tree is empty */ - if (! strcmp (path, E_PATH_SEPARATOR_S)) { - folder = g_hash_table_lookup (folder_tree->path_to_folder, path); - if (folder) { - if (folder->subfolders) { - g_warning ("e_folder_tree_add() -- Trying to change root folder after adding children"); - return FALSE; - } - remove_folder (folder_tree, folder); - } - - folder = folder_new (path, data); - g_hash_table_insert (folder_tree->path_to_folder, folder->path, folder); - g_hash_table_insert (folder_tree->data_to_path, data, folder->path); - return TRUE; - } - - parent_path = get_parent_path (path); - - parent_folder = g_hash_table_lookup (folder_tree->path_to_folder, parent_path); - if (parent_folder == NULL) { - g_warning ("e_folder_tree_add() -- Trying to add a subfolder to a path that does not exist yet -- %s", - parent_path); - g_free (parent_path); - return FALSE; - } - g_free (parent_path); - - folder = g_hash_table_lookup (folder_tree->path_to_folder, path); - if (folder != NULL) { - g_warning ("e_folder_tree_add() -- Trying to add a subfolder for a path that already exists -- %s", - path); - return FALSE; - } - - existing_path = g_hash_table_lookup (folder_tree->data_to_path, data); - if (existing_path != NULL) { - g_warning ("e_folder_tree_add() -- Trying to add a folder with duplicate data -- %s", - path); - return FALSE; - } - - folder = folder_new (path, data); - folder_add_subfolder (parent_folder, folder); - - g_hash_table_insert (folder_tree->path_to_folder, folder->path, folder); - g_hash_table_insert (folder_tree->data_to_path, data, folder->path); - - return TRUE; -} - -/** - * e_folder_tree_remove: - * @folder_tree: A pointer to an EFolderTree - * @path: Path of the folder to remove - * - * Remove the folder at @path from @folder_tree. - * - * Return value: %TRUE if successful, %FALSE if failed. - **/ -gboolean -e_folder_tree_remove (EFolderTree *folder_tree, - const char *path) -{ - Folder *folder; - - g_return_val_if_fail (folder_tree != NULL, FALSE); - g_return_val_if_fail (path != NULL, FALSE); - g_return_val_if_fail (g_path_is_absolute (path), FALSE); - - folder = g_hash_table_lookup (folder_tree->path_to_folder, path); - if (folder == NULL) - return FALSE; - - remove_folder (folder_tree, folder); - return TRUE; -} - -static void -count_nodes (EFolderTree *tree, - const char *path, - void *data, - void *closure) -{ - int *count = closure; - - (*count)++; -} - -/** - * e_folder_tree_get_count: - * @folder_tree: A pointer to an EFolderTree - * - * Gets the number of folders in the tree - * - * Return value: The number of folders in the tree - **/ -int -e_folder_tree_get_count (EFolderTree *folder_tree) -{ - int count = 0; - - e_folder_tree_foreach (folder_tree, count_nodes, &count); - - return count; -} - -/** - * e_folder_tree_get_folder: - * @folder_tree: A pointer to an EFolderTree - * @path: Path of the folder for which we want to get the data - * - * Get the data for the folder at @path. - * - * Return value: The pointer to the data for the folder at @path. - **/ -void * -e_folder_tree_get_folder (EFolderTree *folder_tree, - const char *path) -{ - Folder *folder; - - g_return_val_if_fail (folder_tree != NULL, NULL); - g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (g_path_is_absolute (path), NULL); - - folder = g_hash_table_lookup (folder_tree->path_to_folder, path); - if (folder == NULL) - return NULL; - - return folder->data; -} - -/** - * e_folder_tree_get_subfolders: - * @folder_tree: A pointer to an EFolderTree - * @path: A path in @folder_tree - * - * Get a list of the paths of the subfolders of @path. - * - * Return value: A list of pointers to the paths of the subfolders. The list - * and the strings must be freed by the caller. - **/ -GList * -e_folder_tree_get_subfolders (EFolderTree *folder_tree, - const char *path) -{ - Folder *folder; - GList *list; - GList *p; - - g_return_val_if_fail (folder_tree != NULL, NULL); - g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (g_path_is_absolute (path), NULL); - - folder = g_hash_table_lookup (folder_tree->path_to_folder, path); - if (folder == NULL) - return NULL; - - list = NULL; - for (p = folder->subfolders; p != NULL; p = p->next) { - const Folder *folder; - - folder = (const Folder *) p->data; - list = g_list_prepend (list, g_strdup (folder->path)); - } - - return list; -} - - -/** - * e_folder_tree_foreach: - * @folder_tree: - * @foreach_func: - * @data: - * - * Call @foreach_func with the specified @data for all the folders - * in @folder_tree, starting at the root node. - **/ -void -e_folder_tree_foreach (EFolderTree *folder_tree, - EFolderTreeForeachFunc foreach_func, - void *data) -{ - Folder *root_node; - - g_return_if_fail (folder_tree != NULL); - g_return_if_fail (foreach_func != NULL); - - root_node = g_hash_table_lookup (folder_tree->path_to_folder, - E_PATH_SEPARATOR_S); - if (root_node == NULL) { - g_warning ("e_folder_tree_foreach -- What?! No root node!?"); - return; - } - - traverse_subtree (folder_tree, root_node, foreach_func, data); -} - - -/** - * e_folder_tree_get_path_for_data: - * @folder_tree: A pointer to an EFolderTree - * @data: The data for the folder for which the path is needed - * - * Look up the path for the specified @data. - * - * Return value: The path for the folder that holds that @data. - **/ -const char * -e_folder_tree_get_path_for_data (EFolderTree *folder_tree, - const void *data) -{ - g_return_val_if_fail (folder_tree != NULL, NULL); - g_return_val_if_fail (data != NULL, NULL); - - return (const char *) g_hash_table_lookup (folder_tree->data_to_path, data); -} diff --git a/shell/e-folder-tree.h b/shell/e-folder-tree.h deleted file mode 100644 index bb2f29702a..0000000000 --- a/shell/e-folder-tree.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder-tree.h - * - * Copyright (C) 2000 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_FOLDER_TREE_H_ -#define _E_FOLDER_TREE_H_ - -#include <glib.h> - - -typedef struct _EFolderTree EFolderTree; - -typedef void (* EFolderDestroyNotify) (EFolderTree *tree, const char *path, void *data, void *closure); -typedef void (* EFolderTreeForeachFunc) (EFolderTree *tree, const char *path, void *data, void *closure); - - -EFolderTree *e_folder_tree_new (EFolderDestroyNotify folder_destroy_notify, - void *closure); - -void e_folder_tree_destroy (EFolderTree *folder_tree); - -gboolean e_folder_tree_add (EFolderTree *folder_tree, - const char *path, - void *data); -gboolean e_folder_tree_remove (EFolderTree *folder_tree, - const char *path); - -int e_folder_tree_get_count (EFolderTree *folder_tree); - -void *e_folder_tree_get_folder (EFolderTree *folder_tree, - const char *path); -GList *e_folder_tree_get_subfolders (EFolderTree *folder_tree, - const char *path); - -void e_folder_tree_foreach (EFolderTree *folder_tree, - EFolderTreeForeachFunc foreach_func, - void *data); - -const char *e_folder_tree_get_path_for_data (EFolderTree *folder_tree, - const void *data); - -#endif /* _E_FOLDER_TREE_H_ */ diff --git a/shell/e-folder.c b/shell/e-folder.c deleted file mode 100644 index adaa31f465..0000000000 --- a/shell/e-folder.c +++ /dev/null @@ -1,551 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder.c - * - * Copyright (C) 2000, 2001, 2002 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "e-folder.h" -#include "e-shell-marshal.h" - -#include "e-util/e-corba-utils.h" - -#include <string.h> -#include <glib.h> -#include <gtk/gtksignal.h> -#include <gal/util/e-util.h> - - -#define PARENT_TYPE GTK_TYPE_OBJECT -static GtkObjectClass *parent_class = NULL; - -struct _EFolderPrivate { - char *name; - char *type; - char *description; - char *physical_uri; - - int child_highlight; - int unread_count; - - /* Folders have a default sorting priority of zero; when deciding the - sort order in the Evolution folder tree, folders with the same - priority value are compared by name, while folders with a higher - priority number always come after the folders with a lower priority - number. */ - int sorting_priority; - - unsigned int self_highlight : 1; - unsigned int is_stock : 1; - unsigned int can_sync_offline : 1; - unsigned int has_subfolders : 1; - - /* Custom icon for this folder; if NULL the folder will just use the - icon for its type. */ - char *custom_icon_name; -}; - -#define EF_CLASS(obj) \ - E_FOLDER_CLASS (GTK_OBJECT (obj)->klass) - - -enum { - CHANGED, - NAME_CHANGED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* EFolder methods. */ - -static gboolean -impl_save_info (EFolder *folder) -{ - g_warning ("`%s' does not implement `EFolder::save_info()'", - G_OBJECT_TYPE_NAME (folder)); - return FALSE; -} - -static gboolean -impl_load_info (EFolder *folder) -{ - g_warning ("`%s' does not implement `EFolder::load_info()'", - G_OBJECT_TYPE_NAME (folder)); - return FALSE; -} - -static gboolean -impl_remove (EFolder *folder) -{ - g_warning ("`%s' does not implement `EFolder::remove()'", - G_OBJECT_TYPE_NAME (folder)); - return FALSE; -} - -static const char * -impl_get_physical_uri (EFolder *folder) -{ - return folder->priv->physical_uri; -} - - -/* GObject methods. */ - -static void -impl_finalize (GObject *object) -{ - EFolder *folder; - EFolderPrivate *priv; - - folder = E_FOLDER (object); - priv = folder->priv; - - g_free (priv->name); - g_free (priv->type); - g_free (priv->description); - g_free (priv->physical_uri); - - g_free (priv->custom_icon_name); - - g_free (priv); - - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - - -static void -class_init (EFolderClass *klass) -{ - GObjectClass *object_class; - - parent_class = g_type_class_ref(gtk_object_get_type ()); - - object_class = G_OBJECT_CLASS (klass); - object_class->finalize = impl_finalize; - - signals[CHANGED] = g_signal_new ("changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EFolderClass, changed), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - signals[NAME_CHANGED] = g_signal_new ("name_changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EFolderClass, name_changed), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - klass->save_info = impl_save_info; - klass->load_info = impl_load_info; - klass->remove = impl_remove; - klass->get_physical_uri = impl_get_physical_uri; -} - -static void -init (EFolder *folder) -{ - EFolderPrivate *priv; - - priv = g_new (EFolderPrivate, 1); - priv->type = NULL; - priv->name = NULL; - priv->description = NULL; - priv->physical_uri = NULL; - priv->child_highlight = 0; - priv->unread_count = 0; - priv->sorting_priority = 0; - priv->self_highlight = FALSE; - priv->is_stock = FALSE; - priv->can_sync_offline = FALSE; - priv->has_subfolders = FALSE; - priv->custom_icon_name = NULL; - - folder->priv = priv; - - GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (folder), GTK_FLOATING); -} - - -void -e_folder_construct (EFolder *folder, - const char *name, - const char *type, - const char *description) -{ - EFolderPrivate *priv; - - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (name != NULL); - g_return_if_fail (type != NULL); - - priv = folder->priv; - - priv->name = g_strdup (name); - priv->type = g_strdup (type); - priv->description = g_strdup (description); -} - -EFolder * -e_folder_new (const char *name, - const char *type, - const char *description) -{ - EFolder *folder; - - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (type != NULL, NULL); - - folder = g_object_new (E_TYPE_FOLDER, NULL); - - e_folder_construct (folder, name, type, description); - - return folder; -} - - -const char * -e_folder_get_name (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->name; -} - -const char * -e_folder_get_type_string (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->type; -} - -const char * -e_folder_get_description (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->description; -} - -const char * -e_folder_get_physical_uri (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->physical_uri; -} - -int -e_folder_get_unread_count (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, FALSE); - g_return_val_if_fail (E_IS_FOLDER (folder), FALSE); - - return folder->priv->unread_count; -} - -gboolean -e_folder_get_highlighted (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, FALSE); - g_return_val_if_fail (E_IS_FOLDER (folder), FALSE); - - return folder->priv->child_highlight || folder->priv->unread_count; -} - -gboolean -e_folder_get_is_stock (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, FALSE); - g_return_val_if_fail (E_IS_FOLDER (folder), FALSE); - - return folder->priv->is_stock; -} - -gboolean -e_folder_get_can_sync_offline (EFolder *folder) -{ - g_return_val_if_fail (E_IS_FOLDER (folder), FALSE); - - return folder->priv->can_sync_offline; -} - -gboolean -e_folder_get_has_subfolders (EFolder *folder) -{ - g_return_val_if_fail (E_IS_FOLDER (folder), FALSE); - - return folder->priv->has_subfolders; -} - -/** - * e_folder_get_custom_icon: - * @folder: An EFolder - * - * Get the name of the custom icon for @folder, or NULL if no custom icon is - * associated with it. - **/ -const char * -e_folder_get_custom_icon_name (EFolder *folder) -{ - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->custom_icon_name; -} - -/** - * e_folder_get_sorting_priority: - * @folder: An EFolder - * - * Get the sorting priority for @folder. - * - * Return value: Sorting priority value for @folder. - **/ -int -e_folder_get_sorting_priority (EFolder *folder) -{ - g_return_val_if_fail (E_IS_FOLDER (folder), 0); - - return folder->priv->sorting_priority; -} - - -void -e_folder_set_name (EFolder *folder, - const char *name) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (name != NULL); - - if (folder->priv->name == name) - return; - - g_free (folder->priv->name); - folder->priv->name = g_strdup (name); - - g_signal_emit (folder, signals[NAME_CHANGED], 0); - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_type_string (EFolder *folder, - const char *type) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (type != NULL); - - g_free (folder->priv->type); - folder->priv->type = g_strdup (type); - - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_description (EFolder *folder, - const char *description) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (description != NULL); - - g_free (folder->priv->description); - folder->priv->description = g_strdup (description); - - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_physical_uri (EFolder *folder, - const char *physical_uri) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (physical_uri != NULL); - - if (folder->priv->physical_uri == physical_uri) - return; - - g_free (folder->priv->physical_uri); - folder->priv->physical_uri = g_strdup (physical_uri); - - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_unread_count (EFolder *folder, - gint unread_count) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - - folder->priv->unread_count = unread_count; - - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_child_highlight (EFolder *folder, - gboolean highlighted) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - - if (highlighted) - folder->priv->child_highlight++; - else - folder->priv->child_highlight--; - - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_is_stock (EFolder *folder, - gboolean is_stock) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - - folder->priv->is_stock = !! is_stock; - - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_can_sync_offline (EFolder *folder, - gboolean can_sync_offline) -{ - g_return_if_fail (E_IS_FOLDER (folder)); - - folder->priv->can_sync_offline = !! can_sync_offline; - - g_signal_emit (folder, signals[CHANGED], 0); -} - -void -e_folder_set_has_subfolders (EFolder *folder, - gboolean has_subfolders) -{ - g_return_if_fail (E_IS_FOLDER (folder)); - - folder->priv->has_subfolders = !! has_subfolders; - - g_signal_emit (folder, signals[CHANGED], 0); -} - -/** - * e_folder_set_custom_icon_name: - * @folder: An EFolder - * @icon_name: Name of the icon to be set (to be found in the standard - * Evolution icon dir) - * - * Set a custom icon for @folder (thus overriding the default icon, which is - * the one associated to the type of the folder). - **/ -void -e_folder_set_custom_icon (EFolder *folder, - const char *icon_name) -{ - g_return_if_fail (E_IS_FOLDER (folder)); - - if (icon_name == folder->priv->custom_icon_name) - return; - - if (folder->priv->custom_icon_name == NULL - || (icon_name != NULL && strcmp (icon_name, folder->priv->custom_icon_name) != 0)) { - g_free (folder->priv->custom_icon_name); - folder->priv->custom_icon_name = g_strdup (icon_name); - - g_signal_emit (folder, signals[CHANGED], 0); - } -} - -/** - * e_folder_set_sorting_priority: - * @folder: An EFolder - * @sorting_priority: A sorting priority number - * - * Set the sorting priority for @folder. Folders have a default sorting - * priority of zero; when deciding the sort order in the Evolution folder tree, - * folders with the same priority value are compared by name, while folders - * with a higher priority number always come after the folders with a lower - * priority number. - **/ -void -e_folder_set_sorting_priority (EFolder *folder, - int sorting_priority) -{ - g_return_if_fail (E_IS_FOLDER (folder)); - - if (folder->priv->sorting_priority == sorting_priority) - return; - - folder->priv->sorting_priority = sorting_priority; - - g_signal_emit (folder, signals[CHANGED], 0); -} - - -/* Gotta love CORBA. */ - -static CORBA_char * -safe_corba_string_dup (const char *s) -{ - if (s == NULL) - return CORBA_string_dup (""); - - return CORBA_string_dup (s); -} - -void -e_folder_to_corba (EFolder *folder, - const char *evolution_uri, - GNOME_Evolution_Folder *folder_return) -{ - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (folder_return != NULL); - - folder_return->type = safe_corba_string_dup (e_folder_get_type_string (folder)); - folder_return->description = safe_corba_string_dup (e_folder_get_description (folder)); - folder_return->displayName = safe_corba_string_dup (e_folder_get_name (folder)); - folder_return->physicalUri = safe_corba_string_dup (e_folder_get_physical_uri (folder)); - folder_return->evolutionUri = safe_corba_string_dup (evolution_uri); - folder_return->customIconName = safe_corba_string_dup (e_folder_get_custom_icon_name (folder)); - folder_return->unreadCount = e_folder_get_unread_count (folder); - folder_return->canSyncOffline = e_folder_get_can_sync_offline (folder); - folder_return->sortingPriority = e_folder_get_sorting_priority (folder); -} - - -E_MAKE_TYPE (e_folder, "EFolder", EFolder, class_init, init, PARENT_TYPE) diff --git a/shell/e-folder.h b/shell/e-folder.h deleted file mode 100644 index 53308fb62f..0000000000 --- a/shell/e-folder.h +++ /dev/null @@ -1,108 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder.h - * - * Copyright (C) 2000, 2001, 2002 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_FOLDER_H_ -#define _E_FOLDER_H_ - -#include "Evolution.h" - -#include <gtk/gtkobject.h> - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_FOLDER (e_folder_get_type ()) -#define E_FOLDER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER, EFolder)) -#define E_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER, EFolderClass)) -#define E_IS_FOLDER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER)) -#define E_IS_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER)) - - -typedef struct _EFolder EFolder; -typedef struct _EFolderPrivate EFolderPrivate; -typedef struct _EFolderClass EFolderClass; - -struct _EFolder { - GtkObject parent; - - EFolderPrivate *priv; -}; - -struct _EFolderClass { - GtkObjectClass parent_class; - - /* Virtual methods. */ - gboolean (* save_info) (EFolder *folder); - gboolean (* load_info) (EFolder *folder); - gboolean (* remove) (EFolder *folder); - const char * (* get_physical_uri) (EFolder *folder); - - /* Signals. */ - void (* changed) (EFolder *folder); - void (* name_changed) (EFolder *folder); -}; - - -GtkType e_folder_get_type (void); -void e_folder_construct (EFolder *folder, - const char *name, - const char *type, - const char *description); -EFolder *e_folder_new (const char *name, - const char *type, - const char *description); - -const char *e_folder_get_name (EFolder *folder); -const char *e_folder_get_type_string (EFolder *folder); -const char *e_folder_get_description (EFolder *folder); -const char *e_folder_get_physical_uri (EFolder *folder); -int e_folder_get_unread_count (EFolder *folder); -gboolean e_folder_get_highlighted (EFolder *folder); -gboolean e_folder_get_is_stock (EFolder *folder); -gboolean e_folder_get_can_sync_offline (EFolder *folder); -gboolean e_folder_get_has_subfolders (EFolder *folder); -const char *e_folder_get_custom_icon_name (EFolder *folder); -int e_folder_get_sorting_priority (EFolder *folder); - -void e_folder_set_name (EFolder *folder, const char *name); -void e_folder_set_type_string (EFolder *folder, const char *type); -void e_folder_set_description (EFolder *folder, const char *description); -void e_folder_set_physical_uri (EFolder *folder, const char *physical_uri); -void e_folder_set_unread_count (EFolder *folder, int unread_count); -void e_folder_set_child_highlight (EFolder *folder, gboolean highlighted); -void e_folder_set_is_stock (EFolder *folder, gboolean is_stock); -void e_folder_set_can_sync_offline (EFolder *folder, gboolean can_sync_offline); -void e_folder_set_has_subfolders (EFolder *folder, gboolean has_subfolders); -void e_folder_set_custom_icon (EFolder *folder, const char *icon_name); -void e_folder_set_sorting_priority (EFolder *folder, int sorting_priority); - -void e_folder_to_corba (EFolder *folder, - const char *evolution_uri, - GNOME_Evolution_Folder *folder_return); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_FOLDER_H_ */ diff --git a/shell/evolution-activity-client.h b/shell/evolution-activity-client.h deleted file mode 100644 index ff42ba2317..0000000000 --- a/shell/evolution-activity-client.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-activity-client.h - * - * Copyright (C) 2001 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli <ettore@ximian.com> - */ - -#ifndef _EVOLUTION_ACTIVITY_CLIENT_H_ -#define _EVOLUTION_ACTIVITY_CLIENT_H_ - -#include "evolution-shell-client.h" - -#include "Evolution.h" - -#include <gtk/gtkobject.h> -#include <gdk-pixbuf/gdk-pixbuf.h> - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_ACTIVITY_CLIENT (evolution_activity_client_get_type ()) -#define EVOLUTION_ACTIVITY_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_ACTIVITY_CLIENT, EvolutionActivityClient)) -#define EVOLUTION_ACTIVITY_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_ACTIVITY_CLIENT, EvolutionActivityClientClass)) -#define EVOLUTION_IS_ACTIVITY_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_ACTIVITY_CLIENT)) -#define EVOLUTION_IS_ACTIVITY_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_ACTIVITY_CLIENT)) - - -typedef struct _EvolutionActivityClient EvolutionActivityClient; -typedef struct _EvolutionActivityClientPrivate EvolutionActivityClientPrivate; -typedef struct _EvolutionActivityClientClass EvolutionActivityClientClass; - -struct _EvolutionActivityClient { - GtkObject parent; - - EvolutionActivityClientPrivate *priv; -}; - -struct _EvolutionActivityClientClass { - GtkObjectClass parent_class; - - /* Signals. */ - void (* show_details) (EvolutionActivityClient *activity_client); - void (* cancel) (EvolutionActivityClient *activity_client); -}; - - -GtkType evolution_activity_client_get_type (void); -gboolean evolution_activity_client_construct (EvolutionActivityClient *activity_client, - GNOME_Evolution_Shell shell, - const char *component_id, - GdkPixbuf **animated_icon, - const char *information, - gboolean cancellable, - gboolean *suggest_display_return); -EvolutionActivityClient *evolution_activity_client_new (GNOME_Evolution_Shell shell, - const char *component_id, - GdkPixbuf **animated_icon, - const char *information, - gboolean cancellable, - gboolean *suggest_display_return); - -gboolean evolution_activity_client_update (EvolutionActivityClient *activity_client, - const char *information, - double progress); - -GNOME_Evolution_Activity_DialogAction -evolution_activity_client_request_dialog (EvolutionActivityClient *activity_client, - GNOME_Evolution_Activity_DialogType dialog_type); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _EVOLUTION_ACTIVITY_CLIENT_H_ */ diff --git a/shell/evolution-folder-selector-button.h b/shell/evolution-folder-selector-button.h deleted file mode 100644 index b438a54862..0000000000 --- a/shell/evolution-folder-selector-button.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-folder-selector-button.h - * - * Copyright (C) 2002 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __EVOLUTION_FOLDER_SELECTOR_BUTTON_H__ -#define __EVOLUTION_FOLDER_SELECTOR_BUTTON_H__ - -#include <gtk/gtkbutton.h> -#include "evolution-shell-client.h" - -#include "Evolution.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON (evolution_folder_selector_button_get_type ()) -#define EVOLUTION_FOLDER_SELECTOR_BUTTON(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON, EvolutionFolderSelectorButton)) -#define EVOLUTION_FOLDER_SELECTOR_BUTTON_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON, EvolutionFolderSelectorButtonClass)) -#define EVOLUTION_IS_FOLDER_SELECTOR_BUTTON(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON)) -#define EVOLUTION_IS_FOLDER_SELECTOR_BUTTON_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON)) - - -typedef struct _EvolutionFolderSelectorButton EvolutionFolderSelectorButton; -typedef struct _EvolutionFolderSelectorButtonPrivate EvolutionFolderSelectorButtonPrivate; -typedef struct _EvolutionFolderSelectorButtonClass EvolutionFolderSelectorButtonClass; - -struct _EvolutionFolderSelectorButton { - GtkButton parent; - - EvolutionFolderSelectorButtonPrivate *priv; -}; - -struct _EvolutionFolderSelectorButtonClass { - GtkButtonClass parent_class; - - /* signals */ - void (*popped_up) (EvolutionFolderSelectorButton *button); - void (*selected) (EvolutionFolderSelectorButton *button, GNOME_Evolution_Folder *folder); - void (*canceled) (EvolutionFolderSelectorButton *button); -}; - - -GtkType evolution_folder_selector_button_get_type (void); - -void evolution_folder_selector_button_construct (EvolutionFolderSelectorButton *folder_selector_button, - EvolutionShellClient *shell_client, - const char *title, - const char *initial_uri, - const char *possible_types[]); -GtkWidget *evolution_folder_selector_button_new (EvolutionShellClient *shell_client, - const char *title, - const char *initial_uri, - const char *possible_types[]); - -gboolean evolution_folder_selector_button_set_uri (EvolutionFolderSelectorButton *folder_selector_button, - const char *uri); -GNOME_Evolution_Folder *evolution_folder_selector_button_get_folder (EvolutionFolderSelectorButton *folder_selector_button); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __EVOLUTION_FOLDER_SELECTOR_BUTTON_H__ */ diff --git a/shell/evolution-shell-client.h b/shell/evolution-shell-client.h deleted file mode 100644 index 864d33c9e7..0000000000 --- a/shell/evolution-shell-client.h +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-client.h - * - * Copyright (C) 2000 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -/* FIXME: This file will have to go away. */ - -#ifndef __EVOLUTION_SHELL_CLIENT_H__ -#define __EVOLUTION_SHELL_CLIENT_H__ - -#include <gtk/gtkwindow.h> -#include <gdk-pixbuf/gdk-pixbuf.h> - -#include <glib-object.h> - -#include "Evolution.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_SHELL_CLIENT (evolution_shell_client_get_type ()) -#define EVOLUTION_SHELL_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_CLIENT, EvolutionShellClient)) -#define EVOLUTION_SHELL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_CLIENT, EvolutionShellClientClass)) -#define EVOLUTION_IS_SHELL_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_CLIENT)) -#define EVOLUTION_IS_SHELL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_CLIENT)) - - -typedef struct _EvolutionShellClient EvolutionShellClient; -typedef struct _EvolutionShellClientPrivate EvolutionShellClientPrivate; -typedef struct _EvolutionShellClientClass EvolutionShellClientClass; - -struct _EvolutionShellClient { - GObject base; -}; - -struct _EvolutionShellClientClass { - GObjectClass parent_class; -}; - - -GtkType evolution_shell_client_get_type (void); -void evolution_shell_client_construct (EvolutionShellClient *shell_client, - GNOME_Evolution_Shell corba_shell); -EvolutionShellClient *evolution_shell_client_new (GNOME_Evolution_Shell shell); - -GNOME_Evolution_Shell evolution_shell_client_corba_objref (EvolutionShellClient *shell_client); - -void evolution_shell_client_user_select_folder (EvolutionShellClient *shell_client, - GtkWindow *parent, - const char *title, - const char *default_folder, - const char **possible_types, - GNOME_Evolution_Folder **folder_return); - -GNOME_Evolution_Activity evolution_shell_client_get_activity_interface (EvolutionShellClient *shell_client); -GNOME_Evolution_Shortcuts evolution_shell_client_get_shortcuts_interface (EvolutionShellClient *shell_client); -GNOME_Evolution_StorageRegistry evolution_shell_client_get_storage_registry_interface (EvolutionShellClient *shell_client); - -GNOME_Evolution_Storage evolution_shell_client_get_local_storage (EvolutionShellClient *shell_client); - -void evolution_shell_client_set_line_status (EvolutionShellClient *shell_client, - gboolean online); - -GdkPixbuf *evolution_shell_client_get_pixbuf_for_type (EvolutionShellClient *shell_client, - const char *folder_type, - gboolean mini); - -GtkWidget *evolution_shell_client_create_storage_set_view (EvolutionShellClient *shell_client, - Bonobo_UIComponent uic, - Bonobo_Control *bonobo_control_iface_return, - GNOME_Evolution_StorageSetView *storage_set_view_iface_return, - CORBA_Environment *ev); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __EVOLUTION_SHELL_CLIENT_H__ */ diff --git a/shell/evolution-shell-component.c b/shell/evolution-shell-component.c deleted file mode 100644 index 7cc79d389f..0000000000 --- a/shell/evolution-shell-component.c +++ /dev/null @@ -1,1230 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-component.c - * - * Copyright (C) 2000, 2001, 2002 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "evolution-shell-component.h" - -#include "e-shell-corba-icon-utils.h" -#include "e-shell-marshal.h" - -#include <fcntl.h> -#include <unistd.h> - -#include <glib.h> -#include <gtk/gtksignal.h> -#include <bonobo/bonobo-object.h> -#include <libgnome/gnome-i18n.h> - -#include <gal/util/e-util.h> - - -#define PING_DELAY 10000 - - -#define PARENT_TYPE BONOBO_OBJECT_TYPE - -static BonoboObjectClass *parent_class = NULL; - -struct _UserCreatableItemType { - char *id; - char *description; - char *menu_description; - char *tooltip; - char menu_shortcut; - GdkPixbuf *icon; - char *folder_type; -}; -typedef struct _UserCreatableItemType UserCreatableItemType; - -struct _EvolutionShellComponentPrivate { - GList *folder_types; /* EvolutionShellComponentFolderType */ - GList *external_uri_schemas; /* char * */ - - EvolutionShellComponentCreateViewFn create_view_fn; - EvolutionShellComponentCreateFolderFn create_folder_fn; - EvolutionShellComponentRemoveFolderFn remove_folder_fn; - EvolutionShellComponentXferFolderFn xfer_folder_fn; - EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn; - EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn; - EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn; - EvolutionShellComponentRequestQuitFn request_quit_fn; - - EvolutionShellClient *owner_client; - - GSList *user_creatable_item_types; /* UserCreatableItemType */ - - /* This is used for - populateFolderContextMenu/unpopulateFolderContextMenu. */ - BonoboUIComponent *uic; - - gulong parent_view_xid; - - int ping_timeout_id; - - void *closure; -}; - -enum { - OWNER_SET, - OWNER_UNSET, - OWNER_DIED, - DEBUG, - INTERACTIVE, - HANDLE_EXTERNAL_URI, - USER_CREATE_NEW_ITEM, - SEND_RECEIVE, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* UserCreatableItemType handling. */ - -static UserCreatableItemType * -user_creatable_item_type_new (const char *id, - const char *description, - const char *menu_description, - const char *tooltip, - const char *folder_type, - char menu_shortcut, - GdkPixbuf *icon) -{ - UserCreatableItemType *type; - - type = g_new (UserCreatableItemType, 1); - type->id = g_strdup (id); - type->description = g_strdup (description); - type->menu_description = g_strdup (menu_description); - type->tooltip = g_strdup (tooltip); - type->menu_shortcut = menu_shortcut; - type->folder_type = g_strdup (folder_type); - - if (icon == NULL) - type->icon = NULL; - else - type->icon = g_object_ref (icon); - - return type; -} - -static void -user_creatable_item_type_free (UserCreatableItemType *type) -{ - g_free (type->id); - g_free (type->description); - g_free (type->menu_description); - g_free (type->tooltip); - g_free (type->folder_type); - - if (type->icon != NULL) - g_object_unref (type->icon); - - g_free (type); -} - - -/* Helper functions. */ - -/* Notice that, if passed a NULL pointer, this string will construct a - zero-element NULL-terminated string array instead of returning NULL itself - (i.e. it will return a pointer to a single g_malloc()ed NULL pointer). */ -static char ** -duplicate_null_terminated_string_array (char *array[]) -{ - char **new; - int count; - int i; - - if (array == NULL) { - count = 0; - } else { - for (count = 0; array[count] != NULL; count++) - ; - } - - new = g_new (char *, count + 1); - - for (i = 0; i < count; i++) - new[i] = g_strdup (array[i]); - new[count] = NULL; - - return new; -} - -/* The following will create a CORBA sequence of strings from the specified - * NULL-terminated array, without duplicating the strings. */ -static void -fill_corba_sequence_from_null_terminated_string_array (CORBA_sequence_CORBA_string *corba_sequence, - char **array) -{ - int count; - int i; - - g_assert (corba_sequence != NULL); - g_assert (array != NULL); - - CORBA_sequence_set_release (corba_sequence, TRUE); - - count = 0; - while (array[count] != NULL) - count++; - - corba_sequence->_maximum = count; - corba_sequence->_length = count; - corba_sequence->_buffer = CORBA_sequence_CORBA_string_allocbuf (count); - - for (i = 0; i < count; i++) - corba_sequence->_buffer[i] = CORBA_string_dup (array[i]); - - CORBA_sequence_set_release (corba_sequence, TRUE); -} - - -#if 0 -/* Owner pinging. */ - -static gboolean -owner_ping_callback (void *data) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - Bonobo_Unknown owner_objref; - CORBA_Environment ev; - gboolean alive; - - shell_component = EVOLUTION_SHELL_COMPONENT (data); - priv = shell_component->priv; - - owner_objref = evolution_shell_client_corba_objref (priv->owner_client); - - if (owner_objref == CORBA_OBJECT_NIL) - return FALSE; - - /* We are duplicating the object here, as we might get an ::unsetOwner - while we invoke the pinging, and this would make the objref invalid - and thus crash the stubs (cfr. #13802). */ - - CORBA_exception_init (&ev); - owner_objref = CORBA_Object_duplicate (owner_objref, &ev); - - alive = bonobo_unknown_ping (owner_objref, NULL); - - CORBA_Object_release (owner_objref, &ev); - CORBA_exception_free (&ev); - - if (alive) - return TRUE; - - /* This is tricky. During the pinging, we might have gotten an - ::unsetOwner invocation which has invalidated our owner_client. In - this case, no "owner_died" should be emitted. */ - - if (priv->owner_client != NULL) { - g_print ("\t*** The shell has disappeared\n"); - g_signal_emit (shell_component, signals[OWNER_DIED], 0); - } - - priv->ping_timeout_id = -1; - - return FALSE; -} - -static void -setup_owner_pinging (EvolutionShellComponent *shell_component) -{ - EvolutionShellComponentPrivate *priv; - GNOME_Evolution_Shell shell_corba_objref; - - priv = shell_component->priv; - - shell_corba_objref = evolution_shell_client_corba_objref (priv->owner_client); - - if (priv->ping_timeout_id != -1) - g_source_remove (priv->ping_timeout_id); - - priv->ping_timeout_id = g_timeout_add (PING_DELAY, owner_ping_callback, shell_component); -} -#endif - - -/* CORBA interface implementation. */ - -static GNOME_Evolution_FolderTypeList * -impl__get_supportedTypes (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - GNOME_Evolution_FolderTypeList *folder_type_list; - unsigned int i; - GList *p; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - folder_type_list = GNOME_Evolution_FolderTypeList__alloc (); - CORBA_sequence_set_release (folder_type_list, TRUE); - folder_type_list->_length = g_list_length (priv->folder_types); - folder_type_list->_maximum = folder_type_list->_length; - folder_type_list->_buffer = CORBA_sequence_GNOME_Evolution_FolderType_allocbuf (folder_type_list->_maximum); - - for (p = priv->folder_types, i = 0; p != NULL; p = p->next, i++) { - GNOME_Evolution_FolderType *corba_folder_type; - EvolutionShellComponentFolderType *folder_type; - - folder_type = (EvolutionShellComponentFolderType *) p->data; - - corba_folder_type = folder_type_list->_buffer + i; - corba_folder_type->name = CORBA_string_dup (folder_type->name); - corba_folder_type->iconName = CORBA_string_dup (folder_type->icon_name); - corba_folder_type->displayName = CORBA_string_dup (folder_type->display_name); - corba_folder_type->description = CORBA_string_dup (folder_type->description); - corba_folder_type->userCreatable = folder_type->user_creatable; - - fill_corba_sequence_from_null_terminated_string_array (& corba_folder_type->acceptedDndTypes, - folder_type->accepted_dnd_types); - fill_corba_sequence_from_null_terminated_string_array (& corba_folder_type->exportedDndTypes, - folder_type->exported_dnd_types); - } - - CORBA_sequence_set_release (folder_type_list, TRUE); - - return folder_type_list; -} - -static GNOME_Evolution_URISchemaList * -impl__get_externalUriSchemas (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - GNOME_Evolution_URISchemaList *uri_schema_list; - GList *p; - int i; - - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant)); - priv = shell_component->priv; - - uri_schema_list = GNOME_Evolution_URISchemaList__alloc (); - - /* FIXME: We could probably keep this to FALSE and avoid - CORBA_string_duplicating. */ - CORBA_sequence_set_release (uri_schema_list, TRUE); - - if (priv->external_uri_schemas == NULL) { - uri_schema_list->_length = 0; - uri_schema_list->_maximum = 0; - uri_schema_list->_buffer = NULL; - return uri_schema_list; - } - - uri_schema_list->_length = g_list_length (priv->external_uri_schemas); - uri_schema_list->_maximum = uri_schema_list->_length; - uri_schema_list->_buffer = CORBA_sequence_GNOME_Evolution_URISchema_allocbuf (uri_schema_list->_maximum); - - for (p = priv->external_uri_schemas, i = 0; p != NULL; p = p->next, i++) { - const char *schema; - - schema = (const char *) p->data; - uri_schema_list->_buffer[i] = CORBA_string_dup (schema); - } - - CORBA_sequence_set_release (uri_schema_list, TRUE); - - return uri_schema_list; -} - -static GNOME_Evolution_UserCreatableItemTypeList * -impl__get_userCreatableItemTypes (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - GNOME_Evolution_UserCreatableItemTypeList *list; - GSList *p; - int i; - - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant)); - priv = shell_component->priv; - - list = GNOME_Evolution_UserCreatableItemTypeList__alloc (); - list->_maximum = g_slist_length (priv->user_creatable_item_types); - list->_length = list->_maximum; - list->_buffer = CORBA_sequence_GNOME_Evolution_UserCreatableItemType_allocbuf (list->_maximum); - - for (p = priv->user_creatable_item_types, i = 0; p != NULL; p = p->next, i ++) { - GNOME_Evolution_UserCreatableItemType *corba_type; - const UserCreatableItemType *type; - - corba_type = list->_buffer + i; - type = (const UserCreatableItemType *) p->data; - - corba_type->id = CORBA_string_dup (type->id); - corba_type->description = CORBA_string_dup (type->description); - corba_type->menuDescription = CORBA_string_dup (type->menu_description); - corba_type->tooltip = CORBA_string_dup (type->tooltip != NULL ? type->tooltip : ""); - corba_type->folderType = CORBA_string_dup (type->folder_type != NULL ? type->folder_type : ""); - corba_type->menuShortcut = type->menu_shortcut; - - e_store_corba_icon_from_pixbuf (type->icon, & corba_type->icon); - } - - CORBA_sequence_set_release (list, TRUE); - - return list; -} - -static void -impl_setOwner (PortableServer_Servant servant, - const GNOME_Evolution_Shell shell, - const CORBA_char *evolution_homedir, - CORBA_Environment *ev) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant)); - priv = shell_component->priv; - - if (priv->owner_client != NULL) { - int owner_is_dead; - - owner_is_dead = CORBA_Object_non_existent - (evolution_shell_client_corba_objref (priv->owner_client), ev); - if (ev->_major != CORBA_NO_EXCEPTION) - owner_is_dead = TRUE; - - if (! owner_is_dead) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_AlreadyOwned, NULL); - } else { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_OldOwnerHasDied, NULL); - - g_signal_emit (shell_component, signals[OWNER_DIED], 0); - } - - return; - } - - if (ev->_major == CORBA_NO_EXCEPTION) { -#if 0 - BonoboObject *local_object; -#endif - - priv->owner_client = evolution_shell_client_new (shell); - g_signal_emit (shell_component, signals[OWNER_SET], 0, priv->owner_client, evolution_homedir); - -#if 0 - /* Set up pinging of the shell (to realize if it's gone unexpectedly) when in the - non-local case. */ - local_object = bonobo_object (ORBit_small_get_servant (shell)); - if (local_object == NULL) - setup_owner_pinging (shell_component); -#endif - } -} - -static void -impl_unsetOwner (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->owner_client == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_NotOwned, NULL); - return; - } - - g_signal_emit (shell_component, signals[OWNER_UNSET], 0); -} - -static void -impl_debug (PortableServer_Servant servant, - const CORBA_char *log_path, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - int fd; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - - fd = open (log_path, O_WRONLY | O_APPEND); - if (!fd) - return; - - dup2 (fd, STDOUT_FILENO); - dup2 (fd, STDERR_FILENO); - close (fd); - - g_signal_emit (shell_component, signals[DEBUG], 0); -} - -static void -impl_interactive (PortableServer_Servant servant, - CORBA_boolean interactive, - CORBA_unsigned_long new_view_xid, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - - if (interactive) - shell_component->priv->parent_view_xid = new_view_xid; - else - shell_component->priv->parent_view_xid = 0L; - - g_signal_emit (shell_component, signals[INTERACTIVE], 0, - interactive, new_view_xid); -} - -static Bonobo_Control -impl_createView (PortableServer_Servant servant, - const CORBA_char *physical_uri, - const CORBA_char *type, - const CORBA_char *view_info, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - EvolutionShellComponentResult result; - BonoboControl *control; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - result = (* priv->create_view_fn) (shell_component, physical_uri, type, - view_info, &control, priv->closure); - - if (result != EVOLUTION_SHELL_COMPONENT_OK) { - switch (result) { - case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE: - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_UnsupportedType, - NULL); - break; - case EVOLUTION_SHELL_COMPONENT_INTERNALERROR: - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_InternalError, - NULL); - break; - default: - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_NotFound, - NULL); - } - - return CORBA_OBJECT_NIL; - } - - return CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (control)), ev); -} - -static void -impl_handleExternalURI (PortableServer_Servant servant, - const CORBA_char *uri, - CORBA_Environment *ev) -{ - EvolutionShellComponent *shell_component; - - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant)); - - g_signal_emit (shell_component, signals[HANDLE_EXTERNAL_URI], 0, uri); -} - -static void -impl_createFolderAsync (PortableServer_Servant servant, - const GNOME_Evolution_ShellComponentListener listener, - const CORBA_char *physical_uri, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->create_folder_fn == NULL) { - GNOME_Evolution_ShellComponentListener_notifyResult (listener, - GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION, - ev); - return; - } - - (* priv->create_folder_fn) (shell_component, physical_uri, type, listener, priv->closure); -} - -static void -impl_removeFolderAsync (PortableServer_Servant servant, - const GNOME_Evolution_ShellComponentListener listener, - const CORBA_char *physical_uri, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->remove_folder_fn == NULL) { - GNOME_Evolution_ShellComponentListener_notifyResult (listener, - GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION, - ev); - return; - } - - (* priv->remove_folder_fn) (shell_component, physical_uri, type, listener, priv->closure); -} - -static void -impl_xferFolderAsync (PortableServer_Servant servant, - const GNOME_Evolution_ShellComponentListener listener, - const CORBA_char *source_physical_uri, - const CORBA_char *destination_physical_uri, - const CORBA_char *type, - const CORBA_boolean remove_source, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->xfer_folder_fn == NULL) { - GNOME_Evolution_ShellComponentListener_notifyResult (listener, - GNOME_Evolution_ShellComponentListener_UNSUPPORTED_OPERATION, - ev); - return; - } - - (* priv->xfer_folder_fn) (shell_component, - source_physical_uri, - destination_physical_uri, - type, - remove_source, - listener, - priv->closure); -} - -static void -impl_populateFolderContextMenu (PortableServer_Servant servant, - const Bonobo_UIContainer corba_uih, - const CORBA_char *physical_uri, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->populate_folder_context_menu_fn == NULL) - return; - - if (priv->uic != NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_AlreadyPopulated, - NULL); - return; - } - - priv->uic = bonobo_ui_component_new_default (); - bonobo_ui_component_set_container (priv->uic, corba_uih, NULL); - - (* priv->populate_folder_context_menu_fn) (shell_component, priv->uic, physical_uri, type, priv->closure); -} - -static void -impl_unpopulateFolderContextMenu (PortableServer_Servant servant, - const Bonobo_UIContainer corba_uih, - const CORBA_char *physical_uri, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->unpopulate_folder_context_menu_fn == NULL) - return; - - if (priv->uic == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_GNOME_Evolution_ShellComponent_NotPopulated, - NULL); - return; - } - - (* priv->unpopulate_folder_context_menu_fn) (shell_component, priv->uic, physical_uri, type, priv->closure); - - bonobo_object_unref (BONOBO_OBJECT (priv->uic)); - priv->uic = NULL; -} - -static void -impl_userCreateNewItem (PortableServer_Servant servant, - const CORBA_char *id, - const CORBA_char *parent_physical_uri, - const CORBA_char *parent_type, - CORBA_Environment *ev) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant)); - priv = shell_component->priv; - - /* FIXME: Check that the type is good. */ - - g_signal_emit (shell_component, signals[USER_CREATE_NEW_ITEM], 0, id, parent_physical_uri, parent_type); -} - -static void -impl_sendReceive (PortableServer_Servant servant, - const CORBA_boolean show_dialog, - CORBA_Environment *ev) -{ - EvolutionShellComponent *shell_component; - - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant)); - g_signal_emit (shell_component, signals[SEND_RECEIVE], 0, show_dialog); -} - -static void -impl_requestQuit (PortableServer_Servant servant, - const GNOME_Evolution_ShellComponentListener listener, - CORBA_Environment *ev) -{ - EvolutionShellComponent *shell_component; - gboolean allow_quit; - - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object_from_servant (servant)); - - if (shell_component->priv->request_quit_fn == NULL) - allow_quit = TRUE; - else - allow_quit = (* shell_component->priv->request_quit_fn) (shell_component, - shell_component->priv->closure); - - if (allow_quit) - GNOME_Evolution_ShellComponentListener_notifyResult (listener, - GNOME_Evolution_ShellComponentListener_OK, - ev); - else - GNOME_Evolution_ShellComponentListener_notifyResult (listener, - GNOME_Evolution_ShellComponentListener_CANCEL, - ev); -} - - -/* GObject methods. */ - -static void -impl_dispose (GObject *object) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - shell_component = EVOLUTION_SHELL_COMPONENT (object); - - priv = shell_component->priv; - - if (priv->ping_timeout_id != -1) { - g_source_remove (priv->ping_timeout_id); - priv->ping_timeout_id = -1; - } - - if (priv->owner_client != NULL) { - g_object_unref (priv->owner_client); - priv->owner_client = NULL; - } - - if (priv->uic != NULL) { - bonobo_object_unref (BONOBO_OBJECT (priv->uic)); - priv->uic = NULL; - } - - (* G_OBJECT_CLASS (parent_class)->dispose) (object); -} - -static void -impl_finalize (GObject *object) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - GSList *sp; - GList *p; - - shell_component = EVOLUTION_SHELL_COMPONENT (object); - - priv = shell_component->priv; - - for (p = priv->folder_types; p != NULL; p = p->next) { - EvolutionShellComponentFolderType *folder_type; - - folder_type = (EvolutionShellComponentFolderType *) p->data; - - g_free (folder_type->name); - g_free (folder_type->icon_name); - g_free (folder_type->display_name); - g_free (folder_type->description); - g_strfreev (folder_type->exported_dnd_types); - g_strfreev (folder_type->accepted_dnd_types); - - g_free (folder_type); - } - g_list_free (priv->folder_types); - - e_free_string_list (priv->external_uri_schemas); - - for (sp = priv->user_creatable_item_types; sp != NULL; sp = sp->next) - user_creatable_item_type_free ((UserCreatableItemType *) sp->data); - g_slist_free (priv->user_creatable_item_types); - - g_free (priv); - - (* G_OBJECT_CLASS (parent_class)->finalize) (object); -} - - -/* EvolutionShellComponent methods. */ - -static void -impl_owner_unset (EvolutionShellComponent *shell_component) -{ - EvolutionShellComponentPrivate *priv; - - priv = shell_component->priv; - - if (priv->ping_timeout_id != -1) { - g_source_remove (priv->ping_timeout_id); - priv->ping_timeout_id = -1; - } - - g_object_unref (priv->owner_client); - priv->owner_client = NULL; -} - -static void -impl_owner_died (EvolutionShellComponent *shell_component) -{ - EvolutionShellComponentPrivate *priv; - - priv = shell_component->priv; - - g_object_unref (priv->owner_client); - priv->owner_client = NULL; - - /* The default implementation for ::owner_died emits ::owner_unset, so - that we make the behavior for old components kind of correct without - even if they don't handle the new ::owner_died signal correctly - yet. */ - - g_signal_emit (shell_component, signals[OWNER_UNSET], 0); -} - - -/* Initialization. */ - -static void -evolution_shell_component_class_init (EvolutionShellComponentClass *klass) -{ - EvolutionShellComponentClass *shell_component_class; - GObjectClass *object_class; - POA_GNOME_Evolution_ShellComponent__epv *epv = &klass->epv; - - object_class = G_OBJECT_CLASS (klass); - object_class->dispose = impl_dispose; - object_class->finalize = impl_finalize; - - signals[OWNER_SET] - = g_signal_new ("owner_set", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, owner_set), - NULL, NULL, - e_shell_marshal_NONE__POINTER_POINTER, - G_TYPE_NONE, 2, - G_TYPE_POINTER, G_TYPE_POINTER); - - signals[OWNER_DIED] - = g_signal_new ("owner_died", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, owner_died), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - signals[OWNER_UNSET] - = g_signal_new ("owner_unset", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, owner_unset), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - signals[DEBUG] - = g_signal_new ("debug", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, debug), - NULL, NULL, - e_shell_marshal_NONE__NONE, - G_TYPE_NONE, 0); - - signals[INTERACTIVE] - = g_signal_new ("interactive", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, interactive), - NULL, NULL, - e_shell_marshal_NONE__BOOL_INT, - G_TYPE_NONE, 2, - G_TYPE_BOOLEAN, - G_TYPE_INT); - - signals[HANDLE_EXTERNAL_URI] - = g_signal_new ("handle_external_uri", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, handle_external_uri), - NULL, NULL, - e_shell_marshal_NONE__STRING, - G_TYPE_NONE, 1, - G_TYPE_STRING); - - signals[USER_CREATE_NEW_ITEM] - = g_signal_new ("user_create_new_item", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, user_create_new_item), - NULL, NULL, - e_shell_marshal_VOID__STRING_STRING_STRING, - G_TYPE_NONE, 3, - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_STRING); - - signals[SEND_RECEIVE] - = g_signal_new ("send_receive", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (EvolutionShellComponentClass, send_receive), - NULL, NULL, - e_shell_marshal_NONE__BOOL, - G_TYPE_NONE, 1, - G_TYPE_BOOLEAN); - - parent_class = g_type_class_ref(PARENT_TYPE); - - epv->_get_supportedTypes = impl__get_supportedTypes; - epv->_get_externalUriSchemas = impl__get_externalUriSchemas; - epv->_get_userCreatableItemTypes = impl__get_userCreatableItemTypes; - epv->setOwner = impl_setOwner; - epv->unsetOwner = impl_unsetOwner; - epv->debug = impl_debug; - epv->interactive = impl_interactive; - epv->createView = impl_createView; - epv->handleExternalURI = impl_handleExternalURI; - epv->createFolderAsync = impl_createFolderAsync; - epv->removeFolderAsync = impl_removeFolderAsync; - epv->xferFolderAsync = impl_xferFolderAsync; - epv->populateFolderContextMenu = impl_populateFolderContextMenu; - epv->unpopulateFolderContextMenu = impl_unpopulateFolderContextMenu; - epv->userCreateNewItem = impl_userCreateNewItem; - epv->sendReceive = impl_sendReceive; - epv->requestQuit = impl_requestQuit; - - shell_component_class = EVOLUTION_SHELL_COMPONENT_CLASS (object_class); - shell_component_class->owner_died = impl_owner_died; - shell_component_class->owner_unset = impl_owner_unset; -} - -static void -evolution_shell_component_init (EvolutionShellComponent *shell_component) -{ - EvolutionShellComponentPrivate *priv; - - priv = g_new (EvolutionShellComponentPrivate, 1); - - priv->folder_types = NULL; - priv->external_uri_schemas = NULL; - - priv->create_view_fn = NULL; - priv->create_folder_fn = NULL; - priv->remove_folder_fn = NULL; - priv->xfer_folder_fn = NULL; - priv->populate_folder_context_menu_fn = NULL; - priv->unpopulate_folder_context_menu_fn = NULL; - - priv->owner_client = NULL; - priv->user_creatable_item_types = NULL; - priv->closure = NULL; - - priv->ping_timeout_id = -1; - - priv->uic = NULL; - - shell_component->priv = priv; -} - - -void -evolution_shell_component_construct (EvolutionShellComponent *shell_component, - const EvolutionShellComponentFolderType folder_types[], - const char *external_uri_schemas[], - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentXferFolderFn xfer_folder_fn, - EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn, - EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn, - EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn, - EvolutionShellComponentRequestQuitFn request_quit_fn, - void *closure) -{ - EvolutionShellComponentPrivate *priv; - int i; - - g_return_if_fail (shell_component != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component)); - g_return_if_fail (folder_types != NULL); - - priv = shell_component->priv; - - priv->create_view_fn = create_view_fn; - priv->create_folder_fn = create_folder_fn; - priv->remove_folder_fn = remove_folder_fn; - priv->xfer_folder_fn = xfer_folder_fn; - priv->populate_folder_context_menu_fn = populate_folder_context_menu_fn; - priv->unpopulate_folder_context_menu_fn = unpopulate_folder_context_menu_fn; - priv->get_dnd_selection_fn = get_dnd_selection_fn; - priv->request_quit_fn = request_quit_fn; - - priv->closure = closure; - - for (i = 0; folder_types[i].name != NULL; i++) { - EvolutionShellComponentFolderType *new; - - if (folder_types[i].icon_name == NULL - || folder_types[i].name[0] == '\0' - || folder_types[i].icon_name[0] == '\0') - continue; - - new = g_new (EvolutionShellComponentFolderType, 1); - new->name = g_strdup (folder_types[i].name); - new->icon_name = g_strdup (folder_types[i].icon_name); - - /* Notice that these get translated here. */ - new->display_name = g_strdup (_(folder_types[i].display_name)); - new->description = g_strdup (_(folder_types[i].description)); - - new->user_creatable = folder_types[i].user_creatable; - new->accepted_dnd_types = duplicate_null_terminated_string_array (folder_types[i].accepted_dnd_types); - new->exported_dnd_types = duplicate_null_terminated_string_array (folder_types[i].exported_dnd_types); - - priv->folder_types = g_list_prepend (priv->folder_types, new); - } - - if (priv->folder_types == NULL) - g_warning ("No valid folder types constructing EShellComponent %p", shell_component); - - if (external_uri_schemas != NULL) { - for (i = 0; external_uri_schemas[i] != NULL; i++) - priv->external_uri_schemas = g_list_prepend (priv->external_uri_schemas, - g_strdup (external_uri_schemas[i])); - } -} - -EvolutionShellComponent * -evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[], - const char *external_uri_schemas[], - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentXferFolderFn xfer_folder_fn, - EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn, - EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn, - EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn, - EvolutionShellComponentRequestQuitFn request_quit_fn, - void *closure) -{ - EvolutionShellComponent *new; - - g_return_val_if_fail (folder_types != NULL, NULL); - - new = g_object_new (evolution_shell_component_get_type (), NULL); - - evolution_shell_component_construct (new, - folder_types, - external_uri_schemas, - create_view_fn, - create_folder_fn, - remove_folder_fn, - xfer_folder_fn, - populate_folder_context_menu_fn, - unpopulate_folder_context_menu_fn, - get_dnd_selection_fn, - request_quit_fn, - closure); - - return new; -} - -EvolutionShellClient * -evolution_shell_component_get_owner (EvolutionShellComponent *shell_component) -{ - g_return_val_if_fail (shell_component != NULL, NULL); - g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component), NULL); - - return shell_component->priv->owner_client; -} - -gulong evolution_shell_component_get_parent_view_xid(EvolutionShellComponent *shell_component) -{ - g_return_val_if_fail (shell_component != NULL, 0); - g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component), 0); - - return shell_component->priv->parent_view_xid; -} - - -void -evolution_shell_component_add_user_creatable_item (EvolutionShellComponent *shell_component, - const char *id, - const char *description, - const char *menu_description, - const char *tooltip, - const char *folder_type, - char menu_shortcut, - GdkPixbuf *icon) -{ - EvolutionShellComponentPrivate *priv; - UserCreatableItemType *type; - - g_return_if_fail (shell_component != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component)); - g_return_if_fail (id != NULL); - g_return_if_fail (description != NULL); - g_return_if_fail (menu_description != NULL); - - priv = shell_component->priv; - - type = user_creatable_item_type_new (id, description, menu_description, tooltip, folder_type, menu_shortcut, icon); - - priv->user_creatable_item_types = g_slist_prepend (priv->user_creatable_item_types, type); -} - - -/* Public utility functions. */ - -const char * -evolution_shell_component_result_to_string (EvolutionShellComponentResult result) -{ - switch (result) { - case EVOLUTION_SHELL_COMPONENT_OK: - return _("Success"); - case EVOLUTION_SHELL_COMPONENT_CANCEL: - return _("Cancel"); - case EVOLUTION_SHELL_COMPONENT_CORBAERROR: - return _("CORBA error"); - case EVOLUTION_SHELL_COMPONENT_INTERRUPTED: - return _("Interrupted"); - case EVOLUTION_SHELL_COMPONENT_INVALIDARG: - return _("Invalid argument"); - case EVOLUTION_SHELL_COMPONENT_ALREADYOWNED: - return _("Already has an owner"); - case EVOLUTION_SHELL_COMPONENT_NOTOWNED: - return _("No owner"); - case EVOLUTION_SHELL_COMPONENT_NOTFOUND: - return _("Not found"); - case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE: - return _("Unsupported type"); - case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA: - return _("Unsupported schema"); - case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION: - return _("Unsupported operation"); - case EVOLUTION_SHELL_COMPONENT_INTERNALERROR: - return _("Internal error"); - case EVOLUTION_SHELL_COMPONENT_BUSY: - return _("Busy"); - case EVOLUTION_SHELL_COMPONENT_EXISTS: - return _("Exists"); - case EVOLUTION_SHELL_COMPONENT_INVALIDURI: - return _("Invalid URI"); - case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED: - return _("Permission denied"); - case EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS: - return _("Has subfolders"); - case EVOLUTION_SHELL_COMPONENT_NOSPACE: - return _("No space left"); - case EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED: - return _("Old owner has died"); - case EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR: - default: - return _("Unknown error"); - } -} - - -BONOBO_TYPE_FUNC_FULL (EvolutionShellComponent, - GNOME_Evolution_ShellComponent, - PARENT_TYPE, - evolution_shell_component) diff --git a/shell/evolution-shell-component.h b/shell/evolution-shell-component.h deleted file mode 100644 index 53d9a4aae9..0000000000 --- a/shell/evolution-shell-component.h +++ /dev/null @@ -1,217 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-component.h - * - * Copyright (C) 2000, 2001 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef EVOLUTION_SHELL_COMPONENT_H -#define EVOLUTION_SHELL_COMPONENT_H - -#include "Evolution.h" - -#include "evolution-shell-client.h" - -#include <gdk-pixbuf/gdk-pixbuf.h> - -#include <bonobo/bonobo-object.h> -#include <bonobo/bonobo-control.h> - -#ifdef cplusplus -extern "C" { -#pragma } -#endif /* cplusplus */ - -#define EVOLUTION_TYPE_SHELL_COMPONENT (evolution_shell_component_get_type ()) -#define EVOLUTION_SHELL_COMPONENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponent)) -#define EVOLUTION_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponentClass)) -#define EVOLUTION_IS_SHELL_COMPONENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT)) -#define EVOLUTION_IS_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT)) - -#define EVOLUTION_SHELL_COMPONENT_POPUP_PLACEHOLDER "/popups/FolderPopup/ComponentPlaceholder/Items" - - -typedef struct _EvolutionShellComponent EvolutionShellComponent; -typedef struct _EvolutionShellComponentPrivate EvolutionShellComponentPrivate; -typedef struct _EvolutionShellComponentClass EvolutionShellComponentClass; - -enum _EvolutionShellComponentResult { - EVOLUTION_SHELL_COMPONENT_OK, - EVOLUTION_SHELL_COMPONENT_CANCEL, - EVOLUTION_SHELL_COMPONENT_CORBAERROR, - EVOLUTION_SHELL_COMPONENT_INTERRUPTED, - EVOLUTION_SHELL_COMPONENT_INVALIDARG, - EVOLUTION_SHELL_COMPONENT_ALREADYOWNED, - EVOLUTION_SHELL_COMPONENT_NOTOWNED, - EVOLUTION_SHELL_COMPONENT_NOTFOUND, - EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE, - EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDSCHEMA, - EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION, - EVOLUTION_SHELL_COMPONENT_INTERNALERROR, - EVOLUTION_SHELL_COMPONENT_BUSY, - EVOLUTION_SHELL_COMPONENT_EXISTS, - EVOLUTION_SHELL_COMPONENT_INVALIDURI, - EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED, - EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS, - EVOLUTION_SHELL_COMPONENT_NOSPACE, - EVOLUTION_SHELL_COMPONENT_OLDOWNERHASDIED, - EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR -}; -typedef enum _EvolutionShellComponentResult EvolutionShellComponentResult; - -typedef EvolutionShellComponentResult (* EvolutionShellComponentCreateViewFn) - (EvolutionShellComponent *shell_component, - const char *physical_uri, - const char *type, - const char *view_info, - BonoboControl **control_return, - void *closure); -typedef void (* EvolutionShellComponentCreateFolderFn) (EvolutionShellComponent *shell_component, - const char *physical_uri, - const char *type, - const GNOME_Evolution_ShellComponentListener listener, - void *closure); -typedef void (* EvolutionShellComponentRemoveFolderFn) (EvolutionShellComponent *shell_component, - const char *physical_uri, - const char *type, - const GNOME_Evolution_ShellComponentListener listener, - void *closure); -typedef void (* EvolutionShellComponentXferFolderFn) (EvolutionShellComponent *shell_component, - const char *source_physical_uri, - const char *destination_physical_uri, - const char *type, - gboolean remove_source, - const GNOME_Evolution_ShellComponentListener listener, - void *closure); -typedef void (* EvolutionShellComponentPopulateFolderContextMenuFn) (EvolutionShellComponent *shell_component, - BonoboUIComponent *uic, - const char *physical_uri, - const char *type, - void *closure); -typedef void (* EvolutionShellComponentUnpopulateFolderContextMenuFn) (EvolutionShellComponent *shell_component, - BonoboUIComponent *uic, - const char *physical_uri, - const char *type, - void *closure); -typedef char * (* EvolutionShellComponentGetDndSelectionFn) (EvolutionShellComponent *shell_component, - const char *physical_uri, - int type, - int *format_return, - const char **selection_return, - int *selection_length_return, - void *closure); - -typedef gboolean (* EvolutionShellComponentRequestQuitFn) (EvolutionShellComponent *shell_component, - void *closure); - -struct _EvolutionShellComponentFolderType { - char *name; - char *icon_name; - char *display_name; - char *description; - - gboolean user_creatable; - - /* The following are NULL-terminated arrays. */ - char **accepted_dnd_types; - char **exported_dnd_types; -}; -typedef struct _EvolutionShellComponentFolderType EvolutionShellComponentFolderType; - -struct _EvolutionShellComponent { - BonoboObject parent; - - EvolutionShellComponentPrivate *priv; -}; - -struct _EvolutionShellComponentClass { - BonoboObjectClass parent_class; - - POA_GNOME_Evolution_ShellComponent__epv epv; - - /* Signals. */ - - void (* owner_set) (EvolutionShellComponent *shell_component, - EvolutionShellClient *shell_client, - const char *evolution_homedir); - void (* owner_unset) (EvolutionShellComponent *shell_component); - void (* owner_died) (EvolutionShellComponent *shell_component); - - void (* debug) (EvolutionShellComponent *shell_component); - - void (* interactive) (EvolutionShellComponent *shell_component, - gboolean is_interactive, - unsigned long new_view_xid); - - void (* handle_external_uri) (EvolutionShellComponent *shell_component, - const char *uri); - - void (* user_create_new_item) (EvolutionShellComponent *shell_component, - const char *id, - const char *parent_folder_physical_uri, - const char *parent_folder_type); - - void (* send_receive) (EvolutionShellComponent *shell_component, - gboolean show_dialog); -}; - - -GtkType evolution_shell_component_get_type (void); -void evolution_shell_component_construct (EvolutionShellComponent *shell_component, - const EvolutionShellComponentFolderType folder_types[], - const char *external_uri_schemas[], - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentXferFolderFn xfer_folder_fn, - EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn, - EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn, - EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn, - EvolutionShellComponentRequestQuitFn request_quit_fn, - void *closure); -EvolutionShellComponent *evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[], - const char *external_uri_schemas[], - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentXferFolderFn xfer_folder_fn, - EvolutionShellComponentPopulateFolderContextMenuFn populate_folder_context_menu_fn, - EvolutionShellComponentUnpopulateFolderContextMenuFn unpopulate_folder_context_menu_fn, - EvolutionShellComponentGetDndSelectionFn get_dnd_selection_fn, - EvolutionShellComponentRequestQuitFn request_quit_fn, - void *closure); -EvolutionShellClient *evolution_shell_component_get_owner (EvolutionShellComponent *shell_component); - -gulong evolution_shell_component_get_parent_view_xid(EvolutionShellComponent *shell_component); - -void evolution_shell_component_add_user_creatable_item (EvolutionShellComponent *shell_component, - const char *id, - const char *description, - const char *menu_description, - const char *tooltip, - const char *folder_type, - char menu_shortcut, - GdkPixbuf *icon); - -const char *evolution_shell_component_result_to_string (EvolutionShellComponentResult result); - -#ifdef cplusplus -} -#endif /* cplusplus */ - -#endif /* EVOLUTION_SHELL_COMPONENT_H */ diff --git a/shell/evolution-storage.h b/shell/evolution-storage.h deleted file mode 100644 index 209f43a339..0000000000 --- a/shell/evolution-storage.h +++ /dev/null @@ -1,185 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-storage.h - * - * Copyright (C) 2000 Ximian, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __EVOLUTION_STORAGE_H__ -#define __EVOLUTION_STORAGE_H__ - -#include "Evolution.h" - -#include <glib.h> -#include <glib-object.h> - -#include <gdk-pixbuf/gdk-pixbuf.h> - -#include <bonobo/bonobo-object.h> - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_STORAGE (evolution_storage_get_type ()) -#define EVOLUTION_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EVOLUTION_TYPE_STORAGE, EvolutionStorage)) -#define EVOLUTION_STORAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE, EvolutionStorageClass)) -#define EVOLUTION_IS_STORAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EVOLUTION_TYPE_STORAGE)) -#define EVOLUTION_IS_STORAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE)) - - -typedef struct _EvolutionStorage EvolutionStorage; -typedef struct _EvolutionStoragePrivate EvolutionStoragePrivate; -typedef struct _EvolutionStorageClass EvolutionStorageClass; - -enum _EvolutionStorageResult { - EVOLUTION_STORAGE_OK, - - /* Generic errors */ - EVOLUTION_STORAGE_ERROR_GENERIC, - EVOLUTION_STORAGE_ERROR_CORBA, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER, - - /* Registration errors */ - EVOLUTION_STORAGE_ERROR_ALREADYREGISTERED, - EVOLUTION_STORAGE_ERROR_NOTREGISTERED, - EVOLUTION_STORAGE_ERROR_NOREGISTRY, - EVOLUTION_STORAGE_ERROR_EXISTS, - EVOLUTION_STORAGE_ERROR_NOTFOUND, - - /* Folder creation/deletion errors */ - EVOLUTION_STORAGE_ERROR_UNSUPPORTED_OPERATION, - EVOLUTION_STORAGE_ERROR_UNSUPPORTED_TYPE, - EVOLUTION_STORAGE_ERROR_INVALID_URI, - EVOLUTION_STORAGE_ERROR_ALREADY_EXISTS, - EVOLUTION_STORAGE_ERROR_DOES_NOT_EXIST, - EVOLUTION_STORAGE_ERROR_PERMISSION_DENIED, - EVOLUTION_STORAGE_ERROR_NO_SPACE, - EVOLUTION_STORAGE_ERROR_NOT_EMPTY -}; -typedef enum _EvolutionStorageResult EvolutionStorageResult; - -struct _EvolutionStorage { - BonoboObject parent; - - EvolutionStoragePrivate *priv; -}; - -struct _EvolutionStorageClass { - BonoboObjectClass parent_class; - - /* signals */ - void (*create_folder) (EvolutionStorage *storage, - const Bonobo_Listener listener, - const char *path, - const char *type, - const char *description, - const char *parent_physical_uri); - - void (*remove_folder) (EvolutionStorage *storage, - const Bonobo_Listener listener, - const char *path, - const char *physical_uri); - - void (*xfer_folder) (EvolutionStorage *storage, - const Bonobo_Listener listener, - const char *source_path, - const char *destination_path, - gboolean remove_source); - - void (*open_folder) (EvolutionStorage *storage, - const Bonobo_Listener listener, - const char *path); - - void (*update_folder) (EvolutionStorage *storage, - const char *path, - int unread_count); - - void (*discover_shared_folder) (EvolutionStorage *storage, - Bonobo_Listener listener, - const char *user, - const char *folder_name); - - void (*cancel_discover_shared_folder) (EvolutionStorage *storage, - const char *user, - const char *folder_name); - - void (*remove_shared_folder) (EvolutionStorage *storage, - Bonobo_Listener listener, - const char *path); - - void (*show_folder_properties) (EvolutionStorage *storage, - const char *path, - unsigned int itemNumber, - unsigned long parentWindowId); - - POA_GNOME_Evolution_Storage__epv epv; -}; - - -GType evolution_storage_get_type (void); -void evolution_storage_construct (EvolutionStorage *storage, - const char *name, - gboolean has_shared_folders); -EvolutionStorage *evolution_storage_new (const char *name, - gboolean has_shared_folders); - -void evolution_storage_rename (EvolutionStorage *storage, - const char *new_name); - -EvolutionStorageResult evolution_storage_register (EvolutionStorage *storage, - GNOME_Evolution_StorageRegistry corba_registry); -EvolutionStorageResult evolution_storage_register_on_shell (EvolutionStorage *evolution_storage, - GNOME_Evolution_Shell corba_shell); -EvolutionStorageResult evolution_storage_deregister_on_shell (EvolutionStorage *storage, - GNOME_Evolution_Shell corba_shell); -EvolutionStorageResult evolution_storage_new_folder (EvolutionStorage *evolution_storage, - const char *path, - const char *display_name, - const char *type, - const char *physical_uri, - const char *description, - const char *custom_icon_name, - int unread_count, - gboolean can_sync_offline, - int sorting_priority); -EvolutionStorageResult evolution_storage_update_folder (EvolutionStorage *evolution_storage, - const char *path, - int unread_count); -EvolutionStorageResult evolution_storage_update_folder_by_uri (EvolutionStorage *evolution_storage, - const char *physical_uri, - int unread_count); -EvolutionStorageResult evolution_storage_removed_folder (EvolutionStorage *evolution_storage, - const char *path); -gboolean evolution_storage_folder_exists (EvolutionStorage *evolution_storage, - const char *path); -EvolutionStorageResult evolution_storage_has_subfolders (EvolutionStorage *evolution_storage, - const char *path, - const char *message); - -void evolution_storage_add_property_item (EvolutionStorage *evolution_storage, - const char *label, - const char *tooltip, - GdkPixbuf *icon); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __EVOLUTION_STORAGE_H__ */ |