From 3a3e0de7a8be63a8a62c08f70a31d917d7a499f7 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Wed, 28 Jan 2009 17:56:32 +0100 Subject: Handle presentable-removed event --- TODO | 3 ++- src/nautilus-gdu-window.c | 53 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/TODO b/TODO index 8270893..36759b7 100644 --- a/TODO +++ b/TODO @@ -7,10 +7,11 @@ Short-term: - simple standalone mode - do we need Bootable flag for something? - make a Fedora package + - !! set partition type too !! - handle LUKS encrypted volumes -- monitor device/presentable events like eject, umount etc. +- monitor device/presentable events like eject, umount etc. (try to pull the USB key out and window should disappear) - show custom icon if user has set it in Nautilus - is firmware needed for some devices? - different partition tables? diff --git a/src/nautilus-gdu-window.c b/src/nautilus-gdu-window.c index 660ba80..8177ac6 100644 --- a/src/nautilus-gdu-window.c +++ b/src/nautilus-gdu-window.c @@ -667,15 +667,20 @@ format_action_completed (GduDevice *device, error, _("Error creating partition")); g_error_free (error); - } else if (data->encrypt_passphrase != NULL) { - /* now set the passphrase if requested */ - if (data->save_in_keyring || data->save_in_keyring_session) { - gdu_util_save_secret (device, - data->encrypt_passphrase, - data->save_in_keyring_session); - /* TODO: show encryption info somewhere? */ - update_ui (data->priv); + } + else + { + /* formatting finished */ + if (data->encrypt_passphrase != NULL) { + /* now set the passphrase if requested */ + if (data->save_in_keyring || data->save_in_keyring_session) { + gdu_util_save_secret (device, + data->encrypt_passphrase, + data->save_in_keyring_session); + } } + /* TODO: show encryption info somewhere? */ + update_ui (data->priv); } free_format_action_data (data); } @@ -878,6 +883,25 @@ out: } +static void +nautilus_gdu_destroy (FormatDialogPrivate *priv) +{ + g_return_if_fail (priv != NULL); +// g_print ("...destroying...\n"); + gtk_widget_destroy (GTK_WIDGET (priv->dialog)); + g_object_unref (priv->presentable); + g_object_unref (priv->pool); + g_free (priv); +} + +static void +presentable_removed (GduPresentable *presentable, FormatDialogPrivate *priv) +{ + g_return_if_fail (priv != NULL); + g_warning ("Presentable removed event.\n"); + nautilus_gdu_destroy (priv); +} + static void format_dialog_got_response (GtkDialog *dialog, gint response_id, @@ -893,11 +917,7 @@ format_dialog_got_response (GtkDialog *dialog, } else { /* destroy the window and unref the presentable */ -// g_print ("...destroying...\n"); - gtk_widget_destroy (GTK_WIDGET (dialog)); - g_object_unref (priv->presentable); - g_object_unref (priv->pool); - g_free (priv); + nautilus_gdu_destroy (priv); } } @@ -1130,14 +1150,17 @@ nautilus_gdu_spawn_dialog (GduPresentable *presentable) // gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, FALSE); - /* update sensivity and length of fs label + entry */ + /* update sensivity and length of fs label + entry */ g_signal_connect (priv->part_type_combo_box, "changed", G_CALLBACK (type_combo_box_changed), priv); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (format_dialog_got_response), priv); + /* catch Presentable events */ + g_signal_connect (G_OBJECT (priv->presentable), "removed", + G_CALLBACK (presentable_removed), priv); + gtk_widget_show_all (GTK_WIDGET (dialog)); gtk_widget_grab_focus (priv->close_button); - update_ui (priv); update_ui_progress (priv, NULL, FALSE); } -- cgit