aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog14
-rw-r--r--shell/e-shell-folder-commands.c15
-rw-r--r--shell/e-shell-view-menu.c2
-rw-r--r--shell/e-shortcuts.c35
-rw-r--r--shell/e-shortcuts.h4
5 files changed, 69 insertions, 1 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 20b59fc098..d2941c494d 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,17 @@
+2002-09-24 Ettore Perazzoli <ettore@ximian.com>
+
+ [Fix #11645 for menu-based folder move operations. Still requires
+ fixage for the DnD case.]
+
+ * e-shell-view-menu.c (launch_pilot_settings): Placate compiler.
+
+ * e-shell-folder-commands.c (xfer_result_callback): When
+ FOLDER_COMMAND_MOVE, update the shortcuts by using
+ e_shortcuts_update_shortcuts_for_changed_uri().
+
+ * e-shortcuts.c (e_shortcuts_update_shortcuts_for_changed_uri):
+ New.
+
2002-09-24 Dan Winship <danw@ximian.com>
* e-shell.c (folder_selection_dialog_folder_selected_cb): Don't
diff --git a/shell/e-shell-folder-commands.c b/shell/e-shell-folder-commands.c
index 884fa97c05..3fe90163b8 100644
--- a/shell/e-shell-folder-commands.c
+++ b/shell/e-shell-folder-commands.c
@@ -149,6 +149,21 @@ xfer_result_callback (EStorageSet *storage_set,
g_free (msg);
}
+ if (folder_command_data->command == FOLDER_COMMAND_MOVE) {
+ char *source_uri;
+ char *destination_uri;
+
+ source_uri = g_strconcat (E_SHELL_URI_PREFIX, folder_command_data->source_path, NULL);
+ destination_uri = g_strconcat (E_SHELL_URI_PREFIX, folder_command_data->destination_path, NULL);
+
+ e_shortcuts_update_shortcuts_for_changed_uri
+ (e_shell_get_shortcuts (folder_command_data->shell),
+ source_uri, destination_uri);
+
+ g_free (source_uri);
+ g_free (destination_uri);
+ }
+
folder_command_data_free (folder_command_data);
}
diff --git a/shell/e-shell-view-menu.c b/shell/e-shell-view-menu.c
index 7503fda642..c8ee62123c 100644
--- a/shell/e-shell-view-menu.c
+++ b/shell/e-shell-view-menu.c
@@ -83,7 +83,7 @@ launch_pilot_settings (const char *extra_arg)
{
char *args[] = {
"gpilotd-control-applet",
- extra_arg,
+ (char *) extra_arg,
NULL
};
int pid;
diff --git a/shell/e-shortcuts.c b/shell/e-shortcuts.c
index 8ad70eba0f..a1ccf6a8e9 100644
--- a/shell/e-shortcuts.c
+++ b/shell/e-shortcuts.c
@@ -1237,4 +1237,39 @@ e_shortcuts_get_group_uses_small_icons (EShortcuts *shortcuts,
}
+void
+e_shortcuts_update_shortcuts_for_changed_uri (EShortcuts *shortcuts,
+ const char *old_uri,
+ const char *new_uri)
+{
+ EShortcutsPrivate *priv;
+ GSList *p;
+
+ g_return_if_fail (E_IS_SHORTCUTS (shortcuts));
+ g_return_if_fail (old_uri != NULL);
+ g_return_if_fail (new_uri != NULL);
+
+ priv = shortcuts->priv;
+
+ for (p = priv->groups; p != NULL; p = p->next) {
+ ShortcutGroup *group;
+ GSList *q;
+
+ group = (ShortcutGroup *) p->data;
+ for (q = group->shortcuts; q != NULL; q = q->next) {
+ EShortcutItem *item;
+
+ item = (EShortcutItem *) q->data;
+
+ if (strcmp (item->uri, old_uri) == 0) {
+ g_free (item->uri);
+ item->uri = g_strdup (new_uri);
+
+ make_dirty (shortcuts);
+ }
+ }
+ }
+}
+
+
E_MAKE_TYPE (e_shortcuts, "EShortcuts", EShortcuts, class_init, init, PARENT_TYPE)
diff --git a/shell/e-shortcuts.h b/shell/e-shortcuts.h
index 1fb4bb8209..30e2ff01e8 100644
--- a/shell/e-shortcuts.h
+++ b/shell/e-shortcuts.h
@@ -156,6 +156,10 @@ void e_shortcuts_set_group_uses_small_icons (EShortcuts *shortcuts,
gboolean e_shortcuts_get_group_uses_small_icons (EShortcuts *shortcuts,
int group_num);
+void e_shortcuts_update_shortcuts_for_changed_uri (EShortcuts *shortcuts,
+ const char *old_uri_,
+ const char *new_uri);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */