[balsa/gtk3] Improve path checking in the first-time assistant
- From: Peter Bloomfield <PeterB src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/gtk3] Improve path checking in the first-time assistant
- Date: Thu, 25 Apr 2013 22:41:57 +0000 (UTC)
commit e03905e99fe8d9f539ae29ab756cfbdd608ca4de
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Thu Apr 25 18:41:13 2013 -0400
Improve path checking in the first-time assistant
* libinit_balsa/assistant_helper.c (balsa_init_add_grid_entry):
return the GtkEntry.
* libinit_balsa/assistant_helper.h: modified API.
* libinit_balsa/assistant_page_directory.c
(unconditional_mailbox): report NULL mailbox error;
(verify_mailbox_entry), (verify_button_clicked_cb),
(verify_button): add a button for the user to verify paths.
(entry_changed_cb), (balsa_druid_page_directory_init):
desensitize the "next" button when any entry is changed, to make
the user verify the new path;
(balsa_druid_page_directory): set row spacing for vbox;
(balsa_druid_page_directory_prepare): desensitize the "next"
button initially;
(balsa_druid_page_directory_back): declare as void, not
gboolean.
(balsa_druid_page_directory_next): ditto; move path verification
to verify_mailbox_entry.
* libinit_balsa/assistant_page_directory.h: remove
Entry{Data,Master} members, and for convenience add GtkAssistant
*druid; balsa_druid_page_directory_later is conditional on
ENABLE_TOUCH_UI.
ChangeLog | 26 +++++
libinit_balsa/assistant_helper.c | 3 +-
libinit_balsa/assistant_helper.h | 9 +-
libinit_balsa/assistant_page_directory.c | 173 ++++++++++++++++++------------
libinit_balsa/assistant_page_directory.h | 5 +-
5 files changed, 140 insertions(+), 76 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 1bc631a..e58be63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2013-04-25 Peter Bloomfield <peter w500 bellsouth net>
+
+ Improve path checking in the first-time assistant
+
+ * libinit_balsa/assistant_helper.c (balsa_init_add_grid_entry):
+ return the GtkEntry.
+ * libinit_balsa/assistant_helper.h: modified API.
+ * libinit_balsa/assistant_page_directory.c
+ (unconditional_mailbox): report NULL mailbox error;
+ (verify_mailbox_entry), (verify_button_clicked_cb),
+ (verify_button): add a button for the user to verify paths.
+ (entry_changed_cb), (balsa_druid_page_directory_init):
+ desensitize the "next" button when any entry is changed, to make
+ the user verify the new path;
+ (balsa_druid_page_directory): set row spacing for vbox;
+ (balsa_druid_page_directory_prepare): desensitize the "next"
+ button initially;
+ (balsa_druid_page_directory_back): declare as void, not
+ gboolean.
+ (balsa_druid_page_directory_next): ditto; move path verification
+ to verify_mailbox_entry.
+ * libinit_balsa/assistant_page_directory.h: remove
+ Entry{Data,Master} members, and for convenience add GtkAssistant
+ *druid; balsa_druid_page_directory_later is conditional on
+ ENABLE_TOUCH_UI.
+
2013-04-25 Peter Bloomfield
* configure.ac: detect _FILE_OFFSET_BITS in configure.ac;
diff --git a/libinit_balsa/assistant_helper.c b/libinit_balsa/assistant_helper.c
index 6d15fba..96fad12 100644
--- a/libinit_balsa/assistant_helper.c
+++ b/libinit_balsa/assistant_helper.c
@@ -73,7 +73,7 @@ balsa_init_get_png(const gchar * fname)
return img;
}
-void
+GtkWidget *
balsa_init_add_grid_entry(GtkGrid * grid, guint num, const gchar * ltext,
const gchar * etext, EntryData * ed,
GtkAssistant * druid, GtkWidget *page,
@@ -104,6 +104,7 @@ balsa_init_add_grid_entry(GtkGrid * grid, guint num, const gchar * ltext,
ed->master->donemask = (ed->master->donemask << 1) | 1;
}
gtk_entry_set_text(GTK_ENTRY(e), etext);
+ return e;
}
static void
diff --git a/libinit_balsa/assistant_helper.h b/libinit_balsa/assistant_helper.h
index 322289c..17a1cbc 100644
--- a/libinit_balsa/assistant_helper.h
+++ b/libinit_balsa/assistant_helper.h
@@ -48,10 +48,11 @@ struct EntryMaster_s {
GdkPixbuf *balsa_init_get_png(const gchar * fname);
-void balsa_init_add_grid_entry(GtkGrid * grid, guint num, const gchar * ltext,
- const gchar * etext, EntryData * ed,
- GtkAssistant * druid, GtkWidget *page,
- GtkWidget ** dest);
+GtkWidget *balsa_init_add_grid_entry(GtkGrid * grid, guint num,
+ const gchar * ltext,
+ const gchar * etext, EntryData * ed,
+ GtkAssistant * druid,
+ GtkWidget * page, GtkWidget ** dest);
void balsa_init_add_grid_option(GtkGrid *grid, guint num,
const gchar *ltext, const gchar **optns,
GtkAssistant *druid, GtkWidget **dest);
diff --git a/libinit_balsa/assistant_page_directory.c b/libinit_balsa/assistant_page_directory.c
index 95767cc..f38e1ac 100644
--- a/libinit_balsa/assistant_page_directory.c
+++ b/libinit_balsa/assistant_page_directory.c
@@ -65,10 +65,12 @@ static const gchar * const init_mbnames[NUM_EDs] = {
static void balsa_druid_page_directory_prepare(GtkAssistant * druid,
GtkWidget * page,
BalsaDruidPageDirectory * dir);
-static gboolean balsa_druid_page_directory_next(GtkAssistant * druid,
- GtkWidget * page,
- BalsaDruidPageDirectory *
- dir);
+static void balsa_druid_page_directory_back(GtkAssistant * druid,
+ GtkWidget * page,
+ BalsaDruidPageDirectory * dir);
+static void balsa_druid_page_directory_next(GtkAssistant * druid,
+ GtkWidget * page,
+ BalsaDruidPageDirectory * dir);
static void unconditional_mailbox(const gchar * path,
const gchar * prettyname,
LibBalsaMailbox ** box, gchar ** error);
@@ -131,6 +133,12 @@ unconditional_mailbox(const gchar * path, const gchar * prettyname,
break;
default:
*box = (LibBalsaMailbox *) libbalsa_mailbox_local_new(path, TRUE);
+ if (!*box) {
+ *error = g_strdup_printf(_("Could not create mailbox"
+ " at path \"%s\"\n"), path);
+ g_free(dup);
+ return;
+ }
}
if (is_remote) {
@@ -170,14 +178,76 @@ unconditional_mailbox(const gchar * path, const gchar * prettyname,
(*box)->no_reassemble = TRUE;
}
-/* here are local prototypes */
-static void balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
- GtkWidget * page,
- GtkAssistant * druid);
-static gboolean balsa_druid_page_directory_back(GtkAssistant * druid,
- GtkWidget * page,
- BalsaDruidPageDirectory *
- dir);
+static void
+verify_mailbox_entry(GtkWidget * entry, const gchar * name,
+ LibBalsaMailbox ** mailbox, gboolean * verify)
+{
+ const gchar *text;
+ gchar *error;
+
+ if (!*verify)
+ return;
+
+ text = gtk_entry_get_text(GTK_ENTRY(entry));
+ error = NULL;
+ unconditional_mailbox(text, name, mailbox, &error);
+
+ if (error) {
+ GtkWidget *dlg =
+ gtk_message_dialog_new(GTK_WINDOW(gtk_widget_get_ancestor
+ (GTK_WIDGET(entry),
+ GTK_TYPE_WINDOW)),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Problem verifying path \"%s\":\n%s"),
+ text, error);
+ g_free(error);
+ gtk_dialog_run(GTK_DIALOG(dlg));
+ gtk_widget_destroy(dlg);
+ *verify = FALSE;
+ }
+}
+
+static void
+verify_button_clicked_cb(GtkWidget * button, gpointer data)
+{
+ BalsaDruidPageDirectory *dir = data;
+ gboolean verify = TRUE;
+
+ verify_mailbox_entry(dir->inbox, INBOX_NAME, &balsa_app.inbox,
+ &verify);
+ verify_mailbox_entry(dir->outbox, OUTBOX_NAME, &balsa_app.outbox,
+ &verify);
+ verify_mailbox_entry(dir->sentbox, SENTBOX_NAME, &balsa_app.sentbox,
+ &verify);
+ verify_mailbox_entry(dir->draftbox, DRAFTBOX_NAME, &balsa_app.draftbox,
+ &verify);
+ verify_mailbox_entry(dir->trash, TRASH_NAME, &balsa_app.trash,
+ &verify);
+ gtk_assistant_set_page_complete(dir->druid, dir->page, verify);
+}
+
+static GtkWidget *
+verify_button(BalsaDruidPageDirectory * dir)
+{
+ GtkWidget *button;
+
+ button = gtk_button_new_with_mnemonic(_("_Verify locations"));
+ g_signal_connect(button, "clicked",
+ G_CALLBACK(verify_button_clicked_cb), dir);
+ gtk_widget_show(button);
+ return button;
+}
+
+static void
+entry_changed_cb(GtkEditable * editable, gpointer data)
+{
+ BalsaDruidPageDirectory *dir = data;
+
+ gtk_assistant_set_page_complete(dir->druid, dir->page, FALSE);
+}
+
static void
balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
GtkWidget * page,
@@ -191,12 +261,9 @@ balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
gchar *imap_inbox = libbalsa_guess_imap_inbox();
gchar *init_presets[NUM_EDs] = { NULL, NULL, NULL, NULL, NULL };
+ dir->druid = druid;
dir->paths_locked = FALSE;
- dir->emaster.setbits = 0;
- dir->emaster.numentries = 0;
- dir->emaster.donemask = 0;
-
grid = GTK_GRID(gtk_grid_new());
gtk_grid_set_column_spacing(grid, 6);
@@ -226,8 +293,7 @@ balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
for (i = 0; i < NUM_EDs; i++) {
gchar *preset;
-
- dir->ed[i].master = &(dir->emaster);
+ GtkWidget *entry;
if (init_presets[i])
preset = init_presets[i];
@@ -238,17 +304,22 @@ balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
balsa_init_add_grid_entry(grid, i, init_mbnames[i], preset,
&(dir->ed[i]), druid, page, init_widgets[i]);
#else
- balsa_init_add_grid_entry(grid, i, _(init_mbnames[i]), preset,
- &(dir->ed[i]), druid, page, init_widgets[i]);
+ entry = balsa_init_add_grid_entry(grid, i, _(init_mbnames[i]),
+ preset, NULL, NULL, NULL,
+ init_widgets[i]);
+ g_signal_connect(entry, "changed",
+ G_CALLBACK(entry_changed_cb), dir);
#endif
g_free(preset);
}
gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(grid), FALSE, TRUE,
- 8);
+ 0);
gtk_widget_show_all(GTK_WIDGET(grid));
+ gtk_box_pack_end(GTK_BOX(page), verify_button(dir), FALSE, FALSE, 0);
+
g_signal_connect(G_OBJECT(druid), "prepare",
G_CALLBACK(balsa_druid_page_directory_prepare),
dir);
@@ -263,7 +334,7 @@ balsa_druid_page_directory(GtkAssistant * druid)
BalsaDruidPageDirectory *dir;
dir = g_new0(BalsaDruidPageDirectory, 1);
- dir->page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+ dir->page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
gtk_assistant_append_page(druid, dir->page);
gtk_assistant_set_page_title(druid, dir->page, _("Mail Files"));
balsa_druid_page_directory_init(dir, dir->page, druid);
@@ -321,56 +392,27 @@ balsa_druid_page_directory_prepare(GtkAssistant * druid,
}
/* Don't let them continue unless all entries have something. */
- gtk_assistant_set_page_complete(druid, page,
- ENTRY_MASTER_DONE(dir->emaster));
+ gtk_assistant_set_page_complete(druid, page, FALSE);
dir->need_set = TRUE;
}
-static gboolean
-balsa_druid_page_directory_next(GtkAssistant * page, GtkWidget * druid,
+static void
+balsa_druid_page_directory_back(GtkAssistant *druid, GtkWidget *page,
BalsaDruidPageDirectory * dir)
{
- gchar *error = NULL;
-
- unconditional_mailbox(gtk_entry_get_text
- (GTK_ENTRY(dir->inbox)), INBOX_NAME,
- &balsa_app.inbox, &error);
- unconditional_mailbox(gtk_entry_get_text
- (GTK_ENTRY(dir->outbox)), OUTBOX_NAME,
- &balsa_app.outbox, &error);
- unconditional_mailbox(gtk_entry_get_text
- (GTK_ENTRY(dir->sentbox)), SENTBOX_NAME,
- &balsa_app.sentbox, &error);
- unconditional_mailbox(gtk_entry_get_text
- (GTK_ENTRY(dir->draftbox)), DRAFTBOX_NAME,
- &balsa_app.draftbox, &error);
- unconditional_mailbox(gtk_entry_get_text
- (GTK_ENTRY(dir->trash)), TRASH_NAME,
- &balsa_app.trash, &error);
+ dir->paths_locked = FALSE;
+}
+static void
+balsa_druid_page_directory_next(GtkAssistant * page, GtkWidget * druid,
+ BalsaDruidPageDirectory * dir)
+{
dir->paths_locked = TRUE;
-
- if (error) {
- GtkWidget *dlg =
- gtk_message_dialog_new(GTK_WINDOW(gtk_widget_get_ancestor
- (GTK_WIDGET(druid),
- GTK_TYPE_WINDOW)),
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Problem Creating Mailboxes\n%s"),
- error);
- g_free(error);
- gtk_dialog_run(GTK_DIALOG(dlg));
- gtk_widget_destroy(dlg);
- return TRUE;
- }
-
- return FALSE;
}
+#if defined(ENABLE_TOUCH_UI)
#define SET_MAILBOX(fname, config, mbx) \
do { gchar *t=g_build_filename(balsa_app.local_mail_directory,(fname),NULL);\
unconditional_mailbox(t, config, (mbx), &error); g_free(t);}while(0)
@@ -401,11 +443,4 @@ balsa_druid_page_directory_later(GtkWidget *druid)
gtk_widget_destroy(dlg);
}
}
-
-static gboolean
-balsa_druid_page_directory_back(GtkAssistant *druid, GtkWidget *page,
- BalsaDruidPageDirectory * dir)
-{
- dir->paths_locked = FALSE;
- return FALSE;
-}
+#endif /* defined(ENABLE_TOUCH_UI) */
diff --git a/libinit_balsa/assistant_page_directory.h b/libinit_balsa/assistant_page_directory.h
index d10310f..1e5ed09 100644
--- a/libinit_balsa/assistant_page_directory.h
+++ b/libinit_balsa/assistant_page_directory.h
@@ -58,15 +58,16 @@ extern "C" {
GtkWidget *trash;
gint my_num;
gboolean paths_locked, need_set;
- EntryMaster emaster;
- EntryData ed[NUM_EDs];
+ GtkAssistant *druid;
};
/*
* Public methods
*/
void balsa_druid_page_directory(GtkAssistant * druid);
+#if defined(ENABLE_TOUCH_UI)
void balsa_druid_page_directory_later(GtkWidget *druid);
+#endif /* defined(ENABLE_TOUCH_UI) */
#ifdef __cplusplus
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]