From f5bed9bf7b143fff9bd258ea31fdac192e00a0d9 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 27 Nov 2007 20:24:44 +0000 Subject: ** Fixes bug #495123 2007-11-27 Matthew Barnes ** Fixes bug #495123 * composer/Makefile.am: Add a bunch of files for managing composer headers. * composer/e-msg-composer.c (build_message), (from_changed_cb), (set_editor_signature), (e_msg_composer_set_body), (e_msg_composer_get_preferred_account): * plugins/exchange-operations/exchange-mail-send-options.c (append_to_header): Use e_msg_composer_hdrs_get_from_account() to obtain the EAccount. * composer/e-msg-composer-hdrs.c: * composer/e-msg-composer-hdrs.h: Massive refactoring to use new EComposerHeader classes. * composer/e-composer-header.c: * composer/e-composer-header.h: * composer/e-composer-from-header.c: * composer/e-composer-from-header.h: * composer/e-composer-name-header.c: * composer/e-composer-name-header.h: * composer/e-composer-post-header.c: * composer/e-composer-post-header.h: * composer/e-composer-text-header.c: * composer/e-composer-text-header.h: New GObject classes manage different types of composer headers. See bug #495123 for a more detailed description of each class. * mail/mail-session.c (mail_session_init): Pass the CamelSession to the EAccountComboBox class (ugly hack). * widgets/misc/Makefile.am: Add e-account-combo-box.[ch]. * widgets/misc/e-account-combo-box.c: * widgets/misc/e-account-combo-box.h: New widget renders an EAccountList as a combo box. Also listens for changes to the EAccountList and updates itself accordingly. svn path=/trunk/; revision=34600 --- composer/e-composer-text-header.c | 120 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 composer/e-composer-text-header.c (limited to 'composer/e-composer-text-header.c') diff --git a/composer/e-composer-text-header.c b/composer/e-composer-text-header.c new file mode 100644 index 0000000000..4ef761e450 --- /dev/null +++ b/composer/e-composer-text-header.c @@ -0,0 +1,120 @@ +#include "e-composer-text-header.h" + +static gpointer parent_class; + +static void +composer_text_header_changed_cb (GtkEntry *entry, + EComposerTextHeader *header) +{ + g_signal_emit_by_name (header, "changed"); +} + +static gboolean +composer_text_header_query_tooltip_cb (GtkEntry *entry, + gint x, + gint y, + gboolean keyboard_mode, + GtkTooltip *tooltip) +{ + const gchar *text; + + text = gtk_entry_get_text (entry); + + if (keyboard_mode || text == NULL || *text == '\0') + return FALSE; + + gtk_tooltip_set_text (tooltip, text); + + return TRUE; +} + +static void +composer_text_header_class_init (EComposerTextHeaderClass *class) +{ + parent_class = g_type_class_peek_parent (class); +} + +static void +composer_text_header_init (EComposerTextHeader *header) +{ + GtkWidget *widget; + + widget = g_object_ref_sink (gtk_entry_new ()); + g_signal_connect ( + widget, "changed", + G_CALLBACK (composer_text_header_changed_cb), header); + g_signal_connect ( + widget, "query-tooltip", + G_CALLBACK (composer_text_header_query_tooltip_cb), NULL); + gtk_widget_set_has_tooltip (widget, TRUE); + E_COMPOSER_HEADER (header)->input_widget = widget; +} + +GType +e_composer_text_header_get_type (void) +{ + static GType type = 0; + + if (G_UNLIKELY (type == 0)) { + static const GTypeInfo type_info = { + sizeof (EComposerTextHeaderClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) composer_text_header_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + sizeof (EComposerTextHeader), + 0, /* n_preallocs */ + (GInstanceInitFunc) composer_text_header_init, + NULL /* value_table */ + }; + + type = g_type_register_static ( + E_TYPE_COMPOSER_HEADER, "EComposerTextHeader", + &type_info, 0); + } + + return type; +} + +EComposerHeader * +e_composer_text_header_new_label (const gchar *label) +{ + return g_object_new ( + E_TYPE_COMPOSER_TEXT_HEADER, "label", label, + "button", FALSE, NULL); +} + +EComposerHeader * +e_composer_text_header_new_button (const gchar *label) +{ + return g_object_new ( + E_TYPE_COMPOSER_TEXT_HEADER, "label", label, + "button", TRUE, NULL); +} + +const gchar * +e_composer_text_header_get_text (EComposerTextHeader *header) +{ + GtkWidget *input_widget; + + g_return_val_if_fail (E_IS_COMPOSER_TEXT_HEADER (header), NULL); + + input_widget = E_COMPOSER_HEADER (header)->input_widget; + return gtk_entry_get_text (GTK_ENTRY (input_widget)); +} + +void +e_composer_text_header_set_text (EComposerTextHeader *header, + const gchar *text) +{ + GtkWidget *input_widget; + + g_return_if_fail (E_IS_COMPOSER_TEXT_HEADER (header)); + + if (text == NULL) + text = ""; + + input_widget = E_COMPOSER_HEADER (header)->input_widget; + gtk_entry_set_text (GTK_ENTRY (input_widget), text); +} -- cgit v1.2.3