summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2010-09-11 16:01:29 +0200
committerCosimo Cecchi <cosimoc@gnome.org>2010-09-13 11:05:02 +0200
commit8bc3f5acb89eaf0607482bc215fef174866cc50f (patch)
tree6b511513db67bd2c826ce39c5ba6058e61549bd9
parent23c8cf251bf6383074d1f38af65350e17139b70f (diff)
downloadnautilus-8bc3f5acb89eaf0607482bc215fef174866cc50f.tar.gz
list-view: properly setup the editable widget (#627076)
-rw-r--r--src/file-manager/fm-list-view.c63
1 files changed, 28 insertions, 35 deletions
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index 724461e64..d01af6ad6 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -1166,6 +1166,32 @@ sort_column_changed_callback (GtkTreeSortable *sortable,
}
static void
+cell_renderer_editing_started_cb (GtkCellRenderer *renderer,
+ GtkCellEditable *editable,
+ const gchar *path_str,
+ FMListView *list_view)
+{
+ GtkEntry *entry;
+ gint start_offset, end_offset;
+
+ entry = GTK_ENTRY (editable);
+ list_view->details->editable_widget = editable;
+
+ /* Free a previously allocated original_name */
+ g_free (list_view->details->original_name);
+
+ list_view->details->original_name = g_strdup (gtk_entry_get_text (entry));
+ eel_filename_get_rename_region (list_view->details->original_name,
+ &start_offset, &end_offset);
+ gtk_editable_select_region (GTK_EDITABLE (entry), start_offset, end_offset);
+
+ nautilus_clipboard_set_up_editable
+ (GTK_EDITABLE (entry),
+ fm_directory_view_get_ui_manager (FM_DIRECTORY_VIEW (list_view)),
+ FALSE);
+}
+
+static void
cell_renderer_editing_canceled (GtkCellRendererText *cell,
FMListView *view)
{
@@ -1588,7 +1614,8 @@ create_and_set_up_tree_view (FMListView *view)
view->details->file_name_cell = (GtkCellRendererText *)cell;
g_signal_connect (cell, "edited", G_CALLBACK (cell_renderer_edited), view);
g_signal_connect (cell, "editing-canceled", G_CALLBACK (cell_renderer_editing_canceled), view);
-
+ g_signal_connect (cell, "editing-started", G_CALLBACK (cell_renderer_editing_started_cb), view);
+
gtk_tree_view_column_pack_start (view->details->file_name_column, cell, TRUE);
gtk_tree_view_column_set_cell_data_func (view->details->file_name_column, cell,
(GtkTreeCellDataFunc) filename_cell_data_func,
@@ -2617,11 +2644,6 @@ fm_list_view_start_renaming_file (FMDirectoryView *view,
FMListView *list_view;
GtkTreeIter iter;
GtkTreePath *path;
- GtkEntry *entry;
- int start_offset, end_offset;
- gchar *path_str;
- GdkRectangle cell_area;
- GdkRectangle background_area;
list_view = FM_LIST_VIEW (view);
@@ -2642,21 +2664,12 @@ fm_list_view_start_renaming_file (FMDirectoryView *view,
fm_directory_view_freeze_updates (FM_DIRECTORY_VIEW (view));
path = gtk_tree_model_get_path (GTK_TREE_MODEL (list_view->details->model), &iter);
- path_str = gtk_tree_path_to_string (path);
- gtk_tree_view_get_cell_area (list_view->details->tree_view, path,
- list_view->details->file_name_column, &cell_area);
- gtk_tree_view_get_background_area (list_view->details->tree_view, path,
- list_view->details->file_name_column, &background_area);
/* Make filename-cells editable. */
g_object_set (G_OBJECT (list_view->details->file_name_cell),
"editable", TRUE,
NULL);
- list_view->details->editable_widget =
- gtk_cell_renderer_start_editing (GTK_CELL_RENDERER (list_view->details->file_name_cell),
- NULL, NULL, path_str, &background_area,
- &cell_area, 0);
gtk_tree_view_scroll_to_cell (list_view->details->tree_view,
NULL,
list_view->details->file_name_column,
@@ -2666,27 +2679,7 @@ fm_list_view_start_renaming_file (FMDirectoryView *view,
list_view->details->file_name_column,
TRUE);
- entry = GTK_ENTRY (list_view->details->editable_widget);
-
- /* Free a previously allocated original_name */
- g_free (list_view->details->original_name);
-
- list_view->details->original_name = g_strdup (gtk_entry_get_text (entry));
- if (select_all) {
- start_offset = 0;
- end_offset = -1;
- } else {
- eel_filename_get_rename_region (list_view->details->original_name,
- &start_offset, &end_offset);
- }
- gtk_editable_select_region (GTK_EDITABLE (entry), start_offset, end_offset);
-
gtk_tree_path_free (path);
-
- nautilus_clipboard_set_up_editable
- (GTK_EDITABLE (entry),
- fm_directory_view_get_ui_manager (view),
- FALSE);
}
static void