Merge lp:~karl-qdh/indicator-datetime/locations-select into lp:indicator-datetime/0.3

Proposed by Karl Lattimer
Status: Merged
Merged at revision: 106
Proposed branch: lp:~karl-qdh/indicator-datetime/locations-select
Merge into: lp:indicator-datetime/0.3
Diff against target: 86 lines (+69/-1)
1 file modified
src/datetime-prefs-locations.c (+69/-1)
To merge this branch: bzr merge lp:~karl-qdh/indicator-datetime/locations-select
Reviewer Review Type Date Requested Status
Ted Gould Pending
Review via email: mp+57151@code.launchpad.net

Description of the change

fixes associated bug.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/datetime-prefs-locations.c'
2--- src/datetime-prefs-locations.c 2011-03-30 13:12:30 +0000
3+++ src/datetime-prefs-locations.c 2011-04-11 12:12:31 +0000
4@@ -77,13 +77,81 @@
5 gtk_tree_path_free (iter->data);
6 }
7 g_list_free (paths);
8-
9+
10+ // Find the next item to select
11+ GtkTreeIter *last_selected = g_list_nth_data(tree_iters, 0);
12+ GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL (store), last_selected);
13+ GtkTreeIter titer;
14+ if (!gtk_tree_model_get_iter(GTK_TREE_MODEL (store), &titer, path)) {
15+ g_debug("Failed to get last selected iter from path");
16+ last_selected = NULL;
17+ } else {
18+ if (!gtk_tree_model_iter_next(GTK_TREE_MODEL (store), &titer)) {
19+ if (gtk_tree_path_prev(path)) {
20+ if (!gtk_tree_model_get_iter(GTK_TREE_MODEL (store), &titer, path)) {
21+ g_debug("Failed to get iter from path");
22+ last_selected = NULL;
23+ } else {
24+ last_selected = &titer;
25+ }
26+ } else {
27+ g_debug("handle_remove: Failed to find another location to select (assume single selected)");
28+ last_selected = NULL;
29+ }
30+ } else {
31+ g_debug("Got next item in model");
32+ last_selected = &titer;
33+ }
34+ }
35+
36+ if (last_selected) {
37+ gboolean clear = TRUE;
38+ path = gtk_tree_model_get_path(GTK_TREE_MODEL (store), last_selected);
39+
40+ // Step over the path to find an item which isn't in the delete list
41+ if (g_list_length(tree_iters) > 1) {
42+ for (iter = tree_iters; iter; iter = iter->next) {
43+ GtkTreePath *ipath = gtk_tree_model_get_path(GTK_TREE_MODEL (store), (GtkTreeIter *)iter->data);
44+ if (gtk_tree_path_compare(path, ipath) == 0) {
45+ clear = FALSE;
46+ break;
47+ }
48+ }
49+ while (clear == FALSE) {
50+ if (gtk_tree_path_prev(path)) {
51+ clear = TRUE;
52+ for (iter = tree_iters; iter; iter = iter->next) {
53+ GtkTreePath *ipath = gtk_tree_model_get_path(GTK_TREE_MODEL (store), (GtkTreeIter *)iter->data);
54+ if (gtk_tree_path_compare(path, ipath) == 0) {
55+ clear = FALSE;
56+ break;
57+ }
58+ }
59+ if (clear) {
60+ if (!gtk_tree_model_get_iter(GTK_TREE_MODEL (store), &titer, path)) {
61+ g_debug("Failed to get iter from path");
62+ last_selected = NULL;
63+ } else {
64+ last_selected = &titer;
65+ }
66+ }
67+ } else {
68+ last_selected = NULL;
69+ break;
70+ }
71+ }
72+ }
73+ }
74+
75 /* Now delete each iterator */
76 for (iter = tree_iters; iter; iter = iter->next) {
77 gtk_list_store_remove (store, (GtkTreeIter *)iter->data);
78 g_free (iter->data);
79 }
80 g_list_free (tree_iters);
81+
82+ if (last_selected)
83+ gtk_tree_selection_select_iter(selection, last_selected);
84 }
85
86 static void

Subscribers

People subscribed via source and target branches