From 030fd9f1e29b230410e9fa665bacd5a3c47d590e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Tue, 3 Dec 2013 07:48:39 +0000 Subject: [PATCH] keep focus on task after refresh --- NEWS | 1 + NEWS.html | 7 ++++++- src/main.c | 16 ++++++++++++---- src/ui_tasktree.c | 24 +++++++++++++++++++++--- src/ui_tasktree.h | 3 ++- 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index 9d74ca0..8c84b42 100644 --- 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 ------ diff --git a/NEWS.html b/NEWS.html index fbf780a..97bfe49 100644 --- a/NEWS.html +++ b/NEWS.html @@ -331,6 +331,11 @@ focus to first item when selecting a project. keep focus on project after refresh.

+
  • +

    +keep focus on task after refresh. +

    +
  • @@ -476,7 +481,7 @@ Initial release.

    diff --git a/src/main.c b/src/main.c index 880bde4..2358e5d 100644 --- a/src/main.c +++ b/src/main.c @@ -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"); } diff --git a/src/ui_tasktree.c b/src/ui_tasktree.c index e879b4d..4fc7c86 100644 --- a/src/ui_tasktree.c +++ b/src/ui_tasktree.c @@ -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); } diff --git a/src/ui_tasktree.h b/src/ui_tasktree.h index 7589552..cd862c4 100644 --- a/src/ui_tasktree.h +++ b/src/ui_tasktree.h @@ -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 -- 2.7.4