fixed cursor focus
authorJean-Philippe Orsini <jeanfi@gmail.com>
Wed, 4 Dec 2013 07:59:54 +0000 (07:59 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Wed, 4 Dec 2013 07:59:54 +0000 (07:59 +0000)
src/main.c
src/ui_tasktree.c
src/ui_tasktree.h

index 2358e5d..d54e623 100644 (file)
@@ -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,
index 4fc7c86..7dd4954 100644 (file)
@@ -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);
 }
index cd862c4..af965af 100644 (file)
@@ -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