[gnome-media] Bug 569659 – Previous record discarded without any prompt
- From: Marc-Andre Lureau <malureau src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-media] Bug 569659 – Previous record discarded without any prompt
- Date: Mon, 15 Jun 2009 15:55:55 -0400 (EDT)
commit c3193e90106d27755f2cdb15c0d35cc17ff09dad
Author: Marc-André Lureau <marcandre lureau gmail com>
Date: Mon Jun 15 22:40:53 2009 +0300
Bug 569659 â?? Previous record discarded without any prompt
grecord/src/gnome-recorder.c | 8 ++---
grecord/src/gsr-window.c | 56 +++++++++++++++++++++--------------------
grecord/src/gsr-window.h | 13 +++------
3 files changed, 37 insertions(+), 40 deletions(-)
---
diff --git a/grecord/src/gnome-recorder.c b/grecord/src/gnome-recorder.c
index 108a50d..80ba4ed 100644
--- a/grecord/src/gnome-recorder.c
+++ b/grecord/src/gnome-recorder.c
@@ -50,8 +50,8 @@ static gboolean
delete_event_cb (GSRWindow *window,
gpointer data)
{
- if (! gsr_window_is_saved (window)) {
- close_confirmation_dialog (window);
+ if (!gsr_window_is_saved (window) && gsr_discard_confirmation_dialog (window, TRUE)) {
+ gsr_window_close (window);
return TRUE;
}
@@ -82,9 +82,7 @@ gsr_quit (void)
p will be invalid */
p = p->next;
- if (! gsr_window_is_saved (window))
- close_confirmation_dialog (window);
- else
+ if (gsr_window_is_saved (window) || gsr_discard_confirmation_dialog (window, TRUE))
gsr_window_close (window);
}
}
diff --git a/grecord/src/gsr-window.c b/grecord/src/gsr-window.c
index b8cd22e..e2f8742 100644
--- a/grecord/src/gsr-window.c
+++ b/grecord/src/gsr-window.c
@@ -846,35 +846,31 @@ gsr_window_is_saved (GSRWindow *window)
return window->priv->saved;
}
-void
-close_confirmation_dialog (GSRWindow *window)
+gboolean
+gsr_discard_confirmation_dialog (GSRWindow *window, gboolean closing)
{
GtkWidget *confirmation_dialog;
AtkObject *atk_obj;
- gchar *msg;
gint response_id;
gchar *utf8_filename = NULL;
-
- utf8_filename = g_filename_to_utf8 (window->priv->record_filename,
- -1,
- NULL,
- NULL,
- NULL);
- msg = g_strdup_printf (_("Save the changes to file \"%s\" before closing?"),
- utf8_filename);
- g_free (utf8_filename);
+ gboolean ret = TRUE;
confirmation_dialog = gtk_message_dialog_new_with_markup (NULL,
GTK_DIALOG_MODAL,
- GTK_MESSAGE_WARNING,
+ GTK_MESSAGE_WARNING,
GTK_BUTTONS_NONE,
"<span weight=\"bold\" size=\"larger\">%s</span>",
- msg);
+ closing ?
+ _("Save recording before closing?") :
+ _("Save recording?"));
gtk_dialog_add_buttons (GTK_DIALOG (confirmation_dialog),
- _("Close _without Saving"), GTK_RESPONSE_NO,
+ closing ?
+ _("Close _without Saving") :
+ _("Continue _without Saving"),
+ GTK_RESPONSE_YES,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_YES, NULL);
+ GTK_STOCK_SAVE_AS, GTK_RESPONSE_NO, NULL);
gtk_window_set_title (GTK_WINDOW (confirmation_dialog), "");
@@ -884,23 +880,29 @@ close_confirmation_dialog (GSRWindow *window)
response_id = gtk_dialog_run (GTK_DIALOG (confirmation_dialog));
switch (response_id) {
- case GTK_RESPONSE_YES:
- window->priv->quit_after_save = TRUE;
+ case GTK_RESPONSE_NO:
+ /* hiding the confirmation dialog allows the user to
+ see only one dialog at a time if the user click cancel
+ in the file dialog, they won't expect to return to the
+ confirmation dialog*/
+ gtk_widget_hide (confirmation_dialog);
file_save_as_cb (NULL, window);
+ ret = window->priv->has_file;
break;
- case GTK_RESPONSE_NO:
- gsr_window_close (window);
+ case GTK_RESPONSE_YES:
+ ret = TRUE;
break;
case GTK_RESPONSE_CANCEL:
- default:
+ default:
+ ret = FALSE;
break;
- }
+ }
gtk_widget_destroy (confirmation_dialog);
- g_free (msg);
+ return ret;
}
static GtkWidget *
@@ -1190,11 +1192,8 @@ static void
file_close_cb (GtkAction *action,
GSRWindow *window)
{
- if (! gsr_window_is_saved (window)) {
- close_confirmation_dialog (window);
- } else {
+ if (gsr_window_is_saved (window) || gsr_discard_confirmation_dialog (window, TRUE))
gsr_window_close (window);
- }
}
static void
@@ -1308,6 +1307,9 @@ static void
record_cb (GtkAction *action,
GSRWindow *window)
{
+ if (!gsr_window_is_saved(window) && !gsr_discard_confirmation_dialog (window, FALSE))
+ return;
+
GSRWindowPrivate *priv = window->priv;
if (priv->record) {
diff --git a/grecord/src/gsr-window.h b/grecord/src/gsr-window.h
index d8ee06c..6b5a67e 100644
--- a/grecord/src/gsr-window.h
+++ b/grecord/src/gsr-window.h
@@ -51,14 +51,11 @@ struct _GSRWindowClass {
};
-GType gsr_window_get_type (void);
+GType gsr_window_get_type (void);
-GtkWidget *gsr_window_new (const char *filename);
-
-void gsr_window_close (GSRWindow *window);
-
-gboolean gsr_window_is_saved (GSRWindow *window);
-
-void close_confirmation_dialog (GSRWindow *window);
+GtkWidget* gsr_window_new (const char *filename);
+void gsr_window_close (GSRWindow *window);
+gboolean gsr_window_is_saved (GSRWindow *window);
+gboolean gsr_discard_confirmation_dialog (GSRWindow *window, gboolean closing);
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]