[evolution-patches] [PATCH in Bugzilla] Abstraction in EMsgComposer
- From: Philip Van Hoof <spam pvanhoof be>
- To: Harish Krishnaswamy <kharish novell com>,	Evolution Hackers <evolution-hackers gnome org>,	Evolution Patches <evolution-patches gnome org>
- Cc: 
- Subject: [evolution-patches] [PATCH in Bugzilla] Abstraction in EMsgComposer
- Date: Tue, 11 Oct 2005 22:38:01 +0200
Hi there,
First of all:
http://bugzilla.gnome.org/show_bug.cgi?id=318611
http://bugzilla.gnome.org/attachment.cgi?id=53342&action=view
I know it's unavoidable in projects like Evolution, yet it's always nice
to go over code and fix the occurrences of unavoidable mistakes.
One such mistake (well, it's not really a mistake but makes replacing
the GtkHtml widget a lot more difficult) is violation of data hiding.
For example:
  <mystruct.h>
  typedef struct {
	int hidden_a;
  } MyStruct;
  int mystruct_get_a (MyStruct *instance);
  <myprogram.c>
  #include <mystruct.h>
  int test (MyStruct *struc)
  {
	printf ("It has %d\n", struc->hidden_a);
  }
Of course should the programmer here have used this:
int test (MyStruct *struc) 
{
	printf ("It has %d\n", mystruct_get_a (struc));
}
What can be done about this (I know most Evolution developers know this,
but I'm repeating it to illustrate what I did in this patch):
  <mystruct.h>
  typedef struct _MyStructPrivate MyStructPrivate;
  typedef struct {
	MyStructPrivate *priv;
  } MyStruct;
  int mystruct_get_a (MyStruct *instance);
  <mystruct.c>
  struct _MyStructPrivate {
    int hidden_a;
  };
  int mystruct_get_a (MyStruct *instance)
  {
     return instance->priv->hidden_a;
  }
That is basically what I did with e-msg-composer.c and e-msg-composer.h
The reason why I also like this to get accepted (and tested) is because
this will be the basis of replacing the GtkHtml widget with a
GtkMozEmbed widget.
You see, if I'm sure that NOBODY used anything else but the agreed
EMsgComposer API as defined in e-msg-composer.h, then I can securely
replace the internals of e-msg-composer.c.
I can then for example replace the Bonobo/CORBA stuff with normal method
calls on a GObject/GtkWidget. And then also replace the GtkHtml widget
with a GtkMozEmbed that has been set editable (check our go-evolution
wiki for more information about that).
-- 
Philip Van Hoof, software developer at x-tend
home: me at pvanhoof dot be
gnome: pvanhoof at gnome dot org
work: vanhoof at x-tend dot be
http://www.pvanhoof.be - http://www.x-tend.be
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]