Don't g_error out if the html-editor-control fails. (create_composer): New

* e-msg-composer.c (e_msg_composer_construct): Don't g_error out
	if the html-editor-control fails.
	(create_composer): New internal function to create and construct a
	msg_composer and pop up an error message if it fails.
	(e_msg_composer_new, e_msg_composer_new_with_sig_file,
	e_msg_composer_new_with_message, e_msg_composer_new_from_url): Use
	create_composer, return if it fails, change return type to
	EMsgComposer *.

svn path=/trunk/; revision=5501
This commit is contained in:
Dan Winship
2000-09-19 15:33:16 +00:00
parent 288e7bb1fb
commit c09bcfdc43
3 changed files with 70 additions and 64 deletions

View File

@ -1,3 +1,14 @@
2000-09-19 Dan Winship <danw@helixcode.com>
* e-msg-composer.c (e_msg_composer_construct): Don't g_error out
if the html-editor-control fails.
(create_composer): New internal function to create and construct a
msg_composer and pop up an error message if it fails.
(e_msg_composer_new, e_msg_composer_new_with_sig_file,
e_msg_composer_new_with_message, e_msg_composer_new_from_url): Use
create_composer, return if it fails, change return type to
EMsgComposer *.
2000-09-18 Dan Winship <danw@helixcode.com>
* e-msg-composer-attachment.c (get_mime_type): Use

View File

