nautilus r13999 - in trunk: . libnautilus-private src/file-manager



Author: cosimoc
Date: Sat Mar 29 14:49:46 2008
New Revision: 13999
URL: http://svn.gnome.org/viewvc/nautilus?rev=13999&view=rev

Log:
2008-03-29  Cosimo Cecchi  <cosimoc gnome org>

	* libnautilus-private/nautilus-icon-container.c:
	(nautilus_icon_container_invert_selection):
	* libnautilus-private/nautilus-icon-container.h:
	* libnautilus-private/nautilus-view.c:
	(nautilus_view_invert_selection):
	* libnautilus-private/nautilus-view.h:
	* src/file-manager/fm-actions.h:
	* src/file-manager/fm-directory-view.c:
	(action_invert_selection_callback),
	(fm_directory_view_invert_selection), (real_update_menus),
	(fm_directory_view_class_init):
	* src/file-manager/fm-directory-view.h:
	* src/file-manager/fm-icon-view.c: (fm_icon_view_invert_selection),
	(fm_icon_view_class_init):
	* src/file-manager/fm-list-view.c: (fm_list_view_invert_selection),
	(fm_list_view_class_init):
	* src/file-manager/nautilus-directory-view-ui.xml:
	Add support for "Invert Selection". Patch by Amos Brocco
	<amos brocco unifr ch>. (#305295).


Modified:
   trunk/ChangeLog
   trunk/libnautilus-private/nautilus-icon-container.c
   trunk/libnautilus-private/nautilus-icon-container.h
   trunk/libnautilus-private/nautilus-view.c
   trunk/libnautilus-private/nautilus-view.h
   trunk/src/file-manager/fm-actions.h
   trunk/src/file-manager/fm-directory-view.c
   trunk/src/file-manager/fm-directory-view.h
   trunk/src/file-manager/fm-icon-view.c
   trunk/src/file-manager/fm-list-view.c
   trunk/src/file-manager/nautilus-directory-view-ui.xml

Modified: trunk/libnautilus-private/nautilus-icon-container.c
==============================================================================
--- trunk/libnautilus-private/nautilus-icon-container.c	(original)
+++ trunk/libnautilus-private/nautilus-icon-container.c	Sat Mar 29 14:49:46 2008
@@ -6217,6 +6217,29 @@
 	return g_list_reverse (list);
 }
 
+/**
+ * nautilus_icon_container_invert_selection:
+ * @container: An icon container.
+ * 
+ * Inverts the selection in @container.
+ * 
+ **/
+void
+nautilus_icon_container_invert_selection (NautilusIconContainer *container)
+{
+	GList *p;
+
+	g_return_if_fail (NAUTILUS_IS_ICON_CONTAINER (container));
+
+	for (p = container->details->icons; p != NULL; p = p->next) {
+		NautilusIcon *icon;
+
+		icon = p->data;
+		icon_toggle_selected (container, icon);
+	}
+}
+
+
 /* Returns an array of GdkPoints of locations of the icons. */
 static GArray *
 nautilus_icon_container_get_icon_locations (NautilusIconContainer *container,

Modified: trunk/libnautilus-private/nautilus-icon-container.h
==============================================================================
--- trunk/libnautilus-private/nautilus-icon-container.h	(original)
+++ trunk/libnautilus-private/nautilus-icon-container.h	Sat Mar 29 14:49:46 2008
@@ -260,6 +260,7 @@
 
 /* operations on the selection */
 GList     *       nautilus_icon_container_get_selection                 (NautilusIconContainer  *view);
+void			  nautilus_icon_container_invert_selection				(NautilusIconContainer  *view);
 void              nautilus_icon_container_set_selection                 (NautilusIconContainer  *view,
 									 GList                  *selection);
 GArray    *       nautilus_icon_container_get_selected_icon_locations   (NautilusIconContainer  *view);

Modified: trunk/libnautilus-private/nautilus-view.c
==============================================================================
--- trunk/libnautilus-private/nautilus-view.c	(original)
+++ trunk/libnautilus-private/nautilus-view.c	Sat Mar 29 14:49:46 2008
@@ -159,6 +159,13 @@
 							   list);
 }
 
+void
+nautilus_view_invert_selection (NautilusView *view)
+{
+	g_return_if_fail (NAUTILUS_IS_VIEW (view));
+	
+	(* NAUTILUS_VIEW_GET_IFACE (view)->invert_selection) (view);
+}
 
 char *
 nautilus_view_get_first_visible_file (NautilusView *view)

Modified: trunk/libnautilus-private/nautilus-view.h
==============================================================================
--- trunk/libnautilus-private/nautilus-view.h	(original)
+++ trunk/libnautilus-private/nautilus-view.h	Sat Mar 29 14:49:46 2008
@@ -83,6 +83,9 @@
 	void           (* set_selection)          (NautilusView          *view,
 						   GList                 *list);
 	
