Re: [evolution-patches] Bug 21974: Make editor component configurable



Hi Jeff,

I've made the modifications you suggested; the updated patch is attached.

peace,
Jason

On Mon, 2004-11-08 at 14:50 -0500, Jeffrey Stedfast wrote:
> a few comments below.

> Jeff

> On Sun, 2004-11-07 at 13:34 -0600, Jason Hildebrand wrote:
> > Hi Jeffrey,
> >
> > I submitted this patch way back prior to the Evo 2.0 freeze.  It makes
> > it
> > possible to use an alternate editor instead of GtkHTML by setting
> > the /apps/evolution/mail/composer/editor_oafiid gconf key.
> >
> > The patch was reviewed at that time, but didn't actually get committed
> > before
> > the freeze.
> >
> > I've just updated it to apply cleanly to CVS head, and have compiled
> > and
> > tested it, and would appreciate it if you could review/commit it now.
> >
> > peace,
> > Jason
> >
> >
> >
> >
> >
> >
> >
> > text/x-patch
> > attachment
> > (gconf-editor-oafiid.patch)
> >
> > Index: composer/ChangeLog
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/composer/ChangeLog,v
> > retrieving revision 1.669
> > diff -u -p -r1.669 ChangeLog
> > --- composer/ChangeLog  28 Oct 2004 09:25:47 -0000      1.669
> > +++ composer/ChangeLog  7 Nov 2004 19:23:11 -0000
> > @@ -1,3 +1,9 @@
> > +2004-11-07  Jason Hildebrand <jason peaceworks ca>
> > +
> > +    * e-msg-composer.c:
> > use /apps/evolution/mail/composer/editor_oafiid
> > +    gconf key to get oafiid of editor component to use.  Fallback to
> > +    using GtkHTML if there are any errors instantiating the editor.
> > +
> >  2004-10-28  Not Zed  <NotZed Ximian com>
> >
> >         * e-msg-composer.c (drag_data_received): fix the popup id.
> > Index: composer/e-msg-composer.c
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/composer/e-msg-composer.c,v
> > retrieving revision 1.490
> > diff -u -p -r1.490 e-msg-composer.c
> > --- composer/e-msg-composer.c   28 Oct 2004 09:25:47 -0000      1.490
> > +++ composer/e-msg-composer.c   7 Nov 2004 19:23:16 -0000
> > @@ -2517,6 +2517,8 @@ composer_finalise (GObject *object)
> >         g_hash_table_destroy (composer->inline_images);
> >         g_hash_table_destroy (composer->inline_images_by_url);
> >
> > +       g_free (composer->editor_oafiid);
> > +
> >         g_free (composer->charset);
> >         g_free (composer->mime_type);
> >         g_free (composer->mime_body);
> > @@ -3077,6 +3079,7 @@ static void
> >  e_msg_composer_load_config (EMsgComposer *composer, int visible_mask)
> >  {
> >         GConfClient *gconf;
> > +       GError *err = NULL;
> >
> >         gconf = gconf_client_get_default ();
> >
> > @@ -3094,6 +3097,17 @@ e_msg_composer_load_config (EMsgComposer
> >                 gconf, "/apps/evolution/mail/composer/view/Bcc",
> > NULL);
> >         composer->view_subject = gconf_client_get_bool (
> >                 gconf, "/apps/evolution/mail/composer/view/Subject",
> > NULL);
> > +       composer->editor_oafiid = gconf_client_get_string (
> > +               gconf, "/apps/evolution/mail/composer/editor_oafiid",
> > &err);
> > +       /* if any error occurs reading the editor key, or if key is
> > empty, fallback to GtkHTML */
> > +       if (err || composer->editor_oafiid == NULL || !
> > composer->editor_oafiid[0]) {

> I don't think you should check err NULLness here, you accomplish the
> same with checking the return value of the oafiid.

> > +        if (composer->editor_oafiid) {
> > +            g_free (composer->editor_oafiid);
> > +        }

> just g_free (composer->editor_oafiid);

> no need to check non-NULL first. Also, for style - don't use braces if
> there is only one statement to call.

> > +               composer->editor_oafiid = g_strdup
> > (GNOME_GTKHTML_EDITOR_CONTROL_ID);
> > +               g_error_free (err);

> since you don't actually use err, why even bother having it?

> > +       }
> > +       composer->catch_escape = TRUE;
> >
> >         /* if we're mailing, you cannot disable to so it should appear
> > checked */
> >         if (visible_mask & E_MSG_COMPOSER_VISIBLE_TO)
> > @@ -3202,7 +3216,7 @@ msg_composer_destroy_notify (void *data)
> >  static int
> >  composer_key_pressed (EMsgComposer *composer, GdkEventKey *event,
> > void *user_data)
> >  {
> > -       if (event->keyval == GDK_Escape) {
> > +       if (event->keyval == GDK_Escape && composer->catch_escape) {
> >                 do_exit (composer);
> >                 g_signal_stop_emission_by_name (composer,
> > "key-press-event");
> >                 return TRUE;
> > @@ -3325,6 +3339,7 @@ create_composer (int visible_mask)
> >         GList *icon_list;
> >         BonoboControlFrame *control_frame;
> >         GdkPixbuf *attachment_pixbuf;
> > +       gboolean editor_needs_escape = FALSE;
> >
> >         composer = g_object_new (E_TYPE_MSG_COMPOSER, "win_name",
> > _("Compose a message"), NULL);
> >         gtk_window_set_title ((GtkWindow *) composer, _("Compose a
> > message"));
> > @@ -3380,8 +3395,18 @@ create_composer (int visible_mask)
> >
> >         /* Editor component.  */
> >         composer->editor = bonobo_widget_new_control (
> > -               GNOME_GTKHTML_EDITOR_CONTROL_ID,
> > +               composer->editor_oafiid,
> >                 bonobo_ui_component_get_container (composer->uic));
> > +
> > +       /* if activation of alternate editor failed, try falling back
> > to the GtkHTML editor */
> > +       if (!composer->editor && composer->editor_oafiid && strcmp
> > (GNOME_GTKHTML_EDITOR_CONTROL_ID, composer->editor_oafiid)) {
> > +               composer->editor = bonobo_widget_new_control (
> > +                       GNOME_GTKHTML_EDITOR_CONTROL_ID,
> > +                       bonobo_ui_component_get_container
> > (composer->uic));
> > +       }
> > +
> > +       /* if activation still failed, display the error message from
> > the
> > +        * _original_ activation attempt. */
> >         if (!composer->editor) {
> >                 e_error_run (GTK_WINDOW (composer),
> > "mail-composer:no-editor-control", NULL);
> >                 gtk_object_destroy (GTK_OBJECT (composer));
> > @@ -3494,6 +3519,9 @@ create_composer (int visible_mask)
> >                 am = autosave_manager_new ();
> >
> >         autosave_manager_register (am, composer);
> > +
> > +       bonobo_widget_get_property (BONOBO_WIDGET (composer->editor),
> > "EditorNeedsEscape", TC_CORBA_boolean, &editor_needs_escape, NULL);
> > +       composer->catch_escape = !editor_needs_escape;
> >
> >         composer->has_changed = FALSE;
> >
> > Index: composer/e-msg-composer.h
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/composer/e-msg-composer.h,v
> > retrieving revision 1.91
> > diff -u -p -r1.91 e-msg-composer.h
> > --- composer/e-msg-composer.h   27 Jul 2004 16:52:17 -0000      1.91
> > +++ composer/e-msg-composer.h   7 Nov 2004 19:23:17 -0000
> > @@ -74,6 +74,8 @@ struct _EMsgComposer {
> >
> >         GtkWidget *address_dialog;
> >
> > +       char                    *editor_oafiid;
> > +       gboolean                 catch_escape;
> >         Bonobo_PersistFile       persist_file_interface;
> >         Bonobo_PersistStream     persist_stream_interface;
> >         GNOME_GtkHTML_Editor_Engine  editor_engine;
> > Index: mail/ChangeLog
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
> > retrieving revision 1.3493
> > diff -u -p -r1.3493 ChangeLog
> > --- mail/ChangeLog      3 Nov 2004 09:47:23 -0000       1.3493
> > +++ mail/ChangeLog      7 Nov 2004 19:23:27 -0000
> > @@ -1,3 +1,11 @@
> > +2004-11-07  Jason Hildebrand <jason peaceworks ca>
> > +
> > +    * evolution-mail.schemas.in.in: added
> > +    /apps/evolution/mail/composer/editor_oafiid gconf key which can
> > +    be used to specify an alternate editor component.  If empty or
> > +    invalid, GtkHTML is used.
> > +
> > +
> >  2004-11-03  Not Zed  <NotZed Ximian com>
> >
> >         * em-folder-view.c (emfv_popup): Fix the popup id.
> > Index: mail/evolution-mail.schemas.in.in
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/mail/evolution-mail.schemas.in.in,v
> > retrieving revision 1.17
> > diff -u -p -r1.17 evolution-mail.schemas.in.in
> > --- mail/evolution-mail.schemas.in.in   10 May 2004 19:35:38
> > -0000      1.17
> > +++ mail/evolution-mail.schemas.in.in   7 Nov 2004 19:23:28 -0000
> > @@ -74,6 +74,21 @@
> >      </schema>
> >
> >      <schema>
> > +      <key>/schemas/apps/evolution/mail/composer/editor_oafiid</key>
> > +      <applyto>/apps/evolution/mail/composer/editor_oafiid</applyto>
> > +      <owner>evolution-mail</owner>
> > +      <type>string</type>
> > +      <default></default>
> > +      <locale name="C">
> > +         <short>Activation ID (OAFIID) of editor control.</short>
> > +         <long>
> > +          Evolution uses the GtkHTML editor by default.  Change this
> > +          ID to use an alternate (compatible) editor.
> > +         </long>
> > +      </locale>
> > +    </schema>
> > +
> > +    <schema>
> >        <key>/schemas/apps/evolution/mail/composer/view/From</key>
> >        <applyto>/apps/evolution/mail/composer/view/From</applyto>
> >        <owner>evolution-mail</owner
Index: composer/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/composer/ChangeLog,v
retrieving revision 1.669
diff -u -p -r1.669 ChangeLog
--- composer/ChangeLog	28 Oct 2004 09:25:47 -0000	1.669
+++ composer/ChangeLog	8 Nov 2004 21:56:20 -0000
@@ -1,3 +1,9 @@
+2004-11-07  Jason Hildebrand <jason peaceworks ca>
+
+    * e-msg-composer.c: use /apps/evolution/mail/composer/editor_oafiid 
+    gconf key to get oafiid of editor component to use.  Fallback to
+    using GtkHTML if there are any errors instantiating the editor.
+
 2004-10-28  Not Zed  <NotZed Ximian com>
 
 	* e-msg-composer.c (drag_data_received): fix the popup id.
Index: composer/e-msg-composer.c
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer.c,v
retrieving revision 1.490
diff -u -p -r1.490 e-msg-composer.c
--- composer/e-msg-composer.c	28 Oct 2004 09:25:47 -0000	1.490
+++ composer/e-msg-composer.c	8 Nov 2004 21:56:24 -0000
@@ -2517,6 +2517,8 @@ composer_finalise (GObject *object)
 	g_hash_table_destroy (composer->inline_images);
 	g_hash_table_destroy (composer->inline_images_by_url);
 	
+	g_free (composer->editor_oafiid);
+
 	g_free (composer->charset);
 	g_free (composer->mime_type);
 	g_free (composer->mime_body);
@@ -3094,6 +3096,14 @@ e_msg_composer_load_config (EMsgComposer
 		gconf, "/apps/evolution/mail/composer/view/Bcc", NULL);
 	composer->view_subject = gconf_client_get_bool (
 		gconf, "/apps/evolution/mail/composer/view/Subject", NULL);
+	composer->editor_oafiid = gconf_client_get_string (
+		gconf, "/apps/evolution/mail/composer/editor_oafiid", NULL);
+	/* if any error occurs reading the editor key, or if key is empty, fallback to GtkHTML */
+	if (composer->editor_oafiid == NULL || !composer->editor_oafiid[0]) {
+        g_free (composer->editor_oafiid);
+		composer->editor_oafiid = g_strdup (GNOME_GTKHTML_EDITOR_CONTROL_ID);
+	}
+	composer->catch_escape = TRUE;
 	
 	/* if we're mailing, you cannot disable to so it should appear checked */
 	if (visible_mask & E_MSG_COMPOSER_VISIBLE_TO)
@@ -3202,7 +3212,7 @@ msg_composer_destroy_notify (void *data)
 static int
 composer_key_pressed (EMsgComposer *composer, GdkEventKey *event, void *user_data)
 {
-	if (event->keyval == GDK_Escape) {
+	if (event->keyval == GDK_Escape && composer->catch_escape) {
 		do_exit (composer);
 		g_signal_stop_emission_by_name (composer, "key-press-event");
 		return TRUE;
@@ -3325,6 +3335,7 @@ create_composer (int visible_mask)
 	GList *icon_list;
 	BonoboControlFrame *control_frame;
 	GdkPixbuf *attachment_pixbuf;
+	gboolean editor_needs_escape = FALSE;
 	
 	composer = g_object_new (E_TYPE_MSG_COMPOSER, "win_name", _("Compose a message"), NULL);
 	gtk_window_set_title ((GtkWindow *) composer, _("Compose a message"));
@@ -3380,8 +3391,16 @@ create_composer (int visible_mask)
 
 	/* Editor component.  */
 	composer->editor = bonobo_widget_new_control (
-		GNOME_GTKHTML_EDITOR_CONTROL_ID,
+		composer->editor_oafiid,
 		bonobo_ui_component_get_container (composer->uic));
+
+ 	/* if activation of alternate editor failed, try falling back to the GtkHTML editor */
+ 	if (!composer->editor && composer->editor_oafiid && strcmp (GNOME_GTKHTML_EDITOR_CONTROL_ID, composer->editor_oafiid))
+ 		composer->editor = bonobo_widget_new_control (
+ 			GNOME_GTKHTML_EDITOR_CONTROL_ID,
+ 			bonobo_ui_component_get_container (composer->uic));
+
+ 	/* if activation still failed, display an error message */
 	if (!composer->editor) {
 		e_error_run (GTK_WINDOW (composer), "mail-composer:no-editor-control", NULL);
 		gtk_object_destroy (GTK_OBJECT (composer));
@@ -3495,6 +3514,9 @@ create_composer (int visible_mask)
 	
 	autosave_manager_register (am, composer);
 
+	bonobo_widget_get_property (BONOBO_WIDGET (composer->editor), "EditorNeedsEscape", TC_CORBA_boolean, &editor_needs_escape, NULL);
+	composer->catch_escape = !editor_needs_escape;
+
 	composer->has_changed = FALSE;
 	
 	return composer;
Index: composer/e-msg-composer.h
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer.h,v
retrieving revision 1.91
diff -u -p -r1.91 e-msg-composer.h
--- composer/e-msg-composer.h	27 Jul 2004 16:52:17 -0000	1.91
+++ composer/e-msg-composer.h	8 Nov 2004 21:56:24 -0000
@@ -74,6 +74,8 @@ struct _EMsgComposer {
 	
 	GtkWidget *address_dialog;
 	
+	char                    *editor_oafiid;
+	gboolean                 catch_escape;
 	Bonobo_PersistFile       persist_file_interface;
 	Bonobo_PersistStream     persist_stream_interface;
 	GNOME_GtkHTML_Editor_Engine  editor_engine;
Index: mail/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.3493
diff -u -p -r1.3493 ChangeLog
--- mail/ChangeLog	3 Nov 2004 09:47:23 -0000	1.3493
+++ mail/ChangeLog	8 Nov 2004 21:56:31 -0000
@@ -1,3 +1,11 @@
+2004-11-07  Jason Hildebrand <jason peaceworks ca>
+
+    * evolution-mail.schemas.in.in: added 
+    /apps/evolution/mail/composer/editor_oafiid gconf key which can
+    be used to specify an alternate editor component.  If empty or 
+    invalid, GtkHTML is used.
+
+
 2004-11-03  Not Zed  <NotZed Ximian com>
 
 	* em-folder-view.c (emfv_popup): Fix the popup id.
Index: mail/evolution-mail.schemas.in.in
===================================================================
RCS file: /cvs/gnome/evolution/mail/evolution-mail.schemas.in.in,v
retrieving revision 1.17
diff -u -p -r1.17 evolution-mail.schemas.in.in
--- mail/evolution-mail.schemas.in.in	10 May 2004 19:35:38 -0000	1.17
+++ mail/evolution-mail.schemas.in.in	8 Nov 2004 21:56:32 -0000
@@ -74,6 +74,21 @@
     </schema>
 
     <schema>
+      <key>/schemas/apps/evolution/mail/composer/editor_oafiid</key>
+      <applyto>/apps/evolution/mail/composer/editor_oafiid</applyto>
+      <owner>evolution-mail</owner>
+      <type>string</type>
+      <default></default>
+      <locale name="C">
+         <short>Activation ID (OAFIID) of editor control.</short>
+         <long>
+          Evolution uses the GtkHTML editor by default.  Change this
+          ID to use an alternate (compatible) editor.
+         </long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/evolution/mail/composer/view/From</key>
       <applyto>/apps/evolution/mail/composer/view/From</applyto>
       <owner>evolution-mail</owner>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]