reviewed by: Federico Mena Quintero

2007-11-26  Josselin Mouette <joss@malsain.org>

        reviewed by: Federico Mena Quintero

        * gtk/gtkfilechooserdefault.c: (shortcuts_append_paths),
        (shortcuts_add_bookmarks), (shortcuts_selection_changed_cb),
        (shortcuts_list_create), (gtk_file_chooser_default_should_respond):
        Make the shortcuts activate with a single click. (#148828)
        Fix a few things affected by the change:
          - Set selection mode to GTK_SELECTION_SINGLE to allow a case 
            where no shortcut is selected.
          - Don't activate a shortcut in the response callback.
          - Filter out duplicate entries in volumes and bookmarks to 
            avoid the selection to change when reordering them with DnD.


svn path=/trunk/; revision=19072
This commit is contained in:
Josselin Mouette 2007-11-26 23:16:19 +00:00 committed by Josselin Mouette
parent d4c95e7fb4
commit 21a30978dc
2 changed files with 36 additions and 51 deletions

View File

@ -1,3 +1,18 @@
2007-11-26 Josselin Mouette <joss@malsain.org>
reviewed by: Federico Mena Quintero
* gtk/gtkfilechooserdefault.c: (shortcuts_append_paths),
(shortcuts_add_bookmarks), (shortcuts_selection_changed_cb),
(shortcuts_list_create), (gtk_file_chooser_default_should_respond):
Make the shortcuts activate with a single click. (#148828)
Fix a few things affected by the change:
- Set selection mode to GTK_SELECTION_SINGLE to allow a case
where no shortcut is selected.
- Don't activate a shortcut in the response callback.
- Filter out duplicate entries in volumes and bookmarks to
avoid the selection to change when reordering them with DnD.
2007-11-26 Matthias Clasen <mclasen@redhat.com> 2007-11-26 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkmain.c: * gtk/gtkmain.c:

View File

@ -390,10 +390,6 @@ static void check_preview_change (GtkFileChooserDefault *impl);
static void filter_combo_changed (GtkComboBox *combo_box, static void filter_combo_changed (GtkComboBox *combo_box,
GtkFileChooserDefault *impl); GtkFileChooserDefault *impl);
static void shortcuts_row_activated_cb (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
GtkFileChooserDefault *impl);
static gboolean shortcuts_key_press_event_cb (GtkWidget *widget, static gboolean shortcuts_key_press_event_cb (GtkWidget *widget,
GdkEventKey *event, GdkEventKey *event,
@ -2002,9 +1998,7 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
profile_start ("start", NULL); profile_start ("start", NULL);
/* As there is no separator now, we want to start there. start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR) + 1;
*/
start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
num_inserted = 0; num_inserted = 0;
for (; paths; paths = paths->next) for (; paths; paths = paths->next)
@ -2016,6 +2010,8 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
if (impl->local_only && if (impl->local_only &&
!gtk_file_system_path_is_local (impl->file_system, path)) !gtk_file_system_path_is_local (impl->file_system, path))
continue; continue;
if (shortcut_find_position (impl, path) != -1)
continue;
label = gtk_file_system_get_bookmark_label (impl->file_system, path); label = gtk_file_system_get_bookmark_label (impl->file_system, path);
@ -2245,13 +2241,14 @@ shortcuts_add_bookmarks (GtkFileChooserDefault *impl)
impl->num_bookmarks + 1); impl->num_bookmarks + 1);
impl->num_bookmarks = 0; impl->num_bookmarks = 0;
shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
bookmarks = gtk_file_system_list_bookmarks (impl->file_system); bookmarks = gtk_file_system_list_bookmarks (impl->file_system);
shortcuts_append_paths (impl, bookmarks); shortcuts_append_paths (impl, bookmarks);
gtk_file_paths_free (bookmarks); gtk_file_paths_free (bookmarks);
if (impl->num_bookmarks > 0) if (impl->num_bookmarks == 0)
shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR); shortcuts_remove_rows (impl, shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR), 1);
if (impl->shortcuts_pane_filter_model) if (impl->shortcuts_pane_filter_model)
gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model)); gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model));
@ -3657,8 +3654,22 @@ static void
shortcuts_selection_changed_cb (GtkTreeSelection *selection, shortcuts_selection_changed_cb (GtkTreeSelection *selection,
GtkFileChooserDefault *impl) GtkFileChooserDefault *impl)
{ {
GtkTreeIter iter;
GtkTreeIter child_iter;
bookmarks_check_remove_sensitivity (impl); bookmarks_check_remove_sensitivity (impl);
shortcuts_check_popup_sensitivity (impl); shortcuts_check_popup_sensitivity (impl);
if (impl->changing_folder)
return;
if (gtk_tree_selection_get_selected(selection, NULL, &iter))
{
gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model),
&child_iter,
&iter);
shortcuts_activate_iter (impl, &child_iter);
}
} }
static gboolean static gboolean
@ -3930,7 +3941,7 @@ shortcuts_list_create (GtkFileChooserDefault *impl)
GDK_ACTION_COPY | GDK_ACTION_MOVE); GDK_ACTION_COPY | GDK_ACTION_MOVE);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
gtk_tree_selection_set_select_function (selection, gtk_tree_selection_set_select_function (selection,
shortcuts_select_func, shortcuts_select_func,
impl, NULL); impl, NULL);
@ -3938,9 +3949,6 @@ shortcuts_list_create (GtkFileChooserDefault *impl)
g_signal_connect (selection, "changed", g_signal_connect (selection, "changed",
G_CALLBACK (shortcuts_selection_changed_cb), impl); G_CALLBACK (shortcuts_selection_changed_cb), impl);
g_signal_connect (impl->browse_shortcuts_tree_view, "row_activated",
G_CALLBACK (shortcuts_row_activated_cb), impl);
g_signal_connect (impl->browse_shortcuts_tree_view, "key_press_event", g_signal_connect (impl->browse_shortcuts_tree_view, "key_press_event",
G_CALLBACK (shortcuts_key_press_event_cb), impl); G_CALLBACK (shortcuts_key_press_event_cb), impl);
@ -8604,25 +8612,6 @@ gtk_file_chooser_default_should_respond (GtkFileChooserEmbed *chooser_embed)
gtk_file_path_free (path); gtk_file_path_free (path);
return retval; return retval;
} }
else if (impl->toplevel_last_focus_widget == impl->browse_shortcuts_tree_view)
{
/* The focus is on a dialog's action area button, *and* the widget that
* was focused immediately before it is the shortcuts list. Switch to the
* selected shortcut and tell the caller not to respond.
*/
GtkTreeIter iter;
if (shortcuts_get_selected (impl, &iter))
{
shortcuts_activate_iter (impl, &iter);
focus_browse_tree_view_if_possible (impl);
}
else
goto file_list;
return FALSE;
}
else if (impl->toplevel_last_focus_widget == impl->browse_files_tree_view) else if (impl->toplevel_last_focus_widget == impl->browse_files_tree_view)
{ {
/* The focus is on a dialog's action area button, *and* the widget that /* The focus is on a dialog's action area button, *and* the widget that
@ -10482,25 +10471,6 @@ shortcuts_activate_iter (GtkFileChooserDefault *impl,
} }
} }
/* Callback used when a row in the shortcuts list is activated */
static void
shortcuts_row_activated_cb (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
GtkFileChooserDefault *impl)
{
GtkTreeIter iter;
GtkTreeIter child_iter;
if (!gtk_tree_model_get_iter (impl->shortcuts_pane_filter_model, &iter, path))
return;
gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model),
&child_iter,
&iter);
shortcuts_activate_iter (impl, &child_iter);
}
/* Handler for GtkWidget::key-press-event on the shortcuts list */ /* Handler for GtkWidget::key-press-event on the shortcuts list */
static gboolean static gboolean
shortcuts_key_press_event_cb (GtkWidget *widget, shortcuts_key_press_event_cb (GtkWidget *widget,