[gnome-disk-utility] Prompt to stop jobs when closing
- From: Kai Lüke <kailueke src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-disk-utility] Prompt to stop jobs when closing
- Date: Fri, 19 May 2017 08:41:06 +0000 (UTC)
commit 9a9a214f6f5d554d64bb397ef84ab5e9924685c6
Author: Kai Lüke <kailueke riseup net>
Date: Mon May 15 17:53:16 2017 +0200
Prompt to stop jobs when closing
Closing Disks used to silently discontinue running
jobs like restoring or creating disk images.
Now a message dialog warns that closing Disk will
also stop the jobs.
https://bugzilla.gnome.org/show_bug.cgi?id=732567
src/disks/gduapplication.c | 33 ++++++++++++++++++++++++++++++++-
src/disks/gduapplication.h | 2 ++
src/disks/gduwindow.c | 14 ++++++++++++++
3 files changed, 48 insertions(+), 1 deletions(-)
---
diff --git a/src/disks/gduapplication.c b/src/disks/gduapplication.c
index 7b67740..61b1f44 100644
--- a/src/disks/gduapplication.c
+++ b/src/disks/gduapplication.c
@@ -76,6 +76,35 @@ gdu_application_finalize (GObject *object)
G_OBJECT_CLASS (gdu_application_parent_class)->finalize (object);
}
+
+gboolean
+gdu_application_should_exit (GduApplication *app)
+{
+ GtkWidget *dialog;
+ gint response;
+
+ if (app->local_jobs != NULL && g_hash_table_size (app->local_jobs) != 0)
+ {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (app->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK_CANCEL,
+ _("Stop running jobs?"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ _("Closing now stops the running jobs and leads to a corrupt
result."));
+
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ if (response != GTK_RESPONSE_OK)
+ return FALSE;
+
+ }
+
+ return TRUE;
+}
+
+
/* ---------------------------------------------------------------------------------------------------- */
static void
@@ -326,7 +355,9 @@ quit_activated (GSimpleAction *action,
gpointer user_data)
{
GduApplication *app = GDU_APPLICATION (user_data);
- gtk_widget_destroy (GTK_WIDGET (app->window));
+
+ if (gdu_application_should_exit (app))
+ gtk_widget_destroy (GTK_WIDGET (app->window));
}
static void
diff --git a/src/disks/gduapplication.h b/src/disks/gduapplication.h
index 9df33e5..fb3911a 100644
--- a/src/disks/gduapplication.h
+++ b/src/disks/gduapplication.h
@@ -27,6 +27,8 @@ GObject *gdu_application_new_widget (GduApplication *application,
const gchar *name,
GtkBuilder **out_builder);
+gboolean gdu_application_should_exit (GduApplication *application);
+
GduLocalJob *gdu_application_create_local_job (GduApplication *application,
UDisksObject *object);
void gdu_application_destroy_local_job (GduApplication *application,
diff --git a/src/disks/gduwindow.c b/src/disks/gduwindow.c
index c264fd6..7f7dc0a 100644
--- a/src/disks/gduwindow.c
+++ b/src/disks/gduwindow.c
@@ -348,6 +348,15 @@ gdu_window_init (GduWindow *window)
static void on_client_changed (UDisksClient *client,
gpointer user_data);
+static
+gboolean
+on_delete_event (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ return !gdu_application_should_exit (GDU_WINDOW (widget)->application);
+}
+
static void
gdu_window_finalize (GObject *object)
{
@@ -1347,6 +1356,11 @@ gdu_window_constructed (GObject *object)
G_CALLBACK (on_activate_link),
window);
+ g_signal_connect (window,
+ "delete-event",
+ G_CALLBACK (on_delete_event),
+ NULL);
+
ensure_something_selected (window);
gtk_widget_grab_focus (window->device_tree_treeview);
update_all (window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]