From 7d6027f8ed52593c0448ce94c0610689cc8f3b12 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Wed, 4 Dec 2013 07:59:54 +0000 Subject: [PATCH] fixed cursor focus --- src/main.c | 6 ++++-- src/ui_tasktree.c | 56 ++++++++++++++++++++++++++++++++++++++++++------------- src/ui_tasktree.h | 3 ++- 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/main.c b/src/main.c index 2358e5d..d54e623 100644 --- a/src/main.c +++ b/src/main.c @@ -105,7 +105,7 @@ void refresh() old_tasks = tasks; current_prj = ui_projecttree_get_project(); current_uuid = ui_tasktree_get_task_uuid(); - ui_tasktree_update(NULL, NULL, NULL); + ui_tasktree_update(NULL, NULL); } else { old_tasks = NULL; current_prj = NULL; @@ -116,7 +116,9 @@ void refresh() if (tasks) { ui_projecttree_update(tasks); - ui_tasktree_update(tasks, current_prj, current_uuid); + ui_tasktree_update(tasks, current_prj); + if (current_uuid) + ui_tasktree_set_selected_task(current_uuid); } else { dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, diff --git a/src/ui_tasktree.c b/src/ui_tasktree.c index 4fc7c86..7dd4954 100644 --- a/src/ui_tasktree.c +++ b/src/ui_tasktree.c @@ -170,22 +170,59 @@ struct task *ui_tasktree_get_selected_task() return result; } -void ui_tasktree_update(struct task **tasks, - const char *prj_filter, - const char *task_uuid) +void ui_tasktree_set_selected_task(const char *uuid) +{ + GtkTreePath *path; + GtkTreeIter iter; + GtkTreeModel *model; + GValue value = {0,}; + const char *c_uuid; + + log_fct_enter(); + + if (current_tasks) { + model = gtk_tree_view_get_model(w_treeview); + + if (!gtk_tree_model_get_iter_first(model, &iter)) + return ; + + path = NULL; + while (gtk_tree_model_iter_next(model, &iter)) { + gtk_tree_model_get_value(model, + &iter, + COL_UUID, + &value); + c_uuid = g_value_get_string(&value); + + if (!strcmp(uuid, c_uuid)) { + path = gtk_tree_model_get_path(model, &iter); + break; + } + + g_value_unset(&value); + } + + if (!path) + path = gtk_tree_path_new_first(); + gtk_tree_view_set_cursor(w_treeview, path, NULL, FALSE); + } + + log_fct_exit(); +} + + +void ui_tasktree_update(struct task **tasks, const char *prj_filter) { GtkTreeModel *model; struct task **tasks_cur; struct task *task; GtkTreeIter iter; const char *prj; - GtkTreePath *p; current_tasks = tasks; model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview)); gtk_list_store_clear(GTK_LIST_STORE(model)); - p = NULL; if (current_tasks) { for (tasks_cur = current_tasks; *tasks_cur; tasks_cur++) { @@ -210,19 +247,12 @@ void ui_tasktree_update(struct task **tasks, COL_UUID, (*tasks_cur)->uuid, COL_PRIORITY, (*tasks_cur)->priority, -1); - - if (task_uuid && !strcmp(task->uuid, task_uuid)) - p = gtk_tree_model_get_path(model, &iter); } - - if (!p) - p = gtk_tree_path_new_first(); - gtk_tree_view_set_cursor(w_treeview, p, NULL, FALSE); } } void ui_tasktree_update_filter(const char *prj_filter) { - ui_tasktree_update(current_tasks, prj_filter, NULL); + ui_tasktree_update(current_tasks, prj_filter); } diff --git a/src/ui_tasktree.h b/src/ui_tasktree.h index cd862c4..af965af 100644 --- a/src/ui_tasktree.h +++ b/src/ui_tasktree.h @@ -27,8 +27,9 @@ void ui_tasktree_init(GtkBuilder *); void ui_tasktree_load_settings(GSettings *); void ui_tasktree_save_settings(GSettings *); struct task *ui_tasktree_get_selected_task(); +void ui_tasktree_set_selected_task(const char *uuid); const char *ui_tasktree_get_task_uuid(); -void ui_tasktree_update(struct task **, const char *, const char *); +void ui_tasktree_update(struct task **, const char *); void ui_tasktree_update_filter(const char *); #endif -- 2.7.4