diff options
author | Thomas White <taw@physics.org> | 2025-01-10 17:31:12 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2025-01-10 17:31:12 +0100 |
commit | 3e57aa731c8c38638d3323cee51157d469b7f956 (patch) | |
tree | d23a34ec6ca11afdda81fdcd35b403845ccb8b95 | |
parent | 34b8c9ce64be65b4369360c86e9dcf9dbe81501e (diff) |
GUI: Avoid setting the text on a non-existent progress bar
-rw-r--r-- | src/gui_index.c | 22 | ||||
-rw-r--r-- | src/gui_project.c | 3 | ||||
-rw-r--r-- | src/gui_project.h | 2 |
3 files changed, 24 insertions, 3 deletions
diff --git a/src/gui_index.c b/src/gui_index.c index 8f8440a4..2d16503b 100644 --- a/src/gui_index.c +++ b/src/gui_index.c @@ -724,12 +724,28 @@ static void *thread_index_once(void *vp) } -static void gui_set_last_task(const char *task, void *vp) +static gboolean index_once_show_task(gpointer vp) { struct crystfelproject *proj = vp; char tmp[256]; - snprintf(tmp, 255, "Indexing this frame (%s)", task); - gtk_progress_bar_set_text(GTK_PROGRESS_BAR(proj->index_once_progress_bar), tmp); + g_mutex_lock(&proj->index_once_last_task_lock); + snprintf(tmp, 255, "Indexing this frame (%s)", proj->index_once_last_task); + g_mutex_unlock(&proj->index_once_last_task_lock); + if ( proj->index_once_progress_bar != NULL ) { + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(proj->index_once_progress_bar), tmp); + } + return FALSE; +} + + +static void gui_set_last_task(const char *task, void *vp) +{ + struct crystfelproject *proj = vp; + g_mutex_lock(&proj->index_once_last_task_lock); + free(proj->index_once_last_task); + proj->index_once_last_task = strdup(task); + g_mutex_unlock(&proj->index_once_last_task_lock); + gdk_threads_add_idle(index_once_show_task, proj); } diff --git a/src/gui_project.c b/src/gui_project.c index c83ff3b4..74c66368 100644 --- a/src/gui_project.c +++ b/src/gui_project.c @@ -1250,6 +1250,9 @@ int default_project(struct crystfelproject *proj) proj->index_once_infobar = NULL; proj->index_once_progress_bar = NULL; proj->index_once_cancel = 0; + proj->index_once_last_task = NULL; + g_mutex_init(&proj->index_once_last_task_lock); + proj->indexing_backend_selected = 0; proj->merging_backend_selected = 0; diff --git a/src/gui_project.h b/src/gui_project.h index 902fe3fb..b87ed227 100644 --- a/src/gui_project.h +++ b/src/gui_project.h @@ -271,6 +271,8 @@ struct crystfelproject { GtkWidget *index_once_infobar; GtkWidget *index_once_progress_bar; volatile int index_once_cancel; + GMutex index_once_last_task_lock; + char *index_once_last_task; int unsaved; |