diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2012-11-02 00:08:43 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2012-11-05 09:28:17 -0800 |
commit | a9f44a133d5d74d2329c349535472ecc04aa4277 (patch) | |
tree | 1423ba302e447e2b2f1f4a46315caa7d2babaf16 /gtk-gui.c | |
parent | 27f1339079a67973c6d695ecfb9a1f873eeb4ae6 (diff) | |
download | subsurface-a9f44a133d5d74d2329c349535472ecc04aa4277.tar.gz |
Prevent UI errors while the the import thread is running
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@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'gtk-gui.c')
-rw-r--r-- | gtk-gui.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -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; |