104 lines
4.3 KiB
Diff
104 lines
4.3 KiB
Diff
From 58b2f3df81c46f8596a0a81bd2f8071948ec9238 Mon Sep 17 00:00:00 2001
|
|
From: Jakub Filak <jfilak@redhat.com>
|
|
Date: Wed, 8 Aug 2012 16:59:33 +0200
|
|
Subject: [PATCH 06/10] trac#660: report-gtk: introduce generic ask_yes_no()
|
|
function for options
|
|
|
|
* the generic ask_yes_no() function shows a standard 'yes/no' dialog
|
|
with a checkbox
|
|
* if user checks the checkbox the ask_yes_no() function immediately
|
|
returns 'yes' in the future calls
|
|
|
|
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
---
|
|
src/gui-wizard-gtk/wizard.c | 52 ++++++++++++++++++++++++++++-----------------
|
|
1 file changed, 33 insertions(+), 19 deletions(-)
|
|
|
|
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
|
|
index ce7b742..861d922 100644
|
|
--- a/src/gui-wizard-gtk/wizard.c
|
|
+++ b/src/gui-wizard-gtk/wizard.c
|
|
@@ -310,46 +310,60 @@ static void update_window_title(void)
|
|
free(title);
|
|
}
|
|
|
|
-static void on_toggle_ask_steal_cb(GtkToggleButton *tb, gpointer user_data)
|
|
+static void on_toggle_ask_yes_no_save_result_cb(GtkToggleButton *tb, gpointer user_data)
|
|
{
|
|
- set_user_setting("ask_steal_dir", gtk_toggle_button_get_active(tb) ? "no" : "yes");
|
|
+ set_user_setting(user_data, gtk_toggle_button_get_active(tb) ? "no" : "yes");
|
|
}
|
|
|
|
-static bool ask_continue_before_steal(const char *base_dir, const char *dump_dir)
|
|
+/*
|
|
+ * Function shows a dialog with 'Yes/No' buttons and a check box allowing to
|
|
+ * remeber the answer. The answer is stored in configuration file under
|
|
+ * 'option_name' key.
|
|
+ */
|
|
+static bool ask_yes_no_save_result(const char *message, const char *option_name)
|
|
{
|
|
- const char *ask_steal_dir = get_user_setting("ask_steal_dir");
|
|
+ const char *ask_result = get_user_setting(option_name);
|
|
|
|
- if (ask_steal_dir && string_to_bool(ask_steal_dir) == false)
|
|
+ if (ask_result && string_to_bool(ask_result) == false)
|
|
return true;
|
|
|
|
GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(g_wnd_assistant),
|
|
- GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
- GTK_MESSAGE_QUESTION,
|
|
- GTK_BUTTONS_OK_CANCEL,
|
|
- _("Need writable directory, but '%s' is not writable."
|
|
- " Move it to '%s' and operate on the moved data?"),
|
|
- dump_dir, base_dir
|
|
- );
|
|
+ GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
+ GTK_MESSAGE_QUESTION,
|
|
+ GTK_BUTTONS_YES_NO,
|
|
+ "%s", message);
|
|
|
|
gint response = GTK_RESPONSE_CANCEL;
|
|
- g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(save_dialog_response), &response);
|
|
+ g_signal_connect(G_OBJECT(dialog), "response",
|
|
+ G_CALLBACK(save_dialog_response), &response);
|
|
|
|
- GtkWidget *ask_steal_cb = gtk_check_button_new_with_label(_("Don't ask me again"));
|
|
+ GtkWidget *ask_yes_no_cb = gtk_check_button_new_with_label(_("Don't ask me again"));
|
|
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
|
|
- ask_steal_cb, TRUE, TRUE, 0);
|
|
- g_signal_connect(ask_steal_cb, "toggled", G_CALLBACK(on_toggle_ask_steal_cb), NULL);
|
|
+ ask_yes_no_cb, TRUE, TRUE, 0);
|
|
+ g_signal_connect(ask_yes_no_cb, "toggled",
|
|
+ G_CALLBACK(on_toggle_ask_yes_no_save_result_cb), (gpointer)option_name);
|
|
|
|
/* check it by default if it's shown for the first time */
|
|
- if (!ask_steal_dir)
|
|
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ask_steal_cb), TRUE);
|
|
+ if (!ask_result)
|
|
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ask_yes_no_cb), TRUE);
|
|
|
|
- gtk_widget_show(ask_steal_cb);
|
|
+ gtk_widget_show(ask_yes_no_cb);
|
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
|
gtk_widget_destroy(dialog);
|
|
|
|
return response == GTK_RESPONSE_OK;
|
|
}
|
|
|
|
+static bool ask_continue_before_steal(const char *base_dir, const char *dump_dir)
|
|
+{
|
|
+ char *msg = xasprintf(_("Need writable directory, but '%s' is not writable."
|
|
+ " Move it to '%s' and operate on the moved data?"),
|
|
+ dump_dir, base_dir);
|
|
+ const bool response = ask_yes_no_save_result(msg, "ask_steal_dir");
|
|
+ free(msg);
|
|
+ return response;
|
|
+}
|
|
+
|
|
struct dump_dir *wizard_open_directory_for_writing(const char *dump_dir_name)
|
|
{
|
|
struct dump_dir *dd = open_directory_for_writing(dump_dir_name,
|
|
--
|
|
1.7.11.2
|
|
|