summaryrefslogtreecommitdiff
path: root/src/nautilus-view.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2012-01-16 22:47:03 -0500
committerCosimo Cecchi <cosimoc@gnome.org>2012-01-20 22:14:01 -0500
commitf76844a3208033a97532222ce531bd9a04205871 (patch)
tree2c926c1998b9d2abe170ecd6c9e48c45c4152603 /src/nautilus-view.c
parentdcf5d6796b5adc13a4b03d36f30d9f15025e9df9 (diff)
downloadnautilus-f76844a3208033a97532222ce531bd9a04205871.tar.gz
undo: pass in a GtkWindow for undo operations
So that dialogs triggered by the file operations can correctly be parented.
Diffstat (limited to 'src/nautilus-view.c')
-rw-r--r--src/nautilus-view.c130
1 files changed, 69 insertions, 61 deletions
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index 1470bb393..bfda54196 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -2353,10 +2353,68 @@ nautilus_view_get_selection_count (NautilusView *view)
}
static void
+update_undo_actions (NautilusView *view,
+ gboolean invalidate)
+{
+ NautilusFileUndoManager *manager;
+ NautilusFileUndoMenuData *menu_data;
+ GtkAction *action;
+ const gchar *label, *tooltip;
+ gboolean available;
+ gboolean undo_active, redo_active;
+
+ manager = nautilus_file_undo_manager_get ();
+ menu_data = nautilus_file_undo_manager_get_menu_data (manager);
+
+ undo_active = menu_data->undo_label != NULL && !invalidate;
+ redo_active = menu_data->redo_label != NULL && !invalidate;
+
+ /* Update undo entry */
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ "Undo");
+ available = undo_active;
+ if (available) {
+ label = menu_data->undo_label;
+ tooltip = menu_data->undo_description;
+ } else {
+ /* Reset to default info */
+ label = _("Undo");
+ tooltip = _("Undo the last action");
+ }
+
+ g_object_set (action,
+ "label", label,
+ "tooltip", tooltip,
+ NULL);
+ gtk_action_set_sensitive (action, available);
+
+ /* Update redo entry */
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ "Redo");
+ available = redo_active;
+ if (available) {
+ label = menu_data->redo_label;
+ tooltip = menu_data->redo_description;
+ } else {
+ /* Reset to default info */
+ label = _("Redo");
+ tooltip = _("Redo the last undone action");
+ }
+
+ g_object_set (action,
+ "label", label,
+ "tooltip", tooltip,
+ NULL);
+ gtk_action_set_sensitive (action, available);
+
+ nautilus_file_undo_menu_data_free (menu_data);
+}
+
+static void
undo_manager_changed_cb (NautilusFileUndoManager* manager,
NautilusView *view)
{
- schedule_update_menus (view);
+ update_undo_actions (view, FALSE);
}
void
@@ -6004,87 +6062,37 @@ invoke_external_bulk_rename_utility (NautilusView *view,
}
static void
-update_undo_actions (NautilusView *view,
- gboolean invalidate)
-{
- NautilusFileUndoManager *manager;
- NautilusFileUndoMenuData *menu_data;
- GtkAction *action;
- const gchar *label, *tooltip;
- gboolean available;
- gboolean undo_active, redo_active;
-
- manager = nautilus_file_undo_manager_get ();
- menu_data = nautilus_file_undo_manager_get_menu_data (manager);
-
- undo_active = menu_data->undo_label != NULL && !invalidate;
- redo_active = menu_data->redo_label != NULL && !invalidate;
-
- /* Update undo entry */
- action = gtk_action_group_get_action (view->details->dir_action_group,
- "Undo");
- available = undo_active;
- if (available) {
- label = menu_data->undo_label;
- tooltip = menu_data->undo_description;
- } else {
- /* Reset to default info */
- label = _("Undo");
- tooltip = _("Undo the last action");
- }
-
- g_object_set (action,
- "label", label,
- "tooltip", tooltip,
- NULL);
- gtk_action_set_sensitive (action, available);
-
- /* Update redo entry */
- action = gtk_action_group_get_action (view->details->dir_action_group,
- "Redo");
- available = redo_active;
- if (available) {
- label = menu_data->redo_label;
- tooltip = menu_data->redo_description;
- } else {
- /* Reset to default info */
- label = _("Redo");
- tooltip = _("Redo the last undone action");
- }
-
- g_object_set (action,
- "label", label,
- "tooltip", tooltip,
- NULL);
- gtk_action_set_sensitive (action, available);
-
- nautilus_file_undo_menu_data_free (menu_data);
-}
-
-static void
real_action_undo (NautilusView *view)
{
NautilusFileUndoManager *manager;
+ GtkWidget *toplevel;
manager = nautilus_file_undo_manager_get ();
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
/* Disable menus because they are in an untrustworthy status */
update_undo_actions (view, TRUE);
- nautilus_file_undo_manager_undo (manager, NULL, NULL);
+ nautilus_file_undo_manager_undo (manager,
+ GTK_WINDOW (toplevel),
+ NULL, NULL);
}
static void
real_action_redo (NautilusView *view)
{
NautilusFileUndoManager *manager;
+ GtkWidget *toplevel;
manager = nautilus_file_undo_manager_get ();
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
/* Disable menus because they are in an untrustworthy status */
update_undo_actions (view, TRUE);
- nautilus_file_undo_manager_redo (manager, NULL, NULL);
+ nautilus_file_undo_manager_redo (manager,
+ GTK_WINDOW (toplevel),
+ NULL, NULL);
}
static void