From 16068d9b4191ea142a9e75a50eb8d260ed2bb406 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 2 Apr 2008 18:37:22 +0000 Subject: ** Merge the mbarnes-composer branch 2008-04-02 Matthew Barnes ** Merge the mbarnes-composer branch * configure.in: Bump libgtkhtml requirement to 3.19.1. Add gtkhtml-editor dependency for addressbook, calendar and mail. Remove print-message plugin; new composer implements this natively. * tools/Makefile.am: Remove CORBA rules for the old composer. * addressbook/gui/widgets/Makefile.am: Remove CORBA rules for the old composer. * addressbook/gui/widgets/eab-gui-util.c (eab_send_to_contact_and_email_num_list), (eab_send_contact_list_as_attachment): Adapt to new Bonobo-less composer widget. * calendar/gui/Makefile.am: Remove CORBA rules for the old composer. * calendar/gui/itip-utils.c (comp_from), (comp_to_list), (comp_subject), (comp_content_type), (comp_filename), (comp_description), (append_cal_attachments), (itip_send_comp), (reply_to_calendar_comp): Adapt to new Bonobo-less composer widget. * composer/Makefile.am: Remove CORBA rules for the old composer. * composer/e-msg-composer.c: * composer/e-msg-composer.h: EMsgComposer is now a subclass of GtkhtmlEditor. Extensive refactoring and cleanup, too much to list in detail. * composer/e-composer-header.c: * composer/e-composer-header.h: Add "sensitive" property along with get/set functions. * composer/e-composer-from-header.c: * composer/e-composer-from-header.h: Propagate "refreshed" signal from EAccountComboBox. Add function e_composer_from_header_get_account_list(). * composer/e-composer-private.c: * composer/e-composer-private.h: New files manage composer's private data. Allows other composer files to manipulate private data. * composer/e-msg-composer-hdrs.c: * composer/e-msg-composer-hdrs.h: Remove these files; replaced by EComposerHeaderTable widget. * composer/evolution-composer.c: * composer/evolution-composer.h: Remove these files; composer is now a subclass of GtkhtmlEditor. * composer/e-msg-composer-select-file.c: * composer/e-msg-composer-select-file.h: Remove these files; logic moved to e-msg-composer.c. * composer/listener.c: * composer/listener.h: Remove these files; event handlers moved to e-msg-composer.c. * composer/Composer.idl: * composer/Evolution-Composer.idl: Remove these files; composer is no longer a Bonobo object. * mail/em-composer-prefs (sig_edit_cb), (em_composer_prefs_new_signature): Adapt to new Bonobo-less signature editor. * mail/mail-signature-editor.c: * mail/mail-signature-editor.h: Rewrite the signature editor as a subclass of GtkhtmlEditor. Eliminates Bonobo from the equation. * mail/em-composer-utils.c (composer_get_message), (em_utils_composer_send_cb), (save_draft_done), (em_utils_composer_save_draft_cb), (create_new_composer), (em_utils_compose_new_message), (em_utils_compose_new_message_with_mailto), (em_utils_post_to_folder), (em_utils_post_to_url), (edit_message), (forward_attached), (forward_non_attached), (reply_get_composer), (composer_set_body), (em_utils_reply_to_message), (post_reply_to_message): Adapt to new Bonobo-less composer. * mail/mail-component-factory.c: Composer is no longer needs a Bonobo factory. * mail/mail-config.c: Fix style pattern for EMsgComposer widgets. * plugins/groupwise/mail-send-options.c (org_gnome_composer_send_options): Adapt to streamlined EMsgComposer API. * plugins/exchange-operations/Makefile.am: Add EVOLUTION_MAIL_CFLAGS and EVOLUTION_MAIL_LIBS. * plugins/exchange-operations/exchange-mail-send-options.c (append_to_header), (org_gnome_exchange_send_options): Adapt to streamlined EMsgComposer API. * plugins/mailing-list-actions/mailing-list-actions.c (emla_list_action_do): Adapt to streamlined EMsgComposer API. * po/POTFILES.in: Update file list for new composer. * ui/evolution-composer-entries.xml: Remove this file; obsoleted by new composer. * widgets/misc/Makefile.am: Add EVOLUTION_MAIL_LIBS. * widgets/misc/e-account-combo-box.c: * widgets/misc/e-account-combo-box.h: New function e_account_combo_box_get_account_list(). Emit a "refreshed" signal when the EAccountList changes. Add an internal reverse-lookup index. * widgets/misc/e-charset-picker.c (e_charser_add_radio_actions): New function adds radio actions to an action group. Will eventually replace e_charset_picker_bonobo_ui_populate(). * widgets/misc/e-signature-combo-box.c: * widgets/misc/e-signature-combo-box.h: New function e_signature_combo_box_get_signature_list(). ... separate issue ... * configure.in: Bump eds_minimum_version to 2.23.1 for CAMEL_FOLDER_JUNKED_NOT_DELETED symbol. svn path=/trunk/; revision=35313 --- widgets/misc/ChangeLog | 19 +++++ widgets/misc/Makefile.am | 1 + widgets/misc/e-account-combo-box.c | 86 +++++++++++++++++++---- widgets/misc/e-account-combo-box.h | 21 ++++++ widgets/misc/e-charset-picker.c | 130 ++++++++++++++++++++++++++++++++--- widgets/misc/e-charset-picker.h | 42 +++++------ widgets/misc/e-signature-combo-box.c | 27 ++++++++ widgets/misc/e-signature-combo-box.h | 25 ++++++- 8 files changed, 306 insertions(+), 45 deletions(-) (limited to 'widgets/misc') diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog index 13270f833d..e5e59a03e0 100644 --- a/widgets/misc/ChangeLog +++ b/widgets/misc/ChangeLog @@ -1,3 +1,22 @@ +2008-04-02 Matthew Barnes + + * Makefile.am: + Add EVOLUTION_MAIL_LIBS. + + * e-account-combo-box.c: + * e-account-combo-box.h: + New function e_account_combo_box_get_account_list(). + Emit a "refreshed" signal when the EAccountList changes. + Add an internal reverse-lookup index. + + * e-charset-picker.c (e_charser_add_radio_actions): + New function adds radio actions to an action group. + Will eventually replace e_charset_picker_bonobo_ui_populate(). + + * e-signature-combo-box.c: + * e-signature-combo-box.h: + New function e_signature_combo_box_get_signature_list(). + 2008-03-27 Milan Crha ** Fix for bug #507526 diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am index ea02028595..bb3d131ffb 100644 --- a/widgets/misc/Makefile.am +++ b/widgets/misc/Makefile.am @@ -138,6 +138,7 @@ libemiscwidgets_la_LIBADD = $(top_builddir)/e-util/libeutil.la \ $(top_builddir)/a11y/libevolution-a11y.la \ $(EVOLUTION_MAIL_LIBS) \ $(GNOME_PLATFORM_LIBS) \ + $(EVOLUTON_MAIL_LIBS) \ $(ICONV_LIBS) libefilterbar_la_SOURCES = \ diff --git a/widgets/misc/e-account-combo-box.c b/widgets/misc/e-account-combo-box.c index 6a96644bfd..37b13866f6 100644 --- a/widgets/misc/e-account-combo-box.c +++ b/widgets/misc/e-account-combo-box.c @@ -1,3 +1,22 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2008 Novell, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #include "e-account-combo-box.h" #include @@ -12,12 +31,19 @@ enum { COLUMN_ACCOUNT }; +enum { + REFRESHED, + LAST_SIGNAL +}; + struct _EAccountComboBoxPrivate { EAccountList *account_list; + GHashTable *index; }; static gpointer parent_class; static CamelSession *camel_session; +static guint signal_ids[LAST_SIGNAL]; static gboolean account_combo_box_has_dupes (GList *list, @@ -86,15 +112,9 @@ account_combo_box_refresh_cb (EAccountList *account_list, store = gtk_list_store_new (2, G_TYPE_STRING, E_TYPE_ACCOUNT); model = GTK_TREE_MODEL (store); + index = combo_box->priv->index; - /* Embed a reverse-lookup index into the list store. */ - index = g_hash_table_new_full ( - g_direct_hash, g_direct_equal, - (GDestroyNotify) g_object_unref, - (GDestroyNotify) gtk_tree_row_reference_free); - g_object_set_data_full ( - G_OBJECT (combo_box), "index", index, - (GDestroyNotify) g_hash_table_destroy); + g_hash_table_remove_all (index); if (account_list == NULL) goto skip; @@ -161,6 +181,8 @@ skip: e_account_combo_box_set_active (combo_box, account); if (account != NULL) g_object_unref (account); + + g_signal_emit (combo_box, signal_ids[REFRESHED], 0); } static GObject * @@ -200,10 +222,25 @@ account_combo_box_dispose (GObject *object) priv->account_list = NULL; } + g_hash_table_remove_all (priv->index); + /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (parent_class)->dispose (object); } +static void +account_combo_box_finalize (GObject *object) +{ + EAccountComboBoxPrivate *priv; + + priv = E_ACCOUNT_COMBO_BOX_GET_PRIVATE (object); + + g_hash_table_destroy (priv->index); + + /* Chain up to parent's finalize() method. */ + G_OBJECT_CLASS (parent_class)->finalize (object); +} + static void account_combo_box_class_init (EAccountComboBoxClass *class) { @@ -215,12 +252,30 @@ account_combo_box_class_init (EAccountComboBoxClass *class) object_class = G_OBJECT_CLASS (class); object_class->constructor = account_combo_box_constructor; object_class->dispose = account_combo_box_dispose; + object_class->finalize = account_combo_box_finalize; + + signal_ids[REFRESHED] = g_signal_new ( + "refreshed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } static void account_combo_box_init (EAccountComboBox *combo_box) { + GHashTable *index; + + /* Reverse-lookup index */ + index = g_hash_table_new_full ( + g_direct_hash, g_direct_equal, + (GDestroyNotify) g_object_unref, + (GDestroyNotify) gtk_tree_row_reference_free); + combo_box->priv = E_ACCOUNT_COMBO_BOX_GET_PRIVATE (combo_box); + combo_box->priv->index = index; } GType @@ -273,6 +328,14 @@ e_account_combo_box_set_session (CamelSession *session) camel_session = session; } +EAccountList * +e_account_combo_box_get_account_list (EAccountComboBox *combo_box) +{ + g_return_val_if_fail (E_IS_ACCOUNT_COMBO_BOX (combo_box), NULL); + + return combo_box->priv->account_list; +} + void e_account_combo_box_set_account_list (EAccountComboBox *combo_box, EAccountList *account_list) @@ -337,7 +400,6 @@ gboolean e_account_combo_box_set_active (EAccountComboBox *combo_box, EAccount *account) { - GHashTable *index; EAccountList *account_list; GtkTreeRowReference *reference; GtkTreeModel *model; @@ -353,10 +415,6 @@ e_account_combo_box_set_active (EAccountComboBox *combo_box, account_list = combo_box->priv->account_list; g_return_val_if_fail (account_list != NULL, FALSE); - /* Failure here indicates a programming error. */ - index = g_object_get_data (G_OBJECT (combo_box), "index"); - g_assert (index != NULL); - /* NULL means select the default account. */ /* XXX EAccountList misuses const. */ if (account == NULL) @@ -364,7 +422,7 @@ e_account_combo_box_set_active (EAccountComboBox *combo_box, e_account_list_get_default (account_list); /* Lookup the tree row reference for the account. */ - reference = g_hash_table_lookup (index, account); + reference = g_hash_table_lookup (combo_box->priv->index, account); if (reference == NULL) return FALSE; diff --git a/widgets/misc/e-account-combo-box.h b/widgets/misc/e-account-combo-box.h index a4363cf2e2..d5dd26780e 100644 --- a/widgets/misc/e-account-combo-box.h +++ b/widgets/misc/e-account-combo-box.h @@ -1,3 +1,22 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2008 Novell, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #ifndef E_ACCOUNT_COMBO_BOX_H #define E_ACCOUNT_COMBO_BOX_H @@ -43,6 +62,8 @@ struct _EAccountComboBoxClass { GType e_account_combo_box_get_type (void); GtkWidget * e_account_combo_box_new (void); void e_account_combo_box_set_session (CamelSession *session); +EAccountList * e_account_combo_box_get_account_list + (EAccountComboBox *combo_box); void e_account_combo_box_set_account_list (EAccountComboBox *combo_box, EAccountList *account_list); diff --git a/widgets/misc/e-charset-picker.c b/widgets/misc/e-charset-picker.c index 3254c9d42f..2efffdd8b8 100644 --- a/widgets/misc/e-charset-picker.c +++ b/widgets/misc/e-charset-picker.c @@ -28,15 +28,6 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include - #include #include @@ -445,6 +436,127 @@ e_charset_picker_dialog (const char *title, const char *prompt, return charset; } +/** + * e_charset_add_radio_actions: + * @action_group: a #GtkActionGroup + * @default_charset: the default character set, or %NULL to use the + * locale character set + * @callback: a callback function for actions in the group, or %NULL + * @user_data: user data to be passed to @callback, or %NULL + * + * Adds a set of #GtkRadioActions for available character sets to + * @action_group. The @default_charset (or locale character set if + * @default_charset is %NULL) will be added first, and selected by + * default (except that iso-8859-1 will always be used instead of + * US-ASCII). Any other character sets of the same language class as + * the default will be added next, followed by the remaining character + * sets. + **/ +void +e_charset_add_radio_actions (GtkActionGroup *action_group, + const gchar *default_charset, + GCallback callback, + gpointer user_data) +{ + GtkRadioAction *action = NULL; + GSList *group = NULL; + const gchar *locale_charset; + gint def, ii; + + g_return_if_fail (GTK_IS_ACTION_GROUP (action_group)); + + /* XXX I could try to factor out code common to this + * function and e_charset_picker_bonobo_ui_populate() + * instead of duplicating it, but I expect the latter + * function to be obsolete in the foreseeable future. */ + + g_get_charset (&locale_charset); + if (!g_ascii_strcasecmp (locale_charset, "US-ASCII")) + locale_charset = "iso-8859-1"; + + if (default_charset == NULL) + default_charset = locale_charset; + for (def = 0; def < G_N_ELEMENTS (charsets); def++) + if (!g_ascii_strcasecmp (charsets[def].name, default_charset)) + break; + + for (ii = 0; ii < G_N_ELEMENTS (charsets); ii++) { + gchar *escaped_name; + gchar *charset_label; + gchar **str_array; + + /* Escape underlines in the character set name so + * they're not treated as GtkLabel mnemonics. */ + str_array = g_strsplit (charsets[ii].name, "_", -1); + escaped_name = g_strjoinv ("__", str_array); + g_strfreev (str_array); + + if (charsets[ii].subclass != NULL) + charset_label = g_strdup_printf ( + "%s, %s (%s)", + gettext (classnames[charsets[ii].class]), + gettext (charsets[ii].subclass), + escaped_name); + else if (charsets[ii].class != E_CHARSET_UNKNOWN) + charset_label = g_strdup_printf ( + "%s (%s)", + gettext (classnames[charsets[ii].class]), + escaped_name); + else + charset_label = g_strdup (escaped_name); + + action = gtk_radio_action_new ( + charsets[ii].name, charset_label, NULL, NULL, ii); + + gtk_radio_action_set_group (action, group); + group = gtk_radio_action_get_group (action); + + if (callback != NULL) + g_signal_connect ( + action, "changed", callback, user_data); + + gtk_action_group_add_action ( + action_group, GTK_ACTION (action)); + + g_object_unref (action); + + g_free (escaped_name); + g_free (charset_label); + } + + if (def == G_N_ELEMENTS (charsets)) { + gchar *charset_label; + gchar **str_array; + + /* Escape underlines in the character set name so + * they're not treated as GtkLabel mnemonics. */ + str_array = g_strsplit (default_charset, "_", -1); + charset_label = g_strjoinv ("__", str_array); + g_strfreev (str_array); + + action = gtk_radio_action_new ( + default_charset, charset_label, NULL, NULL, def); + + gtk_radio_action_set_group (action, group); + group = gtk_radio_action_get_group (action); + + if (callback != NULL) + g_signal_connect ( + action, "changed", callback, user_data); + + gtk_action_group_add_action ( + action_group, GTK_ACTION (action)); + + g_object_unref (action); + + g_free (charset_label); + } + + /* Any of the actions in the action group will do. */ + if (action != NULL) + gtk_radio_action_set_current_value (action, def); +} + /** * e_charset_picker_bonobo_ui_populate: * @uic: Bonobo UI Component diff --git a/widgets/misc/e-charset-picker.h b/widgets/misc/e-charset-picker.h index 78de722483..35abff0241 100644 --- a/widgets/misc/e-charset-picker.h +++ b/widgets/misc/e-charset-picker.h @@ -18,31 +18,33 @@ * */ -#ifndef _E_CHARSETPICKER_H_ -#define _E_CHARSETPICKER_H_ +#ifndef E_CHARSETPICKER_H +#define E_CHARSETPICKER_H -#include +#include #include -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ +G_BEGIN_DECLS -GtkWidget *e_charset_picker_new (const char *default_charset); -char *e_charset_picker_get_charset (GtkWidget *picker); +GtkWidget * e_charset_picker_new (const char *default_charset); +char * e_charset_picker_get_charset (GtkWidget *picker); +char * e_charset_picker_dialog (const char *title, + const char *prompt, + const char *default_charset, + GtkWindow *parent); -char *e_charset_picker_dialog (const char *title, const char *prompt, - const char *default_charset, - GtkWindow *parent); +void e_charset_add_radio_actions (GtkActionGroup *action_group, + const gchar *default_charset, + GCallback callback, + gpointer user_data); -/* bonobo equivalents */ -void e_charset_picker_bonobo_ui_populate (BonoboUIComponent *uic, const char *path, - const char *default_charset, - BonoboUIListenerFn cb, gpointer user_data); +void e_charset_picker_bonobo_ui_populate + (BonoboUIComponent *uic, + const char *path, + const char *default_charset, + BonoboUIListenerFn cb, + gpointer user_data); -#ifdef __cplusplus -} -#endif /* __cplusplus */ +G_END_DECLS -#endif /* _E_CHARSETPICKER_H_ */ +#endif /* E_CHARSETPICKER_H */ diff --git a/widgets/misc/e-signature-combo-box.c b/widgets/misc/e-signature-combo-box.c index be19755ef6..3edcc2b364 100644 --- a/widgets/misc/e-signature-combo-box.c +++ b/widgets/misc/e-signature-combo-box.c @@ -1,3 +1,22 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2008 Novell, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #include "e-signature-combo-box.h" #include @@ -233,6 +252,14 @@ e_signature_combo_box_new (void) return g_object_new (E_TYPE_SIGNATURE_COMBO_BOX, NULL); } +ESignatureList * +e_signature_combo_box_get_signature_list (ESignatureComboBox *combo_box) +{ + g_return_val_if_fail (E_IS_SIGNATURE_COMBO_BOX (combo_box), NULL); + + return combo_box->priv->signature_list; +} + void e_signature_combo_box_set_signature_list (ESignatureComboBox *combo_box, ESignatureList *signature_list) diff --git a/widgets/misc/e-signature-combo-box.h b/widgets/misc/e-signature-combo-box.h index 31786978ef..4208265911 100644 --- a/widgets/misc/e-signature-combo-box.h +++ b/widgets/misc/e-signature-combo-box.h @@ -1,9 +1,28 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2008 Novell, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * 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 + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #ifndef E_SIGNATURE_COMBO_BOX_H #define E_SIGNATURE_COMBO_BOX_H #include -#include "e-util/e-signature.h" -#include "e-util/e-signature-list.h" +#include +#include /* Standard GObject macros */ #define E_TYPE_SIGNATURE_COMBO_BOX \ @@ -41,6 +60,8 @@ struct _ESignatureComboBoxClass { GType e_signature_combo_box_get_type (void); GtkWidget * e_signature_combo_box_new (void); +ESignatureList *e_signature_combo_box_get_signature_list + (ESignatureComboBox *combo_box); void e_signature_combo_box_set_signature_list (ESignatureComboBox *combo_box, ESignatureList *signature_list); -- cgit v1.2.3