[PATCH 2/2] Prevent UI errors while the the import thread is running

Lubomir I. Ivanov neolit123 at gmail.com
Thu Nov 1 15:08:43 PDT 2012


From: "Lubomir I. Ivanov" <neolit123 at gmail.com>

While the import thread is running it is possible to:
1) click the [x] button of the "download dialog".
To prevent that, we attach a "delete-event" signal to no-op function.

2) to interact with the main window, once the "accept" event is triggered.
To prevent that, we make sure that the window is set back to "modal".

Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---
 gtk-gui.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gtk-gui.c b/gtk-gui.c
index 24c0343..4ae9f53 100644
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -1500,6 +1500,12 @@ static GtkWidget *import_dive_computer(device_data_t *data, GtkDialog *dialog)
 	return info;
 }
 
+/* this prevents clicking the [x] button, while the import thread is still running */
+static void download_dialog_delete(GtkWidget *w, gpointer data)
+{
+	/* a no-op */
+}
+
 void download_dialog(GtkWidget *w, gpointer data)
 {
 	int result;
@@ -1517,6 +1523,7 @@ void download_dialog(GtkWidget *w, gpointer data)
 		GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
 		GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
 		NULL);
+	g_signal_connect(dialog, "delete-event", G_CALLBACK(download_dialog_delete), NULL);
 
 	vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
 	label = gtk_label_new(_(" Please select dive computer and device. "));
@@ -1540,6 +1547,9 @@ repeat:
 		GtkTreeModel *model;
 
 	case GTK_RESPONSE_ACCEPT:
+		/* once the accept event is triggered the dialog becomes non-modal.
+		 * lets re-set that */
+		gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
 		if (info)
 			gtk_widget_destroy(info);
 		const char *vendor, *product;
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list