+	/* Inverts the selection in the view */	
+	void           (* invert_selection)       (NautilusView          *view);
+	
 	/* Return the uri of the first visible file */	
 	char *         (* get_first_visible_file) (NautilusView          *view);
 	/* Scroll the view so that the file specified by the uri is at the top
@@ -138,6 +141,7 @@
 GList *           nautilus_view_get_selection              (NautilusView      *view);
 void              nautilus_view_set_selection              (NautilusView      *view,
 							    GList             *list);
+void              nautilus_view_invert_selection           (NautilusView      *view);
 char *            nautilus_view_get_first_visible_file     (NautilusView      *view);
 void              nautilus_view_scroll_to_file             (NautilusView      *view,
 							    const char        *uri);

Modified: trunk/src/file-manager/fm-actions.h
==============================================================================
--- trunk/src/file-manager/fm-actions.h	(original)
+++ trunk/src/file-manager/fm-actions.h	Sat Mar 29 14:49:46 2008
@@ -51,6 +51,7 @@
 #define FM_ACTION_DUPLICATE "Duplicate"
 #define FM_ACTION_CREATE_LINK "Create Link"
 #define FM_ACTION_SELECT_ALL "Select All"
+#define FM_ACTION_INVERT_SELECTION "Invert Selection"
 #define FM_ACTION_SELECT_PATTERN "Select Pattern"
 #define FM_ACTION_TRASH "Trash"
 #define FM_ACTION_LOCATION_TRASH "LocationTrash"

Modified: trunk/src/file-manager/fm-directory-view.c
==============================================================================
--- trunk/src/file-manager/fm-directory-view.c	(original)
+++ trunk/src/file-manager/fm-directory-view.c	Sat Mar 29 14:49:46 2008
@@ -398,6 +398,7 @@
 EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, set_selection)
 EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, zoom_to_level)
 EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, get_zoom_level)
+EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, invert_selection)
 
 typedef struct {
 	GAppInfo *application;
@@ -1026,6 +1027,16 @@
 }
 
 static void
+action_invert_selection_callback (GtkAction *action,
+				  gpointer callback_data)
+{
+	g_assert (FM_IS_DIRECTORY_VIEW (callback_data));
+
+	fm_directory_view_invert_selection (callback_data);
+}
+
+
+static void
 pattern_select_response_cb (GtkWidget *dialog, int response, gpointer user_data)
 {
 	FMDirectoryView *view;
@@ -3381,6 +3392,16 @@
 		 get_selection, (view));
 }
 
+void
+fm_directory_view_invert_selection (FMDirectoryView *view)
+{
+	g_return_if_fail (FM_IS_DIRECTORY_VIEW (view));
+
+	EEL_CALL_METHOD
+		(FM_DIRECTORY_VIEW_CLASS, view,
+		 invert_selection, (view));
+}
+
 GList *
 fm_directory_view_get_selection_for_file_transfer (FMDirectoryView *view)
 {
@@ -6345,6 +6366,10 @@
   /* label, accelerator */       N_("Select _Pattern"), "<control>S",
   /* tooltip */                  N_("Select items in this window matching a given pattern"),
                                  G_CALLBACK (action_select_pattern_callback) },
+  /* name, stock id */         { "Invert Selection", NULL,
+  /* label, accelerator */       N_("_Invert Selection"), "<control><shift>I",
+  /* tooltip */                  N_("Select all and only the items that are not currently selected"),
+                                 G_CALLBACK (action_invert_selection_callback) }, 
   /* name, stock id */         { "Duplicate", NULL,
   /* label, accelerator */       N_("D_uplicate"), NULL,
   /* tooltip */                  N_("Duplicate each selected item"),
@@ -7298,6 +7323,10 @@
 	action = gtk_action_group_get_action (view->details->dir_action_group,
 					      FM_ACTION_SELECT_PATTERN);
 	gtk_action_set_sensitive (action, !fm_directory_view_is_empty (view));
+	
+	action = gtk_action_group_get_action (view->details->dir_action_group,
+					      FM_ACTION_INVERT_SELECTION);
+	gtk_action_set_sensitive (action, !fm_directory_view_is_empty (view));
 
 	action = gtk_action_group_get_action (view->details->dir_action_group,
 					      FM_ACTION_CUT);
@@ -8866,6 +8895,7 @@
 	EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, restore_default_zoom_level);
 	EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, select_all);
 	EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, set_selection);
+	EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, invert_selection);
 	EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, zoom_to_level);
 	EEL_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, get_zoom_level);
 

Modified: trunk/src/file-manager/fm-directory-view.h
==============================================================================
--- trunk/src/file-manager/fm-directory-view.h	(original)
+++ trunk/src/file-manager/fm-directory-view.h	Sat Mar 29 14:49:46 2008
@@ -157,6 +157,11 @@
 
         void     (* set_selection)	 	(FMDirectoryView *view, 
         					 GList *selection);
+        					 
+        /* invert_selection is a function pointer that subclasses must
+         * override to invert selection. */
+
+        void     (* invert_selection)	 	(FMDirectoryView *view);        					 
 
 	/* Return an array of locations of selected icons in their view. */
 	GArray * (* get_selected_icon_locations) (FMDirectoryView *view);
