Added account wizard (partially working with Gtk+ 2.10)
This commit is contained in:
parent
199b2bfd03
commit
464c33650b
660
src/callbacks.c
660
src/callbacks.c
@ -52,8 +52,8 @@ void on_file_quit(GtkWidget * widget, gpointer data)
|
|||||||
|
|
||||||
/* edit menu */
|
/* edit menu */
|
||||||
static void _preferences_set(Mailer * mailer);
|
static void _preferences_set(Mailer * mailer);
|
||||||
static void _preferences_on_ok(GtkWidget * widget, gpointer data);
|
static gboolean _on_preferences_closex(GtkWidget * widget, GdkEvent * event,
|
||||||
static void _preferences_on_cancel(GtkWidget * widget, gpointer data);
|
gpointer data);
|
||||||
void on_edit_preferences(GtkWidget * widget, gpointer data)
|
void on_edit_preferences(GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
Mailer * mailer = data;
|
Mailer * mailer = data;
|
||||||
@ -63,6 +63,7 @@ void on_edit_preferences(GtkWidget * widget, gpointer data)
|
|||||||
GtkWidget * vbox2;
|
GtkWidget * vbox2;
|
||||||
GtkWidget * vbox3;
|
GtkWidget * vbox3;
|
||||||
GtkSizeGroup * group;
|
GtkSizeGroup * group;
|
||||||
|
GtkListStore * store;
|
||||||
|
|
||||||
if(mailer->pr_window != NULL)
|
if(mailer->pr_window != NULL)
|
||||||
{
|
{
|
||||||
@ -70,49 +71,81 @@ void on_edit_preferences(GtkWidget * widget, gpointer data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mailer->pr_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
mailer->pr_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
|
gtk_container_set_border_width(GTK_CONTAINER(mailer->pr_window), 4);
|
||||||
gtk_window_set_resizable(GTK_WINDOW(mailer->pr_window), FALSE);
|
gtk_window_set_resizable(GTK_WINDOW(mailer->pr_window), FALSE);
|
||||||
gtk_window_set_title(GTK_WINDOW(mailer->pr_window),
|
gtk_window_set_title(GTK_WINDOW(mailer->pr_window),
|
||||||
"Mailer preferences");
|
"Mailer preferences");
|
||||||
gtk_window_set_transient_for(GTK_WINDOW(mailer->pr_window), GTK_WINDOW(
|
gtk_window_set_transient_for(GTK_WINDOW(mailer->pr_window), GTK_WINDOW(
|
||||||
mailer->window));
|
mailer->window));
|
||||||
vbox = gtk_vbox_new(FALSE, 0);
|
g_signal_connect(G_OBJECT(mailer->pr_window), "delete_event",
|
||||||
|
G_CALLBACK(_on_preferences_closex), NULL);
|
||||||
|
vbox = gtk_vbox_new(FALSE, 4);
|
||||||
notebook = gtk_notebook_new();
|
notebook = gtk_notebook_new();
|
||||||
/* accounts */
|
/* accounts */
|
||||||
vbox2 = gtk_vbox_new(FALSE, 0);
|
vbox2 = gtk_vbox_new(FALSE, 4);
|
||||||
hbox = gtk_hbox_new(FALSE, 0);
|
gtk_container_set_border_width(GTK_CONTAINER(vbox2), 4);
|
||||||
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
widget = gtk_scrolled_window_new(NULL, NULL);
|
widget = gtk_scrolled_window_new(NULL, NULL);
|
||||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
||||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||||
mailer->pr_accounts = gtk_tree_view_new();
|
store = gtk_list_store_new(1, G_TYPE_STRING);
|
||||||
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(widget),
|
mailer->pr_accounts = gtk_tree_view_new_with_model(GTK_TREE_MODEL(
|
||||||
mailer->pr_accounts);
|
store));
|
||||||
|
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(mailer->pr_accounts),
|
||||||
|
FALSE);
|
||||||
|
gtk_tree_view_append_column(GTK_TREE_VIEW(mailer->pr_accounts),
|
||||||
|
gtk_tree_view_column_new_with_attributes("Account name",
|
||||||
|
gtk_cell_renderer_text_new(), "text", 0, NULL));
|
||||||
|
gtk_container_add(GTK_CONTAINER(widget), mailer->pr_accounts);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
vbox3 = gtk_vbox_new(FALSE, 0);
|
vbox3 = gtk_vbox_new(FALSE, 4);
|
||||||
widget = gtk_button_new_from_stock(GTK_STOCK_NEW);
|
widget = gtk_button_new_from_stock(GTK_STOCK_NEW);
|
||||||
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
|
on_account_new), mailer);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox3), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox3), widget, FALSE, TRUE, 0);
|
||||||
widget = gtk_button_new_from_stock(GTK_STOCK_EDIT);
|
widget = gtk_button_new_from_stock(GTK_STOCK_EDIT);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox3), widget, FALSE, TRUE, 4);
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
widget = gtk_button_new_from_stock(GTK_STOCK_DELETE);
|
on_account_edit), mailer);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox3), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox3), widget, FALSE, TRUE, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), vbox3, FALSE, TRUE, 4);
|
widget = gtk_button_new_from_stock(GTK_STOCK_DELETE);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox2), hbox, TRUE, TRUE, 4);
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
|
on_account_delete), mailer);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox3), widget, FALSE, TRUE, 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), vbox3, FALSE, TRUE, 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox2), hbox, TRUE, TRUE, 0);
|
||||||
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(
|
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(
|
||||||
"Accounts"));
|
"Accounts"));
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 4);
|
/* display */
|
||||||
|
vbox2 = gtk_vbox_new(FALSE, 4);
|
||||||
|
gtk_container_set_border_width(GTK_CONTAINER(vbox2), 4);
|
||||||
|
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||||
|
/* default font */
|
||||||
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
|
widget = gtk_label_new("Messages font:");
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_font_button_new();
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_font_button_set_use_font(GTK_FONT_BUTTON(widget), TRUE);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
|
||||||
|
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(
|
||||||
|
"Display"));
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
|
||||||
/* dialog */
|
/* dialog */
|
||||||
hbox = gtk_hbox_new(FALSE, 0);
|
hbox = gtk_hbox_new(FALSE, 4);
|
||||||
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||||
widget = gtk_button_new_from_stock(GTK_STOCK_OK);
|
widget = gtk_button_new_from_stock(GTK_STOCK_OK);
|
||||||
gtk_size_group_add_widget(group, widget);
|
gtk_size_group_add_widget(group, widget);
|
||||||
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
_preferences_on_ok), mailer);
|
on_preferences_ok), mailer);
|
||||||
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 4);
|
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
|
widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
|
||||||
gtk_size_group_add_widget(group, widget);
|
gtk_size_group_add_widget(group, widget);
|
||||||
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
_preferences_on_cancel), mailer);
|
on_preferences_cancel), mailer);
|
||||||
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 4);
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
||||||
gtk_container_add(GTK_CONTAINER(mailer->pr_window), vbox);
|
gtk_container_add(GTK_CONTAINER(mailer->pr_window), vbox);
|
||||||
_preferences_set(mailer);
|
_preferences_set(mailer);
|
||||||
gtk_widget_show_all(mailer->pr_window);
|
gtk_widget_show_all(mailer->pr_window);
|
||||||
@ -123,24 +156,17 @@ static void _preferences_set(Mailer * mailer)
|
|||||||
/* FIXME */
|
/* FIXME */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _preferences_on_ok(GtkWidget * widget, gpointer data)
|
static gboolean _on_preferences_closex(GtkWidget * widget, GdkEvent * event,
|
||||||
|
gpointer data)
|
||||||
{
|
{
|
||||||
Mailer * mailer = data;
|
gtk_widget_hide(widget);
|
||||||
|
return TRUE;
|
||||||
/* FIXME */
|
|
||||||
gtk_widget_hide(mailer->pr_window);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void _preferences_on_cancel(GtkWidget * widget, gpointer data)
|
|
||||||
{
|
|
||||||
Mailer * mailer = data;
|
|
||||||
|
|
||||||
gtk_widget_hide(mailer->pr_window);
|
|
||||||
_preferences_set(mailer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* help menu */
|
/* help menu */
|
||||||
|
static gboolean _on_about_closex(GtkWidget * widget, GdkEvent * event,
|
||||||
|
gpointer data);
|
||||||
void on_help_about(GtkWidget * widget, gpointer data)
|
void on_help_about(GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
Mailer * mailer = data;
|
Mailer * mailer = data;
|
||||||
@ -174,6 +200,10 @@ void on_help_about(GtkWidget * widget, gpointer data)
|
|||||||
gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window),
|
gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window),
|
||||||
_license);
|
_license);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(
|
||||||
|
_on_about_closex), NULL);
|
||||||
|
g_signal_connect(G_OBJECT(window), "response", G_CALLBACK(
|
||||||
|
gtk_widget_hide), NULL);
|
||||||
gtk_widget_show(window);
|
gtk_widget_show(window);
|
||||||
}
|
}
|
||||||
#else /* !GTK_CHECK_VERSION(2, 6, 0) */
|
#else /* !GTK_CHECK_VERSION(2, 6, 0) */
|
||||||
@ -181,6 +211,13 @@ void on_help_about(GtkWidget * widget, gpointer data)
|
|||||||
}
|
}
|
||||||
#endif /* !GTK_CHECK_VERSION(2, 6, 0) */
|
#endif /* !GTK_CHECK_VERSION(2, 6, 0) */
|
||||||
|
|
||||||
|
static gboolean _on_about_closex(GtkWidget * widget, GdkEvent * event,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
gtk_widget_hide(widget);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* toolbar */
|
/* toolbar */
|
||||||
void on_new_mail(GtkWidget * widget, gpointer data)
|
void on_new_mail(GtkWidget * widget, gpointer data)
|
||||||
@ -191,6 +228,565 @@ void on_new_mail(GtkWidget * widget, gpointer data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* preferences window */
|
||||||
|
void on_preferences_ok(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
Mailer * mailer = data;
|
||||||
|
GtkTreeModel * model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
GtkTreeModel * view_model;
|
||||||
|
GtkTreeIter view_iter;
|
||||||
|
|
||||||
|
gtk_widget_hide(mailer->pr_window);
|
||||||
|
model = gtk_tree_view_get_model(GTK_TREE_VIEW(mailer->pr_accounts));
|
||||||
|
view_model = gtk_tree_view_get_model(GTK_TREE_VIEW(
|
||||||
|
mailer->view_folders));
|
||||||
|
if(gtk_tree_model_get_iter_first(model, &iter) != FALSE)
|
||||||
|
do
|
||||||
|
{
|
||||||
|
/* FIXME check if already present, update if needed */
|
||||||
|
/* else add account with full information */
|
||||||
|
mailer_account_add(mailer);
|
||||||
|
}
|
||||||
|
while(gtk_tree_model_iter_next(model, &iter) == TRUE);
|
||||||
|
/* FIXME remove remaining accounts */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void on_preferences_cancel(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
Mailer * mailer = data;
|
||||||
|
|
||||||
|
gtk_widget_hide(mailer->pr_window);
|
||||||
|
_preferences_set(mailer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* accounts */
|
||||||
|
/* types */
|
||||||
|
typedef struct _AccountData
|
||||||
|
{
|
||||||
|
Mailer * mailer;
|
||||||
|
unsigned int available;
|
||||||
|
GtkWidget * settings;
|
||||||
|
GtkWidget * confirm;
|
||||||
|
} AccountData;
|
||||||
|
#if !GTK_CHECK_VERSION(2, 10, 0)
|
||||||
|
# define GTK_ASSISTANT(widget) (widget)
|
||||||
|
static GtkWidget * gtk_assistant_new(void);
|
||||||
|
static gint gtk_assistant_append_page(GtkWidget * assistant,
|
||||||
|
GtkWidget * widget);
|
||||||
|
#endif
|
||||||
|
static void _on_assistant_cancel(GtkWidget * widget, gpointer data);
|
||||||
|
static void _on_assistant_close(GtkWidget * widget, gpointer data);
|
||||||
|
static void _on_assistant_apply(GtkWidget * widget, gpointer data);
|
||||||
|
static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
||||||
|
gpointer data);
|
||||||
|
static void _on_account_type_change(GtkWidget * widget, gpointer data);
|
||||||
|
void on_account_new(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
Mailer * mailer = data;
|
||||||
|
AccountData * ad;
|
||||||
|
GtkWidget * assistant;
|
||||||
|
GtkWidget * vbox;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if(mailer->available_cnt == 0)
|
||||||
|
{
|
||||||
|
mailer_error(mailer, "No account plug-in available", 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if((ad = malloc(sizeof(*ad))) == NULL)
|
||||||
|
{
|
||||||
|
mailer_error(mailer, strerror(errno), 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ad->mailer = mailer;
|
||||||
|
ad->available = 0;
|
||||||
|
assistant = gtk_assistant_new();
|
||||||
|
g_signal_connect(G_OBJECT(assistant), "cancel", G_CALLBACK(
|
||||||
|
_on_assistant_cancel), ad);
|
||||||
|
g_signal_connect(G_OBJECT(assistant), "close", G_CALLBACK(
|
||||||
|
_on_assistant_close), ad);
|
||||||
|
g_signal_connect(G_OBJECT(assistant), "apply", G_CALLBACK(
|
||||||
|
_on_assistant_apply), ad);
|
||||||
|
g_signal_connect(G_OBJECT(assistant), "prepare", G_CALLBACK(
|
||||||
|
_on_assistant_prepare), ad);
|
||||||
|
/* plug-in selection */
|
||||||
|
vbox = gtk_vbox_new(FALSE, 4);
|
||||||
|
gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
|
||||||
|
widget = gtk_label_new("Please select the type of account\n"
|
||||||
|
"you want to create now:"),
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
|
||||||
|
widget = gtk_combo_box_new_text();
|
||||||
|
/* XXX this works because there is no plug-in list reload
|
||||||
|
* would it be implemented this will need validation later */
|
||||||
|
for(i = 0; i < mailer->available_cnt; i++)
|
||||||
|
gtk_combo_box_append_text(GTK_COMBO_BOX(widget),
|
||||||
|
mailer->available[i].title);
|
||||||
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
|
||||||
|
g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(
|
||||||
|
_on_account_type_change), ad);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
|
||||||
|
gtk_widget_show_all(vbox);
|
||||||
|
gtk_assistant_append_page(GTK_ASSISTANT(assistant), vbox);
|
||||||
|
gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), vbox,
|
||||||
|
"Account type");
|
||||||
|
gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), vbox,
|
||||||
|
GTK_ASSISTANT_PAGE_INTRO);
|
||||||
|
gtk_assistant_set_page_complete(GTK_ASSISTANT(assistant), vbox, TRUE);
|
||||||
|
/* plug-in preferences */
|
||||||
|
vbox = gtk_vbox_new(FALSE, 0);
|
||||||
|
ad->settings = vbox;
|
||||||
|
gtk_widget_show(vbox);
|
||||||
|
gtk_assistant_append_page(GTK_ASSISTANT(assistant), vbox);
|
||||||
|
gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), vbox,
|
||||||
|
"Account settings");
|
||||||
|
gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), vbox,
|
||||||
|
GTK_ASSISTANT_PAGE_CONTENT);
|
||||||
|
gtk_assistant_set_page_complete(GTK_ASSISTANT(assistant), vbox, TRUE);
|
||||||
|
/* confirmation page */
|
||||||
|
vbox = gtk_vbox_new(FALSE, 0);
|
||||||
|
ad->confirm = vbox;
|
||||||
|
gtk_widget_show(vbox);
|
||||||
|
gtk_assistant_append_page(GTK_ASSISTANT(assistant), vbox);
|
||||||
|
gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), vbox,
|
||||||
|
"Account confirmation");
|
||||||
|
gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), vbox,
|
||||||
|
GTK_ASSISTANT_PAGE_CONFIRM);
|
||||||
|
gtk_assistant_set_page_complete(GTK_ASSISTANT(assistant), vbox, TRUE);
|
||||||
|
gtk_widget_show(assistant);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GTK_CHECK_VERSION(2, 10, 0)
|
||||||
|
/* types */
|
||||||
|
typedef struct _GtkAssistant
|
||||||
|
{
|
||||||
|
GtkWidget * window;
|
||||||
|
GtkWidget * frame;
|
||||||
|
GtkWidget * label;
|
||||||
|
GtkWidget ** page;
|
||||||
|
unsigned int page_cnt;
|
||||||
|
unsigned int page_cur;
|
||||||
|
} GtkAssistant;
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
static int _assistant_error(char const * message, int ret);
|
||||||
|
static gboolean _on_assistant_closex(GtkWidget * widget, GdkEvent * event,
|
||||||
|
gpointer data);
|
||||||
|
static void _on_assistant_cancel(GtkWidget * widget, gpointer data);
|
||||||
|
static void _on_assistant_forward(GtkWidget * widget, gpointer data);
|
||||||
|
static void _on_assistant_back(GtkWidget * widget, gpointer data);
|
||||||
|
static GtkWidget * gtk_assistant_new(void)
|
||||||
|
{
|
||||||
|
GtkAssistant * assistant;
|
||||||
|
GtkWidget * window;
|
||||||
|
GtkWidget * frame;
|
||||||
|
GtkWidget * vbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
GtkWidget * hbox;
|
||||||
|
|
||||||
|
if((assistant = calloc(0, sizeof(*assistant))) == NULL)
|
||||||
|
_assistant_error("out of memory", 0);
|
||||||
|
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
|
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
|
||||||
|
g_object_set_data(G_OBJECT(window), "assistant", assistant);
|
||||||
|
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(
|
||||||
|
_on_assistant_closex), assistant);
|
||||||
|
vbox = gtk_vbox_new(FALSE, 0);
|
||||||
|
/* frame */
|
||||||
|
frame = gtk_frame_new("");
|
||||||
|
gtk_widget_show(frame);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
|
||||||
|
/* navigation buttons */
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
|
||||||
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
|
on_assistant_cancel), assistant);
|
||||||
|
gtk_widget_show(widget);
|
||||||
|
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
widget = gtk_button_new_from_stock(GTK_STOCK_GO_BACK);
|
||||||
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
|
on_assistant_back), assistant);
|
||||||
|
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
widget = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD);
|
||||||
|
g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||||
|
on_assistant_forward), assistant);
|
||||||
|
gtk_widget_show(widget);
|
||||||
|
gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
gtk_widget_show(hbox);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
||||||
|
gtk_widget_show(vbox);
|
||||||
|
gtk_container_add(G_CONTAINER(window), vbox);
|
||||||
|
if(assistant == NULL)
|
||||||
|
return window;
|
||||||
|
assistant->window = window;
|
||||||
|
assistant->frame = frame;
|
||||||
|
assistant->label = gtk_frame_get_label_widget(GTK_FRAME(frame));
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _assistant_error(char const * message, int ret)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s%s%s", "*** GtkAssistant wrapper ", message,
|
||||||
|
" ***\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean _on_assistant_closex(GtkWidget * widget, GdkEvent * event,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
_on_assistant_cancel(NULL, data);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _on_assistant_cancel(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
GtkAssistant * assistant = data;
|
||||||
|
|
||||||
|
/* FIXME signals to handle? */
|
||||||
|
gtk_widget_destroy(assistant->window);
|
||||||
|
free(assistant->page);
|
||||||
|
free(assistant);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _on_assistant_forward(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
GtkAssistant * assistant = data;
|
||||||
|
|
||||||
|
/* FIXME */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _on_assistant_back(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
GtkAssistant * assistant = data;
|
||||||
|
|
||||||
|
/* FIXME */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gint gtk_assistant_append_page(GtkWidget * assistant, GtkWidget * widget)
|
||||||
|
{
|
||||||
|
GtkAssistant * assistant;
|
||||||
|
GtkWidget ** p;
|
||||||
|
|
||||||
|
if((assistant = g_object_get_data(G_OBJECT(assistant), "assistant"))
|
||||||
|
== NULL)
|
||||||
|
return _assistant_error("data not found", -1);
|
||||||
|
if((p = realloc(assistant->page, sizeof(*p) * (page_cnt+1))) == NULL)
|
||||||
|
return _assistant_error(strerror(errno), -1);
|
||||||
|
assistant->page = p;
|
||||||
|
assistant->page[assistant->page_cnt] = widget;
|
||||||
|
if(assistant->page_cnt == 0)
|
||||||
|
gtk_container_add(GTK_CONTAINER(assistant->frame), widget);
|
||||||
|
gtk_widget_show(widget);
|
||||||
|
return assistant->page_cnt++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void _on_assistant_cancel(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
_on_assistant_close(widget, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _on_assistant_close(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
AccountData * ad = data;
|
||||||
|
|
||||||
|
free(ad);
|
||||||
|
gtk_widget_destroy(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _on_assistant_apply(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
AccountData * ad = data;
|
||||||
|
GtkTreeModel * model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
|
model = gtk_tree_view_get_model(GTK_TREE_VIEW(ad->mailer->pr_accounts));
|
||||||
|
gtk_list_store_append(GTK_LIST_STORE(model), &iter);
|
||||||
|
gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, "account", -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _account_config_update(AccountConfig * config);
|
||||||
|
static GtkWidget * _account_config_display(AccountConfig * config);
|
||||||
|
static void _on_assistant_prepare(GtkWidget * widget, GtkWidget * page,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
AccountData * ad = data;
|
||||||
|
/* FIXME should be defined in just one place */
|
||||||
|
const char * title[3] = { "Account type", "Account settings",
|
||||||
|
"Account confirmation" };
|
||||||
|
unsigned int i;
|
||||||
|
AccountConfig * config;
|
||||||
|
|
||||||
|
i = gtk_assistant_get_current_page(GTK_ASSISTANT(widget));
|
||||||
|
gtk_window_set_title(GTK_WINDOW(widget), title[i]);
|
||||||
|
if(i == 1)
|
||||||
|
{
|
||||||
|
gtk_container_remove(GTK_CONTAINER(page), ad->settings);
|
||||||
|
config = ad->mailer->available[ad->available].plugin->config;
|
||||||
|
ad->settings = _account_config_update(config);
|
||||||
|
gtk_container_add(GTK_CONTAINER(page), ad->settings);
|
||||||
|
}
|
||||||
|
else if(i == 2)
|
||||||
|
{
|
||||||
|
gtk_container_remove(GTK_CONTAINER(page), ad->confirm);
|
||||||
|
config = ad->mailer->available[ad->available].plugin->config;
|
||||||
|
ad->confirm = _account_config_display(config);
|
||||||
|
gtk_container_add(GTK_CONTAINER(page), ad->confirm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _update_string(AccountConfig * config, GtkSizeGroup * group);
|
||||||
|
static GtkWidget * _update_password(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group);
|
||||||
|
static GtkWidget * _update_uint16(AccountConfig * config, GtkSizeGroup * group);
|
||||||
|
static GtkWidget * _update_boolean(AccountConfig * config);
|
||||||
|
static GtkWidget * _account_config_update(AccountConfig * config)
|
||||||
|
/* FIXME append ":" to labels */
|
||||||
|
/* FIXME consider working on a temporary plug-in instance instead
|
||||||
|
* of the available ones */
|
||||||
|
{
|
||||||
|
GtkWidget * vbox;
|
||||||
|
GtkSizeGroup * group;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
vbox = gtk_vbox_new(FALSE, 4);
|
||||||
|
gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
|
||||||
|
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||||
|
for(i = 0; config[i].name != NULL; i++)
|
||||||
|
switch(config[i].type)
|
||||||
|
{
|
||||||
|
case ACT_NONE:
|
||||||
|
continue;
|
||||||
|
case ACT_STRING:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_update_string(&config[i],
|
||||||
|
group), FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
case ACT_PASSWORD:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_update_password(&config[i],
|
||||||
|
group), FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
case ACT_UINT16:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_update_uint16(&config[i],
|
||||||
|
group), FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
case ACT_BOOLEAN:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_update_boolean(&config[i]),
|
||||||
|
FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gtk_widget_show_all(vbox);
|
||||||
|
return vbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _update_string(AccountConfig * config, GtkSizeGroup * group)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_label_new(config->title);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_entry_new();
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _update_password(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_label_new(config->title);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_entry_new();
|
||||||
|
gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _update_uint16(AccountConfig * config, GtkSizeGroup * group)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_label_new(config->title);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_spin_button_new_with_range(0, 65535, 1);
|
||||||
|
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(widget), 0);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _update_boolean(AccountConfig * config)
|
||||||
|
{
|
||||||
|
return gtk_check_button_new_with_label(config->title);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _display_string(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group);
|
||||||
|
static GtkWidget * _display_password(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group);
|
||||||
|
static GtkWidget * _display_uint16(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group);
|
||||||
|
static GtkWidget * _display_boolean(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group);
|
||||||
|
static GtkWidget * _account_config_display(AccountConfig * config)
|
||||||
|
/* FIXME append ":" to labels */
|
||||||
|
{
|
||||||
|
GtkWidget * vbox;
|
||||||
|
GtkSizeGroup * group;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
vbox = gtk_vbox_new(FALSE, 4);
|
||||||
|
gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
|
||||||
|
group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||||
|
for(i = 0; config[i].name != NULL; i++)
|
||||||
|
switch(config[i].type)
|
||||||
|
{
|
||||||
|
case ACT_NONE:
|
||||||
|
continue;
|
||||||
|
case ACT_STRING:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_display_string(&config[i],
|
||||||
|
group), FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
case ACT_PASSWORD:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_display_password(&config[i],
|
||||||
|
group), FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
case ACT_UINT16:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_display_uint16(&config[i],
|
||||||
|
group), FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
case ACT_BOOLEAN:
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox),
|
||||||
|
_display_boolean(&config[i],
|
||||||
|
group), FALSE, TRUE, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gtk_widget_show_all(vbox);
|
||||||
|
return vbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _display_string(AccountConfig * config, GtkSizeGroup * group)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_label_new(config->title);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_label_new("FIXME");
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _display_password(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_label_new(config->title);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_label_new("FIXME");
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _display_uint16(AccountConfig * config, GtkSizeGroup * group)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
char buf[6];
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_label_new(config->title);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
snprintf(buf, sizeof(buf), "%u", (uint16_t)config->value);
|
||||||
|
widget = gtk_label_new(buf);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget * _display_boolean(AccountConfig * config,
|
||||||
|
GtkSizeGroup * group)
|
||||||
|
{
|
||||||
|
GtkWidget * hbox;
|
||||||
|
GtkWidget * widget;
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
|
widget = gtk_label_new(config->title);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
|
||||||
|
widget = gtk_label_new(config->value != 0 ? "Yes" : "No");
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
|
||||||
|
gtk_size_group_add_widget(group, widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
return hbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _on_account_type_change(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
AccountData * ad = data;
|
||||||
|
|
||||||
|
ad->available = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "%s%u%s", "Account type ", ad->available, " active\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_account_edit(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
/* FIXME */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void on_account_delete(GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
Mailer * mailer = data;
|
||||||
|
GtkTreePath * path;
|
||||||
|
GtkTreeModel * model;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
|
gtk_tree_view_get_cursor(GTK_TREE_VIEW(mailer->pr_accounts), &path, NULL);
|
||||||
|
if(path == NULL)
|
||||||
|
return;
|
||||||
|
model = gtk_tree_view_get_model(GTK_TREE_VIEW(mailer->pr_accounts));
|
||||||
|
gtk_tree_model_get_iter(model, &iter, path);
|
||||||
|
gtk_tree_path_free(path);
|
||||||
|
gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
|
||||||
|
/* FIXME non-interface code */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* compose window */
|
/* compose window */
|
||||||
gboolean on_compose_closex(GtkWidget * widget, GdkEvent * event, gpointer data)
|
gboolean on_compose_closex(GtkWidget * widget, GdkEvent * event, gpointer data)
|
||||||
{
|
{
|
||||||
|
@ -26,6 +26,17 @@ void on_help_about(GtkWidget * widget, gpointer data);
|
|||||||
void on_new_mail(GtkWidget * widget, gpointer data);
|
void on_new_mail(GtkWidget * widget, gpointer data);
|
||||||
|
|
||||||
|
|
||||||
|
/* preferences window */
|
||||||
|
void on_preferences_ok(GtkWidget * widget, gpointer data);
|
||||||
|
void on_preferences_cancel(GtkWidget * widget, gpointer data);
|
||||||
|
|
||||||
|
|
||||||
|
/* accounts */
|
||||||
|
void on_account_new(GtkWidget * widget, gpointer data);
|
||||||
|
void on_account_edit(GtkWidget * widget, gpointer data);
|
||||||
|
void on_account_delete(GtkWidget * widget, gpointer data);
|
||||||
|
|
||||||
|
|
||||||
/* compose window */
|
/* compose window */
|
||||||
gboolean on_compose_closex(GtkWidget * widget, GdkEvent * event, gpointer data);
|
gboolean on_compose_closex(GtkWidget * widget, GdkEvent * event, gpointer data);
|
||||||
void on_compose_save(GtkWidget * widget, gpointer data);
|
void on_compose_save(GtkWidget * widget, gpointer data);
|
||||||
|
80
src/mailer.c
80
src/mailer.c
@ -127,8 +127,6 @@ Mailer * mailer_new(void)
|
|||||||
gtk_paned_set_position(GTK_PANED(hpaned), 160);
|
gtk_paned_set_position(GTK_PANED(hpaned), 160);
|
||||||
/* folders */
|
/* folders */
|
||||||
widget = gtk_scrolled_window_new(NULL, NULL);
|
widget = gtk_scrolled_window_new(NULL, NULL);
|
||||||
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),
|
|
||||||
GTK_SHADOW_ETCHED_IN);
|
|
||||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
||||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||||
mailer->view_folders = _new_folders_view();
|
mailer->view_folders = _new_folders_view();
|
||||||
@ -138,8 +136,6 @@ Mailer * mailer_new(void)
|
|||||||
gtk_paned_set_position(GTK_PANED(vpaned), 160);
|
gtk_paned_set_position(GTK_PANED(vpaned), 160);
|
||||||
/* messages list */
|
/* messages list */
|
||||||
widget = gtk_scrolled_window_new(NULL, NULL);
|
widget = gtk_scrolled_window_new(NULL, NULL);
|
||||||
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),
|
|
||||||
GTK_SHADOW_ETCHED_IN);
|
|
||||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
||||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||||
mailer->view_headers = gtk_tree_view_new();
|
mailer->view_headers = gtk_tree_view_new();
|
||||||
@ -150,8 +146,6 @@ Mailer * mailer_new(void)
|
|||||||
mailer->view_body = gtk_text_view_new();
|
mailer->view_body = gtk_text_view_new();
|
||||||
gtk_text_view_set_editable(GTK_TEXT_VIEW(mailer->view_body), FALSE);
|
gtk_text_view_set_editable(GTK_TEXT_VIEW(mailer->view_body), FALSE);
|
||||||
widget = gtk_scrolled_window_new(NULL, NULL);
|
widget = gtk_scrolled_window_new(NULL, NULL);
|
||||||
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),
|
|
||||||
GTK_SHADOW_ETCHED_IN);
|
|
||||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
||||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||||
gtk_container_add(GTK_CONTAINER(widget), mailer->view_body);
|
gtk_container_add(GTK_CONTAINER(widget), mailer->view_body);
|
||||||
@ -204,7 +198,7 @@ static int _new_plugins(Mailer * mailer)
|
|||||||
{
|
{
|
||||||
_mailer_error(dirname, 0);
|
_mailer_error(dirname, 0);
|
||||||
free(dirname);
|
free(dirname);
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
for(de = readdir(dir); de != NULL; de = readdir(dir))
|
for(de = readdir(dir); de != NULL; de = readdir(dir))
|
||||||
{
|
{
|
||||||
@ -249,10 +243,11 @@ static int _new_plugins(Mailer * mailer)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
p[mailer->available_cnt].name[len-3] = '\0';
|
p[mailer->available_cnt].name[len-3] = '\0';
|
||||||
p[mailer->available_cnt].handle = NULL;
|
p[mailer->available_cnt].handle = handle;
|
||||||
p[mailer->available_cnt++].plugin = NULL;
|
p[mailer->available_cnt++].plugin = plugin;
|
||||||
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "Plug-in %s: %s\n", filename, plugin->name);
|
fprintf(stderr, "Plug-in %s: %s\n", filename, plugin->name);
|
||||||
dlclose(handle);
|
#endif
|
||||||
free(filename);
|
free(filename);
|
||||||
}
|
}
|
||||||
if(closedir(dir) != 0)
|
if(closedir(dir) != 0)
|
||||||
@ -319,9 +314,44 @@ static GtkWidget * _new_headers(Mailer * mailer)
|
|||||||
return vbox;
|
return vbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static gboolean _new_accounts(gpointer data)
|
|
||||||
|
void mailer_delete(Mailer * mailer)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for(i = 0; i < mailer->available_cnt; i++)
|
||||||
|
{
|
||||||
|
free(mailer->available[i].name);
|
||||||
|
free(mailer->available[i].title);
|
||||||
|
dlclose(mailer->available[i].handle);
|
||||||
|
}
|
||||||
|
free(mailer->available);
|
||||||
|
for(i = 0; i < mailer->account_cnt; i++)
|
||||||
|
account_delete(mailer->account[i]);
|
||||||
|
free(mailer->account);
|
||||||
|
free(mailer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* useful */
|
||||||
|
int mailer_error(Mailer * mailer, char const * message, int ret)
|
||||||
|
{
|
||||||
|
GtkWidget * dialog;
|
||||||
|
|
||||||
|
dialog = gtk_message_dialog_new(GTK_WINDOW(mailer->window),
|
||||||
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
|
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", message);
|
||||||
|
gtk_window_set_title(GTK_WINDOW(dialog), "Error");
|
||||||
|
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
||||||
|
gtk_widget_destroy), NULL);
|
||||||
|
gtk_widget_show(dialog);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int mailer_account_add(Mailer * mailer)
|
||||||
|
/* FIXME */
|
||||||
{
|
{
|
||||||
Mailer * mailer = data;
|
|
||||||
Account ** p;
|
Account ** p;
|
||||||
GtkTreeModel * model;
|
GtkTreeModel * model;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
@ -359,30 +389,4 @@ static GtkWidget * _new_headers(Mailer * mailer)
|
|||||||
}
|
}
|
||||||
mailer->account_cnt++;
|
mailer->account_cnt++;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} */
|
|
||||||
|
|
||||||
|
|
||||||
void mailer_delete(Mailer * mailer)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i = 0; i < mailer->account_cnt; i++)
|
|
||||||
account_delete(mailer->account[i]);
|
|
||||||
free(mailer->account);
|
|
||||||
free(mailer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* useful */
|
|
||||||
int mailer_error(Mailer * mailer, char const * message, int ret)
|
|
||||||
{
|
|
||||||
GtkWidget * dialog;
|
|
||||||
|
|
||||||
dialog = gtk_message_dialog_new(GTK_WINDOW(mailer->window),
|
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
||||||
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", message);
|
|
||||||
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
|
||||||
gtk_widget_destroy), NULL);
|
|
||||||
gtk_widget_show(dialog);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
typedef struct _Mailer
|
typedef struct _Mailer
|
||||||
{
|
{
|
||||||
Account * available;
|
Account * available;
|
||||||
int available_cnt;
|
unsigned int available_cnt;
|
||||||
|
|
||||||
Account ** account;
|
Account ** account;
|
||||||
int account_cnt;
|
unsigned int account_cnt;
|
||||||
Account * account_cur;
|
Account * account_cur;
|
||||||
|
|
||||||
/* widgets */
|
/* widgets */
|
||||||
@ -47,4 +47,7 @@ void mailer_delete(Mailer * mailer);
|
|||||||
/* useful */
|
/* useful */
|
||||||
int mailer_error(Mailer * mailer, char const * message, int ret);
|
int mailer_error(Mailer * mailer, char const * message, int ret);
|
||||||
|
|
||||||
|
/* FIXME */
|
||||||
|
int mailer_account_add(Mailer * mailer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user