(update_other_users_folder_items_sensitivity):

New function to toggle the "open other user's folder" menu item
sensitivity on or off depending on whether there are any storages
that actually support that.
(storage_set_removed_storage_callback): New callback for the
EStorageSet's "removed_storage" signal; it updates the sensitivity
if necessary.
(storage_set_new_storage_callback): Likewise, new callback for the
EStorageSet's "new_storage" signal.
(e_shell_view_construct): Connect these two signal callbacks here.
Also, call update_other_users_folder_items_sensitivity() to set up
the initial sensitivity of the menu item.
(update_for_current_uri): Add a missing EStorageSetView cast here.

svn path=/trunk/; revision=20209
This commit is contained in:
Ettore Perazzoli
2003-03-06 19:25:20 +00:00
parent bfb03e8441
commit d039f69326
2 changed files with 80 additions and 7 deletions

View File

@ -1,3 +1,19 @@
2003-03-06 Ettore Perazzoli <ettore@ximian.com>
* e-shell-view.c (update_other_users_folder_items_sensitivity):
New function to toggle the "open other user's folder" menu item
sensitivity on or off depending on whether there are any storages
that actually support that.
(storage_set_removed_storage_callback): New callback for the
EStorageSet's "removed_storage" signal; it updates the sensitivity
if necessary.
(storage_set_new_storage_callback): Likewise, new callback for the
EStorageSet's "new_storage" signal.
(e_shell_view_construct): Connect these two signal callbacks here.
Also, call update_other_users_folder_items_sensitivity() to set up
the initial sensitivity of the menu item.
(update_for_current_uri): Add a missing EStorageSetView cast here.
2003-03-06 Ettore Perazzoli <ettore@ximian.com>
[#34371]

View File

@ -224,6 +224,36 @@ view_destroy (View *view)
/* Utility functions. */
static void
update_other_users_folder_items_sensitivity (EShellView *shell_view)
{
EShellViewPrivate *priv = shell_view->priv;
gboolean a_storage_supports_shared_folders;
GList *storage_list, *p;
storage_list = e_storage_set_get_storage_list (e_shell_get_storage_set (priv->shell));
a_storage_supports_shared_folders = FALSE;
for (p = storage_list; p != NULL; p = p->next) {
if (e_storage_supports_shared_folders (E_STORAGE (p->data)))
a_storage_supports_shared_folders = TRUE;
}
if (a_storage_supports_shared_folders) {
bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileOpenOtherUsersFolder",
"sensitive", "1", NULL);
bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileRemoveOtherUsersFolder",
"sensitive", "1", NULL);
} else {
bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileOpenOtherUsersFolder",
"sensitive", "0", NULL);
bonobo_ui_component_set_prop (priv->ui_component, "/commands/FileRemoveOtherUsersFolder",
"sensitive", "0", NULL);
}
g_list_foreach (storage_list, (GFunc) g_object_unref, NULL);
g_list_free (storage_list);
}
static GtkWidget *
create_label_for_empty_page (void)
{
@ -569,6 +599,28 @@ handle_current_folder_removed (EShellView *shell_view)
/* Callbacks for the EStorageSet. */
static void
storage_set_new_storage_callback (EStorageSet *storage_set,
EStorage *storage,
void *data)
{
if (e_storage_supports_shared_folders (storage))
update_other_users_folder_items_sensitivity (E_SHELL_VIEW (data));
}
static void
storage_set_removed_storage_callback (EStorageSet *storage_set,
EStorage *storage,
void *data)
{
EShellView *shell_view = E_SHELL_VIEW (data);
if (! e_storage_supports_shared_folders (storage))
return;
update_other_users_folder_items_sensitivity (shell_view);
}
static void
storage_set_removed_folder_callback (EStorageSet *storage_set,
const char *path,
@ -1743,6 +1795,7 @@ e_shell_view_construct (EShellView *shell_view,
const char *uri)
{
EShellViewPrivate *priv;
EStorageSet *storage_set;
EShellView *view;
char *uri_to_load;
@ -1760,7 +1813,7 @@ e_shell_view_construct (EShellView *shell_view,
if (!view) {
g_object_unref (shell_view);
return NULL;
}
}
priv->shell = shell;
bonobo_object_ref (BONOBO_OBJECT (priv->shell));
@ -1768,10 +1821,6 @@ e_shell_view_construct (EShellView *shell_view,
g_signal_connect (view, "delete_event",
G_CALLBACK (delete_event_cb), NULL);
e_signal_connect_while_alive (e_shell_get_storage_set (priv->shell),
"updated_folder", G_CALLBACK (updated_folder_cb),
shell_view, shell_view);
priv->ui_container = bonobo_window_get_ui_container (BONOBO_WINDOW (view));
g_signal_connect (priv->ui_container, "system_exception",
G_CALLBACK (unmerge_on_error), NULL);
@ -1800,13 +1849,21 @@ e_shell_view_construct (EShellView *shell_view,
g_signal_connect_object (shell, "line_status_changed",
G_CALLBACK (shell_line_status_changed_cb), shell_view, 0);
g_signal_connect_object (GTK_OBJECT (e_shell_get_storage_set (shell)), "removed_folder",
storage_set = e_shell_get_storage_set (shell);
e_signal_connect_while_alive (storage_set, "updated_folder",
G_CALLBACK (updated_folder_cb), shell_view, shell_view);
g_signal_connect_object (storage_set, "new_storage",
G_CALLBACK (storage_set_new_storage_callback), shell_view, 0);
g_signal_connect_object (storage_set, "removed_storage",
G_CALLBACK (storage_set_removed_storage_callback), shell_view, 0);
g_signal_connect_object (storage_set, "removed_folder",
G_CALLBACK (storage_set_removed_folder_callback), shell_view, 0);
e_shell_user_creatable_items_handler_attach_menus (e_shell_get_user_creatable_items_handler (priv->shell),
shell_view);
setup_defaults (view);
update_other_users_folder_items_sensitivity (view);
if (uri != NULL) {
uri_to_load = g_strdup (uri);
@ -2016,7 +2073,7 @@ update_for_current_uri (EShellView *shell_view)
g_signal_handlers_block_by_func (priv->storage_set_view,
G_CALLBACK (folder_selected_cb), shell_view);
curr_path = e_storage_set_view_get_current_folder (priv->storage_set_view);
curr_path = e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view));
if (path != NULL && (curr_path == NULL || strcmp(path, curr_path)))
e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view), path);