aboutsummaryrefslogtreecommitdiffstats
path: root/shell/evolution-storage.c
diff options
context:
space:
mode:
authorJason Leach <jleach@ximian.com>2001-08-04 07:08:38 +0800
committerJacob Leach <jleach@src.gnome.org>2001-08-04 07:08:38 +0800
commit385ba85d425e59a0a254abef620a90bd563cdeb8 (patch)
tree53fd4b38568a19463f8c33d4706c729f4febb7f7 /shell/evolution-storage.c
parent308aaf47ea788683b47a600d6c6f31563d7ee070 (diff)
downloadgsoc2013-evolution-385ba85d425e59a0a254abef620a90bd563cdeb8.tar.gz
gsoc2013-evolution-385ba85d425e59a0a254abef620a90bd563cdeb8.tar.zst
gsoc2013-evolution-385ba85d425e59a0a254abef620a90bd563cdeb8.zip
[Removing Evolution::LocalStorage interface, abstracting the unread counts
2001-08-03 Jason Leach <jleach@ximian.com> [Removing Evolution::LocalStorage interface, abstracting the unread counts from a folder's name, also abstract unread counts from a shortcut's name. Fixes #4489 and #5497] * e-shortcuts.c (shortcut_item_new): Take an unread_count argument now. (shortcut_item_update): Ditto. * e-shortcuts-view-model.c (get_name_with_unread): Get a string containing a shortcut name and it's unread, because these are abstracted now. (load_group_into_model): Use the above function to make shortcuts that have unread counts. * e-storage-set-view.c (update_folder_with_unread_hash): Keep a hash of folder names with unread counts, because the folder name and it's unread count are to be separated, only the ETree is supposed to present it as one string. * e-shell-view.c: Renamed EShellView::view_title_bar to folder_title_bar, to closer match the * e-shell-view-menu.c (new_shortcut_dialog_folder_selected_cb): Make a shortcut with the unread count. * e-shell-folder-commands.c (e_shell_command_add_to_shortcut_bar): Make a shortcut with the unread count. * e-local-storage.c: Updated for API changes. * e-folder.c (e_folder_get_unread_count): New function, does what it says. (e_folder_set_unread_count): Ditto. * e-corba-storage.c (impl_StorageListener_new_folder): Renamed to match the IDL function name. (impl_StorageListener_update_folder): Ditto. (impl_StorageListener_removed_folder): Ditto. * Evolution-Storage.idl (struct Folder): Replace the boolean highlighted with a long unread_count. (updateFolder): Brought in from the now dead Evolution::LocalStorage. * Evolution-Shell.idl (getLocalStorage): Return a Storage instead of a LocalStorage. * Evolution-LocalStorage.idl: Removed, no longer needed, only used function, updateFolder, has been moved into Evolution::Storage interface. * evolution-local-storage.[ch]: Ditto. * evolution-storage.c (impl_Storage_updateFolder): Implementation of the updateFolder taken from ::LocalStorage. (class_init): New "update_folder" signal, taken from evolution-local-storage.c too. (evolution_storage_update_folder): Take an @unread_count int instead of a @highlighted boolean. (evolution_storage_new_folder): Same for here. (evolution_storage_update_folder_by_uri): And here. * evolution-storage-listener.h: "update_folder" signal no longer sends a @highlighted boolean. 2001-08-03 Jason Leach <jleach@ximian.com> * e-shell-view-menu.c (update_offline_menu_item): Use Jakub's new "Work Online" icon and fix a typo. svn path=/trunk/; revision=11633
Diffstat (limited to 'shell/evolution-storage.c')
-rw-r--r--shell/evolution-storage.c94
1 files changed, 84 insertions, 10 deletions
diff --git a/shell/evolution-storage.c b/shell/evolution-storage.c
index ea8f1fd463..29afe24bd3 100644
--- a/shell/evolution-storage.c
+++ b/shell/evolution-storage.c
@@ -45,6 +45,9 @@ struct _EvolutionStoragePrivate {
/* Name of the storage. */
char *name;
+ /* What we will display as the name of the storage. */
+ char *display_name;
+
/* URI for the toplevel node of the storage. */
char *toplevel_node_uri;
@@ -65,6 +68,7 @@ struct _EvolutionStoragePrivate {
enum {
CREATE_FOLDER,
REMOVE_FOLDER,
+ UPDATE_FOLDER,
LAST_SIGNAL
};
@@ -360,6 +364,53 @@ impl_Storage_async_xfer_folder (PortableServer_Servant servant,
}
static void
+impl_Storage_updateFolder (PortableServer_Servant servant,
+ const CORBA_char *path,
+ const CORBA_char *display_name,
+ CORBA_long unread_count,
+ CORBA_Environment *ev)
+{
+ BonoboObject *bonobo_object;
+ EvolutionStoragePrivate *priv;
+ EvolutionStorage *storage;
+ GList *p;
+ CORBA_Environment ev;
+
+ bonobo_object = bonobo_object_from_servant (servant);
+ storage = EVOLUTION_STORAGE (bonobo_object);
+
+ gtk_signal_emit (GTK_OBJECT (storage), signals[UPDATE_FOLDER],
+ path, display_name, unread_count);
+
+ priv = storage->priv;
+
+ if (priv->corba_storage_listeners == NULL)
+ return;
+
+ CORBA_exception_init (&ev);
+
+ for (p = priv->corba_storage_listeners; p != NULL; p = p->next) {
+ GNOME_Evolution_StorageListener listener;
+
+ listener = p->data;
+ GNOME_Evolution_StorageListener_notifyFolderUpdated (listener,
+ path,
+ display_name,
+ unread_count,
+ &ev);
+
+ if (ev._major != CORBA_NO_EXCEPTION)
+ continue;
+
+ /* FIXME: Handle errors */
+
+ break;
+ }
+
+ CORBA_exception_free (&ev);
+}
+
+static void
impl_Storage_add_listener (PortableServer_Servant servant,
const GNOME_Evolution_StorageListener listener,
CORBA_Environment *ev)
@@ -492,6 +543,17 @@ class_init (EvolutionStorageClass *klass)
GTK_TYPE_INT, 2,
GTK_TYPE_STRING,
GTK_TYPE_STRING);
+
+ signals[UPDATE_FOLDER] = gtk_signal_new ("update_folder",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EvolutionStorageClass,
+ update_folder),
+ e_marshal_NONE__POINTER_POINTER_INT,
+ GTK_TYPE_NONE, 3,
+ GTK_TYPE_STRING,
+ GTK_TYPE_STRING,
+ GTK_TYPE_INT);
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
@@ -525,6 +587,7 @@ evolution_storage_get_epv (void)
epv->asyncCreateFolder = impl_Storage_async_create_folder;
epv->asyncRemoveFolder = impl_Storage_async_remove_folder;
epv->asyncXferFolder = impl_Storage_async_xfer_folder;
+ epv->updateFolder = impl_Storage_updateFolder;
epv->addListener = impl_Storage_add_listener;
epv->removeListener = impl_Storage_remove_listener;
@@ -583,6 +646,13 @@ evolution_storage_new (const char *name,
return new;
}
+void
+evolution_storage_rename (EvolutionStorage *evolution_storage,
+ const char *new_name)
+{
+ /* FIXME: Implement me */
+}
+
EvolutionStorageResult
evolution_storage_register (EvolutionStorage *evolution_storage,
GNOME_Evolution_StorageRegistry corba_storage_registry)
@@ -728,7 +798,7 @@ evolution_storage_new_folder (EvolutionStorage *evolution_storage,
const char *type,
const char *physical_uri,
const char *description,
- gboolean highlighted)
+ int unread_count)
{
EvolutionStorageResult result;
EvolutionStoragePrivate *priv;
@@ -757,7 +827,7 @@ evolution_storage_new_folder (EvolutionStorage *evolution_storage,
corba_folder->description = CORBA_string_dup (description);
corba_folder->type = CORBA_string_dup (type);
corba_folder->physical_uri = CORBA_string_dup (physical_uri);
- corba_folder->highlighted = highlighted;
+ corba_folder->unread_count = 0;
if (! e_folder_tree_add (priv->folder_tree, path, corba_folder)) {
CORBA_free (corba_folder);
@@ -793,8 +863,9 @@ evolution_storage_new_folder (EvolutionStorage *evolution_storage,
EvolutionStorageResult
evolution_storage_update_folder (EvolutionStorage *evolution_storage,
- const char *path, const char *display_name,
- gboolean highlighted)
+ const char *path,
+ const char *display_name,
+ int unread_count)
{
EvolutionStorageResult result;
EvolutionStoragePrivate *priv;
@@ -811,6 +882,9 @@ evolution_storage_update_folder (EvolutionStorage *evolution_storage,
priv = evolution_storage->priv;
+ gtk_signal_emit (GTK_OBJECT (evolution_storage), signals[UPDATE_FOLDER],
+ path, display_name, unread_count);
+
if (priv->corba_storage_listeners == NULL)
return EVOLUTION_STORAGE_ERROR_NOTREGISTERED;
@@ -822,7 +896,7 @@ evolution_storage_update_folder (EvolutionStorage *evolution_storage,
GNOME_Evolution_StorageListener listener;
listener = p->data;
- GNOME_Evolution_StorageListener_notifyFolderUpdated (listener, path, display_name, highlighted, &ev);
+ GNOME_Evolution_StorageListener_notifyFolderUpdated (listener, path, display_name, unread_count, &ev);
if (ev._major != CORBA_NO_EXCEPTION)
continue;
@@ -844,7 +918,7 @@ evolution_storage_update_folder (EvolutionStorage *evolution_storage,
if (corba_folder != NULL) {
CORBA_free (corba_folder->display_name);
corba_folder->display_name = CORBA_string_dup (display_name);
- corba_folder->highlighted = highlighted;
+ corba_folder->unread_count = unread_count;
} else
result = EVOLUTION_STORAGE_ERROR_NOTFOUND;
}
@@ -854,9 +928,9 @@ evolution_storage_update_folder (EvolutionStorage *evolution_storage,
EvolutionStorageResult
evolution_storage_update_folder_by_uri (EvolutionStorage *evolution_storage,
- const char *physical_uri,
- const char *display_name,
- gboolean highlighted)
+ const char *physical_uri,
+ const char *display_name,
+ int unread_count)
{
EvolutionStoragePrivate *priv;
char *path;
@@ -870,7 +944,7 @@ evolution_storage_update_folder_by_uri (EvolutionStorage *evolution_storage,
priv = evolution_storage->priv;
path = g_hash_table_lookup (priv->uri_to_path, physical_uri);
- return evolution_storage_update_folder (evolution_storage, path, display_name, highlighted);
+ return evolution_storage_update_folder (evolution_storage, path, display_name, unread_count);
}
EvolutionStorageResult