aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2025-01-10 17:31:12 +0100
committerThomas White <taw@physics.org>2025-01-10 17:31:12 +0100
commit3e57aa731c8c38638d3323cee51157d469b7f956 (patch)
treed23a34ec6ca11afdda81fdcd35b403845ccb8b95
parent34b8c9ce64be65b4369360c86e9dcf9dbe81501e (diff)
GUI: Avoid setting the text on a non-existent progress bar
-rw-r--r--src/gui_index.c22
-rw-r--r--src/gui_project.c3
-rw-r--r--src/gui_project.h2
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;