From 721eb57a228e05b2d99a9cbc8b4fdee6670593bb Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Tue, 2 Oct 2007 15:50:27 +0000 Subject: [PATCH] 455284 - Focus or toggle location entry 2007-10-02 Federico Mena Quintero Fix http://bugzilla.gnome.org/show_bug.cgi?id=455284 - In the file chooser, Ctrl-L should switch to the location entry. If we are already on the location entry, turn it off. Based on a patch by Jaap A. Haitsma and an idea by Wouter Bolsterlee. * gtk/gtkfilechooserdefault.c (location_button_toggled_cb): Call location_mode_set() directly instead of using toggle_location_mode(). (toggle_location_mode): Removed. (location_toggle_popup_handler): If the file entry is not visible, show it. If it is visible, turn it off only if it is focused. Otherwise, switch to the entry. Signed-off-by: Federico Mena Quintero svn path=/trunk/; revision=18874 --- ChangeLog | 15 +++++++++++++ gtk/gtkfilechooserdefault.c | 45 +++++++++++++++++++++++-------------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2491780444..07df869d1a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2007-10-02 Federico Mena Quintero + + Fix http://bugzilla.gnome.org/show_bug.cgi?id=455284 - In the file + chooser, Ctrl-L should switch to the location entry. If we are + already on the location entry, turn it off. Based on a patch by + Jaap A. Haitsma and an idea by Wouter + Bolsterlee. + + * gtk/gtkfilechooserdefault.c (location_button_toggled_cb): Call + location_mode_set() directly instead of using toggle_location_mode(). + (toggle_location_mode): Removed. + (location_toggle_popup_handler): If the file entry is not visible, + show it. If it is visible, turn it off only if it is focused. + Otherwise, switch to the entry. + 2007-10-01 Kristian Rietveld * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_update_button): diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 484f701d15..819320d84d 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -5141,23 +5141,27 @@ location_mode_set (GtkFileChooserDefault *impl, impl->location_mode = new_mode; } -static void -toggle_location_mode (GtkFileChooserDefault *impl, - gboolean set_button) -{ - LocationMode new_mode; - - /* toggle value */ - new_mode = (impl->location_mode == LOCATION_MODE_PATH_BAR) ? - LOCATION_MODE_FILENAME_ENTRY : LOCATION_MODE_PATH_BAR; - - location_mode_set (impl, new_mode, set_button); -} - static void location_toggle_popup_handler (GtkFileChooserDefault *impl) { - toggle_location_mode (impl, TRUE); + /* If the file entry is not visible, show it. + * If it is visible, turn it off only if it is focused. Otherwise, switch to the entry. + */ + if (impl->location_mode == LOCATION_MODE_PATH_BAR) + { + location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY, TRUE); + } + else if (impl->location_mode == LOCATION_MODE_FILENAME_ENTRY) + { + if (GTK_WIDGET_HAS_FOCUS (impl->location_entry)) + { + location_mode_set (impl, LOCATION_MODE_PATH_BAR, TRUE); + } + else + { + gtk_widget_grab_focus (impl->location_entry); + } + } } /* Callback used when one of the location mode buttons is toggled */ @@ -5166,15 +5170,22 @@ location_button_toggled_cb (GtkToggleButton *toggle, GtkFileChooserDefault *impl) { gboolean is_active; + LocationMode new_mode; is_active = gtk_toggle_button_get_active (toggle); if (is_active) - g_assert (impl->location_mode == LOCATION_MODE_PATH_BAR); + { + g_assert (impl->location_mode == LOCATION_MODE_PATH_BAR); + new_mode = LOCATION_MODE_FILENAME_ENTRY; + } else - g_assert (impl->location_mode == LOCATION_MODE_FILENAME_ENTRY); + { + g_assert (impl->location_mode == LOCATION_MODE_FILENAME_ENTRY); + new_mode = LOCATION_MODE_PATH_BAR; + } - toggle_location_mode (impl, FALSE); + location_mode_set (impl, new_mode, FALSE); } /* Creates a toggle button for the location entry. */