The attached patch adds an invert selection feature which has been removed during the de-bonoboization. Feedback appreciated, especially since I'm not sure whether the tooltip is OK. -- Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-icon-container.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-container.c,v
retrieving revision 1.392
diff -u -p -r1.392 nautilus-icon-container.c
--- libnautilus-private/nautilus-icon-container.c 6 Jul 2005 12:18:27 -0000 1.392
+++ libnautilus-private/nautilus-icon-container.c 13 Jul 2005 18:31:42 -0000
@@ -5497,6 +5535,29 @@ nautilus_icon_container_select_all (Naut
signals[SELECTION_CHANGED], 0);
}
}
+
+/**
+ * nautilus_icon_container_invert_selection:
+ * @container: An icon container widget.
+ *
+ * Select all previously unselected icons in @container and vice versa.
+ **/
+void
+nautilus_icon_container_invert_selection (NautilusIconContainer *container)
+{
+ NautilusIcon *icon;
+ GList *p;
+
+ for (p = container->details->icons; p != NULL; p = p->next) {
+ icon = (NautilusIcon *) p->data;
+ icon_toggle_selected (container, icon);
+ }
+
+ if (!nautilus_icon_container_is_empty (container)) {
+ g_signal_emit (container, signals[SELECTION_CHANGED], 0);
+ }
+}
+
/**
* nautilus_icon_container_set_selection:
Index: libnautilus-private/nautilus-icon-container.h
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-container.h,v
retrieving revision 1.87
diff -u -p -r1.87 nautilus-icon-container.h
--- libnautilus-private/nautilus-icon-container.h 5 Jul 2005 12:23:34 -0000 1.87
+++ libnautilus-private/nautilus-icon-container.h 13 Jul 2005 18:31:42 -0000
@@ -243,6 +248,7 @@ void nautilus_icon_containe
/* operations on all icons */
void nautilus_icon_container_unselect_all (NautilusIconContainer *view);
void nautilus_icon_container_select_all (NautilusIconContainer *view);
+void nautilus_icon_container_invert_selection (NautilusIconContainer *view);
/* operations on the selection */
Index: src/file-manager/fm-directory-view.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-directory-view.c,v
retrieving revision 1.701
diff -u -p -r1.701 fm-directory-view.c
--- src/file-manager/fm-directory-view.c 11 Jul 2005 10:07:53 -0000 1.701
+++ src/file-manager/fm-directory-view.c 13 Jul 2005 18:31:50 -0000
@@ -982,6 +982,15 @@ action_select_all_callback (GtkAction *a
}
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;
@@ -6176,6 +6185,10 @@ static const GtkActionEntry directory_vi
N_("Select _All"), "<control>A", /* label, accelerator */
N_("Select all items in this window"), /* tooltip */
G_CALLBACK (action_select_all_callback) },
+ { "Invert Selection", NULL, /* name, stock id */
+ N_("_Invert Selection"), "<control>I", /* label, accelerator */
+ N_("Select all unselected items in this window and unselect the selected ones"), /* tooltip */
+ G_CALLBACK (action_invert_selection_callback) },
{ "Select Pattern", NULL, /* name, stock id */
N_("Select _Pattern"), "<control>S", /* label, accelerator */
N_("Select items in this window matching a given pattern"), /* tooltip */
@@ -7824,6 +7837,23 @@ fm_directory_view_select_all (FMDirector
(FM_DIRECTORY_VIEW_CLASS, view,
select_all, (view));
}
+
+/**
+ * fm_directory_invert_selection:
+ *
+ * select all previously unselected items in the view and vice versa
+ *
+ **/
+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));
+}
+
/**
* fm_directory_view_set_selection:
Index: src/file-manager/fm-directory-view.h
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-directory-view.h,v
retrieving revision 1.141
diff -u -p -r1.141 fm-directory-view.h
--- src/file-manager/fm-directory-view.h 5 Jul 2005 12:23:35 -0000 1.141
+++ src/file-manager/fm-directory-view.h 13 Jul 2005 18:31:50 -0000
@@ -148,6 +148,10 @@ struct FMDirectoryViewClass {
* select all of the items in the view */
void (* select_all) (FMDirectoryView *view);
+ /* invert_selection is a function pointer that subclasses must override to
+ * select all previously unselected items in the view and vice versa */
+ void (* invert_selection) (FMDirectoryView *view);
+
/* set_selection is a function pointer that subclasses must
* override to select the specified items (and unselect all
* others). The argument is a list of NautilusFiles. */
@@ -328,6 +332,7 @@ NautilusZoomLevel fm_directory_view_ge
void fm_directory_view_restore_default_zoom_level (FMDirectoryView *view);
void fm_directory_view_reset_to_defaults (FMDirectoryView *view);
void fm_directory_view_select_all (FMDirectoryView *view);
+void fm_directory_view_invert_selection (FMDirectoryView *view);
void fm_directory_view_set_selection (FMDirectoryView *view,
GList *selection);
GArray * fm_directory_view_get_selected_icon_locations (FMDirectoryView *view);
Index: src/file-manager/fm-icon-view.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-icon-view.c,v
retrieving revision 1.311
diff -u -p -r1.311 fm-icon-view.c
--- src/file-manager/fm-icon-view.c 5 Jul 2005 12:23:35 -0000 1.311
+++ src/file-manager/fm-icon-view.c 13 Jul 2005 18:31:51 -0000
@@ -1600,6 +1600,18 @@ fm_icon_view_select_all (FMDirectoryView
}
static void
+fm_icon_view_invert_selection (FMDirectoryView *view)
+{
+ NautilusIconContainer *icon_container;
+
+ g_return_if_fail (FM_IS_ICON_VIEW (view));
+
+ icon_container = get_icon_container (FM_ICON_VIEW (view));
+ nautilus_icon_container_invert_selection (icon_container);
+}
+
+
+static void
fm_icon_view_reveal_selection (FMDirectoryView *view)
{
GList *selection;
@@ -2556,6 +2568,7 @@ fm_icon_view_class_init (FMIconViewClass
fm_directory_view_class->restore_default_zoom_level = fm_icon_view_restore_default_zoom_level;
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->invert_selection = fm_icon_view_invert_selection;
fm_directory_view_class->set_selection = fm_icon_view_set_selection;
fm_directory_view_class->sort_files = fm_icon_view_sort_files;
fm_directory_view_class->zoom_to_level = fm_icon_view_zoom_to_level;
Index: src/file-manager/fm-list-view.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-list-view.c,v
retrieving revision 1.253
diff -u -p -r1.253 fm-list-view.c
--- src/file-manager/fm-list-view.c 13 Jul 2005 09:36:20 -0000 1.253
+++ src/file-manager/fm-list-view.c 13 Jul 2005 18:31:52 -0000
@@ -1726,9 +1726,37 @@ fm_list_view_set_selection (FMDirectoryV
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));
}
+static gboolean
+invert_selection_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ GtkTreeSelection *selection)
+{
+ if (gtk_tree_selection_iter_is_selected (selection, iter)) {
+ gtk_tree_selection_unselect_iter (selection, iter);
+ } else {
+ gtk_tree_selection_select_iter (selection, iter);
+ }
+
+ return FALSE;
+}
+
+static void
+fm_list_view_invert_selection (FMDirectoryView *view)
+{
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection (FM_LIST_VIEW (view)->details->tree_view);
+ gtk_tree_model_foreach (GTK_TREE_MODEL (FM_LIST_VIEW (view)->details->model),
+ (GtkTreeModelForeachFunc) invert_selection_foreach,
+ selection);
+}
+
+
static void
fm_list_view_reveal_selection (FMDirectoryView *view)
{
@@ -2468,6 +2496,7 @@ fm_list_view_class_init (FMListViewClass
fm_directory_view_class->restore_default_zoom_level = fm_list_view_restore_default_zoom_level;
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->invert_selection = fm_list_view_invert_selection;
fm_directory_view_class->set_selection = fm_list_view_set_selection;
fm_directory_view_class->sort_files = fm_list_view_sort_files;
fm_directory_view_class->sort_directories_first_changed = fm_list_view_sort_directories_first_changed;
Index: src/file-manager/nautilus-directory-view-ui.xml
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/nautilus-directory-view-ui.xml,v
retrieving revision 1.76
diff -u -p -r1.76 nautilus-directory-view-ui.xml
--- src/file-manager/nautilus-directory-view-ui.xml 6 Jul 2005 14:02:38 -0000 1.76
+++ src/file-manager/nautilus-directory-view-ui.xml 13 Jul 2005 18:31:52 -0000
@@ -49,6 +49,7 @@
</placeholder>
<placeholder name="Select Items">
<menuitem name="Select All" action="Select All"/>
+ <menuitem name="Invert Selection" action="Invert Selection"/>
<menuitem name="Select Pattern" action="Select Pattern"/>
</placeholder>
<placeholder name="File Items Placeholder">
Attachment:
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil