[PATCH] Properly de-select dives in collapsed trips that are unselected

Linus Torvalds torvalds at linux-foundation.org
Thu Feb 7 16:31:28 PST 2013


From: Linus Torvalds <torvalds at linux-foundation.org>
Date: Fri, 8 Feb 2013 11:28:13 +1100
Subject: [PATCH] Properly de-select dives in collapsed trips that are unselected

We had the logic for the "select" case, but not for the "deselect" case. Ugh.

Reported-by: Dirk Hohndel <dirk at hohndel.org>
Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---
 divelist.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/divelist.c b/divelist.c
index e500391104b6..7dfe76328691 100644
--- a/divelist.c
+++ b/divelist.c
@@ -2700,9 +2700,21 @@ static gboolean modify_selection_cb(GtkTreeSelection *selection, GtkTreeModel *m
 	gtk_tree_model_get_iter(model, &iter, path);
 	gtk_tree_model_get(model, &iter, DIVE_INDEX, &idx, DIVE_DATE, &when, -1);
 	if (idx < 0) {
+		int i;
+		struct dive *dive;
 		dive_trip_t *trip = find_trip_by_time(when);
-		if (trip)
-			trip->selected = 0;
+		if (!trip)
+			return TRUE;
+
+		trip->selected = 0;
+		/* If this is expanded, let the gtk selection happen for each dive under it */
+		if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(dive_list.tree_view), path))
+			return TRUE;
+		/* Otherwise, consider each dive under it deselected */
+		for_each_dive(i, dive) {
+			if (dive->divetrip == trip)
+				deselect_dive(i);
+		}
 	} else {
 		deselect_dive(idx);
 	}
-- 
1.8.1.2.545.g2f19ada



More information about the subsurface mailing list