keep focus on task after refresh
authorJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 3 Dec 2013 07:48:39 +0000 (07:48 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 3 Dec 2013 07:48:39 +0000 (07:48 +0000)
NEWS
NEWS.html
src/main.c
src/ui_tasktree.c
src/ui_tasktree.h

diff --git a/NEWS b/NEWS
index 9d74ca0..8c84b42 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,7 @@ v0.0.5
 
  * focus to first item when selecting a project.
  * keep focus on project after refresh.
+ * keep focus on task after refresh.
 
 v0.0.4
 ------
index fbf780a..97bfe49 100644 (file)
--- a/NEWS.html
+++ b/NEWS.html
@@ -331,6 +331,11 @@ focus to first item when selecting a project.
 keep focus on project after refresh.\r
 </p>\r
 </li>\r
+<li>\r
+<p>\r
+keep focus on task after refresh.\r
+</p>\r
+</li>\r
 </ul></div>\r
 </div>\r
 </div>\r
@@ -476,7 +481,7 @@ Initial release.
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Last updated 2013-12-02 12:23:12 CET\r
+Last updated 2013-12-03 08:48:03 CET\r
 </div>\r
 </div>\r
 </body>\r
index 880bde4..2358e5d 100644 (file)
@@ -95,24 +95,28 @@ static void print_help()
 void refresh()
 {
        GtkWidget *dialog;
-       const char *current_prj;
+       const char *current_prj, *current_uuid;
+       struct task **old_tasks;
 
        log_fct_enter();
        ui_taskpanel_update(NULL);
 
        if (tasks) {
+               old_tasks = tasks;
                current_prj = ui_projecttree_get_project();
-               ui_tasktree_update(NULL, NULL);
-               tw_task_list_free(tasks);
+               current_uuid = ui_tasktree_get_task_uuid();
+               ui_tasktree_update(NULL, NULL, NULL);
        } else {
+               old_tasks = NULL;
                current_prj = NULL;
+               current_uuid = NULL;
        }
 
        tasks = tw_get_all_tasks(ui_get_status_filter());
 
        if (tasks) {
                ui_projecttree_update(tasks);
-               ui_tasktree_update(tasks, current_prj);
+               ui_tasktree_update(tasks, current_prj, current_uuid);
        } else {
                dialog = gtk_message_dialog_new(NULL,
                                                GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -124,6 +128,10 @@ void refresh()
                gtk_dialog_run(GTK_DIALOG(dialog));
                gtk_widget_destroy(dialog);
        }
+
+       if (old_tasks)
+               tw_task_list_free(old_tasks);
+
        log_fct(__func__, "EXIT");
 }
 
index e879b4d..4fc7c86 100644 (file)
@@ -118,6 +118,17 @@ void ui_tasktree_save_settings(GSettings *settings)
        g_settings_set_int(settings, "tasks-sort-order", sort_order);
 }
 
+const char *ui_tasktree_get_task_uuid()
+{
+       struct task *t;
+
+       t = ui_tasktree_get_selected_task();
+
+       if (t)
+               return t->uuid;
+       else
+               return NULL;
+}
 
 struct task *ui_tasktree_get_selected_task()
 {
@@ -159,7 +170,9 @@ struct task *ui_tasktree_get_selected_task()
        return result;
 }
 
-void ui_tasktree_update(struct task **tasks, const char *prj_filter)
+void ui_tasktree_update(struct task **tasks,
+                       const char *prj_filter,
+                       const char *task_uuid)
 {
        GtkTreeModel *model;
        struct task **tasks_cur;
@@ -172,6 +185,7 @@ void ui_tasktree_update(struct task **tasks, const char *prj_filter)
 
        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++) {
@@ -196,9 +210,13 @@ void ui_tasktree_update(struct task **tasks, const char *prj_filter)
                                           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);
                }
 
-               p = gtk_tree_path_new_first();
+               if (!p)
+                       p = gtk_tree_path_new_first();
                gtk_tree_view_set_cursor(w_treeview, p, NULL, FALSE);
        }
 
@@ -206,5 +224,5 @@ void ui_tasktree_update(struct task **tasks, const char *prj_filter)
 
 void ui_tasktree_update_filter(const char *prj_filter)
 {
-       ui_tasktree_update(current_tasks, prj_filter);
+       ui_tasktree_update(current_tasks, prj_filter, NULL);
 }
index 7589552..cd862c4 100644 (file)
@@ -27,7 +27,8 @@ 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_update(struct task **, const char *);
+const char *ui_tasktree_get_task_uuid();
+void ui_tasktree_update(struct task **, const char *, const char *);
 void ui_tasktree_update_filter(const char *);
 
 #endif