From f5bed9bf7b143fff9bd258ea31fdac192e00a0d9 Mon Sep 17 00:00:00 2001
From: Matthew Barnes <mbarnes@redhat.com>
Date: Tue, 27 Nov 2007 20:24:44 +0000
Subject: ** Fixes bug #495123

2007-11-27  Matthew Barnes  <mbarnes@redhat.com>

	** 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