@@ -336,6 +341,7 @@
 void                fm_directory_view_display_selection_info           (FMDirectoryView  *view);
 GList *             fm_directory_view_get_selection                    (FMDirectoryView  *view);
 GList *             fm_directory_view_get_selection_for_file_transfer  (FMDirectoryView  *view);
+void                fm_directory_view_invert_selection                 (FMDirectoryView  *view);
 void                fm_directory_view_stop                             (FMDirectoryView  *view);
 guint               fm_directory_view_get_item_count                   (FMDirectoryView  *view);
 gboolean            fm_directory_view_can_zoom_in                      (FMDirectoryView  *view);

Modified: trunk/src/file-manager/fm-icon-view.c
==============================================================================
--- trunk/src/file-manager/fm-icon-view.c	(original)
+++ trunk/src/file-manager/fm-icon-view.c	Sat Mar 29 14:49:46 2008
@@ -1674,6 +1674,15 @@
 		(get_icon_container (FM_ICON_VIEW (view)), selection);
 }
 
+static void
+fm_icon_view_invert_selection (FMDirectoryView *view)
+{
+	g_return_if_fail (FM_IS_ICON_VIEW (view));
+
+	nautilus_icon_container_invert_selection
+		(get_icon_container (FM_ICON_VIEW (view)));
+}
+
 static gboolean
 fm_icon_view_using_manual_layout (FMDirectoryView *view)
 {
@@ -2593,6 +2602,7 @@
 	fm_directory_view_class->reveal_selection = fm_icon_view_reveal_selection;
 	fm_directory_view_class->select_all = fm_icon_view_select_all;
 	fm_directory_view_class->set_selection = fm_icon_view_set_selection;
+	fm_directory_view_class->invert_selection = fm_icon_view_invert_selection;
 	fm_directory_view_class->compare_files = compare_files;
 	fm_directory_view_class->zoom_to_level = fm_icon_view_zoom_to_level;
 	fm_directory_view_class->get_zoom_level = fm_icon_view_get_zoom_level;

Modified: trunk/src/file-manager/fm-list-view.c
==============================================================================
--- trunk/src/file-manager/fm-list-view.c	(original)
+++ trunk/src/file-manager/fm-list-view.c	Sat Mar 29 14:49:46 2008
@@ -1921,6 +1921,43 @@
 }
 
 static void
+fm_list_view_invert_selection (FMDirectoryView *view)
+{
+	FMListView *list_view;
+	GtkTreeSelection *tree_selection;
+	GList *node;
+	GList *iters, *l;
+	NautilusFile *file;
+	GList *selection = NULL;
+	
+	list_view = FM_LIST_VIEW (view);
+	tree_selection = gtk_tree_view_get_selection (list_view->details->tree_view);
+
+	g_signal_handlers_block_by_func (tree_selection, list_selection_changed_callback, view);
+	
+	gtk_tree_selection_selected_foreach (tree_selection,
+					 fm_list_view_get_selection_foreach_func, &selection);
+
+	gtk_tree_selection_select_all (tree_selection);
+	
+	for (node = selection; node != NULL; node = node->next) {
+		file = node->data;
+		iters = fm_list_model_get_all_iters_for_file (list_view->details->model, file);
+
+		for (l = iters; l != NULL; l = l->next) {
+			gtk_tree_selection_unselect_iter (tree_selection,
+							(GtkTreeIter *)l->data);
+		}
+		eel_g_list_free_deep (iters);
+	}
+
+	g_list_free (selection);
+
+	g_signal_handlers_unblock_by_func (tree_selection, list_selection_changed_callback, view);
+	fm_directory_view_notify_selection_changed (view);
+}
+
+static void
 fm_list_view_select_all (FMDirectoryView *view)
 {
 	gtk_tree_selection_select_all (gtk_tree_view_get_selection (FM_LIST_VIEW (view)->details->tree_view));
@@ -2686,6 +2723,7 @@
 	fm_directory_view_class->reveal_selection = fm_list_view_reveal_selection;
 	fm_directory_view_class->select_all = fm_list_view_select_all;
 	fm_directory_view_class->set_selection = fm_list_view_set_selection;
+	fm_directory_view_class->invert_selection = fm_list_view_invert_selection;
 	fm_directory_view_class->compare_files = fm_list_view_compare_files;
 	fm_directory_view_class->sort_directories_first_changed = fm_list_view_sort_directories_first_changed;
 	fm_directory_view_class->start_renaming_file = fm_list_view_start_renaming_file;

Modified: trunk/src/file-manager/nautilus-directory-view-ui.xml
==============================================================================
--- trunk/src/file-manager/nautilus-directory-view-ui.xml	(original)
+++ trunk/src/file-manager/nautilus-directory-view-ui.xml	Sat Mar 29 14:49:46 2008
@@ -57,6 +57,7 @@
 		<placeholder name="Select Items">
 		<menuitem name="Select All" action="Select All"/>
 		<menuitem name="Select Pattern" action="Select Pattern"/>
+		<menuitem name="Invert Selection" action="Invert Selection"/>
 		</placeholder>
 		<placeholder name="File Items Placeholder">
 			<menuitem name="Duplicate" action="Duplicate"/>



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