gtk+ r19475 - in branches/gtk-2-12: . gtk



Author: federico
Date: Tue Feb  5 23:11:32 2008
New Revision: 19475
URL: http://svn.gnome.org/viewvc/gtk+?rev=19475&view=rev

Log:
Merge Josselin's patch for single-click shortcuts from trunk
2008-02-05  Federico Mena Quintero  <federico novell com>

	Merged from trunk (patch by 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.

Signed-off-by: Federico Mena Quintero <federico gnu org>


Modified:
   branches/gtk-2-12/ChangeLog
   branches/gtk-2-12/gtk/gtkfilechooserdefault.c

Modified: branches/gtk-2-12/gtk/gtkfilechooserdefault.c
==============================================================================
--- branches/gtk-2-12/gtk/gtkfilechooserdefault.c	(original)
+++ branches/gtk-2-12/gtk/gtkfilechooserdefault.c	Tue Feb  5 23:11:32 2008
@@ -390,10 +390,6 @@
 
 static void filter_combo_changed       (GtkComboBox           *combo_box,
 					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,
 					      GdkEventKey           *event,
@@ -1996,9 +1992,7 @@
 
   profile_start ("start", NULL);
 
-  /* As there is no separator now, we want to start there.
-   */
-  start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
+  start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR) + 1;
   num_inserted = 0;
 
   for (; paths; paths = paths->next)
@@ -2010,6 +2004,8 @@
       if (impl->local_only &&
 	  !gtk_file_system_path_is_local (impl->file_system, path))
 	continue;
+      if (shortcut_find_position (impl, path) != -1)
+        continue;
 
       label = gtk_file_system_get_bookmark_label (impl->file_system, path);
 
@@ -2239,13 +2235,14 @@
 			   impl->num_bookmarks + 1);
 
   impl->num_bookmarks = 0;
+  shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
 
   bookmarks = gtk_file_system_list_bookmarks (impl->file_system);
   shortcuts_append_paths (impl, bookmarks);
   gtk_file_paths_free (bookmarks);
 
-  if (impl->num_bookmarks > 0)
-    shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
+  if (impl->num_bookmarks == 0)
+    shortcuts_remove_rows (impl, shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR), 1);
 
   if (impl->shortcuts_pane_filter_model)
     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_pane_filter_model));
@@ -3651,8 +3648,22 @@
 shortcuts_selection_changed_cb (GtkTreeSelection      *selection,
 				GtkFileChooserDefault *impl)
 {
+  GtkTreeIter iter;
+  GtkTreeIter child_iter;
+
   bookmarks_check_remove_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
@@ -3924,7 +3935,7 @@
 		     GDK_ACTION_COPY | GDK_ACTION_MOVE);
 
   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,
 					  shortcuts_select_func,
 					  impl, NULL);
@@ -3932,9 +3943,6 @@
   g_signal_connect (selection, "changed",
 		    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_CALLBACK (shortcuts_key_press_event_cb), impl);
 
@@ -8598,25 +8606,6 @@
       gtk_file_path_free (path);
       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)
     {
       /* The focus is on a dialog's action area button, *and* the widget that
@@ -10476,25 +10465,6 @@
     }
 }
 
-/* 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 */
 static gboolean
 shortcuts_key_press_event_cb (GtkWidget             *widget,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]