[gthumb] selections: added command Alt+Shift+n to remove files from selection n



commit d1a3f8876a297acc07092ffa65ca0a7284fd9a97
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Apr 9 20:51:18 2012 +0200

    selections: added command Alt+Shift+n to remove files from selection n

 extensions/selections/actions.c   |   26 ++++++++++++++++++++++++++
 extensions/selections/actions.h   |    6 ++++--
 extensions/selections/callbacks.c |   19 ++++++++++++++++---
 3 files changed, 46 insertions(+), 5 deletions(-)
---
diff --git a/extensions/selections/actions.c b/extensions/selections/actions.c
index 40227f5..8dbd9a1 100644
--- a/extensions/selections/actions.c
+++ b/extensions/selections/actions.c
@@ -111,3 +111,29 @@ gth_browser_activate_action_add_to_selection_3 (GtkAction  *action,
 {
 	gth_browser_activate_action_add_to_selection (browser, 3);
 }
+
+
+void
+gth_browser_activate_action_remove_from_selection (GthBrowser *browser,
+						   int         n_selection)
+{
+	char  *uri;
+	GFile *folder;
+	GList *items;
+	GList *file_list = NULL;
+	GList *files;
+
+	uri = g_strdup_printf ("selection:///%d", n_selection);
+	folder = g_file_new_for_uri (uri);
+	items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser)));
+	file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
+	files = gth_file_data_list_to_file_list (file_list);
+	gth_selections_manager_remove_files (folder, files);
+
+	_g_object_list_unref (files);
+	_g_object_list_unref (file_list);
+	_gtk_tree_path_list_free (items);
+	g_object_unref (folder);
+	g_free (uri);
+}
+
diff --git a/extensions/selections/actions.h b/extensions/selections/actions.h
index 9d2ef59..7c31c7e 100644
--- a/extensions/selections/actions.h
+++ b/extensions/selections/actions.h
@@ -26,8 +26,10 @@
 
 #define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
 
-void gth_browser_activate_action_add_to_selection (GthBrowser *browser,
-						   int         n_selection);
+void gth_browser_activate_action_add_to_selection      (GthBrowser *browser,
+						        int         n_selection);
+void gth_browser_activate_action_remove_from_selection (GthBrowser *browser,
+						        int         n_selection);
 
 DEFINE_ACTION(gth_browser_activate_action_go_selection_1)
 DEFINE_ACTION(gth_browser_activate_action_go_selection_2)
diff --git a/extensions/selections/callbacks.c b/extensions/selections/callbacks.c
index 82c77de..2b3a5e0 100644
--- a/extensions/selections/callbacks.c
+++ b/extensions/selections/callbacks.c
@@ -145,12 +145,25 @@ selections__gth_browser_file_list_key_press_cb (GthBrowser  *browser,
 	guint    modifiers;
 
 	modifiers = gtk_accelerator_get_default_mod_mask ();
-	if ((event->state & modifiers) == GDK_MOD1_MASK) {
-		switch (gdk_keyval_to_lower (event->keyval)) {
+	if (((event->state & modifiers) == GDK_MOD1_MASK) || ((event->state & modifiers) == (GDK_SHIFT_MASK|GDK_MOD1_MASK))) {
+		guint keyval;
+
+		gdk_keymap_translate_keyboard_state (gdk_keymap_get_for_display (gtk_widget_get_display (GTK_WIDGET (browser))),
+						     event->hardware_keycode,
+		                                     event->state & ~GDK_SHIFT_MASK,
+		                                     event->group,
+		                                     &keyval,
+		                                     NULL, NULL, NULL);
+
+		switch (keyval) {
 		case GDK_KEY_1:
 		case GDK_KEY_2:
 		case GDK_KEY_3:
-			gth_browser_activate_action_add_to_selection (browser, gdk_keyval_to_lower (event->keyval) - GDK_KEY_1 + 1);
+			/* Alt+Shift+n => remove from selection n */
+			if ((event->state & modifiers) == (GDK_SHIFT_MASK|GDK_MOD1_MASK))
+				gth_browser_activate_action_remove_from_selection (browser, keyval - GDK_KEY_1 + 1);
+			else /* Alt+n => add to selection n */
+				gth_browser_activate_action_add_to_selection (browser, keyval - GDK_KEY_1 + 1);
 			result = GINT_TO_POINTER (1);
 			break;
 		}



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