[Xfce4-commits] <thunar:master> Fix file selection problems.
Nick Schermer
noreply at xfce.org
Wed Apr 4 14:10:02 CEST 2012
Updating branch refs/heads/master
to 363940efb3cde8b0495b4719dc1fa7ff7d908b62 (commit)
from bd860803cf533fb6ddd67b8b993d671efcef8c89 (commit)
commit 363940efb3cde8b0495b4719dc1fa7ff7d908b62
Author: Nick Schermer <nick at xfce.org>
Date: Wed Apr 4 14:06:30 2012 +0200
Fix file selection problems.
Two lists of selected files were maintained in the standard view,
resuling in problems like no selection if a selected file was deleted.
Drop the public list and continue using the internal list.
Also fix a memory leak after deleting a selected file.
thunar/thunar-standard-view.c | 50 +++++++++++++++++++++-------------------
thunar/thunar-standard-view.h | 2 -
2 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/thunar/thunar-standard-view.c b/thunar/thunar-standard-view.c
index b8e22db..1ac61ac 100644
--- a/thunar/thunar-standard-view.c
+++ b/thunar/thunar-standard-view.c
@@ -794,9 +794,6 @@ thunar_standard_view_finalize (GObject *object)
g_signal_handlers_disconnect_matched (G_OBJECT (standard_view->model), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, standard_view);
g_object_unref (G_OBJECT (standard_view->model));
- /* release our list of currently selected files */
- thunar_file_list_free (standard_view->selected_files);
-
/* free the statusbar text (if any) */
g_free (standard_view->statusbar_text);
@@ -997,7 +994,7 @@ thunar_standard_view_expose_event (GtkWidget *widget,
static GList*
thunar_standard_view_get_selected_files (ThunarComponent *component)
{
- return THUNAR_STANDARD_VIEW (component)->selected_files;
+ return THUNAR_STANDARD_VIEW (component)->priv->selected_files;
}
@@ -1985,17 +1982,17 @@ thunar_standard_view_action_properties (GtkAction *action,
_thunar_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
/* check if no files are currently selected */
- if (standard_view->selected_files == NULL)
+ if (standard_view->priv->selected_files == NULL)
{
/* if we don't have any files selected, we just popup
* the properties dialog for the current folder.
*/
file = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
}
- else if (g_list_length (standard_view->selected_files) == 1)
+ else if (g_list_length (standard_view->priv->selected_files) == 1)
{
/* popup the properties dialog for the one and only selected file */
- file = THUNAR_FILE (standard_view->selected_files->data);
+ file = THUNAR_FILE (standard_view->priv->selected_files->data);
}
/* popup the properties dialog if we have exactly one file */
@@ -2024,7 +2021,7 @@ thunar_standard_view_action_cut (GtkAction *action,
_thunar_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
_thunar_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (standard_view->clipboard));
- thunar_clipboard_manager_cut_files (standard_view->clipboard, standard_view->selected_files);
+ thunar_clipboard_manager_cut_files (standard_view->clipboard, standard_view->priv->selected_files);
}
@@ -2037,7 +2034,7 @@ thunar_standard_view_action_copy (GtkAction *action,
_thunar_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
_thunar_return_if_fail (THUNAR_IS_CLIPBOARD_MANAGER (standard_view->clipboard));
- thunar_clipboard_manager_copy_files (standard_view->clipboard, standard_view->selected_files);
+ thunar_clipboard_manager_copy_files (standard_view->clipboard, standard_view->priv->selected_files);
}
@@ -2072,7 +2069,7 @@ thunar_standard_view_action_delete (GtkAction *action,
/* delete the selected files */
application = thunar_application_get ();
- thunar_application_unlink_files (application, GTK_WIDGET (standard_view), standard_view->selected_files, FALSE);
+ thunar_application_unlink_files (application, GTK_WIDGET (standard_view), standard_view->priv->selected_files, FALSE);
g_object_unref (G_OBJECT (application));
}
@@ -2088,7 +2085,7 @@ thunar_standard_view_action_paste_into_folder (GtkAction *action,
_thunar_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
/* determine the first selected file and verify that it's a folder */
- file = g_list_nth_data (standard_view->selected_files, 0);
+ file = g_list_nth_data (standard_view->priv->selected_files, 0);
if (G_LIKELY (file != NULL && thunar_file_is_directory (file)))
thunar_clipboard_manager_paste_files (standard_view->clipboard, thunar_file_get_file (file), GTK_WIDGET (standard_view), NULL);
}
@@ -2188,7 +2185,7 @@ thunar_standard_view_action_duplicate (GtkAction *action,
if (G_LIKELY (current_directory != NULL))
{
/* determine the selected files for the view */
- selected_files = thunar_file_list_to_thunar_g_file_list (standard_view->selected_files);
+ selected_files = thunar_file_list_to_thunar_g_file_list (standard_view->priv->selected_files);
if (G_LIKELY (selected_files != NULL))
{
/* copy the selected files into the current directory, which effectively
@@ -2225,7 +2222,7 @@ thunar_standard_view_action_make_link (GtkAction *action,
if (G_LIKELY (current_directory != NULL))
{
/* determine the selected paths for the view */
- selected_files = thunar_file_list_to_thunar_g_file_list (standard_view->selected_files);
+ selected_files = thunar_file_list_to_thunar_g_file_list (standard_view->priv->selected_files);
if (G_LIKELY (selected_files != NULL))
{
/* link the selected files into the current directory, which effectively
@@ -2308,13 +2305,13 @@ thunar_standard_view_action_rename (GtkAction *action,
_thunar_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view));
/* start renaming if we have exactly one selected file */
- if (G_LIKELY (standard_view->selected_files != NULL && standard_view->selected_files->next == NULL))
+ if (G_LIKELY (standard_view->priv->selected_files != NULL && standard_view->priv->selected_files->next == NULL))
{
/* get the window */
window = gtk_widget_get_toplevel (GTK_WIDGET (standard_view));
/* get the file */
- file = THUNAR_FILE (standard_view->selected_files->data);
+ file = THUNAR_FILE (standard_view->priv->selected_files->data);
/* run the rename dialog */
job = thunar_dialogs_show_rename_file (GTK_WINDOW (window), file);
@@ -2324,13 +2321,13 @@ thunar_standard_view_action_rename (GtkAction *action,
g_signal_connect (job, "finished", G_CALLBACK (thunar_standard_view_rename_finished), standard_view);
}
}
- else if (g_list_length (standard_view->selected_files) > 1)
+ else if (g_list_length (standard_view->priv->selected_files) > 1)
{
/* determine the current directory of the view */
file = thunar_navigator_get_current_directory (THUNAR_NAVIGATOR (standard_view));
/* display the bulk rename dialog */
- thunar_show_renamer_dialog (GTK_WIDGET (standard_view), file, standard_view->selected_files, FALSE, NULL);
+ thunar_show_renamer_dialog (GTK_WIDGET (standard_view), file, standard_view->priv->selected_files, FALSE, NULL);
}
}
@@ -2347,7 +2344,7 @@ thunar_standard_view_action_restore (GtkAction *action,
/* restore the selected files */
application = thunar_application_get ();
- thunar_application_restore_files (application, GTK_WIDGET (standard_view), standard_view->selected_files,
+ thunar_application_restore_files (application, GTK_WIDGET (standard_view), standard_view->priv->selected_files,
thunar_standard_view_new_files_closure (standard_view));
g_object_unref (G_OBJECT (application));
}
@@ -2996,7 +2993,7 @@ thunar_standard_view_drag_begin (GtkWidget *view,
thunar_g_file_list_free (standard_view->priv->drag_g_file_list);
/* query the list of selected URIs */
- standard_view->priv->drag_g_file_list = thunar_file_list_to_thunar_g_file_list (standard_view->selected_files);
+ standard_view->priv->drag_g_file_list = thunar_file_list_to_thunar_g_file_list (standard_view->priv->selected_files);
if (G_LIKELY (standard_view->priv->drag_g_file_list != NULL))
{
/* determine the first selected file */
@@ -3067,7 +3064,7 @@ thunar_standard_view_row_deleted (ThunarListModel *model,
GtkTreePath *path,
ThunarStandardView *standard_view)
{
- GtkTreePath *path_copy = NULL;
+ GtkTreePath *path_copy;
GList *selected_items;
_thunar_return_if_fail (THUNAR_IS_LIST_MODEL (model));
@@ -3093,9 +3090,14 @@ thunar_standard_view_row_deleted (ThunarListModel *model,
* been removed. If the first row is removed, select the first row after the
* removal, if any other row is removed, select the row before that one */
if (G_LIKELY (gtk_tree_path_prev (path_copy)))
- standard_view->priv->selection_before_delete = gtk_tree_path_copy (path_copy);
+ {
+ standard_view->priv->selection_before_delete = path_copy;
+ }
else
- standard_view->priv->selection_before_delete = gtk_tree_path_copy (path_copy);
+ {
+ standard_view->priv->selection_before_delete = gtk_tree_path_new_first ();
+ gtk_tree_path_free (path_copy);
+ }
/* Free path list */
g_list_foreach (selected_items, (GFunc) gtk_tree_path_free, NULL);
@@ -3641,7 +3643,7 @@ thunar_standard_view_selection_changed (ThunarStandardView *standard_view)
}
/* release the previously selected files */
- thunar_file_list_free (standard_view->selected_files);
+ thunar_file_list_free (standard_view->priv->selected_files);
/* determine the new list of selected files (replacing GtkTreePath's with ThunarFile's) */
selected_files = (*THUNAR_STANDARD_VIEW_GET_CLASS (standard_view)->get_selected_items) (standard_view);
@@ -3658,7 +3660,7 @@ thunar_standard_view_selection_changed (ThunarStandardView *standard_view)
}
/* and setup the new selected files list */
- standard_view->selected_files = selected_files;
+ standard_view->priv->selected_files = selected_files;
/* enable "Restore" if we have only trashed files (atleast one file) */
for (lp = selected_files, restorable = (lp != NULL); lp != NULL; lp = lp->next)
diff --git a/thunar/thunar-standard-view.h b/thunar/thunar-standard-view.h
index 0e31033..0fa1e25 100644
--- a/thunar/thunar-standard-view.h
+++ b/thunar/thunar-standard-view.h
@@ -125,8 +125,6 @@ struct _ThunarStandardView
ThunarListModel *model;
gchar *statusbar_text;
- GList *selected_files;
-
GtkActionGroup *action_group;
GtkUIManager *ui_manager;
guint ui_merge_id;
More information about the Xfce4-commits
mailing list