[gthumb/ext] update the file selection before showing the context menu



commit baec64d8d2b909ae692e6533c75a1e630bfdcb85
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Wed Sep 9 09:51:00 2009 +0200

    update the file selection before showing the context menu

 gthumb/gth-browser.c    |   20 +++++++++++++++-----
 gthumb/gth-extensions.c |    6 ++++--
 gthumb/gth-icon-view.c  |   26 ++++++++++++++++++++------
 3 files changed, 39 insertions(+), 13 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index e5691e5..eaa60da 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -2700,9 +2700,19 @@ gth_file_list_button_press_cb  (GtkWidget      *widget,
 				GdkEventButton *event,
 				gpointer        user_data)
 {
-	 GthBrowser *browser = user_data;
+	GthBrowser *browser = user_data;
+
+	if ((event->type == GDK_BUTTON_PRESS) && (event->button == 3)) {
+		GtkWidget *file_view;
+		int        pos;
+
+		file_view = gth_browser_get_file_list_view (browser);
+		pos = gth_file_view_get_at_position (GTH_FILE_VIEW (file_view), event->x, event->y);
+		if ((pos >= 0) && ! gth_file_selection_is_selected (GTH_FILE_SELECTION (file_view), pos)) {
+			gth_file_selection_unselect_all (GTH_FILE_SELECTION (file_view));
+			gth_file_selection_select (GTH_FILE_SELECTION (file_view), pos);
+		}
 
-	 if ((event->type == GDK_BUTTON_PRESS) && (event->button == 3)) {
 		gtk_menu_popup (GTK_MENU (browser->priv->file_list_popup),
 				NULL,
 				NULL,
@@ -2710,10 +2720,10 @@ gth_file_list_button_press_cb  (GtkWidget      *widget,
 				NULL,
 				event->button,
 				event->time);
-	 	return TRUE;
-	 }
+		return TRUE;
+	}
 
-	 return FALSE;
+	return FALSE;
 }
 
 
diff --git a/gthumb/gth-extensions.c b/gthumb/gth-extensions.c
index baf61f8..66580d6 100644
--- a/gthumb/gth-extensions.c
+++ b/gthumb/gth-extensions.c
@@ -870,7 +870,7 @@ gth_extension_manager_order_extensions (GthExtensionManager *manager,
 	GSList *scan;
 	GSList *ordered = NULL;
 
-	for (scan = extensions; scan;) {
+	for (scan = extensions; scan; /* void */) {
 		GSList                  *next = scan->next;
 		GSList                  *slink;
 		char                    *ext_name = scan->data;
@@ -879,8 +879,10 @@ gth_extension_manager_order_extensions (GthExtensionManager *manager,
 		GList                   *scan_d;
 
 		ext_description = g_hash_table_lookup (manager->priv->extensions, ext_name);
-		if (ext_description == NULL)
+		if (ext_description == NULL) {
+			scan = scan->next;
 			continue;
+		}
 
 		dependencies = get_extension_optional_dependencies (manager, ext_description);
 		for (scan_d = dependencies; scan_d; scan_d = scan_d->next) {
diff --git a/gthumb/gth-icon-view.c b/gthumb/gth-icon-view.c
index e4274cd..96b3e3a 100644
--- a/gthumb/gth-icon-view.c
+++ b/gthumb/gth-icon-view.c
@@ -112,9 +112,17 @@ gth_icon_view_real_get_at_position (GthFileView *base,
 				    int          x,
 				    int          y)
 {
-	GthIconView * self;
-	self = GTH_ICON_VIEW (base);
-	return -1;
+	GtkTreePath *path;
+	int          pos;
+
+	path = gtk_icon_view_get_path_at_pos (GTK_ICON_VIEW (base), x, y);
+	if (path == NULL)
+		return -1;
+	pos = gtk_tree_path_get_indices (path)[0];
+
+	gtk_tree_path_free (path);
+
+	return pos;
 }
 
 
@@ -328,10 +336,16 @@ static gboolean
 gth_icon_view_real_is_selected (GthFileSelection *base,
 				int               pos)
 {
-	GthIconView * self;
-	self = GTH_ICON_VIEW (base);
+	GtkTreePath *path;
+	gboolean     result;
+
+	path = gtk_tree_path_new ();
+	gtk_tree_path_append_index (path, pos);
+	result = gtk_icon_view_path_is_selected (GTK_ICON_VIEW (base), path);
+
+	gtk_tree_path_free (path);
 
-	return FALSE;
+	return result;
 }
 
 



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