Don't program your preferences. GTK+ unfortunately has
all sorts of look and feel settings that the programmer
can affect. For example, you can change the appearance
of the ``expanders'' in a
GtkCTree---they can be triangles, squares, or
circles. By default they are squares. You change them
by calling
gtk_ctree_set_expander_style().
There's no good reason to call this function in an
application. Ever. Think about why you would call
it---because you happen to like that expander style
better. It's a purely cosmetic issue. However, if you
do call it, you've just made your application's look
and feel different from that of every other
application. This is harmful,
because it confuses users and even gives them a sense
that your application is ``unprofessional'' or ``not
quite right.''
``But I want my favorite expanders!,'' you might whine.
Don't despair. There is a correct way to handle this
situation. Variable aspects of look and feel should be
configurable at runtime by users. What's more, it should be
configurable globally, for all applications at once. GTK+
provides themes for precisely this purpose.
Unfortunately themes do not yet cover all aspects of
look and feel, and so the temptation remains to
hard-code these in your application. You must resist.
If you are dead-set against the default expander style,
or the default dialog position, or whatever, then do
the work to make it configurable on the library level
and submit that code to the GTK+ or Gnome maintainers.
You have to do this on the library level---think about
it. If you provide an application-specific way to
configure look and feel, nothing has really been
gained; if someone does like a particular expander
style, they have to go through each program deciding if
and how the style can be changed. Some programs will
invariably be ``stuck'' with the default, since the
authors of those programs didn't make it configurable.
The resulting mess is very annoying to users.
Gnome already has solutions for a number of common
cases. For example, GTK+ lets you pop up a dialog at
the mouse pointer, in the center of the screen, or
wherever the window manager wants; there is no reason
you should pick your favorite and use it in your
application. Thus
GnomeDialog loads a user preference for the
dialog's initial position. This preference can be set
from the Gnome control center.