@ -79,23 +79,6 @@ static GList *add_recipients (GList *list, const char *recips, gboolean decode);
static void free_recipients (GList *list);
static GtkWidget *
create_editor (EMsgComposer *composer)
{
GtkWidget *control;
control = bonobo_widget_new_control (
HTML_EDITOR_CONTROL_ID,
bonobo_ui_compat_get_container (composer->uih));
if (control == NULL) {
g_error ("Cannot activate `%s'. Did you build gtkhtml with Bonobo and OAF support?", HTML_EDITOR_CONTROL_ID);
return NULL;
}
return control;
}
static char *
get_text (Bonobo_PersistStream persist, char *format)
{
@ -1292,7 +1275,11 @@ e_msg_composer_construct (EMsgComposer *composer)
create_menubar (composer);
create_toolbar (composer);
composer->editor = create_editor (composer);
composer->editor = bonobo_widget_new_control (
HTML_EDITOR_CONTROL_ID,
bonobo_ui_compat_get_container (composer->uih));
if (!composer->editor)
return;
editor_server = BONOBO_OBJECT (bonobo_widget_get_server (BONOBO_WIDGET (composer->editor)));
@ -1335,27 +1322,39 @@ e_msg_composer_construct (EMsgComposer *composer)
gtk_widget_grab_focus (e_msg_composer_hdrs_get_to_entry (E_MSG_COMPOSER_HDRS (composer->hdrs)));
}
static EMsgComposer *
create_composer (void)
{
EMsgComposer *new;
new = gtk_type_new (E_TYPE_MSG_COMPOSER);
e_msg_composer_construct (new);
if (!new->editor) {
e_notice (GTK_WINDOW (new), GNOME_MESSAGE_BOX_ERROR,
_("Could not create composer window."));
gtk_object_unref (GTK_OBJECT (new));
return NULL;
}
return new;
}
/**
* e_msg_composer_new:
*
* Create a new message composer widget. This function must be called
* within the GTK+ main loop, or it will fail.
* Create a new message composer widget.
*
* Return value: A pointer to the newly created widget
**/
GtkWidget *
EMsgComposer *
e_msg_composer_new (void)
{
GtkWidget *new;
EMsgComposer *new;
g_return_val_if_fail (gtk_main_level () > 0, NULL);
new = gtk_type_new (e_msg_composer_get_type ());
e_msg_composer_construct (E_MSG_COMPOSER (new));
/* Load the signature, if any. */
set_editor_text (BONOBO_WIDGET (E_MSG_COMPOSER (new)->editor),
NULL, "");
new = create_composer ();
if (new) {
/* Load the signature, if any. */
set_editor_text (BONOBO_WIDGET (new->editor), NULL, "");
}
return new;
}
@ -1363,40 +1362,34 @@ e_msg_composer_new (void)
/**
* e_msg_composer_new_with_sig_file:
*
* Create a new message composer widget. This function must be called
* within the GTK+ main loop, or it will fail. Sets the signature
* file.
* Create a new message composer widget. Sets the signature file.
*
* Return value: A pointer to the newly created widget
**/
GtkWidget *
EMsgComposer *
e_msg_composer_new_with_sig_file (const char *sig_file)
{
GtkWidget *new;
g_return_val_if_fail (gtk_main_level () > 0, NULL);
new = gtk_type_new (e_msg_composer_get_type ());
e_msg_composer_construct (E_MSG_COMPOSER (new));
/* Load the signature, if any. */
set_editor_text (BONOBO_WIDGET (E_MSG_COMPOSER (new)->editor),
sig_file, "");
e_msg_composer_set_sig_file (E_MSG_COMPOSER (new), sig_file);
EMsgComposer *new;
new = create_composer ();
if (new) {
/* Load the signature, if any. */
set_editor_text (BONOBO_WIDGET (new->editor), sig_file, "");
e_msg_composer_set_sig_file (new, sig_file);
}
return new;
}
/**
* e_msg_composer_new_with_message:
*
* Create a new message composer widget. This function must be called
* within the GTK+ main loop, or it will fail.
* Create a new message composer widget.
*
* Return value: A pointer to the newly created widget
**/
GtkWidget *
EMsgComposer *
e_msg_composer_new_with_message (CamelMimeMessage *msg)
{
const CamelInternetAddress *to, *cc, *bcc;
@ -1404,14 +1397,13 @@ e_msg_composer_new_with_message (CamelMimeMessage *msg)
gboolean is_html;
CamelDataWrapper *contents;
const gchar *subject;
GtkWidget *new;
EMsgComposer *new;
char *text, *final_text;
guint len, i;
g_return_val_if_fail (gtk_main_level () > 0, NULL);
new = gtk_type_new (e_msg_composer_get_type ());
e_msg_composer_construct (E_MSG_COMPOSER (new));
new = create_composer ();
if (!new)
return NULL;
subject = camel_mime_message_get_subject (msg);
@ -1443,7 +1435,7 @@ e_msg_composer_new_with_message (CamelMimeMessage *msg)
Bcc = g_list_append (Bcc, g_strdup (addr));
}
e_msg_composer_set_headers (E_MSG_COMPOSER (new), To, Cc, Bcc, subject);
e_msg_composer_set_headers (new, To, Cc, Bcc, subject);
free_recipients (To);
free_recipients (Cc);
@ -1458,9 +1450,9 @@ e_msg_composer_new_with_message (CamelMimeMessage *msg)
E_TEXT_TO_HTML_CONVERT_SPACES);
g_free (text);
e_msg_composer_set_body_text (E_MSG_COMPOSER (new), final_text);
e_msg_composer_set_body_text (new, final_text);
/*set_editor_text (BONOBO_WIDGET (E_MSG_COMPOSER (new)->editor),
/*set_editor_text (BONOBO_WIDGET (new->editor),
NULL, "FIXME: like, uh... put the message here and stuff\n");*/
return new;
@ -1505,7 +1497,7 @@ free_recipients (GList *list)
* Create a new message composer widget, and fill in fields as
* defined by the provided URL.
**/
GtkWidget *
EMsgComposer *
e_msg_composer_new_from_url (const char *url)
{
EMsgComposer *composer;
@ -1518,6 +1510,10 @@ e_msg_composer_new_from_url (const char *url)
g_return_val_if_fail (g_strncasecmp (url, "mailto:", 7) == 0, NULL);
composer = e_msg_composer_new ();
if (!composer)
return NULL;
/* Parse recipients (everything after ':' until '?' or eos. */
p = url + 7;
len = strcspn (p, "?,");
@ -1566,7 +1562,6 @@ e_msg_composer_new_from_url (const char *url)
}
}
composer = E_MSG_COMPOSER (e_msg_composer_new ());
hdrs = E_MSG_COMPOSER_HDRS (composer->hdrs);
e_msg_composer_hdrs_set_to (hdrs, to);
free_recipients (to);
@ -1586,7 +1581,7 @@ e_msg_composer_new_from_url (const char *url)
g_free (htmlbody);
}
return GTK_WIDGET (composer);
return composer;
}
/**

View File

@ -81,10 +81,10 @@ struct _EMsgComposerClass {
GtkType e_msg_composer_get_type (void);
void e_msg_composer_construct (EMsgComposer *composer);
GtkWidget *e_msg_composer_new (void);
GtkWidget *e_msg_composer_new_with_sig_file (const char *sig_file);
GtkWidget *e_msg_composer_new_with_message (CamelMimeMessage *msg);
GtkWidget *e_msg_composer_new_from_url (const char *url);
EMsgComposer *e_msg_composer_new (void);
EMsgComposer *e_msg_composer_new_with_sig_file (const char *sig_file);
EMsgComposer *e_msg_composer_new_with_message (CamelMimeMessage *msg);
EMsgComposer *e_msg_composer_new_from_url (const char *url);
void e_msg_composer_show_attachments (EMsgComposer *composer,
gboolean show);