diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2011-04-13 22:30:40 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2012-06-03 11:00:40 +0800 |
commit | 3449e5fcc7f9c797fcde7f2a444b1eb7a934cd81 (patch) | |
tree | ff59febf4ac0c6316ef344ea25cee002088bd314 /mail/e-mail-config-page.c | |
parent | f78795f4dff8b225d78385c5e23e1cd44ee946ad (diff) | |
download | gsoc2013-evolution-3449e5fcc7f9c797fcde7f2a444b1eb7a934cd81.tar.gz gsoc2013-evolution-3449e5fcc7f9c797fcde7f2a444b1eb7a934cd81.tar.zst gsoc2013-evolution-3449e5fcc7f9c797fcde7f2a444b1eb7a934cd81.zip |
Adapt mail to the new ESource API.
Diffstat (limited to 'mail/e-mail-config-page.c')
-rw-r--r-- | mail/e-mail-config-page.c | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/mail/e-mail-config-page.c b/mail/e-mail-config-page.c new file mode 100644 index 0000000000..29d18e8da6 --- /dev/null +++ b/mail/e-mail-config-page.c @@ -0,0 +1,176 @@ +/* + * e-mail-config-page.c + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see <http://www.gnu.org/licenses/> + * + */ + +#include "e-mail-config-page.h" + +#include <config.h> +#include <glib/gi18n-lib.h> + +#include <e-util/e-marshal.h> + +enum { + CHANGED, + SETUP_DEFAULTS, + CHECK_COMPLETE, + COMMIT_CHANGES, + LAST_SIGNAL +}; + +static gulong signals[LAST_SIGNAL]; + +G_DEFINE_INTERFACE ( + EMailConfigPage, + e_mail_config_page, + GTK_TYPE_WIDGET) + +static gboolean +mail_config_page_check_complete (EMailConfigPage *page) +{ + return TRUE; +} + +static gboolean +mail_config_page_check_complete_accumulator (GSignalInvocationHint *ihint, + GValue *return_accu, + const GValue *handler_return, + gpointer unused) +{ + gboolean v_boolean; + + /* Abort emission if a handler returns FALSE. */ + v_boolean = g_value_get_boolean (handler_return); + g_value_set_boolean (return_accu, v_boolean); + + return v_boolean; +} + +static void +e_mail_config_page_default_init (EMailConfigPageInterface *interface) +{ + interface->title = _("Untitled"); + interface->page_type = GTK_ASSISTANT_PAGE_CONTENT; + + interface->check_complete = mail_config_page_check_complete; + + signals[CHANGED] = g_signal_new ( + "changed", + G_TYPE_FROM_INTERFACE (interface), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EMailConfigPageInterface, changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[SETUP_DEFAULTS] = g_signal_new ( + "setup-defaults", + G_TYPE_FROM_INTERFACE (interface), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EMailConfigPageInterface, setup_defaults), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[CHECK_COMPLETE] = g_signal_new ( + "check-complete", + G_TYPE_FROM_INTERFACE (interface), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EMailConfigPageInterface, check_complete), + mail_config_page_check_complete_accumulator, NULL, + e_marshal_BOOLEAN__VOID, + G_TYPE_BOOLEAN, 0); + + signals[COMMIT_CHANGES] = g_signal_new ( + "commit-changes", + G_TYPE_FROM_INTERFACE (interface), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EMailConfigPageInterface, commit_changes), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + G_TYPE_POINTER); +} + +void +e_mail_config_page_changed (EMailConfigPage *page) +{ + g_return_if_fail (E_IS_MAIL_CONFIG_PAGE (page)); + + g_signal_emit (page, signals[CHANGED], 0); +} + +void +e_mail_config_page_setup_defaults (EMailConfigPage *page) +{ + g_return_if_fail (E_IS_MAIL_CONFIG_PAGE (page)); + + g_signal_emit (page, signals[SETUP_DEFAULTS], 0); +} + +gboolean +e_mail_config_page_check_complete (EMailConfigPage *page) +{ + gboolean complete; + + g_return_val_if_fail (E_IS_MAIL_CONFIG_PAGE (page), FALSE); + + g_signal_emit (page, signals[CHECK_COMPLETE], 0, &complete); + + return complete; +} + +void +e_mail_config_page_commit_changes (EMailConfigPage *page, + GQueue *source_queue) +{ + g_return_if_fail (E_IS_MAIL_CONFIG_PAGE (page)); + g_return_if_fail (source_queue != NULL); + + g_signal_emit (page, signals[COMMIT_CHANGES], 0, source_queue); +} + +gint +e_mail_config_page_compare (GtkWidget *page_a, + GtkWidget *page_b) +{ + EMailConfigPageInterface *interface_a = NULL; + EMailConfigPageInterface *interface_b = NULL; + + if (E_IS_MAIL_CONFIG_PAGE (page_a)) + interface_a = E_MAIL_CONFIG_PAGE_GET_INTERFACE (page_a); + + if (E_IS_MAIL_CONFIG_PAGE (page_b)) + interface_b = E_MAIL_CONFIG_PAGE_GET_INTERFACE (page_b); + + if (interface_a == interface_b) + return 0; + + if (interface_a != NULL && interface_b == NULL) + return -1; + + if (interface_a == NULL && interface_b != NULL) + return 1; + + if (interface_a->sort_order < interface_b->sort_order) + return -1; + + if (interface_a->sort_order > interface_b->sort_order) + return 1; + + return 0; +} + |